/**************************************************************************** * Arduino Helper Library for Freematics Esprit Development Board * Distributed under BSD license * Visit http://freematics.com/products/freematics-esprit for more information * Developed by Stanley Huang ****************************************************************************/ #ifndef Esprit_h #define Esprit_h #define PIN_LED 4 #define D0 16 #define D1 17 #define D2 2 #define D3 27 #define D4 26 #define D5 25 #define D6 15 #define D7 13 #define D8 12 #define D9 14 #define D10 5 #define D11 23 #define D12 19 #define D13 18 #define A0 36 #define A1 35 #define A2 34 #define A3 39 #define A4 32 #define A5 33 #ifndef _SIM #include "esp_system.h" #include "esp_partition.h" #include "nvs_flash.h" #include "nvs.h" #include "esp_spi_flash.h" #include "FreematicsPlus.h" extern HardwareSerial Serial1; extern HardwareSerial Serial2; #else #define SIM_FLASH_SIZE 4 * 1024 * 1024 #endif #define FLASH_STORAGE_BASE_ADDR 0x100000 class CNVS { public: #ifdef _SIM CNVS(const char* flashFilePath, size_t flashSize) { FILE* fp = fopen(flashFilePath, "rb+"); size_t size = 0; if (fp) { fseek(fp, 0, SEEK_END); size = ftell(fp); } if (size != flashSize) { if (fp) fclose(fp); fp = fopen(flashFilePath, "wb+"); char c = 0; for (size_t t = 0; t < flashSize; t++) { fputc(c, fp); } } if (fp) { fseek(fp, 0, SEEK_SET); m_flashSize = flashSize; m_fpFlash = fp; } else { m_fpFlash = 0; m_flashSize = 0; } } #endif bool init(const char* ns = "storage") { #ifndef _SIM m_flashSize = spi_flash_get_chip_size(); return nvs_open(ns, NVS_READWRITE, &m_handle) == ESP_OK; #endif } #ifndef _SIM bool set(const char* key, int8_t value) { return nvs_set_i8(m_handle, key, value) == ESP_OK; } bool set(const char* key, uint8_t value) { return nvs_set_u8(m_handle, key, value) == ESP_OK; } bool set(const char* key, int16_t value) { return nvs_set_i16(m_handle, key, value) == ESP_OK; } bool set(const char* key, uint16_t value) { return nvs_set_u16(m_handle, key, value) == ESP_OK; } bool set(const char* key, int32_t value) { return nvs_set_i32(m_handle, key, value) == ESP_OK; } bool set(const char* key, uint32_t value) { return nvs_set_u32(m_handle, key, value) == ESP_OK; } bool set(const char* key, void* value, size_t len) { return nvs_set_blob(m_handle, key, value, len) == ESP_OK; } bool set(const char* key, const char* value) { return nvs_set_str(m_handle, key, value) == ESP_OK; } bool get(const char* key, int8_t& value) { return nvs_get_i8(m_handle, key, &value) == ESP_OK; } bool get(const char* key, uint8_t& value) { return nvs_get_u8(m_handle, key, &value) == ESP_OK; } bool get(const char* key, int16_t& value) { return nvs_get_i16(m_handle, key, &value) == ESP_OK; } bool get(const char* key, uint16_t& value) { return nvs_get_u16(m_handle, key, &value) == ESP_OK; } bool get(const char* key, int32_t& value) { return nvs_get_i32(m_handle, key, &value) == ESP_OK; } bool get(const char* key, uint32_t& value) { return nvs_get_u32(m_handle, key, &value) == ESP_OK; } bool get(const char* key, void* buffer, size_t& len) { return nvs_get_blob(m_handle, key, buffer, &len) == ESP_OK; } bool get(const char* key, char* buffer, size_t& len) { return nvs_get_str(m_handle, key, buffer, &len) == ESP_OK; } bool erase() { return nvs_erase_all(m_handle); } bool erase(const char* key) { return nvs_erase_key(m_handle, key); } bool commit() { return nvs_commit(m_handle); } #endif bool flashRead(void* buffer, size_t bufsize, size_t offet = -1); bool flashWrite(void* buffer, size_t bufsize, size_t offet = -1); size_t getFlashSize() { return m_flashSize; } private: #ifndef _SIM nvs_handle m_handle; uint32_t m_offset; #else FILE* m_fpFlash; #endif size_t m_flashSize; }; #ifndef _SIM class GATTServer { public: bool init(const char* deviceName = 0); bool send(uint8_t* data, size_t len); virtual size_t onRequest(uint8_t* buffer, size_t len) { // being requested for data buffer[0] = 'O'; buffer[1] = 'K'; return 2; } virtual void onReceive(uint8_t* buffer, size_t len) { // data received is in buffer } }; #endif #endif