@ -10,17 +10,19 @@
# include "uart.h"
# include "cgiwifi.h"
static uint32_t ICACHE_FLASH_ATTR CMD_Null ( CmdPacket * cmd ) ;
static uint32_t ICACHE_FLASH_ATTR CMD_IsReady ( CmdPacket * cmd ) ;
static uint32_t ICACHE_FLASH_ATTR CMD_WifiConnect ( CmdPacket * cmd ) ;
static uint32_t ICACHE_FLASH_ATTR CMD_AddSensor ( CmdPacket * cmd ) ;
static uint32_t CMD_Null ( CmdPacket * cmd ) ;
static uint32_t CMD_IsReady ( CmdPacket * cmd ) ;
static uint32_t CMD_Reset ( CmdPacket * cmd ) ;
static uint32_t CMD_WifiConnect ( CmdPacket * cmd ) ;
static uint32_t CMD_AddCallback ( CmdPacket * cmd ) ;
// keep track of last status sent to uC so we can notify it when it changes
static uint8_t lastWifiStatus = wifiIsDisconnected ;
// Command dispatch table for serial -> ESP commands
const CmdList commands [ ] = {
{ CMD_NULL , CMD_Null } ,
{ CMD_RESET , CMD_Null } ,
{ CMD_RESET , CMD_Reset } ,
{ CMD_IS_READY , CMD_IsReady } ,
{ CMD_WIFI_CONNECT , CMD_WifiConnect } ,
@ -37,25 +39,14 @@ const CmdList commands[] = {
{ CMD_REST_REQUEST , REST_Request } ,
{ CMD_REST_SETHEADER , REST_SetHeader } ,
{ CMD_ADD_SENSOR , CMD_AddSensor } ,
{ CMD_ADD_CALLBACK , CMD_AddCallback } ,
{ CMD_NULL , NULL }
} ;
// WifiCb plus 10 for sensors
cmdCallback callbacks [ 12 ] = {
{ { ' \0 ' } , - 1 } ,
{ { ' \0 ' } , - 1 } ,
{ { ' \0 ' } , - 1 } ,
{ { ' \0 ' } , - 1 } ,
{ { ' \0 ' } , - 1 } ,
{ { ' \0 ' } , - 1 } ,
{ { ' \0 ' } , - 1 } ,
{ { ' \0 ' } , - 1 } ,
{ { ' \0 ' } , - 1 } ,
{ { ' \0 ' } , - 1 } ,
{ { ' \0 ' } , - 1 }
} ;
# define MAX_CALLBACKS 12
cmdCallback callbacks [ MAX_CALLBACKS ] ; // cleared in CMD_Reset
// Command handler for IsReady (healthcheck) command
static uint32_t ICACHE_FLASH_ATTR
@ -71,20 +62,31 @@ CMD_Null(CmdPacket *cmd) {
return 1 ;
}
static void ICACHE_FLASH_ATTR
// Command handler for Reset command, this was originally to reset the ESP but we don't want to
// do that is esp-link. It is still good to clear any information the ESP has about the attached
// uC.
static uint32_t ICACHE_FLASH_ATTR
CMD_Reset ( CmdPacket * cmd ) {
os_printf ( " CMD_Reset \n " ) ;
// clear callbacks table
os_memset ( callbacks , 0 , sizeof ( callbacks ) ) ;
return 1 ;
}
static uint32_t ICACHE_FLASH_ATTR
CMD_AddCb ( char * name , uint32_t cb ) {
char checkname [ 16 ] ;
os_strncpy ( checkname , name , sizeof ( checkname ) ) ;
for ( uint8_t i = 0 ; i < sizeof ( commands ) ; i + + ) {
os_printf ( " CMD_AddCb: index %d name=%s cb=%p \n " , i , callbacks [ i ] . name , ( void * ) callbacks [ i ] . callback ) ;
for ( uint8_t i = 0 ; i < MAX_CALLBACKS ; i + + ) {
//os_printf("CMD_AddCb: index %d name=%s cb=%p\n", i, callbacks[i].name,
// (void *)callbacks[i].callback);
// find existing callback or add to the end
if ( os_strcmp ( callbacks [ i ] . name , checkname ) = = 0 | | callbacks [ i ] . name [ 0 ] = = ' \0 ' ) {
os_strncpy ( callbacks [ i ] . name , checkname , sizeof ( checkname ) ) ;
if ( os_strcmp ( callbacks [ i ] . name , name ) = = 0 | | callbacks [ i ] . name [ 0 ] = = ' \0 ' ) {
os_strncpy ( callbacks [ i ] . name , name , sizeof ( callbacks [ i ] . name ) ) ;
callbacks [ i ] . callback = cb ;
os_printf ( " CMD_AddCb: cb %s added at index %d \n " , callbacks [ i ] . name , i ) ;
break ;
return 1 ;
}
}
return 0 ;
}
cmdCallback * ICACHE_FLASH_ATTR
@ -92,7 +94,8 @@ CMD_GetCbByName(char* name) {
char checkname [ 16 ] ;
os_strncpy ( checkname , name , sizeof ( checkname ) ) ;
for ( uint8_t i = 0 ; i < sizeof ( commands ) ; i + + ) {
os_printf ( " CMD_GetCbByName: index %d name=%s cb=%p \n " , i , callbacks [ i ] . name , ( void * ) callbacks [ i ] . callback ) ;
//os_printf("CMD_GetCbByName: index %d name=%s cb=%p\n", i, callbacks[i].name,
// (void *)callbacks[i].callback);
// if callback doesn't exist or it's null
if ( os_strcmp ( callbacks [ i ] . name , checkname ) = = 0 ) {
os_printf ( " CMD_GetCbByName: cb %s found at index %d \n " , callbacks [ i ] . name , i ) ;
@ -130,33 +133,31 @@ CMD_WifiConnect(CmdPacket *cmd) {
wifiStatusCb = CMD_WifiCb ; // register our callback with wifi subsystem
CMD_AddCb ( " wifiCb " , ( uint32_t ) cmd - > callback ) ; // save the MCU's callback
lastWifiStatus = wifiIsDisconnected ;
lastWifiStatus = 0xff ; // set to invalid value so we immediately send status cb in all cases
CMD_WifiCb ( wifiState ) ;
return 1 ;
}
// Command handler for Wifi connect command
// Command handler to add a callback to the named-callbacks list, this is for a callback to the uC
static uint32_t ICACHE_FLASH_ATTR
CMD_AddSensor ( CmdPacket * cmd ) {
CMD_AddCallback ( CmdPacket * cmd ) {
CmdRequest req ;
CMD_Request ( & req , cmd ) ;
os_printf ( " CMD_AddSensor : setup argc=%ld \n " , CMD_GetArgc ( & req ) ) ;
os_printf ( " CMD_AddCallback : setup argc=%ld \n " , CMD_GetArgc ( & req ) ) ;
if ( cmd - > argc ! = 1 | | cmd - > callback = = 0 )
return 0 ;
uint8_t * name ;
char name [ 16 ] ;
uint16_t len ;
// get the sensor name
len = CMD_ArgLen ( & req ) ;
os_printf ( " CMD_AddSensor : name len=%d \n " , len ) ;
os_printf ( " CMD_AddCallback : name len=%d \n " , len ) ;
if ( len > 15 ) return 0 ; // max size of name is 15 characters
name = ( uint8_t * ) os_zalloc ( len + 1 ) ;
if ( CMD_PopArg ( & req , name , len ) ) return 0 ;
if ( CMD_PopArg ( & req , ( uint8_t * ) name , len ) ) return 0 ;
name [ len ] = 0 ;
os_printf ( " CMD_AddSensor : name=%s \n " , name ) ;
os_printf ( " CMD_AddCallback : name=%s \n " , name ) ;
CMD_AddCb ( ( char * ) name , ( uint32_t ) cmd - > callback ) ; // save the sensor callback
return 1 ;
return CMD_AddCb ( name , ( uint32_t ) cmd - > callback ) ; // save the sensor callback
}