mirror of
https://gitee.com/moluo-tech/AT-Command
synced 2025-06-17 16:07:52 +00:00
112 lines
4.3 KiB
C
112 lines
4.3 KiB
C
![]() |
/*******************************************************************************
|
|||
|
* @file at.h
|
|||
|
* @brief AT<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD>Ź<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
*
|
|||
|
* @version 5.0
|
|||
|
* @date 2020-05-11
|
|||
|
* @author roger.luo
|
|||
|
*
|
|||
|
* Change Logs:
|
|||
|
* Date Author Notes
|
|||
|
* 2016-01-22 roger.luo Initial version.
|
|||
|
* 2017-05-21 roger.luo 1.1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* 2018-02-11 roger.luo 3.0
|
|||
|
* 2020-01-02 roger.luo 4.0 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>os<EFBFBD>汾
|
|||
|
*******************************************************************************/
|
|||
|
#ifndef _AT_H_
|
|||
|
#define _AT_H_
|
|||
|
|
|||
|
#include "at_util.h"
|
|||
|
#include "list.h"
|
|||
|
#include <stdbool.h>
|
|||
|
|
|||
|
#define MAX_AT_CMD_LEN 64
|
|||
|
|
|||
|
struct at_obj; /*AT<41><54><EFBFBD><EFBFBD>*/
|
|||
|
|
|||
|
/*urc<72><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -----------------------------------------------------------------*/
|
|||
|
typedef struct {
|
|||
|
const char *prefix; //URCǰ
|
|||
|
void (*handler)(char *recvbuf, int size);
|
|||
|
}utc_item_t;
|
|||
|
|
|||
|
/*AT<41><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -------------------------------------------------------------------*/
|
|||
|
typedef struct {
|
|||
|
/*<2A><><EFBFBD>ݶ<EFBFBD>д<EFBFBD>ӿ<EFBFBD> -----------------------------------------------------------*/
|
|||
|
unsigned int (*read)(void *buf, unsigned int len);
|
|||
|
unsigned int (*write)(const void *buf, unsigned int len);
|
|||
|
void (*debug)(const char *fmt, ...);
|
|||
|
utc_item_t *utc_tbl; /*utc <20><>*/
|
|||
|
char *urc_buf; /*urc<72><63><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
unsigned short urc_tbl_count;
|
|||
|
unsigned short urc_bufsize; /*urc<72><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С*/
|
|||
|
}at_conf_t;
|
|||
|
|
|||
|
/*AT<41><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6> ---------------------------------------------------------------*/
|
|||
|
typedef enum {
|
|||
|
AT_RET_OK = 0, /*ִ<>гɹ<D0B3>*/
|
|||
|
AT_RET_ERROR, /*ִ<>д<EFBFBD><D0B4><EFBFBD>*/
|
|||
|
AT_RET_TIMEOUT, /*<2A><>Ӧ<EFBFBD><D3A6>ʱ*/
|
|||
|
AT_RET_ABORT, /*δ֪<CEB4><D6AA><EFBFBD><EFBFBD>*/
|
|||
|
}at_return;
|
|||
|
|
|||
|
/*AT<41><54>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD> -----------------------------------------------------------------*/
|
|||
|
typedef struct {
|
|||
|
const char *matcher; /*<2A><><EFBFBD><EFBFBD>ƥ<EFBFBD>䴮*/
|
|||
|
char *recvbuf; /*<2A><><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
unsigned short bufsize; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD><D5B3><EFBFBD>*/
|
|||
|
unsigned int timeout; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1> */
|
|||
|
}at_respond_t;
|
|||
|
|
|||
|
/*AT<41><54>ҵ ---------------------------------------------------------------------*/
|
|||
|
typedef struct at_work_env{
|
|||
|
struct at_obj *at;
|
|||
|
void *params;
|
|||
|
unsigned int (*write)(const void *buf, unsigned int len);
|
|||
|
unsigned int (*read)(void *buf, unsigned int len);
|
|||
|
|
|||
|
void (*printf)(struct at_obj *at, const char *frm, ...);
|
|||
|
at_return (*wait_resp)(struct at_obj *at, const char *resp, unsigned int timeout);
|
|||
|
void (*recvclr)(struct at_obj *at); /*<2A><><EFBFBD>ս<EFBFBD><D5BD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
}at_work_env_t;
|
|||
|
|
|||
|
/*AT<41><54><EFBFBD><EFBFBD> ---------------------------------------------------------------------*/
|
|||
|
typedef struct at_obj {
|
|||
|
struct list_head node;
|
|||
|
at_conf_t cfg;
|
|||
|
at_work_env_t env;
|
|||
|
at_sem_t cmd_lock; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
at_sem_t completed; /*<2A><><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
at_respond_t *resp;
|
|||
|
unsigned int resp_timer;
|
|||
|
unsigned int urc_timer;
|
|||
|
at_return ret;
|
|||
|
//urc<72><63><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
unsigned short urc_cnt, rcv_cnt;
|
|||
|
unsigned char wait : 1;
|
|||
|
unsigned char suspend: 1;
|
|||
|
unsigned char dowork : 1;
|
|||
|
}at_obj_t;
|
|||
|
|
|||
|
typedef int (*at_work)(at_work_env_t *);
|
|||
|
|
|||
|
void at_obj_create(at_obj_t *at, const at_conf_t cfg); /*AT<41><54>ʼ<EFBFBD><CABC>*/
|
|||
|
|
|||
|
void at_obj_destroy(at_obj_t *at);
|
|||
|
|
|||
|
bool at_obj_busy(at_obj_t *at);
|
|||
|
|
|||
|
void at_suspend(at_obj_t *at); /*<2A><><EFBFBD><EFBFBD>*/
|
|||
|
|
|||
|
void at_resume(at_obj_t *at); /*<2A>ָ<EFBFBD>*/
|
|||
|
|
|||
|
at_return at_do_cmd(at_obj_t *at, at_respond_t *r, const char *cmd);
|
|||
|
|
|||
|
int at_split_respond_lines(char *recvbuf, char *lines[], int count);
|
|||
|
|
|||
|
int at_do_work(at_obj_t *at, at_work work, void *params); /*ִ<><D6B4>AT<41><54>ҵ*/
|
|||
|
|
|||
|
void at_thread(void); /*AT<41>߳<EFBFBD>*/
|
|||
|
|
|||
|
#endif
|