chen
2024-09-20 292ed46c6066d47289f1330b1c2bcc6d74761f95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*
 * HIDO_ATLite.h
 *
 *  Created on: 2017Äê9ÔÂ5ÈÕ
 *      Author: YIYI
 */
 
#ifndef _HIDO_ATLITE_H_
#define _HIDO_ATLITE_H_
 
#include "HIDO_TypeDef.h"
#include "HIDO_FSM.h"
 
/* Ö´Ðнá¹ûÃèÊö */
typedef enum
{
    HIDO_AT_EVENT_OK = HIDO_EVENT_EXIT + 1,                                    /* Ö´Ðгɹ¦ */
    HIDO_AT_EVENT_ERROR,                                                       /* Ö´ÐÐʧ°Ü */
    HIDO_AT_EVENT_TIMEOUT,                                                     /* Ö´Ðг¬Ê± */
    HIDO_AT_EVENT_SEND_ERROR,                                                  /* ·¢ËÍʧ°Ü */
    HIDO_AT_EVENT_LAST,
}HIDO_ATEventEnum;
 
typedef struct HIDO_ATLiteDevice HIDO_ATLiteDeviceStruct;
typedef struct HIDO_ATLiteDeviceInitStruct HIDO_ATLiteDeviceInitStruct;
 
/* ATÖ¸ÁÃèÊö */
typedef struct HIDO_ATLiteCmdSet
{
    const HIDO_CHAR *m_pcCmd;
    HIDO_UINT32 m_u32CmdEvent;
}HIDO_ATLiteCmdSetStruct;
 
typedef HIDO_INT32 (*HIDO_ATLiteGetcFunc)(HIDO_ATLiteDeviceStruct *, HIDO_CHAR *);
typedef HIDO_INT32 (*HIDO_ATLiteReadLineFunc)(HIDO_ATLiteDeviceStruct *);
typedef HIDO_INT32 (*HIDO_ATLiteOutputFunc)(HIDO_ATLiteDeviceStruct *, HIDO_UINT8 *, HIDO_UINT32 );
 
#define AT_READ_CHAR_LF                     0x0A
#define AT_READ_CHAR_CR                     0x0D
 
typedef enum
{
    AT_RAED_FLAG_NONE = 0,
    AT_RAED_FLAG_GET_CR,
    AT_RAED_FLAG_GET_LF,
}HIDO_ATReadFlagEnum;
 
/* Çý¶¯³õʼ»¯ÃèÊö */
struct HIDO_ATLiteDeviceInitStruct
{
    HIDO_FSMStruct *m_pstFSM;
    const HIDO_ATLiteCmdSetStruct *m_pstAtSets;                                 /* Ö¸ÁÊ×µØÖ· */
    HIDO_UINT32 m_u32AtSetsCount;                                               /* Ö¸Á¸öÊý */
    HIDO_ATLiteGetcFunc m_fnGetc;
    HIDO_ATLiteReadLineFunc m_fnReadLine;
    HIDO_ATLiteOutputFunc m_fnOutput;
    HIDO_CHAR *m_pcSendBuf;
    HIDO_UINT32 m_u32SendBufSize;
    HIDO_CHAR *m_pcLineBuf;
    HIDO_UINT32 m_u32LineBufSize;
 
    HIDO_VOID *m_pUserData;
};
 
/* Çý¶¯·½·¨ÃèÊö */
struct HIDO_ATLiteDevice
{
    HIDO_ATLiteDeviceStruct *m_pstNext;
    const HIDO_ATLiteCmdSetStruct *m_pstAtSets;                                 /* Ö¸ÁÊ×µØÖ· */
    HIDO_UINT32 m_u32AtSetsCount;                                               /* Ö¸Á¸öÊý */
 
    HIDO_ATLiteGetcFunc m_fnGetc;
    HIDO_ATLiteReadLineFunc m_fnReadLine;
    HIDO_ATLiteOutputFunc m_fnOutput;
 
    HIDO_CHAR *m_pcSendBuf;
    HIDO_UINT32 m_u32SendBufSize;
    HIDO_UINT32 m_u32SendLen;
 
    HIDO_CHAR *m_pcLineBuf;
    HIDO_UINT32 m_u32LineBufSize;
    HIDO_UINT32 m_u32LineLen;
    HIDO_ATReadFlagEnum m_eLineReadFlag;
 
    HIDO_VOID *m_pUserData;
    HIDO_UINT32 m_u32TimerID;
    HIDO_FSMStruct *m_pstFSM;
 
#define HIDO_AT_LITE_MAX_CMD_COUNT                    64                        /* ×î´óATÖ¸Áî¸öÊý */
#define HIDO_AT_LITE_MATCH_FLAG_SET                   0x01                      /* Æ¥Åä±ê¼Ç±»ÉèÖà*/
#define HIDO_AT_LITE_MATCH_FLAG_CLEAR                 0x00                      /* Æ¥Åä±ê¼Ç±»Çå¿Õ */
#define HIDO_AT_LITE_MATCH_END_CHAR                   '\0'                      /* Æ¥Åä½áÊø×Ö·û */
 
    HIDO_UINT8 m_au8MatchFlag[HIDO_AT_LITE_MAX_CMD_COUNT];
};
 
HIDO_VOID HIDO_ATLiteRecvReset(HIDO_ATLiteDeviceStruct *_pstATDevice);
HIDO_VOID HIDO_ATLiteEvent(HIDO_ATLiteDeviceStruct *_pstATDevice, HIDO_UINT32 _u32Event, HIDO_VOID *_pArg);
HIDO_INT32 HIDO_ATLiteCmdSend(HIDO_ATLiteDeviceStruct *_pstATDevice, HIDO_UINT32 _u32TimeoutMs, const HIDO_CHAR *_pcCmdFmt, ...);
HIDO_INT32 HIDO_ATLiteDataSend(HIDO_ATLiteDeviceStruct *_pstATDevice, HIDO_UINT32 _u32TimeoutMs, HIDO_UINT8 *_pu8Data, HIDO_UINT32 _u32Len);
HIDO_INT32 HIDO_ATLiteCmdSendOver(HIDO_ATLiteDeviceStruct *_pstATDevice);
HIDO_VOID HIDO_ATLitePoll(void);
HIDO_VOID HIDO_ATLiteClean(HIDO_ATLiteDeviceStruct *_pstATDevice);
HIDO_VOID HIDO_ATLiteDebugOn(void);
HIDO_VOID HIDO_ATLiteDebugOff(void);
HIDO_BOOL HIDO_ATLiteGetDebugFlag(void);
HIDO_INT32 HIDO_ATLiteDeviceInit(HIDO_ATLiteDeviceStruct *_pstDevice, HIDO_ATLiteDeviceInitStruct *_pstInit);
HIDO_INT32 HIDO_ATLiteDeviceRegister(HIDO_ATLiteDeviceStruct *_pstDevice);
 
#endif /* _HIDO_ATLITE_H_ */