Add an app console triggered shutdown

custom
jacqueline 2 years ago
parent 51cb168f79
commit 27f329a9db
  1. 7
      src/app_console/app_console.cpp
  2. 1
      src/drivers/include/samd.hpp
  3. 9
      src/drivers/samd.cpp

@ -483,7 +483,7 @@ void RegisterBtList() {
} }
int CmdSamd(int argc, char** argv) { int CmdSamd(int argc, char** argv) {
static const std::string usage = "usage: samd [flash|charge]"; static const std::string usage = "usage: samd [flash|charge|off]";
if (argc != 2) { if (argc != 2) {
std::cout << usage << std::endl; std::cout << usage << std::endl;
return 1; return 1;
@ -493,7 +493,6 @@ int CmdSamd(int argc, char** argv) {
if (cmd == "flash") { if (cmd == "flash") {
std::cout << "resetting samd..." << std::endl; std::cout << "resetting samd..." << std::endl;
vTaskDelay(pdMS_TO_TICKS(5)); vTaskDelay(pdMS_TO_TICKS(5));
AppConsole::sSamd->ResetToFlashSamd(); AppConsole::sSamd->ResetToFlashSamd();
} else if (cmd == "charge") { } else if (cmd == "charge") {
auto res = AppConsole::sSamd->GetChargeStatus(); auto res = AppConsole::sSamd->GetChargeStatus();
@ -521,6 +520,10 @@ int CmdSamd(int argc, char** argv) {
} else { } else {
std::cout << "unknown" << std::endl; std::cout << "unknown" << std::endl;
} }
} else if (cmd == "off") {
std::cout << "bye !!!" << std::endl;
vTaskDelay(pdMS_TO_TICKS(5));
AppConsole::sSamd->PowerDown();
} else { } else {
std::cout << usage << std::endl; std::cout << usage << std::endl;
return 1; return 1;

@ -52,6 +52,7 @@ class Samd {
auto UpdateUsbStatus() -> void; auto UpdateUsbStatus() -> void;
auto ResetToFlashSamd() -> void; auto ResetToFlashSamd() -> void;
auto PowerDown() -> void;
static auto CreateReadPending() -> SemaphoreHandle_t; static auto CreateReadPending() -> SemaphoreHandle_t;

@ -138,6 +138,15 @@ auto Samd::ResetToFlashSamd() -> void {
ESP_ERROR_CHECK(transaction.Execute()); ESP_ERROR_CHECK(transaction.Execute());
} }
auto Samd::PowerDown() -> void {
I2CTransaction transaction;
transaction.start()
.write_addr(kAddress, I2C_MASTER_WRITE)
.write_ack(Registers::kPowerControl, 0b1)
.stop();
ESP_ERROR_CHECK(transaction.Execute());
}
auto Samd::CreateReadPending() -> SemaphoreHandle_t { auto Samd::CreateReadPending() -> SemaphoreHandle_t {
sReadPending = xSemaphoreCreateBinary(); sReadPending = xSemaphoreCreateBinary();
return sReadPending; return sReadPending;

Loading…
Cancel
Save