mirror of
https://github.com/meshtastic/firmware.git
synced 2025-02-13 16:11:24 +00:00
4b0bbb8af1
* Make STM compile again and update toolchain. The binary is too big for the flash. WIP * Making progress with OSFS, still WIP * more progress, still too big. Adding RAK3172 to the equasion * Make STM compile again and update toolchain. The binary is too big for the flash. WIP * Making progress with OSFS, still WIP * more progress, still too big. Adding RAK3172 to the equasion * still too big * minimize build * trunk fmt * fix a couple of symbol clashes * trunk fmt * down to 101% with a release vs. debug build and omitting the flash strings * fix compilation * fix compilation once more * update protobufs linkage * - Toolchain updated - Fixed macro error * silence compiler warning note: do something about this assert... * new toolkit and fix Power.cpp * STM32WL make it fit (#4330) * Add option to exclude I2C parts The I2C hals and related code uses a significant amount of flash space and aren't required for a basic node. * Add option to disable Admin and NodeInfo modules Disabled by default in minimal build. This saves a significant amount of flash * Disable unused hals These use up significant flash * Add float support for printf for debugging Makes serial look nice for debugging * This breaks my build for some reason * These build flags can save a bit of flash * Don't disable NodeInfo and Admin modules in minimal build They fit in flash * Don't include printf float support by default Only useful for debugging --------- Co-authored-by: Adam Lawson <dev@goshawk22.uk> --------- Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Adam Lawson <dev@goshawk22.uk>
75 lines
2.2 KiB
C++
75 lines
2.2 KiB
C++
#include "configuration.h"
|
|
|
|
#include "FSCommon.h"
|
|
#include "mesh-pb-constants.h"
|
|
#include <Arduino.h>
|
|
#include <assert.h>
|
|
#include <pb_decode.h>
|
|
#include <pb_encode.h>
|
|
|
|
/// helper function for encoding a record as a protobuf, any failures to encode are fatal and we will panic
|
|
/// returns the encoded packet size
|
|
size_t pb_encode_to_bytes(uint8_t *destbuf, size_t destbufsize, const pb_msgdesc_t *fields, const void *src_struct)
|
|
{
|
|
pb_ostream_t stream = pb_ostream_from_buffer(destbuf, destbufsize);
|
|
if (!pb_encode(&stream, fields, src_struct)) {
|
|
LOG_ERROR("Panic: can't encode protobuf reason='%s'\n", PB_GET_ERROR(&stream));
|
|
assert(
|
|
0); // If this assert fails it probably means you made a field too large for the max limits specified in mesh.options
|
|
return 0;
|
|
} else {
|
|
return stream.bytes_written;
|
|
}
|
|
}
|
|
|
|
/// helper function for decoding a record as a protobuf, we will return false if the decoding failed
|
|
bool pb_decode_from_bytes(const uint8_t *srcbuf, size_t srcbufsize, const pb_msgdesc_t *fields, void *dest_struct)
|
|
{
|
|
pb_istream_t stream = pb_istream_from_buffer(srcbuf, srcbufsize);
|
|
if (!pb_decode(&stream, fields, dest_struct)) {
|
|
LOG_ERROR("Can't decode protobuf reason='%s', pb_msgdesc %p\n", PB_GET_ERROR(&stream), fields);
|
|
return false;
|
|
} else {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
#ifdef FSCom
|
|
/// Read from an Arduino File
|
|
bool readcb(pb_istream_t *stream, uint8_t *buf, size_t count)
|
|
{
|
|
bool status = false;
|
|
File *file = (File *)stream->state;
|
|
|
|
if (buf == NULL) {
|
|
while (count-- && file->read() != EOF)
|
|
;
|
|
return count == 0;
|
|
}
|
|
|
|
status = (file->read(buf, count) == (int)count);
|
|
|
|
if (file->available() == 0)
|
|
stream->bytes_left = 0;
|
|
|
|
return status;
|
|
}
|
|
|
|
/// Write to an arduino file
|
|
bool writecb(pb_ostream_t *stream, const uint8_t *buf, size_t count)
|
|
{
|
|
File *file = (File *)stream->state;
|
|
// LOG_DEBUG("writing %d bytes to protobuf file\n", count);
|
|
return file->write(buf, count) == count;
|
|
}
|
|
#endif
|
|
|
|
bool is_in_helper(uint32_t n, const uint32_t *array, pb_size_t count)
|
|
{
|
|
for (pb_size_t i = 0; i < count; i++)
|
|
if (array[i] == n)
|
|
return true;
|
|
|
|
return false;
|
|
}
|