Skip to content

Commit 4f2c586

Browse files
committed
log dump endpoint support
1 parent ba7c0d4 commit 4f2c586

File tree

4 files changed

+90
-1
lines changed

4 files changed

+90
-1
lines changed

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
kotlin.code.style=official
22

33
group=io.rebble.libpebblecommon
4-
version=0.1.21
4+
version=0.1.22
55
org.gradle.jvmargs=-Xms128M -Xmx1G -XX:ReservedCodeCacheSize=200M
66
kotlin.native.binary.memoryModel=experimental
77
kotlin.mpp.androidSourceSetLayoutVersion=2
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package io.rebble.libpebblecommon.packets
2+
3+
import io.rebble.libpebblecommon.protocolhelpers.PacketRegistry
4+
import io.rebble.libpebblecommon.protocolhelpers.PebblePacket
5+
import io.rebble.libpebblecommon.protocolhelpers.ProtocolEndpoint
6+
import io.rebble.libpebblecommon.structmapper.*
7+
8+
open class LogDump(val message: Message): PebblePacket(ProtocolEndpoint.LOG_DUMP) {
9+
val command = SUByte(m, message.value)
10+
11+
init {
12+
type = command.get()
13+
}
14+
15+
enum class Message(val value: UByte) {
16+
RequestLogDump(0x10u),
17+
LogLine(0x80u),
18+
Done(0x81u),
19+
NoLogs(0x82u)
20+
}
21+
22+
class RequestLogDump(logGeneration: UByte, cookie: UInt): LogDump(Message.RequestLogDump) {
23+
val generation = SUByte(m, logGeneration)
24+
val cookie = SUInt(m, cookie)
25+
}
26+
27+
open class ReceivedLogDumpMessage(message: Message): LogDump(message) {
28+
val cookie = SUInt(m)
29+
}
30+
31+
class LogLine: ReceivedLogDumpMessage(Message.LogLine) {
32+
val timestamp = SUInt(m)
33+
val level = SUByte(m)
34+
val length = SUByte(m)
35+
val line = SUShort(m)
36+
val filename = SFixedString(m, 16)
37+
val messageText = SFixedString(m, 0)
38+
39+
init {
40+
messageText.linkWithSize(length)
41+
}
42+
}
43+
44+
class Done: ReceivedLogDumpMessage(Message.Done)
45+
46+
class NoLogs: ReceivedLogDumpMessage(Message.NoLogs)
47+
}
48+
49+
fun logDumpPacketsRegister() {
50+
PacketRegistry.register(ProtocolEndpoint.LOG_DUMP, LogDump.Message.NoLogs.value) {
51+
LogDump.NoLogs()
52+
}
53+
54+
PacketRegistry.register(ProtocolEndpoint.LOG_DUMP, LogDump.Message.Done.value) {
55+
LogDump.Done()
56+
}
57+
58+
PacketRegistry.register(ProtocolEndpoint.LOG_DUMP, LogDump.Message.LogLine.value) {
59+
LogDump.LogLine()
60+
}
61+
}

src/commonMain/kotlin/io/rebble/libpebblecommon/protocolhelpers/PacketRegistry.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ object PacketRegistry {
2929
screenshotPacketsRegister()
3030
appLogPacketsRegister()
3131
phoneControlPacketsRegister()
32+
logDumpPacketsRegister()
3233
}
3334

3435
/**
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package io.rebble.libpebblecommon.services
2+
3+
import io.rebble.libpebblecommon.ProtocolHandler
4+
import io.rebble.libpebblecommon.packets.LogDump
5+
import io.rebble.libpebblecommon.protocolhelpers.PebblePacket
6+
import io.rebble.libpebblecommon.protocolhelpers.ProtocolEndpoint
7+
import kotlinx.coroutines.channels.Channel
8+
9+
class LogDumpService(private val protocolHandler: ProtocolHandler) : ProtocolService {
10+
val receivedMessages = Channel<LogDump>(Channel.BUFFERED)
11+
12+
init {
13+
protocolHandler.registerReceiveCallback(ProtocolEndpoint.LOG_DUMP, this::receive)
14+
}
15+
16+
suspend fun send(packet: LogDump) {
17+
protocolHandler.send(packet)
18+
}
19+
20+
fun receive(packet: PebblePacket) {
21+
if (packet !is LogDump) {
22+
throw IllegalStateException("Received invalid packet type: $packet")
23+
}
24+
25+
receivedMessages.trySend(packet)
26+
}
27+
}

0 commit comments

Comments
 (0)