checkpoint
This commit is contained in:
1 parent
0ac0b4c901
commit
fd1898f555
4 files changed
+30
-17
No files matched your search
@@ -37,6 +37,8 @@ object BLEManager{
|
|||||||
private var bluetoothGatt: BluetoothGatt? = null
|
private var bluetoothGatt: BluetoothGatt? = null
|
||||||
private lateinit var bluetoothManager: BluetoothManager
|
private lateinit var bluetoothManager: BluetoothManager
|
||||||
lateinit var bluetoothAdapter: BluetoothAdapter
|
lateinit var bluetoothAdapter: BluetoothAdapter
|
||||||
|
private val writeQueue = ArrayDeque<WriteRequest>()
|
||||||
|
private var isWriting = false
|
||||||
val gattCallback = object : BluetoothGattCallback() {
|
val gattCallback = object : BluetoothGattCallback() {
|
||||||
@RequiresPermission(Manifest.permission.BLUETOOTH_CONNECT)
|
@RequiresPermission(Manifest.permission.BLUETOOTH_CONNECT)
|
||||||
override fun onConnectionStateChange(gatt: BluetoothGatt, status: Int, newState: Int) {
|
override fun onConnectionStateChange(gatt: BluetoothGatt, status: Int, newState: Int) {
|
||||||
@@ -68,6 +70,11 @@ object BLEManager{
|
|||||||
val deviceName: String,
|
val deviceName: String,
|
||||||
val deviceMac: String
|
val deviceMac: String
|
||||||
)
|
)
|
||||||
|
private data class WriteRequest(
|
||||||
|
val serviceUuid: UUID,
|
||||||
|
val characteristicUuid: UUID,
|
||||||
|
val data: ByteArray
|
||||||
|
)
|
||||||
@RequiresApi(Build.VERSION_CODES.S)
|
@RequiresApi(Build.VERSION_CODES.S)
|
||||||
@RequiresPermission(Manifest.permission.BLUETOOTH_CONNECT)
|
@RequiresPermission(Manifest.permission.BLUETOOTH_CONNECT)
|
||||||
fun init(context: Context, activity: Activity) {
|
fun init(context: Context, activity: Activity) {
|
||||||
@@ -134,7 +141,8 @@ object BLEManager{
|
|||||||
Log.d("BLE_DEBUG", "Permission BLUETOOTH_CONNECT error!")
|
Log.d("BLE_DEBUG", "Permission BLUETOOTH_CONNECT error!")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fun writeToEsp32(context: Context, dataString: String?, SERVICE_UUID: UUID?, CHARACTERISTIC_UUID: UUID?) {
|
@RequiresPermission(Manifest.permission.BLUETOOTH_CONNECT)
|
||||||
|
fun writeToEsp32(dataString: String?, SERVICE_UUID: UUID?, CHARACTERISTIC_UUID: UUID?) {
|
||||||
val gatt = bluetoothGatt
|
val gatt = bluetoothGatt
|
||||||
if (gatt == null) {
|
if (gatt == null) {
|
||||||
Log.d("ESP32_BLE", "Error: No GATT object existing (not connected).")
|
Log.d("ESP32_BLE", "Error: No GATT object existing (not connected).")
|
||||||
@@ -158,11 +166,6 @@ object BLEManager{
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
|
|
||||||
Log.d("ESP32_BLE", "Error: BLUETOOTH_CONNECT permission not granted.")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
characteristic.value = dataString.toByteArray(Charsets.UTF_8)
|
characteristic.value = dataString.toByteArray(Charsets.UTF_8)
|
||||||
|
|
||||||
characteristic.writeType = BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE
|
characteristic.writeType = BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE
|
||||||
@@ -174,6 +177,7 @@ object BLEManager{
|
|||||||
Log.d("ESP32_BLE", "Failed to start writing (gatt busy or invalid state).")
|
Log.d("ESP32_BLE", "Failed to start writing (gatt busy or invalid state).")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@androidx.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
|
||||||
fun syncTime(context: Context) {
|
fun syncTime(context: Context) {
|
||||||
val currentTime = LocalTime.now()
|
val currentTime = LocalTime.now()
|
||||||
val formatterTime = DateTimeFormatter.ofPattern("HH mm ss")
|
val formatterTime = DateTimeFormatter.ofPattern("HH mm ss")
|
||||||
@@ -186,7 +190,6 @@ object BLEManager{
|
|||||||
|
|
||||||
CoroutineScope(Dispatchers.IO).launch {
|
CoroutineScope(Dispatchers.IO).launch {
|
||||||
writeToEsp32(
|
writeToEsp32(
|
||||||
context = context,
|
|
||||||
dataString = formattedTime,
|
dataString = formattedTime,
|
||||||
SERVICE_UUID = deviceUUIDs.SERVICE_UUID,
|
SERVICE_UUID = deviceUUIDs.SERVICE_UUID,
|
||||||
CHARACTERISTIC_UUID = deviceUUIDs.CHAR_TIME_UUID)
|
CHARACTERISTIC_UUID = deviceUUIDs.CHAR_TIME_UUID)
|
||||||
@@ -194,7 +197,6 @@ object BLEManager{
|
|||||||
delay(150.milliseconds)
|
delay(150.milliseconds)
|
||||||
|
|
||||||
writeToEsp32(
|
writeToEsp32(
|
||||||
context = context,
|
|
||||||
dataString = formattedDate,
|
dataString = formattedDate,
|
||||||
SERVICE_UUID = deviceUUIDs.SERVICE_UUID,
|
SERVICE_UUID = deviceUUIDs.SERVICE_UUID,
|
||||||
CHARACTERISTIC_UUID = deviceUUIDs.CHAR_DATE_UUID)
|
CHARACTERISTIC_UUID = deviceUUIDs.CHAR_DATE_UUID)
|
||||||
|
|||||||
@@ -3,11 +3,13 @@ package com.example.smart_watch_android.BLE
|
|||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
object DeviceUUIDs {
|
object DeviceUUIDs {
|
||||||
val SERVICE_UUID: UUID? = UUID.fromString("791cadd7-de87-49f9-8986-94b7ae11940b")
|
val SERVICE_UUID: UUID? = UUID.fromString("00004d43-0000-1000-8000-00805F9B34FB")
|
||||||
val CHAR_MESSAGE_UUID: UUID? = UUID.fromString("3e4eac5b-eaa2-4e0c-a705-dcac4f606e01")
|
val CHAR_MESSAGE_UUID: UUID? = UUID.fromString("0000b331-0000-1000-8000-00805F9B34FB")
|
||||||
val CHAR_TIME_UUID:UUID? = UUID.fromString("3e4eac5b-eaa2-4e0c-a705-dcac4f606e02")
|
val CHAR_TIME_UUID:UUID? = UUID.fromString("00003c4b-0000-1000-8000-00805F9B34FB")
|
||||||
val CHAR_DATE_UUID:UUID? = UUID.fromString("3e4eac5b-eaa2-4e0c-a705-dcac4f606e03")
|
val CHAR_DATE_UUID:UUID? = UUID.fromString("00006ecf-0000-1000-8000-00805F9B34FB")
|
||||||
val CHAR_NOTIF_APP_UUID:UUID? = UUID.fromString("9ff3d4a9-2082-424d-bf34-8dfaf752ff90")
|
|
||||||
val CHAR_NOTIF_TITLE_UUID:UUID? = UUID.fromString("9ff3d4a9-2082-424d-bf34-8dfaf752ff91")
|
val SERVICE_NOTIFICATION_UUID:UUID? = UUID.fromString("0000a7fa-0000-1000-8000-00805F9B34FB")
|
||||||
val CHAR_NOTIF_TEXT_UUID: UUID? = UUID.fromString("9ff3d4a9-2082-424d-bf34-8dfaf752ff92")
|
val CHAR_NOTIF_APP_UUID:UUID? = UUID.fromString("0000375f-0000-1000-8000-00805F9B34FB")
|
||||||
|
val CHAR_NOTIF_TITLE_UUID:UUID? = UUID.fromString("00006e40-0000-1000-8000-00805F9B34FB")
|
||||||
|
val CHAR_NOTIF_TEXT_UUID: UUID? = UUID.fromString("00002eef-0000-1000-8000-00805F9B34FB")
|
||||||
}
|
}
|
||||||
@@ -1,11 +1,16 @@
|
|||||||
package com.example.smart_watch_android.Notification
|
package com.example.smart_watch_android.Notification
|
||||||
|
|
||||||
|
import android.Manifest
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.service.notification.StatusBarNotification
|
import android.service.notification.StatusBarNotification
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import android.service.notification.NotificationListenerService
|
import android.service.notification.NotificationListenerService
|
||||||
|
import androidx.annotation.RequiresPermission
|
||||||
|
import com.example.smart_watch_android.BLE.BLEManager
|
||||||
|
import com.example.smart_watch_android.BLE.DeviceUUIDs
|
||||||
|
|
||||||
class MyNotificationListener : NotificationListenerService() {
|
class MyNotificationListener : NotificationListenerService() {
|
||||||
|
@RequiresPermission(Manifest.permission.BLUETOOTH_CONNECT)
|
||||||
override fun onNotificationPosted(sbn: StatusBarNotification?) {
|
override fun onNotificationPosted(sbn: StatusBarNotification?) {
|
||||||
super.onNotificationPosted(sbn)
|
super.onNotificationPosted(sbn)
|
||||||
val packageName = sbn?.packageName
|
val packageName = sbn?.packageName
|
||||||
@@ -14,6 +19,11 @@ class MyNotificationListener : NotificationListenerService() {
|
|||||||
val text = extras?.getString("android.text")
|
val text = extras?.getString("android.text")
|
||||||
|
|
||||||
Log.d("NotificationListener", "App: $packageName | Title: $title | Text: $text")
|
Log.d("NotificationListener", "App: $packageName | Title: $title | Text: $text")
|
||||||
|
BLEManager.writeToEsp32(dataString = packageName, SERVICE_UUID = DeviceUUIDs.SERVICE_NOTIFICATION_UUID, CHARACTERISTIC_UUID = DeviceUUIDs.CHAR_NOTIF_APP_UUID)
|
||||||
|
BLEManager.writeToEsp32(dataString = title, SERVICE_UUID = DeviceUUIDs.SERVICE_NOTIFICATION_UUID, CHARACTERISTIC_UUID = DeviceUUIDs.CHAR_NOTIF_TITLE_UUID)
|
||||||
|
BLEManager.writeToEsp32(dataString = text, SERVICE_UUID = DeviceUUIDs.SERVICE_NOTIFICATION_UUID, CHARACTERISTIC_UUID = DeviceUUIDs.CHAR_NOTIF_TEXT_UUID)
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
override fun onNotificationRemoved(sbn: StatusBarNotification?) {
|
override fun onNotificationRemoved(sbn: StatusBarNotification?) {
|
||||||
super.onNotificationRemoved(sbn)
|
super.onNotificationRemoved(sbn)
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import androidx.compose.ui.unit.dp
|
|||||||
import com.example.smart_watch_android.BLE.BLEManager
|
import com.example.smart_watch_android.BLE.BLEManager
|
||||||
import com.example.smart_watch_android.BLE.DeviceUUIDs
|
import com.example.smart_watch_android.BLE.DeviceUUIDs
|
||||||
import com.example.smart_watch_android.MainViewModel
|
import com.example.smart_watch_android.MainViewModel
|
||||||
|
@androidx.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)
|
||||||
@Composable
|
@Composable
|
||||||
fun ControlPanelScreen(
|
fun ControlPanelScreen(
|
||||||
viewModel: MainViewModel,
|
viewModel: MainViewModel,
|
||||||
@@ -55,7 +55,6 @@ fun ControlPanelScreen(
|
|||||||
onClick = {
|
onClick = {
|
||||||
if (textInput.isNotEmpty()) {
|
if (textInput.isNotEmpty()) {
|
||||||
BLEManager.writeToEsp32(
|
BLEManager.writeToEsp32(
|
||||||
context = context,
|
|
||||||
dataString = textInput,
|
dataString = textInput,
|
||||||
SERVICE_UUID = DeviceUUIDs.SERVICE_UUID,
|
SERVICE_UUID = DeviceUUIDs.SERVICE_UUID,
|
||||||
CHARACTERISTIC_UUID = DeviceUUIDs.CHAR_MESSAGE_UUID,
|
CHARACTERISTIC_UUID = DeviceUUIDs.CHAR_MESSAGE_UUID,
|
||||||
|
|||||||
Reference in new issue
Block a user