通过AT指令配置CAT1 4G模组

CAT1是一款网口转串口的模组,支持socket连接。

真正在使用的过程中,需要对其进行配置。【通过AT指令】

因此便在程序中写了一套配置流程,仅供参考。【因为我懒得整理了,拿来记录一下大致思路就可以了】

基本顺序很简单:发送查询->判断接收->配置->查询 如此往复

config.h

#ifndef __CONFIGCAT_H
#define __CONFIGCAT_H

#include "gd32f30x.h"
#include <stdbool.h>

typedef struct {
	bool configdefault;
	//config OK flag
	bool ConfigInitFlag;
	//status flag
	bool ConfigMode;
	//timer count
	uint32_t ConfigDefaultTime;
	//config step control
	uint8_t ConfigDefaultCount;
	//recieve process
	bool configrecieveflag;
	uint32_t RecieveBufferLength;
	uint8_t RecieveBuffer[128];
}Cat1_Config_struct;

typedef struct {
		char *readbuf;
		char *recievebuf;
		char *configbuf;
}Cat1_Config_Data_struct;

bool bconfigcatInit(void);

bool vconfigcatDefaultConfigInit(void);


#endif   //__CONFIGCAT_H

configcat.c

#include "main.h"
#include "../User/BSP/ASHINING/ashining.h"
#include "../User/FUN/config/configcat.h"
#include "../User/FUN/inforeport/inforeport.h"
#include "../User/FUN/config/configfunction.h"

//main.c
extern Authority_union Authority;
//buzzer.c
extern Buzzer_Struct Buzzer;
//DataStorage
extern ControllerFun_union ControllerFun;
//timer.c
extern Timer_struct FlechazoTimer;

extern uint8_t heartpackagebuffer[28];

//config cat1
Cat1_Config_struct Cat1_Config;

//----------------------------------//
const char configCat_1[] = "+++";
const char configCat_2[] = "AT\r\n";
const char configCat_1_r[] = "\r\n+OK\r\n";
const char configCat_exit[] = "AT+EXAT\r\n\r\n";
const char configCat_rebt[] = "AT+REBT\r\n\r\n";
//----------------------------------//
//----------------------------------//
#define CAT1_CONFIG_DATA_STRUCT_GROUP 12

uint8_t configcount;
bool sendorrecieveflag;
Cat1_Config_Data_struct Cat1_Config_Data[CAT1_CONFIG_DATA_STRUCT_GROUP];


#if (USE_BIT_4_CONTROLLER_ID==1)
char socketheartbeat[8][128]={"\r\n+OK=0,\"regist\",1,3,1,FB006000010000CCCC0000000000042307EBA1FE,0\r\n",\
			"\r\n+OK=1,\"regist\",1,3,1,FB006000010000CCCC0000000000042307EBA1FE,0\r\n",\
			"\r\n+OK=2,\"regist\",1,3,1,FB006000010000CCCC0000000000042307EBA1FE,0\r\n",\
			"\r\n+OK=3,\"regist\",1,3,1,FB006000010000CCCC0000000000042307EBA1FE,0\r\n",\
			"AT+SOCK=0,\"regist\",1,3,1,FB006000010000CCCC0000000000042307EBA1FE,0\r\n",\
			"AT+SOCK=1,\"regist\",1,3,1,FB006000010000CCCC0000000000042307EBA1FE,0\r\n",\
			"AT+SOCK=2,\"regist\",1,3,1,FB006000010000CCCC0000000000042307EBA1FE,0\r\n",\
			"AT+SOCK=3,\"regist\",1,3,1,FB006000010000CCCC0000000000042307EBA1FE,0\r\n"};
