Trond Enger / d7a_1x

Fork of d7a_1x by WizziLab

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?

UserRevisionLine numberNew 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_