From 7523bac4f4b3b09b0f0ba651ad79f0bbe13d8884 Mon Sep 17 00:00:00 2001 From: Rob Riggs Date: Wed, 19 Sep 2018 22:38:18 -0500 Subject: [PATCH] Start work on power saving modes. --- TNC/PowerMode.cpp | 52 +++++++++++++++++++++++++++++++++++++++++++++++ TNC/PowerMode.h | 16 +++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 TNC/PowerMode.cpp create mode 100644 TNC/PowerMode.h diff --git a/TNC/PowerMode.cpp b/TNC/PowerMode.cpp new file mode 100644 index 0000000..f5a63aa --- /dev/null +++ b/TNC/PowerMode.cpp @@ -0,0 +1,52 @@ +// Copyright 2018 Rob Riggs +// All rights reserved. + +#include "main.h" +#include "PowerMode.h" +#include "stm32l4xx_hal.h" + +#include + +volatile PowerMode power_mode{PowerMode::RUN}; +PowerMode previous_mode{PowerMode::RUN}; // Always start in RUN mode. + +/** + * Handle state transitions here. Valid transitions are from RUN to any mode, + * LPRUN to any mode, SLEEP to LPRUN or STOP, and STOP to LPRUN or SLEEP. + * + * If moving from RUN to any SLEEP or STOP, we assume the upper layers have + * already disconnected the connection, either bu + * + * @param ulExpectedIdleTime + */ +extern "C" void PreSleepProcessing(uint32_t *ulExpectedIdleTime) +{ + switch (power_mode) + { + case PowerMode::RUN: + break; + case PowerMode::LPRUN: + if (previous_mode != power_mode); + break; + case PowerMode::SLEEP: + break; + case PowerMode::STOP: + break; + } +} + +extern "C" void PostSleepProcessing(uint32_t *ulExpectedIdleTime) +{ + switch (power_mode) + { + case PowerMode::RUN: + break; + case PowerMode::LPRUN: + break; + case PowerMode::SLEEP: + break; + case PowerMode::STOP: + break; + } +} + diff --git a/TNC/PowerMode.h b/TNC/PowerMode.h new file mode 100644 index 0000000..22666f9 --- /dev/null +++ b/TNC/PowerMode.h @@ -0,0 +1,16 @@ +// Copyright 2018 Rob Riggs +// All rights reserved. + +#ifndef TNC_POWERMODE_H_ +#define TNC_POWERMODE_H_ + +enum class PowerMode { + RUN, // Power on, connected. + LPRUN, // Power on, not connected. + SLEEP, // Power off, USB connected. + STOP // Power off, no USB connection. +}; + +extern volatile PowerMode power_mode; + +#endif // TNC_POWERMODE_H_