- get state with 'T?'

git-svn-id: http://moon:8086/svn/projects/HendiControl@175 fda53097-d464-4ada-af97-ba876c37ca34
This commit is contained in:
2019-03-30 13:16:48 +00:00
parent ea2f5c91d9
commit 3d567d783e
+62 -32
View File
@@ -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