www.pudn.com > mo_gps.zip > GSV.cls


VERSION 1.0 CLASS 
BEGIN 
  MultiUse = -1  'True 
END 
Attribute VB_Name = "GPGSV" 
Attribute VB_GlobalNameSpace = False 
Attribute VB_Creatable = True 
Attribute VB_PredeclaredId = False 
Attribute VB_Exposed = False 
Attribute VB_Ext_KEY = "SavedWithClassBuilder" ,"Yes" 
Attribute VB_Ext_KEY = "Top_Level" ,"Yes" 
'Class name:    GSV.cls 
'Author:        Ray Bivens, Applications Prototype Lab, ESRI 
'Date:          Dec 98 
'Description:   Factors an NMEA (GPS) 'GPGSV' sentence to its string components. 
'Comments:      Create an instance of the class and assign a GPGSV string to the 
'               Sentence property. 
' 
'Revisions: 
 
Option Explicit 
Option Base 0 
 
'local variables to hold property values 
Private mvarChecksum As String 
Private mvarSentence As String 
Private mvarSatsInView As String 
Private mvarMessageCount As String 
Private mvarMessageNumber As String 
Private mvarPRN As String 
Private mvarElevation As String 
Private mvarAzimuth As String 
Private mvarSNR As String 
 
Public Enum GPGSVError 
    InvalidOrCorruptGPGSV = vbObjectError + 512 + 4 
    SNRitemOutOfRange = vbObjectError + 512 + 5 
    AzimuthItemOutOfRange = vbObjectError + 512 + 6 
    ElevationItemOutOfRange = vbObjectError + 512 + 7 
    PRNItemOutOfRange = vbObjectError + 512 + 8 
End Enum 
 
Public Property Get SNR(Item As Integer) As String 
Attribute SNR.VB_Description = "Returns the Signal-to-Noise Ratio (SNR) from the specified item." 
    Select Case Item 
        Case 0 To 3 
            Call getSNR(Item) 
        Case Else 
            Err.Raise SNRitemOutOfRange, "GPGSV::SNR", "SNR 'Item' parameter must be 0..3" 
        End Select 
    SNR = mvarSNR 
End Property 
 
Public Property Get Azimuth(Item As Integer) As String 
Attribute Azimuth.VB_Description = "Returns the azimuth from the specified item." 
    Select Case Item 
        Case 0 To 3 
            Call getAzimuth(Item) 
        Case Else 
            Err.Raise AzimuthItemOutOfRange, "GPGSV::Azimuth", "Azimuth 'Item' parameter must be 0..3" 
        End Select 
    Azimuth = mvarAzimuth 
End Property 
 
Public Property Get Elevation(Item As Integer) As String 
Attribute Elevation.VB_Description = "Returns the elevation from the specified item." 
    Select Case Item 
        Case 0 To 3 
            Call getElevation(Item) 
        Case Else 
            Err.Raise ElevationItemOutOfRange, "GPGSV::Elevation", "Elevation 'Item' parameter must be 0..3" 
        End Select 
    Elevation = mvarElevation 
End Property 
 
Public Property Get PRN(Item As Integer) As String 
Attribute PRN.VB_Description = "Returns the PRN from the specified item." 
    Select Case Item 
        Case 0 To 3 
            Call getPRN(Item) 
        Case Else 
            Err.Raise PRNItemOutOfRange, "GPGSV::PRN", "PRN 'Item' parameter must be 0..3" 
        End Select 
    PRN = mvarPRN 
End Property 
 
Public Property Get MessageNumber() As String 
Attribute MessageNumber.VB_Description = "Returns the current GPGSV message number in the current cycle." 
    MessageNumber = mvarMessageNumber 
End Property 
 
Public Property Get MessageCount() As String 
Attribute MessageCount.VB_Description = "Returns the total number of GPGSV messages in the current cycle." 
    MessageCount = mvarMessageCount 
End Property 
 
Public Property Get SatsInView() As String 
Attribute SatsInView.VB_Description = "Returns the current number of satellites in view." 
    SatsInView = mvarSatsInView 
End Property 
 
