| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- #include "CONFIG.h"
- #if EC800M
- /**
- ******************************************************************************
- * 版 本 :V1.0.0
- * 作 者 :liuyanbin
- * 版权所有,盗版必究。
- * Copyright(C) All rights reserved
- ******************************************************************************
- * 历史记录
- * 序号 版本 变更内容 作者 日期
- * 1 V0.0.1 实现4G注册 刘艳斌 2023/12/20
- * 2 V0.0.2 实现NB注册 刘艳斌 2023/12/20
- * 3 V0.0.3 整合4g和nb 刘艳斌 2024/1/24
- *
- ******************************************************************************
- */
- #include "stm32f10x.h"
- #include "Regist.h"
- #include "ec800m.h"
- #include "INflash.h"
- #include <stdio.h>
- #include <stdarg.h>
- #include <string.h>
- #include <stdlib.h>
- #include "cJSON.h"
- #include "Delay.h"
- #include "mbedtls_util.h"
- #include "Log_Module.h"
- #include "At_Module.h"
- #include "Common_Util.h"
- #include "Tuoreniot.h"
- static uint8_t mcu_id[8]="8945809";
- static uint16_t Version_data = 1032;
- static uint8_t regist_result =0;
- static uint8_t register_status;//注册成功,向flash存储标志
- //unsigned char key[17]="tuorenzhinenghua";
- static Coefficient_Data flashdata;
- static uint8_t tcpconnectID = 2;
- static char * REGIST_SERVER ="8337239yf4.yicp.fun" ; //注册服务器地址
- static uint16_t REGIST_PORT=22155; //端口号
- static char qcciddata[31]={0};//
- //char registData[100] = {0};
- static char recvdata[512]={0};//和registData共用
- //清空flash
- void clearflash(void){
- flashdata.read_flag=0;
- memcpy(flashdata.deviceSecret,"0",40);
- memcpy(flashdata.productKey,"0",20);
- memcpy(flashdata.deviceName,"0",20);
- delay_ms(10);
- STMFLASH_Write(FLASH_SAVE_ADDR,(uint16_t*)&flashdata,sizeof(flashdata));
- }
- void storedata(void){
- flashdata.read_flag=1;
- Log_Printf_Debug("###########\r\n");
- Log_Printf_Debug("deviceSecret:%s,productKey:%s,deviceName:%s,read_flag:%d\r\n",flashdata.deviceSecret,flashdata.productKey,flashdata.deviceName,flashdata.read_flag);
- Log_Printf_Debug("结构体大小: %d\r\n", sizeof(Coefficient_Data));
-
-
- delay_ms(10);
- STMFLASH_Write(FLASH_SAVE_ADDR,(uint16_t*)&flashdata,sizeof(flashdata));
- flashdata.read_flag=0;
- delay_ms(10);
- Log_Printf_Debug("写入数据完成\r\n");
- STMFLASH_Read(FLASH_SAVE_ADDR,(uint16_t*)&flashdata,sizeof(flashdata));
- Log_Printf_Debug("读取完成read_flag:%d,deviceSecret:%s,productKey:%s,deviceName:%s\r\n",flashdata.read_flag,flashdata.deviceSecret,flashdata.productKey,flashdata.deviceName);
- }
- ///**
- //*
- //*注册信息打包
- //*/
- //enum Result packRegistDataAnd(uint8_t *length){
- // enum Result result = Result_None;
- // //
- //// int i=0;
- // int datalen = 0;
- // memset(qcciddata,'\0',sizeof(qcciddata));
- // memset(recvdata,'\0', sizeof(recvdata));
- // char* dataPtr = recvdata+2; //dataPtr指针指向registData第三个字节
- // //复制muid,并转化为16进制
- // byteToHexStr(mcu_id, dataPtr, sizeof(mcu_id));
- // memcpy(dataPtr+strlen(dataPtr),"&",1);
- // //获取qccid
- // AT_Clear();
- // //get_qccid_flag=get_qccid(qcciddata);
- //
- // result=ec800m.query_qccid_sync(qcciddata);
- //
- // if(result==Result_Failed)
- // {
- // return result;
- // }
- // //获取复制qccid
- // memcpy(dataPtr+strlen(dataPtr),qcciddata,31);
- // //复制版本号
- // snprintf(dataPtr+strlen(dataPtr),10,"&%d.%03d",Version_data/1000,Version_data%1000);
- // Log_Printf_Debug("device data:%s,%d\r\n",dataPtr,strlen(dataPtr));//串口打印
- // Log_Printf_Debug("regist data:%s\r\n",recvdata+2);
- // datalen = utils_aes128_ECB_base64_enc_with_length((char *)key,(uint8_t *)dataPtr);
- // recvdata[0] = datalen>>8;//头2个字节赋值数据长度
- // recvdata[1] = datalen;
- // Log_Printf_Debug("strlendata:%d,datalen=%d\r\n",strlen(dataPtr),datalen);
- // *length=datalen+2;
- // return Result_Success;
- //}
- /**
- *
- *注册数据解密
- */
- enum Result analysis_recvdata()
- {
- enum Result result = Result_None;
- unsigned char key[17]="tuorenzhinenghua";
- uint16_t recvdata_length=0;
- cJSON *json = NULL,*json_productKey = NULL,*json_deviceName = NULL,*json_deviceSecret = NULL;
- memset(recvdata, '\0', sizeof(recvdata));
- result =ec800m.recv_with_time_sync(tcpconnectID,(uint8_t *)recvdata,&recvdata_length,10000);
-
- if(result==Result_Failed)
- {
- return result;
- }
- Log_Printf_Debug("recvdata:%d",strlen(recvdata));
- utils_aes128_ECB_base64_dec((char *)key,(unsigned char*)recvdata,recvdata_length);
- Log_Printf_Debug("解密数据recvdata:%s,%d,%d\r\n",recvdata,strlen(recvdata),recvdata_length);
- json = cJSON_Parse(recvdata);
- if(!json)
- {
- Log_Printf_Debug("json parse error,%s\r\n",cJSON_GetErrorPtr());
- cJSON_Delete(json);
- return Result_Failed;
-
- }else{
- json_deviceSecret = cJSON_GetObjectItem(json,"deviceSecret");
- json_productKey = cJSON_GetObjectItem(json,"productKey");
- json_deviceName = cJSON_GetObjectItem(json,"deviceName");
- Log_Printf_Debug("获取数据成功deviceSecret:%s,json_productKey:%s,deviceName:%s\r\n",json_deviceSecret->valuestring,json_productKey->valuestring,json_deviceName->valuestring);
- strcpy(flashdata.deviceSecret,json_deviceSecret->valuestring);
- strcpy(flashdata.productKey,json_productKey->valuestring);
- strcpy(flashdata.deviceName,json_deviceName->valuestring);
- memset(®ister_status, 1, sizeof(register_status));
- cJSON_Delete(json);
-
- return Result_Success;
-
- }
- }
- //4G模块注册流程
- uint8_t regist_Handle()
- {
- uint8_t stat,length=0;
- uint16_t lac,err=0;
- uint32_t ci=0;
- enum Result result = Result_None;
- ec800m.exit_sleep();//退出休眠
- delay_ms(10);
- result=ec800m.set_sleep_sync(1);//设置休眠模式
- if(result==Result_Success)
- {
- result=ec800m.set_cfun_sync(1);//设置全功能模式
- }
-
-
- if(result==Result_Success)
- {
- result=ec800m.set_cgreg_sync(2);//设置网络状态
- }
-
- if(result==Result_Success)
- {
- for(int i=0;i<20;i++){
- delay_ms(400);
- result=ec800m.query_cgreg_sync(®ist_result,&stat,&lac,&ci);//循环查询网络状态最多20次
- if(stat==1)
- {i=20;
-
- }
- }
- }
-
-
- if(result==Result_Success&&stat==1)
- {
- //tcp连接流程
- result=ec800m.open_socket_sync(tcpconnectID,"TCP",REGIST_SERVER,REGIST_PORT,1,&err);//连接tcp
- }
-
-
- if(result==Result_Success)
- {
- result=ec800m.query_qccid_sync(qcciddata);
- }
- if(result==Result_Success)
- {
- memset(qcciddata,'\0',sizeof(qcciddata));
- memset(recvdata,'\0', sizeof(recvdata));
- length = sizeof(mcu_id);
- result =(enum Result)packRegistDataAnd(&length,qcciddata,recvdata,mcu_id,Version_data);//数据打包
- Log_Printf_Debug("data length=%d\r\n", length);
- Log_Printf_Debug("recvdata:%s\r\n", recvdata);
- }
-
-
- if(result==Result_Success)
- {
- result = ec800m.set_qisde_sync(0);//关闭回显
- }
- if(result==Result_Success)
- {
- result =ec800m.send_sync(tcpconnectID,(uint8_t *)recvdata,length);//数据发送
- }
- if(result==Result_Success)
- {
- result =analysis_recvdata();
- }
-
- if(result==Result_Success)
- {
- result=ec800m.close_socket_sync(tcpconnectID);//断开tcp连接
- }
-
-
- ec800m.set_cfun_sync(0);//设置最小功能模式
-
- ec800m.enter_sleep();//进入休眠状态
- if(result==Result_Success)
- {
- return 1;
- }
- else
- {
- return 0;
- }
- }
- uint8_t regist_device_sync(void)
- {
- flashdata.read_flag=0;
- uint8_t regist_flag=0;
- //读取flash
- Log_Printf_Debug("读取前read_flag:%d\r\n",flashdata.read_flag);
- STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)&flashdata,sizeof(flashdata));//读取flash
- delay_ms(10);
- //已经注册。读取flash成功
- if(flashdata.read_flag==1)
- {
- Log_Printf_Debug("读取flash成功read_flag:%d,\ndeviceSecret:%s,\n productKey:%s,\ndeviceName:%s\r\n",flashdata.read_flag,flashdata.deviceSecret,flashdata.productKey,flashdata.deviceName);
- register_status=1;
- return 1;
- }
- //未注册开始注册流程
- regist_flag=regist_Handle();//注册流程
- if(regist_flag==0)//注册流程失败不储存flash
- {
- flashdata.read_flag=0;
- register_status=0;
- clearflash();
- return 0;
- }
- //注册成功向flash储存
- if(register_status==1){
- storedata();//存储到flash
- return 1;
- }
- else
- {
- Log_Printf_Debug("注册失败。。。regist_flag:%d,register_status:%d\r\n",regist_flag,register_status);
- return 0;
- }
-
- }
- enum Regist_Result regist_get_result(void)
- {
- if(register_status){
- return Regist_Result_Success;
- }
- else
- {
- return Regist_Result_Failure;
- }
- }
- char * regist_get_aliyun_productKey(void)
- {
- return flashdata.productKey;
- }
- char * regist_get_aliyun_deviceName(void)
- {
- return flashdata.deviceName;
- }
- char * regist_get_aliyun_deviceSecret(void)
- {
- return flashdata.deviceSecret;
- }
- #endif
|