#include #include #include #include #include #include "syssvc/serial.h" #include "syssvc/syslog.h" #include "kernel_cfg.h" #include "monitor.h" #include "device.h" #include "kpu_main.h" /* * デバイスコマンド番号 */ static int_t led_func(int argc, char **argv); #ifdef USE_PINGSEND static int_t png_func(int argc, char **argv); #endif extern int iothub_client_main(int argc, char **argv); extern int dps_csgen_main(int argc, char *argv[]); extern int set_cs_main(int argc, char **argv); extern int set_proxy_main(int argc, char **argv); extern int clear_proxy_main(int argc, char **argv); extern int set_wifi_main(int argc, char **argv); /* * デバイスコマンドテーブル */ static const COMMAND_INFO device_command_info[] = { {"LED", led_func}, #ifdef USE_PINGSEND {"PING", png_func}, #endif {"IOT", iothub_client_main}, {"CSGEN", dps_csgen_main}, {"SETCS", set_cs_main}, {"PROXY", set_proxy_main}, {"CPRX", clear_proxy_main}, {"WIFI", set_wifi_main}, }; #define NUM_DEVICE_CMD (sizeof(device_command_info)/sizeof(COMMAND_INFO)) static const char device_name[] = "DEVICE"; static const char device_help[] = " Device LED (no) (on-1,off-0) led control\n" #ifdef USE_PINGSEND " PING addr send ping \n" #endif " IOT connect azure\n" " CSGEN provision device\n" " SETCS set connection string\n" " PROXY set proxy \n" " CPRX clear proxy \n" " WIFI set ssid pwd \n"; static const uint16_t led_pattern[] = { LED_G_PIN, LED_R_PIN, LED_B_PIN, }; static COMMAND_LINK device_command_link = { NULL, NUM_DEVICE_CMD, device_name, NULL, device_help, &device_command_info[0] }; static int a2i(char *str) { int num = 0; while(*str >= '0' && *str <= '9'){ num = num * 10 + *str++ - '0'; } return num; } /* * DEVICEコマンド設定関数 */ void device_info_init(intptr_t exinf) { setup_command(&device_command_link); } /* * LED設定コマンド関数 */ static int_t led_func(int argc, char **argv) { int_t arg1=0, arg2; if(argc < 3) return -1; arg1 = a2i(argv[1]); arg2 = a2i(argv[2]); if(arg1 >= 1 && arg1 <= sizeof(led_pattern) / sizeof(led_pattern[0])){ if(arg2 != 0) { digitalWrite(led_pattern[arg1-1], LOW); syslog(LOG_NOTICE, "digitalWrite(%d,LOW)", arg1); } else { digitalWrite(led_pattern[arg1-1], HIGH); syslog(LOG_NOTICE, "digitalWrite(%d,HIGH)", arg1); } } else{ syslog(LOG_NOTICE, "LED %d is not arival.", arg1); } return 0; } #ifdef USE_PINGSEND /* * PING送信マンド関数 */ static int_t png_func(int argc, char **argv) { const char *addr; uint32_t paddr = 0; int a, i; if(argc < 2) return -1; addr = argv[1]; for(i = a = 0 ; i < 4 ; addr++){ if(*addr <= '9' && *addr >= '0'){ a *= 10; a += *addr - '0'; } else{ paddr |= a << (i * 8); a = 0; i++; } if(*addr == 0) break; } set_pingaddr(paddr); return 0; } #endif