Public Property Let Sentence(ByVal GSV_Sentence As String) 
Attribute Sentence.VB_Description = "Sets/Returns NMEA sentence for object." 
    Dim Utils As New CParseUtils 
     
        'check for correct header and number 
        'of place holders in sentence first... 
        If Utils.Parse(GSV_Sentence, 1) = "$GPGSV" And Utils.CountParts(GSV_Sentence) = 20 Then 
         
        Dim sChecksum As String 
        Dim sSatsInView As String 
        Dim sMessageCount As String 
        Dim sMessageNumber As String 
        Dim sTempChecksum As String 
         
        ' assign value to local variable... 
        mvarSentence = GSV_Sentence 
         
        ' parse NMEA sentence and check quality 
        ' if qc conditions not met, leave var as empty... 
        sMessageCount = Utils.Parse(mvarSentence, 2)        'MessageCount 
            If IsNumeric(sMessageCount) Then 
                mvarMessageCount = sMessageCount 
            End If 
             
        sMessageNumber = Utils.Parse(mvarSentence, 3)        'MessageNumber 
            If IsNumeric(sMessageNumber) Then 
                mvarMessageNumber = sMessageNumber 
            End If 
             
        sSatsInView = Utils.Parse(mvarSentence, 4)            'SatsInView 
            If IsNumeric(sSatsInView) Then 
                mvarSatsInView = sSatsInView 
            End If 
             
        sTempChecksum = Utils.Parse(mvarSentence, 20)       'Checksum 
        sChecksum = Utils.Parse(sTempChecksum, 2, "*") 
        mvarChecksum = sChecksum 
         
        Else 
            Err.Raise InvalidOrCorruptGPGSV, "GPGSV::Sentence", "Invalid or corrupt GPGSV sentence." 
        End If 
          
    Set Utils = Nothing 
End Property 
 
Public Property Get Sentence() As String 
    Sentence = mvarSentence 
End Property 
 
Public Property Get Checksum() As String 
Attribute Checksum.VB_Description = "Returns the checksum of the NMEA string." 
    Checksum = mvarChecksum 
End Property 
 
Private Sub getSNR(Item As Integer) 
Dim Utils As New CParseUtils 
Dim sTempSNR 
Dim SNR_Array(3) As String    'string array to hold SNR values 
Dim sSkip As Byte 
Dim i As Byte 
 
    sSkip = 0 
    For i = 0 To 3 
        If sSkip < 12 Then 
            SNR_Array(i) = Utils.Parse(mvarSentence, 8 + sSkip) 
        Else 
            sTempSNR = Utils.Parse(mvarSentence, 20) 
            SNR_Array(i) = Utils.Parse(sTempSNR, 1, "*") 
        End If 
        sSkip = sSkip + 4     'skip to next SNR value in the sentence... 
    Next i 
         
    If IsNumeric(SNR_Array(Item)) Then 
        mvarSNR = SNR_Array(Item) 
    End If 
     
Set Utils = Nothing 
End Sub 
 
Private Sub getAzimuth(Item As Integer) 
Dim Utils As New CParseUtils 
Dim AZ_Array(3) As String    'string array to hold Azimuth values 
Dim sSkip As Byte 
Dim i As Byte 
 
    sSkip = 0 
    For i = 0 To 3 
        AZ_Array(i) = Utils.Parse(mvarSentence, 7 + sSkip) 
        sSkip = sSkip + 4     'skip to next Azimuth value in the sentence... 
    Next i 
         
    If IsNumeric(AZ_Array(Item)) Then 
        mvarAzimuth = AZ_Array(Item) 
    End If 
     
Set Utils = Nothing 
End Sub 
 
Private Sub getElevation(Item As Integer) 
Dim Utils As New CParseUtils 
Dim EL_Array(3) As String    'string array to hold Elevation values 
Dim sSkip As Byte 
Dim i As Byte 
 
    sSkip = 0 
    For i = 0 To 3 
        EL_Array(i) = Utils.Parse(mvarSentence, 6 + sSkip) 
        sSkip = sSkip + 4     'skip to next Elevation value in the sentence... 
    Next i 
         
    If IsNumeric(EL_Array(Item)) Then 
        mvarElevation = EL_Array(Item) 
    End If 
     
Set Utils = Nothing 
End Sub 
 
Private Sub getPRN(Item As Integer) 
Dim Utils As New CParseUtils 
Dim PRN_Array(3) As String    'string array to hold PRN values 
Dim sSkip As Byte 
Dim i As Byte 
 
    sSkip = 0 
    For i = 0 To 3 
        PRN_Array(i) = Utils.Parse(mvarSentence, 5 + sSkip) 
        sSkip = sSkip + 4     'skip to next PRN value in the sentence... 
    Next i 
         
    mvarPRN = PRN_Array(Item) 
     
Set Utils = Nothing 
End Sub