parent
d41de537a0
commit
955a8ce303
@ -0,0 +1,11 @@ |
||||
#include "bluetooth.hpp" |
||||
|
||||
#include "esp_bt.h" |
||||
|
||||
namespace drivers { |
||||
|
||||
auto Bluetooth::Enable() -> Bluetooth* { |
||||
return nullptr; |
||||
} |
||||
|
||||
} // namespace drivers
|
@ -0,0 +1,19 @@ |
||||
|
||||
#pragma once |
||||
|
||||
#include <vector> |
||||
|
||||
namespace drivers { |
||||
|
||||
class Bluetooth { |
||||
public: |
||||
static auto Enable() -> Bluetooth*; |
||||
Bluetooth(); |
||||
~Bluetooth(); |
||||
|
||||
struct Device {}; |
||||
auto Scan() -> std::vector<Device>; |
||||
private: |
||||
}; |
||||
|
||||
} |
@ -0,0 +1,27 @@ |
||||
/*
|
||||
* Copyright 2023 jacqueline <me@jacqueline.id.au> |
||||
* |
||||
* SPDX-License-Identifier: GPL-3.0-only |
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include "esp_err.h" |
||||
#include "nvs.h" |
||||
|
||||
namespace drivers { |
||||
|
||||
class NvsStorage { |
||||
public: |
||||
static auto Open() -> NvsStorage*; |
||||
|
||||
auto SchemaVersion() -> uint8_t; |
||||
|
||||
explicit NvsStorage(nvs_handle_t); |
||||
~NvsStorage(); |
||||
|
||||
private: |
||||
nvs_handle_t handle_; |
||||
}; |
||||
|
||||
} // namespace drivers
|
@ -0,0 +1,73 @@ |
||||
/*
|
||||
* Copyright 2023 jacqueline <me@jacqueline.id.au> |
||||
* |
||||
* SPDX-License-Identifier: GPL-3.0-only |
||||
*/ |
||||
|
||||
#include "nvs.hpp" |
||||
#include <stdint.h> |
||||
|
||||
#include <cstdint> |
||||
#include <memory> |
||||
|
||||
#include "esp_log.h" |
||||
#include "nvs.h" |
||||
#include "nvs_flash.h" |
||||
|
||||
namespace drivers { |
||||
|
||||
static constexpr char kTag[] = "nvm"; |
||||
static constexpr uint8_t kSchemaVersion = 1; |
||||
|
||||
static constexpr char kKeyVersion[] = "ver"; |
||||
|
||||
auto NvsStorage::Open() -> NvsStorage* { |
||||
esp_err_t err = nvs_flash_init(); |
||||
if (err == ESP_ERR_NVS_NO_FREE_PAGES) { |
||||
ESP_LOGW(kTag, "partition needs initialisation"); |
||||
nvs_flash_erase(); |
||||
err = nvs_flash_init(); |
||||
} |
||||
if (err != ESP_OK) { |
||||
ESP_LOGE(kTag, "failed to init nvm"); |
||||
return nullptr; |
||||
} |
||||
|
||||
nvs_handle_t handle; |
||||
if ((err = nvs_open("tangara", NVS_READWRITE, &handle)) != ESP_OK) { |
||||
ESP_LOGE(kTag, "failed to open nvs namespace"); |
||||
return nullptr; |
||||
} |
||||
|
||||
std::unique_ptr<NvsStorage> instance = std::make_unique<NvsStorage>(handle); |
||||
if (instance->SchemaVersion() < kSchemaVersion) { |
||||
ESP_LOGW(kTag, "namespace needs downgrading"); |
||||
nvs_erase_all(handle); |
||||
nvs_set_u8(handle, kKeyVersion, kSchemaVersion); |
||||
err = nvs_commit(handle); |
||||
if (err != ESP_OK) { |
||||
ESP_LOGW(kTag, "failed to init namespace"); |
||||
return nullptr; |
||||
} |
||||
} |
||||
|
||||
ESP_LOGI(kTag, "nvm storage initialised okay"); |
||||
return instance.release(); |
||||
} |
||||
|
||||
NvsStorage::NvsStorage(nvs_handle_t handle) : handle_(handle) {} |
||||
|
||||
NvsStorage::~NvsStorage() { |
||||
nvs_close(handle_); |
||||
nvs_flash_deinit(); |
||||
} |
||||
|
||||
auto NvsStorage::SchemaVersion() -> uint8_t { |
||||
uint8_t ret; |
||||
if (nvs_get_u8(handle_, kKeyVersion, &ret) != ESP_OK) { |
||||
return UINT8_MAX; |
||||
} |
||||
return ret; |
||||
} |
||||
|
||||
} // namespace drivers
|
Loading…
Reference in new issue