parent
2665fd0098
commit
a39b870033
@ -1,6 +1,6 @@
|
||||
package avb.desc
|
||||
|
||||
@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
|
||||
}
|
||||
|
@ -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