int startLyCloudService(char* token,char* configStr) { int ret = -1; if(!token || !configStr) { printf("token or configstring is NULL\n"); return -1; } if(workFlag.msgid == -1)//防止多次调用 { deviceConfigInit(&endPointConfig);//初始化配置相关结构体 //创建消息队列处理以平台发过来的消息 if((workFlag.msgid = createMsgId('h')) != -1) { if(pthread_create(&workFlag.pidMsgProc,NULL,msgProc,NULL) != 0) { //失败则不能响应平台的消息,应该退出程序 printf("create msgProc thread failed\n"); return -1; } } //创建工作模式更改处理线程 ret = pthread_create(&workFlag.pidWork,NULL,configChangeProc,NULL); if(ret != 0) { printf("start configChangeProc thread failed\n");//创建线程失败将不能响应工作模式改变处理 } while(1) { //开启云平台服务,并注册消息回调函数,调用此函数之后才能调用云平台的其他函数,第四个参数为对接厂商自定义数据,没有则不填 ret = LY_startCloudService(token,configStr,popMessage,NULL); if(ret == 0)//返回0表示开启成功 { break; } printf("StartCloudService failed! ret = %d retry...\n",ret ); sleep(1); } printf("start lingyang cloud service success\n"); } return 0; }
int main(int argc,char** argv) { int num = -1,mode = 0, val = 1,time = 0; for(;;) { int index,c; c = getopt_long(argc,argv,short_options,long_options,&index); if(c == -1) break; switch (c) { case 0: break; case 't': sscanf(optarg, "%d", &time); break; case 'h': default: usage(argv[0]); break; } } if(time == 0) { time = 500; } int status; //./snx_gpio_ctl -n 2 -m 0 -v 0 gpio_pin_info info; info.pinumber = 2;//重置管脚 info.mode = 0; info.value = 1; int i = 0; //gpio_ms1 -n 7 -m 1 -v 1;opus_play -i /etc/notify/reset.opus;gpio_ms1 -n 7 -m 1 -v 0;播放提示在声波程序里面 char* cmd[] = { "rm -f /etc/SNIP39/wpa_supplicant.conf /etc/init.d/uid /etc/init.d/hashid;", "killall -9 updmgr;", "killall -9 push_360;", "killall -9 wpa_supplicant;", "killall -9 udhcpc;", "rm -f /etc/init.d/CloudService_*;",//如果有日志则删除日志 "/bin/gpio_led -n 0 -m 1 -v 0;", "/bin/gpio_led -n 1 -m 1 -v 0;", "/bin/gpio_led -n 3 -m 1 -v 0;" }; char run[64] = {0};//{"/etc/init.d/Voice2ConfigWifi"}; int reset = 0; myMsg rcvMsg; msgid = createMsgId(RESET_MSG_SUB_ID); printf("360_reset msgid=%d\n",msgid); snx_gpio_open(); while (1) { if(snx_gpio_write(info) == GPIO_FAIL) { printf ("write gpio%d error\n",2); sleep(3); } else { break; } } while (1) { //if(info.mode == 0) { info.value = 1; snx_gpio_read(&info); //printf("after snx_gpio_read errno=%d\n",errno); if(info.value == 0) { #ifdef CHANGAN int i = 100; while (i) { snx_gpio_read(&info); if(info.value == 1) { break; } i--; usleep(10 * 1000); } if(i == 0) #endif //printf("==>>>>>>>>>>>>>>>>>>>>>>>>>>>>>get reset signal\n"); reset = 1;//硬件reset memset(run,0,64); sprintf(run,"%s%d%s","/etc/init.d/Voice2ConfigWifi ",reset,";"); } } if(msgrcv(msgid,&rcvMsg,sizeof(rcvMsg),0,IPC_NOWAIT|MSG_NOERROR) != -1) { //printf("360_reset recv msg = %d\n",rcvMsg.type); //if(errno == 0 && rcvMsg.type == RESET_MSG_TYPE)// && errno != ENOMSG) { reset = 2;//解绑 //printf("===============get debind signal\n"); memset(run,0,64); memset(&rcvMsg,0,sizeof(rcvMsg)); sprintf(run,"%s%d%s","/etc/init.d/Voice2ConfigWifi ",reset,";"); } } if(reset == 1 || reset == 2) { printf("360_reset reset=%d\n",reset); reset = 0; i = 0; for(; i<8; i++)//依次执行shell脚本 { int j = 3; do { status = system(cmd[i]); if (-1 == status) { printf("system error!"); usleep(3000); } else { if (WIFEXITED(status)) //正确退出 { if (0 == WEXITSTATUS(status)) //操作成功 { printf("run %s successfully.\n",cmd[i]); break; } else if(i < 5)//操作失败//灭灯不打印失败。 { printf("run %s script fail, script exit code: %d\n",cmd[i],WEXITSTATUS(status)); } } else //错误退出 { printf("exit status = [%d]\n", WEXITSTATUS(status)); } } } while (i<5 && j--); } status = system(run); printf("run config status=%d\n",status); } usleep(1000*time); } snx_gpio_close(); return 0; }