Attribute VB_Name = "Enet"
Option Explicit

Public Tx() As Byte

Declare Function GetTickCount Lib "kernel32" () As Long
Public gmlCurTime As Long
Public gmlMinTime As Long
Public gmlMaxTime As Long


Public Sub InitHeader()

    ReDim Tx(19) As Byte

    Tx(0) = CByte(Asc("L"))
    Tx(1) = CByte(Asc("G"))
    Tx(2) = CByte(Asc("I"))
    Tx(3) = CByte(Asc("S"))
    Tx(4) = CByte(Asc("-"))
    Tx(5) = CByte(Asc("G"))
    Tx(6) = CByte(Asc("L"))
    Tx(7) = CByte(Asc("O"))
    Tx(8) = CByte(Asc("F"))
    Tx(9) = CByte(Asc("A"))
    
    Tx(13) = &H33
    
End Sub

Public Function GetDataSize(strVar As String) As Integer

    Dim iLen As Integer
    
    iLen = Len(strVar)

    GetDataSize = iLen / 2

End Function

Public Sub SendData()

    Dim iLen As Integer, i As Integer, strTmp As String
        
    GetReqHeadData Tx
    
    iLen = GetDataSize(formMain.txtReqData)

    ReDim Preserve Tx(20 + 8 + iLen - 1)
    
    Tx(16) = CByte(8 + iLen)            'Length (2)
    Tx(19) = ByteCheckSum(Tx, 0, 18)
   
    Tx(20) = CByte("&H" + Mid(formMain.txtReqCmnd, 1, 2))
    Tx(21) = CByte("&H" + Mid(formMain.txtReqCmnd, 3, 2))
    Tx(22) = CByte("&H" + Mid(formMain.txtReqDataType, 1, 2))
    Tx(23) = CByte("&H" + Mid(formMain.txtReqDataType, 3, 2))
    Tx(24) = 0
    Tx(25) = 0
    Tx(26) = CByte("&H" + Mid(formMain.txtReqVarNo, 1, 2))
    Tx(27) = CByte("&H" + Mid(formMain.txtReqVarNo, 3, 2))
   
    For i = 0 To iLen - 1
        Tx(28 + i) = CByte("&H" + Mid(formMain.txtReqData, i * 2 + 1, 2))
    Next
    
    formMain.tcpClient.SendData Tx
    
    gmlCurTime = GetTickCount
    
End Sub

Public Function ByteCheckSum(Buff() As Byte, iStart As Integer, iEnd As Integer) As Byte
    
    Dim i As Integer
    Dim CheckSum As Integer
    
    For i = iStart To iEnd
        CheckSum = CheckSum + Buff(i)
        If CheckSum > 255 Then CheckSum = CheckSum - 256
    Next
    
    ByteCheckSum = CByte(CheckSum)
    
End Function

Public Sub DisplayReqHeader(aData() As Byte)

    Dim strId As String, i As Integer

    For i = 0 To 9
        strId = strId + Chr(aData(i))
    Next
    
    formMain.txtReqComId = strId
    
    formMain.txtReqSrc = ByteToHexStr(aData(13))
    formMain.txtReqInvokeId = ByteToHexStr(aData(14)) + ByteToHexStr(aData(15))
    formMain.txtReqLength = ByteToHexStr(aData(16)) + ByteToHexStr(aData(17))
    formMain.txtReqCheckSum = ByteToHexStr(aData(19))

End Sub

Public Sub DisplayResHeader(aData() As Byte)

    Dim strId As String, i As Integer

    For i = 0 To 9
        strId = strId + Chr(aData(i))
    Next
    
    formMain.txtResComId = strId
    
    formMain.txtResSrc = ByteToHexStr(aData(13))
    formMain.txtResInvokeId = ByteToHexStr(aData(14)) + ByteToHexStr(aData(15))
    formMain.txtResLength = ByteToHexStr(aData(16)) + ByteToHexStr(aData(17))
    formMain.txtResCheckSum = ByteToHexStr(aData(19))

End Sub

Public Sub DisplayRes(aData() As Byte, lLen As Long)

    Dim strVal As String, i As Long
    
    DisplayResHeader aData

    formMain.txtResCmnd = ByteToHexStr(aData(20)) + ByteToHexStr(aData(21))
    formMain.txtResDataType = ByteToHexStr(aData(22)) + ByteToHexStr(aData(23))
    formMain.txtResState = ByteToHexStr(aData(26)) + ByteToHexStr(aData(27))
    formMain.txtResCode = ByteToHexStr(aData(28)) + ByteToHexStr(aData(29))
 
    If lLen > 30 Then
        For i = 30 To lLen - 1
            strVal = strVal + ByteToHexStr(aData(i))
        Next
        formMain.txtResData = strVal
    Else
        formMain.txtResData = ""
    End If

End Sub

Public Sub ClearRes()

    formMain.txtResComId = ""
    formMain.txtResSrc = ""
    formMain.txtResInvokeId = ""
    formMain.txtResLength = ""
    formMain.txtResCheckSum = ""
    formMain.txtResCmnd = ""
    formMain.txtResDataType = ""
    formMain.txtResState = ""
    formMain.txtResCode = ""
    formMain.txtResData = ""

End Sub

Public Function ByteToHexStr(byData As Byte) As String
    Dim strHex As String
    
    strHex = Hex(byData)
    
    If Len(strHex) < 2 Then _
        strHex = "0" + strHex
    
    ByteToHexStr = strHex

End Function

Public Sub GetReqHeadData(aData() As Byte)
    Dim i As Integer, iLen As String
    
    iLen = Len(formMain.txtReqComId)
    
    For i = 1 To iLen
        Tx(i - 1) = CByte(Asc(Mid(formMain.txtReqComId, i, 1)))
    Next
    
    If iLen < 10 Then
        For i = iLen To 9
            Tx(i) = 0
        Next
    End If
    
    Tx(13) = CByte("&H" + formMain.txtReqSrc)
    
    If Len(formMain.txtReqInvokeId) = 4 Then
        Tx(14) = CByte("&H" + Mid(formMain.txtReqInvokeId, 1, 2))
        Tx(15) = CByte("&H" + Mid(formMain.txtReqInvokeId, 3, 2))
    End If
    
    'formMain.txtResLength
    'formMain.txtResCheckSum

End Sub


