#Region Service Attributes
#StartAtBoot: True
#ExcludeFromLibrary: True
#End Region
Sub Process_Globals
Public manager As BleManager2
Public currentStateText As String = "UNKNOWN"
Private serviceId, charId As String
Private connected As Boolean
Private t As Timer
Private tReconnect As Timer
Dim PhoneEvent As PhoneEvents
Public battery As Int
Dim n As Notification
End Sub
Sub Service_Create
manager.Initialize("manager")
serviceId = UUID("ffe0")
charId = UUID("ffe1")
t.Initialize("t", 2000)
tReconnect.Initialize("tReconnect", 3000)
t.Enabled = True
PhoneEvent.Initialize("PhoneEvent")
n.Initialize
n.AutoCancel = False
n.OnGoingEvent = False
n.SetInfo("ATModule", "The APP is running", Main)
n.Sound = True
n.Icon = "icon"
n.AutoCancel = False
End Sub
Sub ManualStart
Log("ManualStart")
StartService(Me)
End Sub
Sub Service_Start (StartingIntent As Intent)
Log("Service_Start")
manager.Scan2(Array (serviceId), False)
Service.StartForeground(1, n)
End Sub
Sub t_Tick
If currentStateText = "POWERED ON" Then
If manager.State=12 Then
Log("BT on")
End If
End If
End Sub
Sub tReconnect_Tick
tReconnect.Enabled = False
StartService(Me)
t.Enabled = True
End Sub
Sub PhoneEvent_BatteryChanged(Level As Int, Scale As Int, Plugged As Boolean, Intent As Intent)
battery=Level
End Sub
Sub Manager_StateChanged (State As Int)
Select State
Case manager.STATE_POWERED_OFF
connected = False
currentStateText = "POWERED OFF"
manager.StopScan
Case manager.STATE_POWERED_ON
currentStateText = "POWERED ON"
Case manager.STATE_UNSUPPORTED
currentStateText = "UNSUPPORTED"
End Select
CallSub(Main, "BleStateChanged")
If State = manager.STATE_POWERED_ON Then
manager.Scan2(Array (serviceId), False)
End If
End Sub
Sub Manager_DeviceFound (Name As String, Id As String, AdvertisingData As Map, RSSI As Double)
Log($"Device found: ${Name}"$)
manager.Connect2(Id, False)
End Sub
Sub manager_Connected (Services As List)
Log("connected: " & Services)
connected = True
Log(serviceId)
manager.SetNotify(serviceId, charId, True)
End Sub
Sub Manager_Disconnected
connected = False
End Sub
Sub Manager_DataAvailable (sid As String, Characteristics As Map)
Dim b() As Byte = Characteristics.Get(charId)
Dim msg As String = BytesToString(b, 0, b.Length, "utf8")
CallSub2(Main, "DeviceMessage", msg)
'Log(msg)
Try
SendMessage(Array As Byte(0, battery))
Catch
Log(LastException)
End Try
End Sub
Public Sub SendMessage(msg() As Byte)
If Not(connected) Then Return
manager.WriteData(serviceId, charId, msg)
End Sub
Private Sub UUID(id As String) As String
#if B4A
Return "0000" & id.ToLowerCase & "-0000-1000-8000-00805f9b34fb"
#else if B4I
Return id.ToUpperCase
#End If
End Sub
'Return true to allow the OS default exceptions handler to handle the uncaught exception.
Sub Application_Error (Error As Exception, StackTrace As String) As Boolean
'StartService(Me)
Return True
End Sub
Sub Service_Destroy
End Sub