18 MemoryFirmware(
const uint8_t* data, uint32_t len,
const char* format =
"BNO_V1",
19 const char* part =
"unknown", uint32_t packet_len = 0)
20 : data_(data), len_(len), format_(format), part_(part), packet_len_(packet_len) {}
31 static const char* getMeta(
const char* key);
32 static uint32_t getAppLen();
33 static uint32_t getPacketLen();
34 static int getAppData(uint8_t* packet, uint32_t offset, uint32_t len);
49inline int MemoryFirmware::open() {
50 if (active_ !=
nullptr) {
53 if (pending_ ==
nullptr) {
60inline int MemoryFirmware::close() {
65inline const char* MemoryFirmware::getMeta(
const char* key) {
68 if (std::strcmp(key,
"FW-Format") == 0)
69 return active_->format_;
70 if (std::strcmp(key,
"SW-Part-Number") == 0)
71 return active_->part_;
74inline uint32_t MemoryFirmware::getAppLen() {
75 return active_ ? active_->len_ : 0;
77inline uint32_t MemoryFirmware::getPacketLen() {
78 return active_ ? active_->packet_len_ : 0;
80inline int MemoryFirmware::getAppData(uint8_t* packet, uint32_t offset, uint32_t len) {
81 if (!active_ || offset > active_->len_ || len > (active_->len_ - offset))
83 std::memcpy(packet, active_->data_ + offset, len);
87inline const HcBin_t MemoryFirmware::impl_ = {
88 MemoryFirmware::open, MemoryFirmware::close, MemoryFirmware::getMeta,
89 MemoryFirmware::getAppLen, MemoryFirmware::getPacketLen, MemoryFirmware::getAppData};
90inline thread_local const MemoryFirmware* MemoryFirmware::pending_ =
nullptr;
91inline thread_local const MemoryFirmware* MemoryFirmware::active_ =
nullptr;
API Definition for HcBin objects (Hillcrest Binary Files).
HcBin_t implementation for firmware stored in memory.
Definition MemoryFirmware.hpp:16
const HcBin_t & hcbin() const
Definition MemoryFirmware.hpp:23
MemoryFirmware(const uint8_t *data, uint32_t len, const char *format="BNO_V1", const char *part="unknown", uint32_t packet_len=0)
Definition MemoryFirmware.hpp:18