parent
2665fd0098
commit
a39b870033
@ -1,6 +1,6 @@
|
|||||||
package avb.desc
|
package avb.desc
|
||||||
|
|
||||||
@OptIn(ExperimentalUnsignedTypes::class)
|
@OptIn(ExperimentalUnsignedTypes::class)
|
||||||
abstract class Descriptor(var tag: ULong, var num_bytes_following: ULong, var sequence: Int = 0) {
|
abstract class Descriptor(var tag: Long, var num_bytes_following: Long, var sequence: Int = 0) {
|
||||||
abstract fun encode(): ByteArray
|
abstract fun encode(): ByteArray
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,23 @@
|
|||||||
|
package cfig.bootloader_message
|
||||||
|
|
||||||
|
class BootControl {
|
||||||
|
data class SlotMetadata(//size: 16
|
||||||
|
var priority: Int = 0,
|
||||||
|
var triesRemaining: Int = 0,
|
||||||
|
var successfulBoot: Boolean = false,
|
||||||
|
var verityCorrupted: Boolean = false,
|
||||||
|
var reserved: ByteArray = byteArrayOf()
|
||||||
|
)
|
||||||
|
|
||||||
|
class BootloaderControl(
|
||||||
|
var slotSuffix: String = "",
|
||||||
|
var magic: ByteArray = byteArrayOf(),
|
||||||
|
var version: Int = 0,
|
||||||
|
var slots: Int = 0,
|
||||||
|
var recoveryTriesRemaining: Int = 0,
|
||||||
|
var mergeStatus: Int = 0,
|
||||||
|
var slotMetaData: ByteArray= byteArrayOf(),
|
||||||
|
var reserved: ByteArray = byteArrayOf(),
|
||||||
|
var crc32: Int = 0
|
||||||
|
)
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
package cfig.bootloader_message
|
||||||
|
|
||||||
|
import cfig.io.Struct3
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
|
import java.io.FileInputStream
|
||||||
|
|
||||||
|
@OptIn(ExperimentalUnsignedTypes::class)
|
||||||
|
class BootloaderMsgAB( //offset 2k, size 2k
|
||||||
|
var slotSuffix: String = "",
|
||||||
|
var updateChannel: String = "",
|
||||||
|
var reserved: ByteArray = byteArrayOf()
|
||||||
|
) {
|
||||||
|
companion object {
|
||||||
|
private const val FORMAT_STRING = "32s128s1888b"
|
||||||
|
const val SIZE = 2048
|
||||||
|
private val log = LoggerFactory.getLogger(BootloaderMsgAB::class.java.simpleName)
|
||||||
|
|
||||||
|
init {
|
||||||
|
assert(SIZE == Struct3(FORMAT_STRING).calcSize())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(fis: FileInputStream) : this() {
|
||||||
|
val info = Struct3(FORMAT_STRING).unpack(fis)
|
||||||
|
this.slotSuffix = info[0] as String
|
||||||
|
this.updateChannel = info[1] as String
|
||||||
|
this.reserved = info[2] as ByteArray
|
||||||
|
}
|
||||||
|
|
||||||
|
fun encode(): ByteArray {
|
||||||
|
return Struct3(FORMAT_STRING).pack(
|
||||||
|
this.slotSuffix,
|
||||||
|
this.updateChannel,
|
||||||
|
byteArrayOf())
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
package cfig.bootloader_message
|
||||||
|
|
||||||
|
import cfig.io.Struct3
|
||||||
|
import org.slf4j.LoggerFactory
|
||||||
|
import java.io.FileInputStream
|
||||||
|
|
||||||
|
@OptIn(ExperimentalUnsignedTypes::class)
|
||||||
|
data class VirtualABMsg(
|
||||||
|
var version: Int = 0,
|
||||||
|
var magic: ByteArray = byteArrayOf(),
|
||||||
|
var mergeStatus: Int = 0,
|
||||||
|
var sourceSlot: Int = 0,
|
||||||
|
var reserved: ByteArray = byteArrayOf()
|
||||||
|
) {
|
||||||
|
companion object {
|
||||||
|
private const val FORMAT_STRING = "b4bbb57b"
|
||||||
|
const val SIZE = 64
|
||||||
|
private val log = LoggerFactory.getLogger("VirtualABMsg")
|
||||||
|
|
||||||
|
init {
|
||||||
|
assert(SIZE == Struct3(FORMAT_STRING).calcSize())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(fis: FileInputStream) : this() {
|
||||||
|
val info = Struct3(FORMAT_STRING).unpack(fis)
|
||||||
|
this.version = info[0] as Int
|
||||||
|
this.magic = info[1] as ByteArray
|
||||||
|
this.mergeStatus = info[2] as Int
|
||||||
|
this.sourceSlot = info[3] as Int
|
||||||
|
this.reserved = info[4] as ByteArray
|
||||||
|
}
|
||||||
|
|
||||||
|
fun encode(): ByteArray {
|
||||||
|
return Struct3(FORMAT_STRING).pack(
|
||||||
|
this.version,
|
||||||
|
this.magic,
|
||||||
|
this.mergeStatus,
|
||||||
|
this.sourceSlot,
|
||||||
|
0)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue