| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413 |
- /********************************************************************************
- * File Name: MainTask.c
- * Function Describe:The main task for the system
- * Relate Module:
- * Explain: Hardware version is HS121
- * Writer: ShiLiangWen
- * Date: 2015.7.8
- *******************************************************************************/
- #define THIS_FILE_ID 7
- //---------------------------------------------------------------------------------
- #include "includes.h"
- //OS ID
- OS_TID idMainTask=0;
- U64 stkMainTask[MAIN_TASK_STK_SIZE];
- //=====================================
- unsigned char g_ucUart1Activated;
- //-----
- #ifdef USE_RUNNING_MAKE
- void RunningMake(unsigned short FileID,unsigned long line)
- {
- g_usFileID=FileID;
- g_ulFileLine=line;
- }
- #endif
- unsigned short g_usFileID=0;
- unsigned long g_ulFileLine=0;
- unsigned char g_ucSystemReset=0;
-
-
- /*******************************************************************
- *GetParaFromStr
- *从Str中找到Para=后面至';'或非字符的字串并放入Value
- 返回Value的长度
- 举例:Str="GT+SMP=IP=192.168.1.1;Port=12345"
- 如果Para="Port" 则Value将被赋值为"12345",并返回5
- 如果Para="IP" 则Value将被赋值为"192.168.1.1",并返回11
- 要求Para长度不大于20字节 ,Value长度不大于40字节
- ********************************************************************/
- int GetParaFromStr(char *Str,char *Para,char *Value)
- {
- int ValueLen=0,ParaLen=0;
- char ParaTemp[22];
- char *p;
- char d;
- int i=0;
- if(0==*Str || 0==*Para)return 0;
- while(0!=(d=*Para) && ParaLen<20)
- {
- ParaTemp[i++]=d;
- if(d=='=' || d==';')return 0;
- Para++;
- ParaLen++;
- }
- ParaTemp[ParaLen++]='=';
- ParaTemp[ParaLen]=0;
- p=strstr(Str,ParaTemp);
- p+=ParaLen;
- //--
- while(*p>0x20 && ';'!=*p && ValueLen<40)
- {
- *Value=*p;
- p++;
- Value++;
- ValueLen++;
- }
- *Value=0;
- return ValueLen;
- }
-
-
- /***********************************************
- 强制复位
- ************************************************/
- void SystemReset(void)
- {
- g_ucSystemReset=1;
- SlwTrace(DEBUG,"Reboot now!\r\n");
- while(1);
- }
- unsigned char AscToHex(unsigned char aHex)
- {
- if((aHex>=0)&&(aHex<=9))
- aHex += 0x30;
- else if((aHex>=10)&&(aHex<=15))//A-F
- //aHex += 0x37;
- aHex += 0x57;
- else aHex = 0xff;
- return aHex;
- }
- void AscStrToHexStr(char *AscStr, char *HexStr)
- {
- char *pAscStr=AscStr;
- unsigned char d,h,l;
- while(0!=(d=(unsigned char)*pAscStr++)){
- l=d&0x0f;
- h=d>>4;
- *HexStr++=AscToHex(h);
- *HexStr++=AscToHex(l);
- }
- *HexStr=0;
- }
- void PcMsgHandle(char *msg)
- {
- const char *CmdList[]={
- "TM", //调试Modem
- "SWFI", //set wifiID and wifiPwd
- "RWFI",
- "SMP", //set IP and PSN
- "RMP",
- "XH", //set info
- "DEBUG",
- "NODEBUG",
- ""//必须以空字串为结束
- };
- unsigned short Port;
- unsigned long PSN,AKEY;
- char buf[100];
- char strIP[40];
- int i,j,temp,len;
- char flag;
- const char *pCmd;
- char *pMsg;
- int CmdListNum=0;
- RunMake(THIS_FILE_ID);
- pMsg = msg;
- while(*CmdList[CmdListNum++]);//计算命令列表个数
- CmdListNum--;
- RunMake(THIS_FILE_ID);
- //查找与命令列表相同的命令位置
- for(i=0;i<CmdListNum;i++){
- pCmd=CmdList[i];
- pMsg=&msg[3];
- flag=0;
- j=0;
- while(*pCmd){
- if(*pCmd!=*pMsg){
- flag=1;
- break;
- }
- pCmd++;
- pMsg++;
- j++;
- }
- if(!flag){
- break;
- }
- }
- RunMake(THIS_FILE_ID);
-
- if(i==CmdListNum)return;
-
- //处理命令
-
- switch(i)
- {
-
- case 0://"RT+TM"
- SlwTrace(INF,"RT+TM:OK\r\n");
- ComSelect(COM_SEL_MODEM);
- break;
-
- case 1://"SWFI",
- len=GetParaFromStr(msg,"ID",buf);
- if(len<1 || len>=40){
- break;
- }
- strcpy(sutProductPara.Wifi_ID,buf);
-
- len=GetParaFromStr(msg,"PWD",buf);
- if(len==0){
- SlwTrace(INF,"PWD is null");
- break;
- }
- strcpy(sutProductPara.Wifi_Pwd,buf);
- SaveProductParaToFlash();
-
- break;
-
- case 2: //"RWFI"
- snprintf(buf, sizeof(buf),"RT+RWFI:ID=%s;PWD=%s",sutProductPara.Wifi_ID,sutProductPara.Wifi_Pwd);
- SlwTrace(INF,buf);
-
- break;
- case 3://"SMP" GT+SMP=IP=地址或域名;Port=端口号;PSN=终端序列号
-
- len=GetParaFromStr(msg,"IP",buf);
- if(len<1 || len>=40){
- //SlwTrace(INF,"GT+SMP:FAIL[IP Invalid]",1);
- break;
- }
- strcpy(strIP,buf);
-
- len=GetParaFromStr(msg,"Port",buf);
- if(len==0)Port=0;
- else if(len>5){
- //SlwTrace(INF,"GT+SMP:FAIL[Port Invalid]",1);
- break;
- }else{
- Port=atoi(buf);
- }
- len=GetParaFromStr(msg,"PSN",buf);
- if(len<1 || len>10){
- //SlwTrace(INF,"GT+SMP:FAIL[PSN Invalid]",1);
- break;
- }else{
- PSN=atol(buf);
- }
- //PSN
- sutProductPara.PSN=PSN;
- strcpy(sutProductPara.SIP,strIP);
- sutProductPara.Port=Port;
- SaveProductParaToFlash();
- break;
-
- case 4://RMP
- snprintf(buf, sizeof(buf),"RT+RMP:PSN=%lu;Port=%d,IP=%s",sutProductPara.PSN,sutProductPara.Port,sutProductPara.SIP);
- SlwTrace(INF,buf);
- break;
- // case 5://SADDR
- // len=GetParaFromStr(msg,"ADDR",buf);
- // sutProductPara.addr=atoi(buf);
- // SaveProductParaToFlash();
- // break;
- // case 6://RADDR
- // snprintf(buf, sizeof(buf),"RT+RADDR:ADDR=%d",sutProductPara.addr);
- // SlwTrace(INF,buf);
- // break;
-
- case 5:
- snprintf(buf, sizeof(buf),"RT+XH\r\n");
- SlwTrace(INF,buf);
- g_ucModemTaskEn=1;//进入写号模式
-
- break;
-
- case 6 :
- snprintf(buf, sizeof(buf),"RT+DEBUG\r\n");
- SlwTrace(INF,buf);
- sutProductPara.Debug=1;
- SaveProductParaToFlash();
- break;
- case 7 :
- snprintf(buf, sizeof(buf),"RT+NODEBUG\r\n");
- SlwTrace(INF,buf);
- sutProductPara.Debug=0;
- SaveProductParaToFlash();
- break;
- default:
-
- break;
-
- }
- RunMake(THIS_FILE_ID);
-
- // //AB CD E5 02 54 4D 32 5C
- // if(msg[0]=='T' && msg[1]=='M'){//0x544D
- // printf("----TM----\r\n");
- //
- // ComSelect(COM_SEL_MODEM);
- // }
-
- }
- void ShowHex(unsigned char *pData,unsigned char len)
- {
- char temp[5];
- char buf[100];
- int i;
- if(len>(sizeof(buf)-3))len=(sizeof(buf)-3);
- buf[0]=0;
- for(i=0;i<len;i++){
- sprintf(temp,"%02X",(int)pData[i]);
- strcat(buf,temp);
- }
- strcat(buf,"\r\n");
- SlwTrace(DEBUG,buf);
- }
- /*******************************************************************
- *MainTask
- *主任务
- ********************************************************************/
- __task void MainTask(void)
- {
- static unsigned int sucCt=0;
- static char flag=0;
- char tracebuf[20];
- //Obtain own system task identification number. */
-
- AuthIng=0;
- Uart1Init();
- authLink();
- AuthIng=1;
-
- idMainTask = os_tsk_self();
- LedInit();
-
- LedProcess(1);
- ReadProductParaFromFlash();//读取产品参数
-
- //Uart1Init();
- SlwTrace(DEBUG,"UART init OK\r\n");
- SlwTrace(DEBUG,sutProductPara.ProductName);
-
- sprintf(tracebuf,"_V%d\r\n",sutProductPara.ProductVersion);
-
- SlwTrace(DEBUG,tracebuf);
- sprintf(tracebuf,"PSN=%lu\r\n",sutProductPara.PSN);
- SlwTrace(DEBUG,tracebuf);
- Reg_Init();
- sprintf(tracebuf,"NetMode=%d\r\n",sutDeviceConfig.NetMode);
- SlwTrace(DEBUG,tracebuf);
- // sprintf(tracebuf,"NetMode=%d\r\n",sutDeviceConfig.NetMode);
- // SlwTrace(DEBUG,tracebuf);
- FEED_EXTWATCHDOG();
- idModemUartTask=os_tsk_create_user(ModemUartTask,3,&stkModemUartTask,sizeof(stkModemUartTask));
- FEED_EXTWATCHDOG();
-
- idModemTask=os_tsk_create_user(ModemTask,3,&stkModemTask,sizeof(stkModemTask));
- FEED_EXTWATCHDOG();
- idWLanTask=os_tsk_create_user(WiredLanTask,5,&stkWLANTask,sizeof(stkWLANTask));
- FEED_EXTWATCHDOG();
- RunMake(THIS_FILE_ID);
-
-
- while(1){
- LedProcess(0);
- os_dly_wait(1);
- if(g_ucUARTSel==COM_SEL_MODEM && g_ucModemTaskEn==0){
- //RT+TM透传模式
- if(g_ucUARTSel==COM_SEL_MODEM && g_usUart1RecvLen>0){
- //printf("rxbuffer1===%s,len==%d\r\n",RxBuffer1,g_usUart1RecvLen);
- Uart2Send((char *)RxBuffer1,g_usUart1RecvLen);
- g_usUart1RecvLen=0;
- }
- }else if(g_usUart1RecvLen){
- //正常模式下,处理UART1发过来的命令
- g_ucUart1Activated=1; //串口一有数据过来
-
- if(RxBuffer1[0]==0xAA && RxBuffer1[1]==0xBB&& g_ucModemTaskEn==0){//处理485 从机过来的数据
-
- ModbusRecvProcess(RxBuffer1);
- }else if(RxBuffer1[0]=='R' && RxBuffer1[1]=='T' && RxBuffer1[2]=='+'){//处理电脑发过来的RT指令数据包
-
- PcMsgHandle((char *)RxBuffer1);
- }
- memset(RxBuffer1,0,sizeof(RxBuffer1));
- g_usUart1RecvLen=0;
- }
- /********************是否扫描3次以保证确定从机个数,从而减少扫描所用时长*******************************/
- //第一次扫描在线从机个数,及地址存储。 (还是说每次隔一段时间扫描个数)
- //已经登录且不处于发送状态时候查询。
- if(sut_sys_status.Logined==1&&sut_sys_status.OnceFlag==0 &&sut_sys_status.SetSlaveing==0&& sut_sys_status.Resend==0) ModbusRefreshValue();
-
- /*****************一秒一次*******************/
- //ModbusCmdReadOneValue(0x0C); // 测试485查询
- // if(os_time_get() < sucCt) continue;
- // sucCt = os_time_get()+100;
- // if(flag){
- // Device_Down.sut_device_write[12].Addr=12;
- // Device_Down.sut_device_write[12].STU_RGB[6].R=1;
- // Device_Down.sut_device_write[12].STU_RGB[6].G=0;
- // Device_Down.sut_device_write[12].STU_RGB[6].B=0;
- // Device_Down.sut_device_write[12].STU_RGB[7].R=1;
- // Device_Down.sut_device_write[12].STU_RGB[7].G=0;
- // Device_Down.sut_device_write[12].STU_RGB[7].B=0;
- // ModbusCmdSetValue(&Device_Down.sut_device_write[12]);
- // flag=!flag;
- // }else{
- // Device_Down.sut_device_write[12].Addr=12;
- // Device_Down.sut_device_write[12].STU_RGB[6].R=0;
- // Device_Down.sut_device_write[12].STU_RGB[6].G=1;
- // Device_Down.sut_device_write[12].STU_RGB[6].B=0;
- // Device_Down.sut_device_write[12].STU_RGB[7].R=0;
- // Device_Down.sut_device_write[12].STU_RGB[7].G=1;
- // Device_Down.sut_device_write[12].STU_RGB[7].B=0;
- // ModbusCmdSetValue(&Device_Down.sut_device_write[12]);
- // flag=!flag;
- // }
- if(os_time_get() < sucCt) continue;
- sucCt = os_time_get()+100;
- FEED_EXTWATCHDOG();
- IWDG_ReloadCounter();
-
- //ModbusCmdReadOneValue(0xff);
- //SlwTrace(DEBUG,"main while \r\n");
- }
-
- }
|