| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- #pragma once
- #include <stdint.h>
- #include <stddef.h>
- #include <math.h>
- #define MAX_HASH_SIZE 8
- #define PUB_KEY_SIZE 32
- #define PRV_KEY_SIZE 64
- #define SEED_SIZE 32
- #define SIGNATURE_SIZE 64
- #define MAX_ADVERT_DATA_SIZE 32
- #define CIPHER_KEY_SIZE 16
- #define CIPHER_BLOCK_SIZE 16
- // V1
- #define CIPHER_MAC_SIZE 2
- #define PATH_HASH_SIZE 1
- #define MAX_PACKET_PAYLOAD 184
- #define MAX_GROUP_DATA_LENGTH (MAX_PACKET_PAYLOAD - CIPHER_BLOCK_SIZE - 3)
- #define MAX_PATH_SIZE 64
- #define MAX_TRANS_UNIT 255
- #if MESH_DEBUG && ARDUINO
- #include <Arduino.h>
- #define MESH_DEBUG_PRINT(F, ...) Serial.printf("DEBUG: " F, ##__VA_ARGS__)
- #define MESH_DEBUG_PRINTLN(F, ...) Serial.printf("DEBUG: " F "\n", ##__VA_ARGS__)
- #else
- #define MESH_DEBUG_PRINT(...) {}
- #define MESH_DEBUG_PRINTLN(...) {}
- #endif
- #if BRIDGE_DEBUG && ARDUINO
- #define BRIDGE_DEBUG_PRINTLN(F, ...) Serial.printf("%s BRIDGE: " F, getLogDateTime(), ##__VA_ARGS__)
- #else
- #define BRIDGE_DEBUG_PRINTLN(...) {}
- #endif
- namespace mesh {
- #define BD_STARTUP_NORMAL 0 // getStartupReason() codes
- #define BD_STARTUP_RX_PACKET 1
- class MainBoard {
- public:
- virtual uint16_t getBattMilliVolts() = 0;
- virtual int getBatteryPercent() { return -1; }
- virtual uint16_t getBatteryMinMilliVolts() const { return 3000; }
- virtual uint16_t getBatteryMaxMilliVolts() const { return 4200; }
- virtual bool isCharging() { return false; }
- virtual bool isVbusPresent() { return false; }
- virtual float getMCUTemperature() { return NAN; }
- virtual bool setAdcMultiplier(float multiplier) { return false; };
- virtual float getAdcMultiplier() const { return 0.0f; }
- virtual const char* getManufacturerName() const = 0;
- virtual void onBeforeTransmit() { }
- virtual void onAfterTransmit() { }
- virtual void reboot() = 0;
- virtual void powerOff() { /* no op */ }
- // Called by example setup() functions to signal that boot is complete.
- // Boards may override to stop a boot-indicator LED sequence or similar.
- // Default no-op: boards that don't care need not implement anything.
- virtual void onBootComplete() { /* no op */ }
- virtual uint32_t getIRQGpio() { return -1; } // not supported. Returns DIO1 (SX1262) and DIO0 (SX127x)
- virtual void sleep(uint32_t secs) { /* no op */ }
- virtual uint32_t getGpio() { return 0; }
- virtual void setGpio(uint32_t values) {}
- virtual uint8_t getStartupReason() const = 0;
- virtual bool getBootloaderVersion(char* version, size_t max_len) { return false; }
- virtual bool startOTAUpdate(const char* id, char reply[]) { return false; } // not supported
- // Power management interface (boards with power management override these)
- virtual bool isExternalPowered() { return false; }
- virtual uint16_t getBootVoltage() { return 0; }
- virtual uint32_t getResetReason() const { return 0; }
- virtual const char* getResetReasonString(uint32_t reason) { return "Not available"; }
- virtual uint8_t getShutdownReason() const { return 0; }
- virtual const char* getShutdownReasonString(uint8_t reason) { return "Not available"; }
- };
- /**
- * An abstraction of the device's Realtime Clock.
- */
- class RTCClock {
- uint32_t last_unique;
- protected:
- RTCClock() { last_unique = 0; }
- public:
- /**
- * \returns the current time. in UNIX epoch seconds.
- */
- virtual uint32_t getCurrentTime() = 0;
- /**
- * \param time current time in UNIX epoch seconds.
- */
- virtual void setCurrentTime(uint32_t time) = 0;
- /**
- * override in classes that need to periodically update internal state
- */
- virtual void tick() { /* no op */}
- uint32_t getCurrentTimeUnique() {
- uint32_t t = getCurrentTime();
- if (t <= last_unique) {
- return ++last_unique;
- }
- return last_unique = t;
- }
- };
- }
|