From 3d567d783ee3a646463340b788119f16a2bcd4a8 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sat, 30 Mar 2019 13:16:48 +0000 Subject: [PATCH] - get state with 'T?' git-svn-id: http://moon:8086/svn/projects/HendiControl@175 fda53097-d464-4ada-af97-ba876c37ca34 --- Control/firmware/HendiCtrl/main.c | 94 ++++++++++++++++++++----------- 1 file changed, 62 insertions(+), 32 deletions(-) diff --git a/Control/firmware/HendiCtrl/main.c b/Control/firmware/HendiCtrl/main.c index 14f1676..fd91033 100755 --- a/Control/firmware/HendiCtrl/main.c +++ b/Control/firmware/HendiCtrl/main.c @@ -40,7 +40,7 @@ #define TIMER_SW_DELAY_MS(dly) ((dly*TIMER_IRQ_CLOCK)/1000UL) -static const uint16_t POTI_HSYTERSE = 1; +FILE uart_file = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE); int16_t adc_poti = 0; int16_t adc_swin = 0; @@ -51,10 +51,18 @@ uint16_t g_power = 0; int g_debug = 0; int g_switch = 0; +typedef enum _eState_t +{ + StateNormal = 0, + StateRemote = 1, + StateError = 2, + State_NumStates +} State_t; + static const char SW_IDENTIFIER[] = "Hendi-Control"; static const char SW_VERSION[] = "v1.1"; - -FILE uart_file = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE); +static const char *state_str[State_NumStates] = {"Normal","Remote","Error"}; +static const uint16_t POTI_HSYTERSE = 1; typedef enum _eSwitch { @@ -85,14 +93,6 @@ void setPower(uint16_t power) i2c_send(0x60, I2C_WRITE, dac_cmd, res); } -typedef enum _eState_t -{ - StateNormal = 0, - StateRemote = 1, - StateError = 2, - State_NumStates -} State_t; - int main(void) { int hb_state = 0; @@ -100,8 +100,6 @@ int main(void) wdt_reset(); wdt_disable(); - const char *state_str[State_NumStates] = {"Normal","Remote","Error"}; - State_t state = StateNormal; State_t state_next = StateNormal; @@ -158,8 +156,8 @@ int main(void) pArgs++; if ((*pArgs) == '?') { - PRINT_ANSWER("%04u", g_power); pArgs++; + PRINT_ANSWER("OK:%04u", g_power); } else { @@ -171,6 +169,7 @@ int main(void) if (state == StateRemote) { setPower(arg); + PRINT_ANSWER("OK:%04u", g_power); } } } @@ -181,8 +180,8 @@ int main(void) pArgs++; if ((*pArgs) == '?') { - PRINT_ANSWER("%u", g_switch); pArgs++; + PRINT_ANSWER("OK:%u", g_switch); } else { @@ -195,31 +194,41 @@ int main(void) if (state == StateRemote) { setSwitch(arg); + PRINT_ANSWER("OK:%u", g_switch); } } } - // Enter remote + // Enter/exit remote else if (toupper(*pArgs) == 'R') { pArgs++; - if (state == StateNormal) + if (!isdigit(*pArgs)) { - setPower(PowerLow); - setSwitch(SwitchOff); - state_next = StateRemote; + break; } - } - - // Exit remote - else if (toupper(*pArgs) == 'X') - { - pArgs++; - if (state == StateRemote) + uint16_t arg = (uint16_t)strtol(pArgs, &pArgs, 10); + if (arg == 1) { - setPower(PowerLow); - setSwitch(SwitchOff); - state_next = StateNormal; + // Enter remote + if (state == StateNormal) + { + setPower(PowerLow); + setSwitch(SwitchOff); + state_next = StateRemote; + PRINT_ANSWER("OK"); + } + } + else if (arg == 0) + { + // Exit remote + if (state == StateRemote) + { + setPower(PowerLow); + setSwitch(SwitchOff); + state_next = StateNormal; + PRINT_ANSWER("OK"); + } } } @@ -232,20 +241,41 @@ int main(void) break; } g_debug = (uint16_t)strtol(pArgs, &pArgs, 10); + PRINT_ANSWER("OK"); } // SW identifier else if (toupper(*pArgs) == 'I') { pArgs++; - PRINT_ANSWER("%s", SW_IDENTIFIER); + if ((*pArgs) == '?') + { + pArgs++; + PRINT_ANSWER("OK:%s", SW_IDENTIFIER); + } } // Version else if (toupper(*pArgs) == 'V') { pArgs++; - PRINT_ANSWER("%s", SW_VERSION); + if ((*pArgs) == '?') + { + pArgs++; + PRINT_ANSWER("OK:%s", SW_VERSION); + } + } + + // State + else if (toupper(*pArgs) == 'T') + { + pArgs++; + if ((*pArgs) == '?') + { + pArgs++; + const char *pState = state_str[state]; + PRINT_ANSWER("OK:%s", pState); + } } // no match