您的位置:首页 > 其它

L200配置工具添加显示IMEI号功能

2018-02-09 11:44 369 查看
要实现的功能就是添加一个”Query IMEI”按钮,工具与模块连接后,当点击这个按钮,会有一个弹出框,并把IMEI号显示在弹出框内。

原理:当点击按钮,会发送一个指令”AT+IMEIQUERY”到模块中,当模块接收到这个指令时,会对应设置好返回一个字符串例如”#IMEI:359865070016863”,我们只需要判断从串口接受到的字符串中是否含有”#IMEI:”字符串,然后截取后面15个数字(IMEI)并显示出来即可.

如下图:



在实现功能的过程中,在IMEI后面出现乱码的情况 主要由以下两个问题导致:

1.调用malloc进行堆中分配内存时,一定要进行手动初始化,比如调用memset函数初始化为0


2.我们调用malloc分配的内存是用来存储IMEI号的,这是一串字符串,后面带‘\0’结束符,IMEI号一共是15位,加上结束符,


一共需要至少16个字节的内存空间。


下面是添加功能的具体步骤:

1. 在资源视图中添加按钮,并编辑好按钮的ID以及按钮显示的名称;



2. 在消息映射表中添加消息响应函数(按钮是点击事件),定义响应函数,在对应头文件中声明响应函数;

映射表中添加

BEGIN_MESSAGE_MAP(SerialCom, CDialog)
ON_BN_CLICKED(IDC_IMEI_QUERY, OnImeiQuery)
END_MESSAGE_MAP()


头文件中添加函数声明

afx_msg void OnImeiQuery();


定义响应函数

void SerialCom::OnImeiQuery()
{
if(!m_bSerialConnected)
{
AfxMessageBox("The connect button not pressed!");
return;
}
char *data_t = "AT+IMEIQUERY";
sendData(data_t);
}


在发送完指令后,从接收串口数据的ComRecvProc()函数中添加判断是否含有回复的指令头字符串

char *pStart, *pEnd, *pIMEI;
//显示IMEI号的处理
CString Show_IMEI;
if((pIMEI=strstr(cData,CFG_UART_IMEI_HEAD)) != NULL)  //#define CFG_UART_IMEI_HEAD      "#IMEI:"
{
char *IMEI = (char *)malloc(16); //在堆中申请16个字节的内存空间
memset(IMEI,0,sizeof(char)*16);//调用malloc()函数申请完内存后需要手动初始化,一般初始化为0
pIMEI+=6; //跳过"#IMEI:"字符串头
memcpy(IMEI,pIMEI,15); //将后面15个数字复制到申请的空间中
Show_IMEI.Format("The IMEI is:%s",IMEI);
//%s代表的是字符串,字符串后面有'\0'结束符,所以实际申请的控件比使用的空间至少要多一个字节
AfxMessageBox(Show_IMEI); //弹出框,显示Show_IMEI的内容
free(IMEI); //调用malloc()函数申请空间后一定要记得调用free()释放
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