小编dan*_*man的帖子

写GSM调制解调器驱动程序?

我一直在研究一种使用GSM调制解调器的应用程序,用于以下两种方式之一; 通过向服务器发送GET请求或将数据发送到服务器(使用UDP),使用内置HTTP堆栈检查其状态.我已经尝试了几种不同的方法来保持尽可能可靠,我终于准备寻求帮助了.

我的应用程序是为SIMCOM908模块和PIC18平台编写的(我使用PIC18 Explorer进行开发).

所以问题是有时候调制解调器忙于做某事,而错过命令.作为一个人,我会看到并只是重新发送命令.为我的MCU添加设施以进行超时和重新发送不是问题.

问题是调制解调器在不同事件之后发送未经请求的响应.当调制解调器改变注册状态(与蜂窝塔一起)时,它将响应+CGREG: 1, ...GPS或准备就绪时GPS Ready.这些响应可以随时发生,包括在命令中间(如创建IP连接).

这是一个问题,因为我没有想过要解决这个问题的方法.我的应用程序需要发送命令(例如,连接到服务器AT+CIPSTART="UDP","example.com",5000),此命令将以"OK"响应,然后当命令完成"CONNECT OK"时.但是,我需要能够对许多其他可能的响应作出反应,而我还没有找到一种方法.我的代码需要做什么; 等待来自调制解调器的响应,检查响应,根据该响应执行操作?

我是代码有限的(是一个8位微控制器!),并希望将重复保持在最低限度.如何编写响应函数,从GSM模块(征求或现在)获取响应,然后让我的程序的其余部分知道发生了什么?

理想情况下,我想对这些回复做些什么.就像保持一个内部状态(当我听到GPS Ready,我知道我可以为GPS等供电

也许有一些我应该考虑的事情,或者可能有一个开源项目已经解决了这个问题?

这是我到目前为止所拥有的:

/* Command responses */
enum {
    // Common
    OK = 0,
    ERROR,
    TIMEOUT,
    OTHER,
    // CGREG
    NOT_REGISTERED,
    // CGATT
    NOT_ATTACHED,
    // Network Status
    NO_NETWORK,
    // GPRS status
    NO_ADDRESS,
    // HTTP ACTION
    NETWORK_ERROR,
    // IP Stack State
    IP_INITIAL,
    IP_STATUS,
    IP_CONFIG,
    UDP_CLOSING,
    UDP_CLOSED,
    UDP_CONNECTING
} gsmResponse;

int gsm_sendCommand(const char * cmd) {
    unsigned long timeout = timer_getCurrentTime() …
Run Code Online (Sandbox Code Playgroud)

c modem gsm pic gprs

10
推荐指数
1
解决办法
3943
查看次数

标签 统计

c ×1

gprs ×1

gsm ×1

modem ×1

pic ×1