tui simulation
This commit is contained in:
@@ -2,13 +2,13 @@ package ble
|
||||
|
||||
import (
|
||||
"ble_simulator/internal/device"
|
||||
"log"
|
||||
"ble_simulator/internal/tui"
|
||||
|
||||
"tinygo.org/x/bluetooth"
|
||||
)
|
||||
|
||||
// SetupService configures the GATT service with command and notify characteristics
|
||||
func SetupService(adapter *bluetooth.Adapter, state *device.DeviceState) (*bluetooth.Characteristic, error) {
|
||||
func SetupService(adapter *bluetooth.Adapter, state *device.DeviceState, logger *tui.LogBuffer) (*bluetooth.Characteristic, error) {
|
||||
var notifyChar bluetooth.Characteristic
|
||||
|
||||
err := adapter.AddService(&bluetooth.Service{
|
||||
@@ -20,15 +20,18 @@ func SetupService(adapter *bluetooth.Adapter, state *device.DeviceState) (*bluet
|
||||
bluetooth.CharacteristicWriteWithoutResponsePermission,
|
||||
WriteEvent: func(client bluetooth.Connection, offset int, value []byte) {
|
||||
cmd := string(value)
|
||||
log.Printf("[RX] Command: %s", cmd)
|
||||
logger.RX("Command: %s", cmd)
|
||||
|
||||
response := state.ProcessCommand(cmd)
|
||||
log.Printf("[TX] Response: %s", response)
|
||||
logger.TX("Response: %s", response)
|
||||
|
||||
_, err := notifyChar.Write([]byte(response + "\n"))
|
||||
if err != nil {
|
||||
log.Printf("[ERR] Failed to send response: %v", err)
|
||||
}
|
||||
// Non-blocking write in goroutine to avoid blocking the BLE stack
|
||||
go func() {
|
||||
_, err := notifyChar.Write([]byte(response + "\n"))
|
||||
if err != nil {
|
||||
logger.Err("Failed to send response: %v", err)
|
||||
}
|
||||
}()
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user