Add support for night mode

This commit is contained in:
2020-11-19 18:05:49 +01:00
parent 0f2dca5ec7
commit 8b47ed295e
12 changed files with 173 additions and 30 deletions

View File

@@ -7,6 +7,7 @@
#include "at.h"
#include "uart.h"
#include "config.h"
#include "nightm.h"
#include "time.h"
#include "led.h"
#include "rtc.h"
@@ -18,7 +19,8 @@ const struct AT_CMD at_commands[AT_NUM] PROGMEM = {
{ "ATI", cmd_ati_handler },
{ "AT+RST", cmd_at_rst_handler },
{ "AT+TIME", cmd_at_time_handler },
{ "AT+BTNES", cmd_at_btnes_handler }
{ "AT+BTNES", cmd_at_btnes_handler },
{ "AT+NGT", cmd_at_ngt_handler }
};
void parse_at(char* at_cmd, char* arg, uint8_t mode)
@@ -115,7 +117,7 @@ int8_t cmd_at_rst_handler(uint8_t mode, char* arg)
int8_t cmd_at_time_handler(uint8_t mode, char* arg)
{
struct TIME time;
struct TIME_HMS time;
char* val;
char* tail;
@@ -171,8 +173,7 @@ int8_t cmd_at_btnes_handler(uint8_t mode, char* arg)
switch(mode)
{
case M_GET:
for(btness=0; btness<8; ++btness) if(ram_cfg.led_brightness & (1<<btness)) break;
uart_puti(btness, 10);
uart_puti(ram_cfg.led_brightness, 10);
uart_puts("\n\r");
break;
@@ -196,3 +197,69 @@ int8_t cmd_at_btnes_handler(uint8_t mode, char* arg)
return 0;
}
int8_t cmd_at_ngt_handler(uint8_t mode, char* arg)
{
struct NIGHTM_CFG nightm_cfg;
char* val;
char* tail;
switch(mode)
{
case M_GET:
uart_puti(ram_cfg.night_mode.led_btnes, 10);
uart_puts(ram_cfg.night_mode.led_btnes >= 0 ? " (EN)\n\r" : " (DIS)\n\r");
uart_puti(ram_cfg.night_mode.begin.hour, 10);
uart_puts(":");
uart_puti(ram_cfg.night_mode.begin.minute, 10);
uart_puts("\n\r");
uart_puti(ram_cfg.night_mode.end.hour, 10);
uart_puts(":");
uart_puti(ram_cfg.night_mode.end.minute, 10);
uart_puts("\n\r");
break;
case M_SET:
if(!strlen(arg)) return -1;
val = strtok_r(arg, ",", &tail);
nightm_cfg.led_btnes = atoi(val);
if(nightm_cfg.led_btnes < -1 && 7 < nightm_cfg.led_btnes) return -1;
val = strtok_r(NULL, ",", &tail);
nightm_cfg.begin.hour = atoi(val);
if(nightm_cfg.begin.hour > 23) return -1;
val = strtok_r(NULL, ",", &tail);
nightm_cfg.begin.minute = atoi(val);
if(nightm_cfg.begin.minute > 59) return -1;
val = strtok_r(NULL, ",", &tail);
nightm_cfg.end.hour = atoi(val);
if(nightm_cfg.end.hour > 23) return -1;
val = strtok_r(NULL, ",", &tail);
nightm_cfg.end.minute = atoi(val);
if(nightm_cfg.end.minute > 59) return -1;
nightm_config(&nightm_cfg);
uart_puts("+NGT=");
uart_puti(nightm_cfg.led_btnes, 10);
uart_puts(",");
uart_puti(nightm_cfg.begin.hour, 10);
uart_puts(",");
uart_puti(nightm_cfg.begin.minute, 10);
uart_puts(",");
uart_puti(nightm_cfg.end.hour, 10);
uart_puts(",");
uart_puti(nightm_cfg.end.minute, 10);
uart_puts("\n\r");
break;
case M_NORM:
uart_puts("AT+NGT=(-1|0-7),(0-23),(0-59),(0-23),(0-59)");
}
return 0;
}