#else //(USE_BIT_4_CONTROLLER_ID==1)
char socketheartbeat[8][128]={"\r\n+OK=0,\"regist\",1,3,1,FB006000010000CCCCCCCCCCCC000000000000000000000000EBA1FE,0\r\n",\
			"\r\n+OK=1,\"regist\",1,3,1,FB006000010000CCCCCCCCCCCC000000000000000000000000EBA1FE,0\r\n",\
			"\r\n+OK=2,\"regist\",1,3,1,FB006000010000CCCCCCCCCCCC000000000000000000000000EBA1FE,0\r\n",\
			"\r\n+OK=3,\"regist\",1,3,1,FB006000010000CCCCCCCCCCCC000000000000000000000000EBA1FE,0\r\n",\
			"AT+SOCK=0,\"regist\",1,3,1,FB006000010000CCCCCCCCCCCC000000000000000000000000EBA1FE,0\r\n",\
			"AT+SOCK=1,\"regist\",1,3,1,FB006000010000CCCCCCCCCCCC000000000000000000000000EBA1FE,0\r\n",\
			"AT+SOCK=2,\"regist\",1,3,1,FB006000010000CCCCCCCCCCCC000000000000000000000000EBA1FE,0\r\n",\
			"AT+SOCK=3,\"regist\",1,3,1,FB006000010000CCCCCCCCCCCC000000000000000000000000EBA1FE,0\r\n"};
#endif //(USE_BIT_4_CONTROLLER_ID==1)

char socketheartbeat_f[64];
/***********************************************************
*@fuction	:bconfigcatInit
*@brief		:
*@param		:--
*@return	:void
*@author	:flechazo
*@date		:2023-07-13
***********************************************************/
bool bconfigcatInit(void){
	
	Cat1_Config_Data[0].readbuf = "AT+SOCK=0,\"base\"?\r\n";
	Cat1_Config_Data[0].recievebuf = "\r\n+OK=0,\"base\",1,0,1,0,118.89.116.58,8090\r\n";
	Cat1_Config_Data[0].configbuf = "AT+SOCK=0,\"base\",1,0,1,0,118.89.116.58,8090\r\n";
	
	Cat1_Config_Data[1].readbuf = "AT+SOCK=1,\"base\"?\r\n";
	Cat1_Config_Data[1].recievebuf = "\r\n+OK=1,\"base\",1,0,1,0,139.196.207.98,3866\r\n";
	Cat1_Config_Data[1].configbuf = "AT+SOCK=1,\"base\",1,0,1,0,139.196.207.98,3866\r\n";
	
	Cat1_Config_Data[2].readbuf = "AT+SOCK=2,\"base\"?\r\n";
	Cat1_Config_Data[2].recievebuf = "\r\n+OK=2,\"base\",1,0,1,0,47.103.195.0,6683\r\n";
	Cat1_Config_Data[2].configbuf = "AT+SOCK=2,\"base\",1,0,1,0,47.103.195.0,6683\r\n";
	
	Cat1_Config_Data[3].readbuf = "AT+SOCK=3,\"base\"?\r\n";
	Cat1_Config_Data[3].recievebuf = "\r\n+OK=3,\"base\",1,0,1,0,1w511862l9.goho.co,31697\r\n";
	Cat1_Config_Data[3].configbuf = "AT+SOCK=3,\"base\",1,0,1,0,1w511862l9.goho.co,31697\r\n";
	
	//flush heart package
	//uint2char(heartpackagebuffer,socketheartbeat_f,26);
	uint32_t socketheart_len=2*(5+2*DEVID_LEN+7);
	hex_to_ascii(heartpackagebuffer,socketheartbeat_f,socketheart_len);
	vdatastorageCopyArray((uint8_t *)socketheartbeat_f,((uint8_t *)socketheartbeat[0]+23),socketheart_len);
	vdatastorageCopyArray((uint8_t *)socketheartbeat_f,((uint8_t *)socketheartbeat[1]+23),socketheart_len);
	vdatastorageCopyArray((uint8_t *)socketheartbeat_f,((uint8_t *)socketheartbeat[2]+23),socketheart_len);
	vdatastorageCopyArray((uint8_t *)socketheartbeat_f,((uint8_t *)socketheartbeat[3]+23),socketheart_len);
	vdatastorageCopyArray((uint8_t *)socketheartbeat_f,((uint8_t *)socketheartbeat[4]+25),socketheart_len);
	vdatastorageCopyArray((uint8_t *)socketheartbeat_f,((uint8_t *)socketheartbeat[5]+25),socketheart_len);
	vdatastorageCopyArray((uint8_t *)socketheartbeat_f,((uint8_t *)socketheartbeat[6]+25),socketheart_len);
	vdatastorageCopyArray((uint8_t *)socketheartbeat_f,((uint8_t *)socketheartbeat[7]+25),socketheart_len);
	
	Cat1_Config_Data[4].readbuf = "AT+SOCK=0,\"regist\"?\r\n";
	Cat1_Config_Data[4].recievebuf = socketheartbeat[0];
	Cat1_Config_Data[4].configbuf = socketheartbeat[4];
	
	Cat1_Config_Data[5].readbuf = "AT+SOCK=1,\"regist\"?\r\n";
	Cat1_Config_Data[5].recievebuf = socketheartbeat[1];
	Cat1_Config_Data[5].configbuf = socketheartbeat[5];
	
	Cat1_Config_Data[6].readbuf = "AT+SOCK=2,\"regist\"?\r\n";
	Cat1_Config_Data[6].recievebuf = socketheartbeat[2];
	Cat1_Config_Data[6].configbuf = socketheartbeat[6];
	
	Cat1_Config_Data[7].readbuf = "AT+SOCK=3,\"regist\"?\r\n";
	Cat1_Config_Data[7].recievebuf = socketheartbeat[3];
	Cat1_Config_Data[7].configbuf = socketheartbeat[7];
	
	Cat1_Config_Data[8].readbuf = "AT+SOCK=0,\"keep/alive\"?\r\n";
	Cat1_Config_Data[8].recievebuf = "\r\n+OK=0,\"keep/alive\",0,0,0,KeepAlive,60\r\n";
	Cat1_Config_Data[8].configbuf = "AT+SOCK=0,\"keep/alive\",0,0,0,KeepAlive,60\r\n";
	
	Cat1_Config_Data[9].readbuf = "AT+SOCK=1,\"keep/alive\"?\r\n";
	Cat1_Config_Data[9].recievebuf = "\r\n+OK=1,\"keep/alive\",0,0,0,KeepAlive,60\r\n";
	Cat1_Config_Data[9].configbuf = "AT+SOCK=1,\"keep/alive\",0,0,0,KeepAlive,60\r\n";
	
	Cat1_Config_Data[10].readbuf = "AT+SOCK=2,\"keep/alive\"?\r\n";
	Cat1_Config_Data[10].recievebuf = "\r\n+OK=2,\"keep/alive\",0,0,0,KeepAlive,60\r\n";
	Cat1_Config_Data[10].configbuf = "AT+SOCK=2,\"keep/alive\",0,0,0,KeepAlive,60\r\n";
	
	Cat1_Config_Data[11].readbuf = "AT+SOCK=3,\"keep/alive\"?\r\n";
	Cat1_Config_Data[11].recievebuf = "\r\n+OK=3,\"keep/alive\",0,0,0,KeepAlive,60\r\n";
	Cat1_Config_Data[11].configbuf = "AT+SOCK=3,\"keep/alive\",0,0,0,KeepAlive,60\r\n";
						
	return true;
}



/***********************************************************
*@fuction	:uiconfigcatGetCharPlength
*@brief		:
*@param		:--
*@return	:void
*@author	:flechazo
*@date		:2023-07-13
***********************************************************/

uint32_t uiconfigcatGetCharPlength(char *data){
	static uint32_t len=0;
	for(len=0;len<128;len++){
		if((data[len]==0x0D)&&(data[len+1]==0x0A)&&(data[len+2]==0x00)){
			len+=3;
			return len;
		}
	}
	return 0;
}



/***********************************************************
*@fuction	:varray_move_forward
*@brief		:
*@param		:--
*@return	:void
*@author	:flechazo
*@date		:2023-07-12
***********************************************************/

void varray_move_forward(uint8_t *arr, int length, int movlen)
{
    for(int i = 0; i < (length - movlen); i++)
    {
        arr[i] = arr[i + movlen];
    }
}

/***********************************************************
*@fuction	:uconfigcatfind_recieve_head
*@brief		:
*@param		:--
*@return	:void
*@author	:flechazo
*@date		:2023-07-12
***********************************************************/

uint8_t *uconfigcatfind_recieve_head(uint8_t *data)
{
    for(int i = 0; i < 128; i++)
    {
        if(data[i] == 0x0D)
        {
            //find head
            if(i > 0)
            {
                varray_move_forward(data, 128, i);
            }
            break;
        }
    }
    return data;
}

/***********************************************************
*@fuction	:vconfigcatDefaultConfigInit
*@brief		:
*@param		:--
*@return	:void
*@author	:flechazo
*@date		:2023-07-12
***********************************************************/

bool vconfigcatDefaultConfigInit(void)
{
    //funenable
    if(!ControllerFun.Info.configdefaultcat)
    {
        return false;
    }

    //init flag
    if(Cat1_Config.ConfigInitFlag)
    {
        return true;
    }

    if(FlechazoTimer.Control.IsTimeOut_s(&Cat1_Config.ConfigDefaultTime, 2))
    {
        switch(Cat1_Config.ConfigDefaultCount)
        {
        //start config
        //1、+++
        case 0:
        {
            Cat1_Config.ConfigMode = true;
            vrs485Send((uint8_t *)configCat_1, sizeof(configCat_1)-1);
            vusart0Send((uint8_t *)configCat_1, sizeof(configCat_1)-1);
						configcount=0;
						sendorrecieveflag=false;
            Cat1_Config.ConfigDefaultCount++;
        }
        break;
        //recieve +OK
        case 1:
        {
            if(Cat1_Config.configrecieveflag)
            {
                //check data
                if(vdatastorageCheckArraySame((uint8_t *)configCat_1_r, uconfigcatfind_recieve_head(Cat1_Config.RecieveBuffer), sizeof(configCat_1_r)-1))
                {
                    //same
                    Cat1_Config.ConfigDefaultCount++;
                }
                else
                {
                    //dif
                    //return false;
                    //Cat1_Config.ConfigDefaultCount--;
                    //config

                }
                vrs485Send(Cat1_Config.RecieveBuffer, sizeof(configCat_1_r));
                Cat1_Config.configrecieveflag = false;
            }
            else
            {
                //no recieve
                Cat1_Config.ConfigDefaultCount++;
            }
        }
        break;
        //2、AT\r\n
        case 2:
        {
            vrs485Send((uint8_t *)configCat_2, sizeof(configCat_2)-1);
            vusart0Send((uint8_t *)configCat_2, sizeof(configCat_2)-1);
            Cat1_Config.ConfigDefaultCount++;
        }
        break;
        //recieve +OK
        case 3:
        {
            if(Cat1_Config.configrecieveflag)
            {
                //check data
                if(vdatastorageCheckArraySame((uint8_t *)configCat_1_r, uconfigcatfind_recieve_head(Cat1_Config.RecieveBuffer), sizeof(configCat_1_r)-1))
                {
                    //same init config
	            bconfigcatInit();
		    //limit other send
		    ControllerFun.Info.heartbeat = false;
		    //goto next step
                    Cat1_Config.ConfigDefaultCount++;
                }
                else
                {
                    //dif
                    //return false;
                    //Cat1_Config.ConfigDefaultCount--;
                    //config

                }
                vrs485Send(Cat1_Config.RecieveBuffer, sizeof(configCat_1_r));
                Cat1_Config.configrecieveflag = false;
            }
            else
            {
                //no recieve
                Cat1_Config.ConfigDefaultCount--;
            }
        }
        break;
        //3、config 12 group 
        case 4:
        {
		if(sendorrecieveflag){
		//to check data
		if(Cat1_Config.configrecieveflag){
		//recieve
			if(vdatastorageCheckArraySame((uint8_t *)Cat1_Config_Data[configcount].recievebuf, uconfigcatfind_recieve_head(Cat1_Config.RecieveBuffer), uiconfigcatGetCharPlength(Cat1_Config_Data[configcount].recievebuf)-1)){
				//to next config option
				configcount++;
				if(configcount>=CAT1_CONFIG_DATA_STRUCT_GROUP){
					printf("\r\n----------complete cat1 config----------\r\n");
					//complete config
					configcount=0;
					Cat1_Config.ConfigDefaultCount++;
				}
			}else{
				printf("\r\n----------start config cat1 default %d----------\r\n",configcount);
				//to config 
				vrs485Send((uint8_t *)Cat1_Config_Data[configcount].configbuf, uiconfigcatGetCharPlength(Cat1_Config_Data[configcount].configbuf)-1);
				vusart0Send((uint8_t *)Cat1_Config_Data[configcount].configbuf, uiconfigcatGetCharPlength(Cat1_Config_Data[configcount].configbuf)-1);
				//to read again
				sendorrecieveflag = false;
			}
				printf("\r\n----------read cat1 config flow %d----------\r\n",configcount);
				vrs485Send(uconfigcatfind_recieve_head(Cat1_Config.RecieveBuffer), uiconfigcatGetCharPlength(((char *)Cat1_Config.RecieveBuffer)));
				Cat1_Config.configrecieveflag = false;
			}else{
				//no recieve
				printf("\r\n----------can't read cat1 config %d----------\r\n",configcount);
				sendorrecieveflag=false;
			}
		}else{
			//to send cmd
			printf("\r\n----------start read cat1 config %d----------\r\n",configcount);
			vrs485Send((uint8_t *)Cat1_Config_Data[configcount].readbuf, uiconfigcatGetCharPlength(Cat1_Config_Data[configcount].readbuf)-1);
			vusart0Send((uint8_t *)Cat1_Config_Data[configcount].readbuf, uiconfigcatGetCharPlength(Cat1_Config_Data[configcount].readbuf)-1);
			sendorrecieveflag=true;
		}
        }
        break;
	case 5:
	{
            vrs485Send((uint8_t *)configCat_exit, sizeof(configCat_exit)-1);
            vusart0Send((uint8_t *)configCat_exit, sizeof(configCat_exit)-1);
            Cat1_Config.ConfigDefaultCount++;
	}
	break;
	//exit 
        case 6:
        {
            if(Cat1_Config.configrecieveflag)
            {
                //check data
                if(vdatastorageCheckArraySame((uint8_t *)configCat_1_r, uconfigcatfind_recieve_head(Cat1_Config.RecieveBuffer), sizeof(configCat_1_r)-1))
                {
                    //same
                    Cat1_Config.ConfigDefaultCount++;
                }
                else
                {
                    //dif
                    //return false;
                    Cat1_Config.ConfigDefaultCount--;
                    //config

                }
                vrs485Send(Cat1_Config.RecieveBuffer, sizeof(configCat_1_r));
                Cat1_Config.configrecieveflag = false;
            }
            else
            {
                //no recieve
                Cat1_Config.ConfigDefaultCount--;
            }
        }
        break;
        case 7:
        {
		//config complete
		Cat1_Config.ConfigInitFlag = true;
		ControllerFun.Info.heartbeat = true;
        }
	break;
        }
        Cat1_Config.ConfigDefaultTime = FlechazoTimer.Control.GetCurrentTime_s();
    }
    return true;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FlechazoCLF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值