📄 nokiaplugin.vb
字号:
'//////////////////////////////////////////////////////////////////////////
'// Use at your own risk //
'// www.hesicong.net //
'// Copyright Dreamworld. You can use this program freely but no in //
'// commerial use without my permission. //
'// Authoer: hesicong //
'// Date: 2007-2-25 //
'//////////////////////////////////////////////////////////////////////////
Imports Dreamworld.Mobile.PhoneControllerSDK
Imports Dreamworld.Mobile.ShortMessageService
Imports Dreamworld.Protocol.IrMC
Imports System.Text
Imports System.Text.Encoding
Imports System.Text.RegularExpressions
Imports System.Threading
Imports System.Collections
Namespace Dreamworld.Mobile
''' <summary>
''' Nokia Plugin
''' </summary>
''' <remarks>
''' Copyright hesicong.
''' All rights reserved
''' </remarks>
Public Class Nokia
Implements IPhoneController
Dim WithEvents mATCmd As ATCommandBase
Private mServiceCenterNumber As String
Private mSerialStream As IO.Ports.SerialPort
''' <summary>
''' Key is index and value is LUID. Key MAX store max index.
''' </summary>
''' <remarks></remarks>
Private mLUID As New Hashtable
Private mPort As String
Private mBaudrate As Integer
'Added at 10/2/2005
Private mCancel As Boolean = False
Private mCancelResponse As String = String.Empty
Private mEntiresTotal As Integer
Private mEntiresRead As Integer
'Private mHeartBeatThread As Threading.Thread
Private mExitHeartBeat As Boolean = False
#Region "Interface members"
Private currentPhonebook As PhonebookType
Private currentCharactorSet As PhoneControllerSDK.CharactorSet
''' <summary>
''' Indicate a new message have arrived
''' </summary>
''' <param name="index">Index of the message</param>
''' <remarks></remarks>
Public Event NewMessageArrived(ByVal index As Integer, ByVal content As String) Implements PhoneControllerSDK.IPhoneController.NewMessageArrived
Private Sub NewMsgArrivialHandler(ByVal index As Integer, ByVal content As String) Handles mATCmd.NewMessageArrived
RaiseEvent NewMessageArrived(index, content)
End Sub
''' <summary>
''' Set new message arrive report. Using AT+CNMI
''' </summary>
''' <param name="enable">True if enable;flase if disable</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function SetNewMessageArriveReport(ByVal enable As Boolean) As Boolean Implements PhoneControllerSDK.IPhoneController.SetNewMessageArriveReport
If enable = True Then
Return ATCommandBase.CheckResponse(mATCmd.SendCommand("AT+CNMI=1,1,0,2,1"))
Else
Return ATCommandBase.CheckResponse(mATCmd.SendCommand("AT+CNMI=0,0,0,0,0"))
End If
End Function
''' <summary>
''' Add a phonebook entry. If entry is exsist then it performs modify.
''' </summary>
''' <param name="entry"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function AddPhonebookEntry(ByVal entry As PhoneControllerSDK.PhonebookEntry) As Boolean Implements PhoneControllerSDK.IPhoneController.AddPhonebookEntry
'Check if correct entry
If entry.Index = 0 Then
Throw New Exception("You must provide a index when write to SIM card")
End If
'Using AT command
Dim cmd As String = String.Empty
Dim number As String = entry.SIMNumber
'Find number
Select Case currentCharactorSet
Case CharactorSet.ASCII
cmd = "AT+CPBW=" & entry.Index & ",""" & number & """,129,""" & entry.Name & """"
Case CharactorSet.UCS2
cmd = "AT+CPBW=" & entry.Index & ",""" & number & """,129,""" & EncodeUnicode(entry.Name) & """"
End Select
Return ATCommandBase.CheckResponse(mATCmd.SendCommand(cmd))
End Function
''' <summary>
''' Connect to phone
''' </summary>
''' <param name="Port">Port name like "COM1:"</param>
''' <param name="baudrate">Speed of connection. Default 19200</param>
''' <returns>True if successed;False if failed</returns>
''' <remarks></remarks>
Public Function Connect(ByVal Port As String, Optional ByVal baudrate As Integer = 19200, Optional ByVal timeOut As Integer = 20000) As Boolean Implements PhoneControllerSDK.IPhoneController.Connect
Try
mPort = Port
mBaudrate = baudrate
mSerialStream = New IO.Ports.SerialPort(Port, baudrate)
mSerialStream.Open()
mSerialStream.RtsEnable = True
mSerialStream.DtrEnable = True
mATCmd = New ATCommandBase(mSerialStream, timeOut)
mATCmd.EnableMonitor()
''Start heart beat thread
'mHeartBeatThread = New Thread(AddressOf HeartBeat)
'mHeartBeatThread.Name = "Nokia Heart Beat Thread"
'mHeartBeatThread.Start()
Return True
Catch e As Exception
mATCmd.Close()
Throw e
End Try
End Function
Public Function Disconnect() As Boolean Implements PhoneControllerSDK.IPhoneController.Disconnect
mExitHeartBeat = True
'mHeartBeatThread.Abort()
mATCmd.DisableMonitor()
mATCmd.Close()
Return True
End Function
''' <summary>
''' Delete a book entry
''' </summary>
''' <param name="index">index to delete</param>
''' <returns>True if successed;False if failed</returns>
''' <remarks></remarks>
Public Function DelPhonebookEntry(ByVal index As Integer) As Boolean Implements PhoneControllerSDK.IPhoneController.DelPhonebookEntry
Dim response As String = mATCmd.SendCommand("AT+CPBW=" & index)
Return ATCommandBase.CheckResponse(response)
End Function
''' <summary>
''' Delete a SMS
''' </summary>
''' <param name="index">index to delete</param>
''' <returns>True if successed;False if failed</returns>
''' <remarks></remarks>
Public Function DelSMS(ByVal index As Integer) As Boolean Implements PhoneControllerSDK.IPhoneController.DelSMS
Dim response As String = mATCmd.SendCommand("AT+CMGD=" & index)
Return ATCommandBase.CheckResponse(response)
End Function
''' <summary>
''' Get phone battery charge
''' </summary>
''' <returns>battery charge. 100 for full</returns>
''' <remarks></remarks>
Public Function GetBatteryCharge() As Integer Implements PhoneControllerSDK.IPhoneController.GetBatteryCharge
Dim rst As String = mATCmd.SendCommand("AT+CBC")
Dim regex As Regex = New Regex( _
"\+CBC:\s(?<BCS>\d*),(?<BCL>\d*)", _
RegexOptions.None _
)
Dim m As Match = regex.Match(rst)
If m.Success Then
Return CInt(m.Groups("BCL").Value)
Else
Throw New ApplicationException("Can't get your battery charge")
End If
End Function
''' <summary>
''' Get phone capability
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetCapability() As PhoneControllerSDK.Capability Implements PhoneControllerSDK.IPhoneController.GetCapability
'################################
'Fill this block
'################################
Throw New NotSupportedException("Function not build here")
End Function
''' <summary>
''' Get IMSI
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetIMSI() As String Implements PhoneControllerSDK.IPhoneController.GetIMSI
Throw New NotSupportedException("AT+CIMI not supported by this phone")
Dim rst As String = mATCmd.SendCommand("AT+CIMI")
Dim regex As Regex = New Regex( _
"(?<IMSI>\d+)")
Dim m As Match = regex.Match(rst)
If m.Success Then
Return m.Groups("IMSI").Value
Else
Throw New ApplicationException("Can't get your IMSI")
End If
End Function
''' <summary>
''' Get last error code
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetLastError() As String Implements PhoneControllerSDK.IPhoneController.GetLastError
Return mATCmd.LastError
End Function
''' <summary>
''' Get manufacture ID
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetManufactureID() As String Implements PhoneControllerSDK.IPhoneController.GetManufactureID
Dim rst As String = mATCmd.SendCommand("AT+CGMI")
Dim regex As Regex = New Regex( _
"(?<ID>\w+)")
Dim m As Match = regex.Match(rst)
If m.Success Then
Return m.Groups("ID").Value
Else
Throw New ApplicationException("Can't get your Manufacturer ID")
End If
End Function
''' <summary>
''' Get Model ID
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetModelID() As String Implements PhoneControllerSDK.IPhoneController.GetModelID
Dim rst As String = mATCmd.SendCommand("AT+CGMM")
Dim lines As String() = rst.Replace(vbCrLf, Chr(13)).Split(New Char() {Chr(13)}, StringSplitOptions.RemoveEmptyEntries)
Return lines(0)
End Function
''' <summary>
''' Get own number
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetOwnNumber() As String Implements PhoneControllerSDK.IPhoneController.GetOwnNumber
Throw New NotSupportedException("Phone can't support AT+CNUM")
Dim regex As Regex = New Regex( _
"\+CNUM:\s""(?<NAME>\w*)"",""(?<NUM>\d*)"",(?<TYPE>\d*)", _
RegexOptions.None _
)
Dim rst As String = mATCmd.SendCommand("AT+CNUM")
Dim m As Match = regex.Match(rst)
If m.Success Then
Return m.Groups("NUM").Value
Else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -