Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of d7a_1x by
include/d7a_com.h@33:f9a542d3efaa, 2016-06-24 (annotated)
- Committer:
- Jeej
- Date:
- Fri Jun 24 10:11:19 2016 +0000
- Revision:
- 33:f9a542d3efaa
- Parent:
- 31:ab9bfdbc6b44
- Child:
- 34:1311cc53201a
Rewritten parser.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Jeej | 24:a8433b091764 | 1 | #ifndef _D7A_COM_H_ |
| Jeej | 24:a8433b091764 | 2 | #define _D7A_COM_H_ |
| Jeej | 24:a8433b091764 | 3 | |
| Jeej | 24:a8433b091764 | 4 | #include "mbed.h" |
| Jeej | 24:a8433b091764 | 5 | #include "rtos.h" |
| Jeej | 25:aac250164497 | 6 | #include "d7a_common.h" |
| Jeej | 24:a8433b091764 | 7 | |
| Jeej | 24:a8433b091764 | 8 | typedef struct { |
| Jeej | 24:a8433b091764 | 9 | PinName tx; |
| Jeej | 24:a8433b091764 | 10 | PinName rx; |
| Jeej | 24:a8433b091764 | 11 | PinName rts; |
| Jeej | 24:a8433b091764 | 12 | PinName cts; |
| Jeej | 24:a8433b091764 | 13 | uint16_t rx_buffer_size; |
| Jeej | 24:a8433b091764 | 14 | } d7a_com_config_t; |
| Jeej | 24:a8433b091764 | 15 | |
| Jeej | 25:aac250164497 | 16 | typedef enum |
| Jeej | 25:aac250164497 | 17 | { |
| Jeej | 25:aac250164497 | 18 | HAL_ERROR_NONE = 0, |
| Jeej | 25:aac250164497 | 19 | HAL_ERROR_DEFAULT = -1, |
| Jeej | 25:aac250164497 | 20 | HAL_ERROR_MEM_FULL = -2, |
| Jeej | 25:aac250164497 | 21 | HAL_ERROR_MEM_EMPTY = -3, |
| Jeej | 25:aac250164497 | 22 | HAL_ERROR_MODULE_BUSY = -4, |
| Jeej | 25:aac250164497 | 23 | HAL_ERROR_MODULE_OFF = -5, |
| Jeej | 25:aac250164497 | 24 | HAL_ERROR_SERIAL_BAD_SYNC = -100, |
| Jeej | 25:aac250164497 | 25 | HAL_ERROR_SERIAL_BAD_SEQ = -101, |
| Jeej | 25:aac250164497 | 26 | HAL_ERROR_I2C_BAD_DEVID = -200, |
| Jeej | 25:aac250164497 | 27 | HAL_ERROR_I2C_NACK = -201, |
| Jeej | 25:aac250164497 | 28 | HAL_ERROR_I2C_ARB_LOST = -202, |
| Jeej | 25:aac250164497 | 29 | |
| Jeej | 25:aac250164497 | 30 | } hal_error_t; |
| Jeej | 25:aac250164497 | 31 | |
| Jeej | 25:aac250164497 | 32 | /// +--------------+--------+--------+--------+---- - - - - - - - - - - --------+ |
| Jeej | 25:aac250164497 | 33 | /// | SYNC | LEN | SEQ | ID | PAYLOAD | |
| Jeej | 25:aac250164497 | 34 | /// +--------------+--------+--------+--------+---- - - - - - - - - - - --------+ |
| Jeej | 25:aac250164497 | 35 | /// |
| Jeej | 25:aac250164497 | 36 | /// 2 bytes 1 byte 1 byte 1 byte LEN bytes |
| Jeej | 25:aac250164497 | 37 | /// |<------------>|<------>|<------>|<------>|<--- - - - - - - - - - - ------->| |
| Jeej | 25:aac250164497 | 38 | |
| Jeej | 25:aac250164497 | 39 | |
| Jeej | 25:aac250164497 | 40 | // first byte of the sync word |
| Jeej | 25:aac250164497 | 41 | // (ASCII start of heading) |
| Jeej | 25:aac250164497 | 42 | #define KAL_COM_SYNC_BYTE_0 0x01 |
| Jeej | 25:aac250164497 | 43 | |
| Jeej | 25:aac250164497 | 44 | // second byte of the sync word |
| Jeej | 25:aac250164497 | 45 | // (ASCII group separator) |
| Jeej | 25:aac250164497 | 46 | #define KAL_COM_SYNC_BYTE_1 0x1F |
| Jeej | 25:aac250164497 | 47 | |
| Jeej | 25:aac250164497 | 48 | // message header length in byte |
| Jeej | 25:aac250164497 | 49 | #define KAL_COM_HEADER_LEN 5 |
| Jeej | 24:a8433b091764 | 50 | |
| Jeej | 24:a8433b091764 | 51 | |
| Jeej | 25:aac250164497 | 52 | //====================================================================== |
| Jeej | 25:aac250164497 | 53 | // d7a_com_fid_t |
| Jeej | 25:aac250164497 | 54 | //---------------------------------------------------------------------- |
| Jeej | 25:aac250164497 | 55 | /// Enumerator of serial Flow-ids |
| Jeej | 25:aac250164497 | 56 | //====================================================================== |
| Jeej | 25:aac250164497 | 57 | typedef enum |
| Jeej | 25:aac250164497 | 58 | { |
| Jeej | 25:aac250164497 | 59 | /// Trace channel |
| Jeej | 25:aac250164497 | 60 | KAL_COM_FLOWID_TRC = 0, |
| Jeej | 25:aac250164497 | 61 | /// General purpose Command channel |
| Jeej | 25:aac250164497 | 62 | KAL_COM_FLOWID_CMD, |
| Jeej | 25:aac250164497 | 63 | /// ALP channel |
| Jeej | 25:aac250164497 | 64 | KAL_COM_FLOWID_ALP, |
| Jeej | 25:aac250164497 | 65 | /// System notifications |
| Jeej | 25:aac250164497 | 66 | KAL_COM_FLOWID_SYS, |
| Jeej | 25:aac250164497 | 67 | /// File System channel |
| Jeej | 25:aac250164497 | 68 | KAL_COM_FLOWID_FS, |
| Jeej | 24:a8433b091764 | 69 | |
| Jeej | 25:aac250164497 | 70 | KAL_COM_FLOWID_QTY |
| Jeej | 25:aac250164497 | 71 | |
| Jeej | 25:aac250164497 | 72 | } d7a_com_fid_t; |
| Jeej | 25:aac250164497 | 73 | |
| Jeej | 25:aac250164497 | 74 | #define KAL_COM_FLOW(fid,type) ((((fid)&0x7)<<4) | ((type)&0xF)) |
| Jeej | 25:aac250164497 | 75 | #define KAL_COM_FLOWID(id) (((id)>>4)&0x7) |
| Jeej | 25:aac250164497 | 76 | #define KAL_COM_FLOWID_REDIRECT 0x80 |
| Jeej | 25:aac250164497 | 77 | |
| Jeej | 25:aac250164497 | 78 | //====================================================================== |
| Jeej | 25:aac250164497 | 79 | // d7a_com_flow_t |
| Jeej | 25:aac250164497 | 80 | //---------------------------------------------------------------------- |
| Jeej | 25:aac250164497 | 81 | /// Enumerator of serial flows |
| Jeej | 25:aac250164497 | 82 | //====================================================================== |
| Jeej | 25:aac250164497 | 83 | typedef enum |
| Jeej | 25:aac250164497 | 84 | { |
| Jeej | 25:aac250164497 | 85 | /// Default printf type |
| Jeej | 25:aac250164497 | 86 | KAL_COM_FLOW_PRINTF = KAL_COM_FLOW(KAL_COM_FLOWID_TRC,0), |
| Jeej | 25:aac250164497 | 87 | /// Substitute the string by a codeword |
| Jeej | 25:aac250164497 | 88 | /// interpreted by the PC com tool |
| Jeej | 25:aac250164497 | 89 | KAL_COM_FLOW_PRINTF_COMPRESSED = KAL_COM_FLOW(KAL_COM_FLOWID_TRC,1), |
| Jeej | 25:aac250164497 | 90 | /// Display the payload as hex data |
| Jeej | 25:aac250164497 | 91 | KAL_COM_FLOW_PRINT_HEX = KAL_COM_FLOW(KAL_COM_FLOWID_TRC,2), |
| Jeej | 25:aac250164497 | 92 | |
| Jeej | 25:aac250164497 | 93 | /// AT command |
| Jeej | 25:aac250164497 | 94 | KAL_COM_FLOW_AT_CMD = KAL_COM_FLOW(KAL_COM_FLOWID_ALP,0), |
| Jeej | 25:aac250164497 | 95 | /// AT command response |
| Jeej | 25:aac250164497 | 96 | KAL_COM_FLOW_AT_RESP = KAL_COM_FLOW(KAL_COM_FLOWID_ALP,1), |
| Jeej | 25:aac250164497 | 97 | /// AT unsolicited message |
| Jeej | 25:aac250164497 | 98 | KAL_COM_FLOW_AT_UNS = KAL_COM_FLOW(KAL_COM_FLOWID_ALP,2), |
| Jeej | 25:aac250164497 | 99 | /// AT unsolicited error |
| Jeej | 25:aac250164497 | 100 | KAL_COM_FLOW_AT_ERR = KAL_COM_FLOW(KAL_COM_FLOWID_ALP,3), |
| Jeej | 25:aac250164497 | 101 | |
| Jeej | 25:aac250164497 | 102 | /// Remote Commands |
| Jeej | 25:aac250164497 | 103 | KAL_COM_FLOW_CMD = KAL_COM_FLOW(KAL_COM_FLOWID_CMD,0), |
| Jeej | 25:aac250164497 | 104 | |
| Jeej | 25:aac250164497 | 105 | /// Remote System reset |
| Jeej | 25:aac250164497 | 106 | KAL_COM_FLOW_SYS_RST = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,0), |
| Jeej | 25:aac250164497 | 107 | /// Button Emulator |
| Jeej | 25:aac250164497 | 108 | KAL_COM_FLOW_SYS_BUTTON = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,1), |
| Jeej | 25:aac250164497 | 109 | /// Dump Debug parameters |
| Jeej | 25:aac250164497 | 110 | KAL_COM_FLOW_SYS_INFO = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,2), |
| Jeej | 25:aac250164497 | 111 | /// CUP signalisation |
| Jeej | 25:aac250164497 | 112 | KAL_COM_FLOW_SYS_CUP = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,3), |
| Jeej | 25:aac250164497 | 113 | /// Ping distant COM |
| Jeej | 25:aac250164497 | 114 | KAL_COM_FLOW_SYS_PING = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,4), |
| Jeej | 25:aac250164497 | 115 | /// Pong from distant COM |
| Jeej | 25:aac250164497 | 116 | KAL_COM_FLOW_SYS_PONG = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,5), |
| Jeej | 25:aac250164497 | 117 | /// Enable system config from distant COM |
| Jeej | 25:aac250164497 | 118 | KAL_COM_FLOW_SYS_CFG = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,6), |
| Jeej | 25:aac250164497 | 119 | /// Configure Output Trace level from distant COM |
| Jeej | 25:aac250164497 | 120 | KAL_COM_FLOW_SYS_TLEV = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,7), |
| Jeej | 25:aac250164497 | 121 | /// Configure COM port redirection |
| Jeej | 25:aac250164497 | 122 | KAL_COM_FLOW_SYS_REDIR = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,8), |
| Jeej | 30:d775c1409849 | 123 | /// Flow control signalling |
| Jeej | 30:d775c1409849 | 124 | KAL_COM_FLOW_SYS_XON = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,9), |
| Jeej | 30:d775c1409849 | 125 | KAL_COM_FLOW_SYS_XOFF = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,10), |
| Jeej | 30:d775c1409849 | 126 | KAL_COM_FLOW_SYS_XACK = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,11), |
| Jeej | 25:aac250164497 | 127 | |
| Jeej | 25:aac250164497 | 128 | /// File System Command/Response |
| Jeej | 25:aac250164497 | 129 | KAL_COM_FLOW_FS_CMD = KAL_COM_FLOW(KAL_COM_FLOWID_FS,0), |
| Jeej | 25:aac250164497 | 130 | KAL_COM_FLOW_FS_RESP = KAL_COM_FLOW(KAL_COM_FLOWID_FS,1), |
| Jeej | 30:d775c1409849 | 131 | |
| Jeej | 25:aac250164497 | 132 | } d7a_com_flow_t; |
| Jeej | 25:aac250164497 | 133 | |
| Jeej | 25:aac250164497 | 134 | |
| Jeej | 25:aac250164497 | 135 | //====================================================================== |
| Jeej | 25:aac250164497 | 136 | // d7a_com_tx_msg_t |
| Jeej | 25:aac250164497 | 137 | //---------------------------------------------------------------------- |
| Jeej | 25:aac250164497 | 138 | /// Transmit message structure |
| Jeej | 25:aac250164497 | 139 | //====================================================================== |
| Jeej | 24:a8433b091764 | 140 | typedef struct |
| Jeej | 24:a8433b091764 | 141 | { |
| Jeej | 25:aac250164497 | 142 | /// identifier d7a_com_flow_t |
| Jeej | 25:aac250164497 | 143 | uint8_t id; |
| Jeej | 25:aac250164497 | 144 | /// length of the string buffer defined by a pointer |
| Jeej | 25:aac250164497 | 145 | uint8_t plen; |
| Jeej | 25:aac250164497 | 146 | /// length of the allocated buffer |
| Jeej | 25:aac250164497 | 147 | uint8_t alen; |
| Jeej | 25:aac250164497 | 148 | /// pointer to a string buffer that does not need to be freed |
| Jeej | 25:aac250164497 | 149 | uint8_t* pbuf; |
| Jeej | 25:aac250164497 | 150 | /// pointer to argument that does not need to be freed |
| Jeej | 25:aac250164497 | 151 | uint8_t* abuf; |
| Jeej | 25:aac250164497 | 152 | |
| Jeej | 25:aac250164497 | 153 | } d7a_com_tx_msg_t; |
| Jeej | 25:aac250164497 | 154 | |
| Jeej | 25:aac250164497 | 155 | //====================================================================== |
| Jeej | 25:aac250164497 | 156 | // d7a_com_rx_msg_t |
| Jeej | 25:aac250164497 | 157 | //---------------------------------------------------------------------- |
| Jeej | 25:aac250164497 | 158 | /// Receive message structure |
| Jeej | 25:aac250164497 | 159 | //====================================================================== |
| Jeej | 25:aac250164497 | 160 | typedef struct |
| Jeej | 25:aac250164497 | 161 | { |
| Jeej | 25:aac250164497 | 162 | /// error message |
| Jeej | 25:aac250164497 | 163 | hal_error_t err; |
| Jeej | 25:aac250164497 | 164 | /// length of the log (string) buffer |
| Jeej | 25:aac250164497 | 165 | uint8_t blen; |
| Jeej | 25:aac250164497 | 166 | /// identifier d7a_com_flow_t |
| Jeej | 25:aac250164497 | 167 | uint8_t id; |
| Jeej | 25:aac250164497 | 168 | /// Com port where the message came from |
| Jeej | 25:aac250164497 | 169 | uint8_t com_id; |
| Jeej | 25:aac250164497 | 170 | /// pointer to the log buffer |
| Jeej | 25:aac250164497 | 171 | uint8_t buffer[1]; |
| Jeej | 25:aac250164497 | 172 | |
| Jeej | 25:aac250164497 | 173 | } d7a_com_rx_msg_t; |
| Jeej | 25:aac250164497 | 174 | |
| Jeej | 24:a8433b091764 | 175 | |
| Jeej | 24:a8433b091764 | 176 | void d7a_com_open( const d7a_com_config_t* config ); |
| Jeej | 24:a8433b091764 | 177 | void d7a_com_close(); |
| Jeej | 31:ab9bfdbc6b44 | 178 | void d7a_com_send_msg(d7a_com_tx_msg_t* msg); |
| Jeej | 30:d775c1409849 | 179 | void d7a_com_dump(uint8_t* buf, uint8_t len, d7a_com_flow_t flow); |
| Jeej | 25:aac250164497 | 180 | d7a_com_rx_msg_t* d7a_com_wait_pkt( uint32_t millisec = osWaitForever ); |
| Jeej | 33:f9a542d3efaa | 181 | void d7a_com_flush_rx(void); |
| Jeej | 24:a8433b091764 | 182 | |
| Jeej | 24:a8433b091764 | 183 | #endif // _D7A_COM_H_ |
