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