AT-Command/at.h

109 lines
4.3 KiB
C
Raw Normal View History

2020-09-26 13:50:55 +00:00
/******************************************************************************
* @brief AT<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD>Ź<EFBFBD><EFBFBD><EFBFBD>(OS<EFBFBD>)
*
2020-12-04 12:54:26 +00:00
* Copyright (c) 2020, <morro_luo@163.com>
2020-09-26 13:50:55 +00:00
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2020-01-02 Morro Initial version.
******************************************************************************/
2020-09-22 14:14:09 +00:00
#ifndef _AT_H_
#define _AT_H_
#include "at_util.h"
#include "list.h"
#include <stdbool.h>
#define MAX_AT_CMD_LEN 128
2020-09-22 14:14:09 +00:00
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>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ---------------------------------------------------------------*/
2020-09-22 14:14:09 +00:00
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; /* urc<72><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
unsigned short urc_bufsize; /* urc<72><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С*/
}at_adapter_t;
2020-09-22 14:14:09 +00:00
/*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> */
2020-09-22 14:14:09 +00:00
}at_respond_t;
/*AT<41><54>ҵ ---------------------------------------------------------------------*/
typedef struct at_work_env {
2020-09-22 14:14:09 +00:00
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_adapter_t adap;
2020-09-22 14:14:09 +00:00
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 at_return (*at_work)(at_work_env_t *);
2020-09-22 14:14:09 +00:00
void at_obj_create(at_obj_t *at, const at_adapter_t *adap); /*AT<41><54>ʼ<EFBFBD><CABC>*/
2020-09-22 14:14:09 +00:00
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, char separator);
2020-09-22 14:14:09 +00:00
at_return at_do_work(at_obj_t *at, at_work work, void *params);/*ִ<><D6B4>AT<41><54>ҵ*/
2020-09-22 14:14:09 +00:00
void at_thread(void); /*AT<41>߳<EFBFBD>*/
#endif