-
Notifications
You must be signed in to change notification settings - Fork 200
/
SendingUtils.kt
99 lines (85 loc) · 3.38 KB
/
SendingUtils.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package org.fossasia.badgemagic.util
import android.content.Context
import android.widget.Toast
import org.fossasia.badgemagic.R
import org.fossasia.badgemagic.core.android.log.Timber
import org.fossasia.badgemagic.core.bluetooth.GattClient
import org.fossasia.badgemagic.core.bluetooth.ScanHelper
import org.fossasia.badgemagic.data.BadgeConfig
import org.fossasia.badgemagic.data.DataToSend
import org.fossasia.badgemagic.data.Message
import org.fossasia.badgemagic.data.Mode
import org.fossasia.badgemagic.data.Speed
import org.fossasia.badgemagic.device.DataToByteArrayConverter
import org.fossasia.badgemagic.helpers.JSONHelper
import org.fossasia.badgemagic.utils.ByteArrayUtils
object SendingUtils {
private val scanHelper = ScanHelper()
private val gattClient = GattClient()
fun sendMessage(context: Context, dataToSend: DataToSend) {
Timber.i { "About to send org.fossasia.badgemagic.data: $dataToSend" }
val byteData = DataToByteArrayConverter.convert(dataToSend)
sendBytes(context, byteData)
}
fun onPause() {
scanHelper.stopLeScan()
gattClient.stopClient()
}
private fun sendBytes(context: Context, byteData: List<ByteArray>) {
Timber.i { "ByteData: ${byteData.map { ByteArrayUtils.byteArrayToHexString(it) }}" }
scanHelper.startLeScan { device ->
if (device == null) {
Timber.e { "Scan could not find any org.fossasia.badgemagic.device" }
Toast.makeText(context, R.string.no_device_found, Toast.LENGTH_SHORT).show()
} else {
Timber.e { "Device found: $device" }
gattClient.startClient(context, device.address) { onConnected ->
if (onConnected) {
gattClient.writeDataStart(byteData) {
Timber.i { "Data sent" }
gattClient.stopClient()
}
} else {
Toast.makeText(context, R.string.no_device_found, Toast.LENGTH_SHORT).show()
}
}
}
}
}
fun convertToDeviceDataModel(message: Message): DataToSend {
return DataToSend(listOf(message))
}
fun returnDefaultMessage(): DataToSend {
return DataToSend(listOf(Message(
Converters.convertTextToLEDHex(
" ",
false
).second,
flash = false,
marquee = false,
speed = Speed.ONE,
mode = Mode.LEFT
)))
}
fun returnMessageWithJSON(badgeJSON: String): DataToSend {
val badgeConfig = getBadgeFromJSON(badgeJSON)
return DataToSend(listOf(Message(
Converters.fixLEDHex(badgeConfig.hexStrings, badgeConfig.isInverted),
badgeConfig.isMarquee,
badgeConfig.isFlash,
badgeConfig.speed,
badgeConfig.mode
)))
}
fun configToJSON(data: Message, invertLED: Boolean): String {
val bConfig = BadgeConfig()
bConfig.hexStrings = data.hexStrings
bConfig.isFlash = data.flash
bConfig.isMarquee = data.marquee
bConfig.isInverted = invertLED
bConfig.mode = data.mode
bConfig.speed = data.speed
return JSONHelper.encodeJSON(bConfig)
}
internal fun getBadgeFromJSON(json: String): BadgeConfig = JSONHelper.decodeJSON(json)
}