📄 t618at.vb
字号:
Option Strict On
Option Explicit On
Imports System.Text
Imports System.Xml.Serialization
Imports System.Reflection
Imports System.IO
Imports SoilNet.MobileNETLib
Namespace MobileNETLibTest
'封装Sony Ericcson T618专用的AT命令
Public Class T618ATCommand
Inherits SoilNet.MobileNETLib.ATCommand
#Region "T618Key Code Enum"
Public Enum T618Key As Integer
KEY_ESC = 58 ':
KEY_FUN = 27 '
KEY_0 = 48
KEY_1 = KEY_0 + 1
KEY_2 = KEY_1 + 1
KEY_3 = KEY_2 + 1
KEY_4 = KEY_3 + 1
KEY_5 = KEY_4 + 1
KEY_6 = KEY_5 + 1
KEY_7 = KEY_6 + 1
KEY_8 = KEY_7 + 1
KEY_9 = KEY_8 + 1
KEY_HASH = 35 '#
KEY_STAR = 42 '*
KEY_UP = 47 '^
KEY_DOWN = 118 'V
KEY_LEFT = 60 '<
KEY_RIGHT = 62 '>
KEY_VOL_UP = 117 'u
KEY_VOL_DOWN = 100 'd
KEY_DEL = 99 'c
KEY_SOFT_LEFT = KEY_FUN + 60 '27+<
KEY_SOFT_RIGHT = KEY_FUN + 62 '27+>
KEY_JOYSTICK = KEY_ESC + 74 ':J
KEY_CAMERA = KEY_ESC + 67 ':C
KEY_OPERATOR = KEY_ESC + 79 ':O
KEY_RETURN = KEY_ESC + 82 ':R
End Enum
#End Region
#Region "Sub New"
Sub New(ByVal iPort As Integer, ByVal iDisplay As IStatus)
MyBase.New(iPort, iDisplay)
End Sub
Sub New()
MyBase.New()
End Sub
Sub New(ByVal iport As Integer)
MyBase.New(iport)
End Sub
#End Region
#Region "Must Overrides"
Protected Overrides Sub Init()
'e.i. important
'读取XML文件取手机的各种属性
'依照手机的不同可能会有不同的命令/返回值可以自行修改
ReDim ATCommands(12)
Properties = New Hashtable
PropertiesName = New ArrayList
GetXMLCfgFromResource()
GetALLCommandPropertiesName()
End Sub
Protected Overrides Sub GetALLCommandPropertiesName()
'e.i. important
Dim i, j As Integer
For i = 0 To MyBase.ATCommands.Length - 1
For j = 0 To ATCommands(i).PropertyNameArray.Length - 1
MyBase.PropertiesName.Add(ATCommands(i).PropertyNameArray(j))
Next
Next
End Sub
Protected Overrides Sub GetXMLCfgFromResource()
'从嵌入资源的xml文件获取我们需要的命令列表
'e.i. important
Dim assembly1 As [Assembly] = [Assembly].GetExecutingAssembly
Dim stream1 As Stream
stream1 = assembly1.GetManifestResourceStream("T618ATCommands.xml")
Dim sr As New XmlSerializer(ATCommands.GetType)
MyBase.ATCommands = CType(sr.Deserialize(stream1), ATProperty())
End Sub
#End Region
#Region "Support Listening KeyPress"
Private m_ListeningKeyPress As Boolean
Public Event OnKeyDown(ByVal key As T618Key)
Public Event OnKeyUp(ByVal key As T618Key)
'开始侦听手机返回数据
Public Function StartListenKeyPress() As Boolean
Dim ret As String = MyBase.GetResponse("+CMER=3,2,0,0,0")
MyBase.WriteLog(ret)
m_ListeningKeyPress = MyBase.cmdOK
If MyBase.cmdOK Then
MyBase.WriteLog("OK")
MyBase.StartListening()
Else
MyBase.WriteLog("ERROR")
End If
Return m_ListeningKeyPress
End Function
'停止侦听
Public Function StopListenKeyPress() As Boolean
Dim ret As String = MyBase.GetResponse("+CMER=0,0,0,0,0")
MyBase.WriteLog(ret)
If MyBase.cmdOK Then
m_ListeningKeyPress = False
MyBase.StopListening()
MyBase.WriteLog("OK")
Else
MyBase.WriteLog("ERROR")
End If
Return MyBase.cmdOK
End Function
'处理接收事件
Protected Sub T618ATCommand_OnReceivedData(ByVal Data As String) Handles MyBase.OnReceivedData
If m_ListeningKeyPress Then
If Data.Length > 6 Then
RaiseKeyEvents(Data)
End If
End If
End Sub
'分析数据产生按键事件
Protected Sub RaiseKeyEvents(ByVal d As String)
If Not d.TrimStart.StartsWith("+CKEV:") Then Return
Dim ss() As String = SoilNet.MobileNETLib.Utility.RegexTools.GetRegValues(d, "\+CKEV: (.*),(.*)")
If ss Is Nothing OrElse ss.Length = 0 Then Return
Dim s As String = ss(1)
Dim b As T618Key = CType(Asc(s.Substring(0, 1)), T618Key)
If s.Length = 2 AndAlso (b = T618Key.KEY_ESC OrElse b = T618Key.KEY_FUN) Then
b = CType(Asc(s.Substring(1, 1)) + b, T618Key)
End If
' Dim index As Integer = CInt(ss(2))
Select Case ss(2)
Case "0"
RaiseEvent OnKeyUp(b)
Case "1"
RaiseEvent OnKeyDown(b)
End Select
SetStatus("就绪.")
End Sub
#End Region
End Class
End Namespace
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -