Trond Enger / d7a_1x

Fork of d7a_1x by WizziLab

Committer:
Jeej
Date:
Thu Sep 01 09:35:27 2016 +0000
Revision:
45:b85384e7d825
Parent:
44:8ebe6b70f932
Child:
49:81d5bddb02f0
New API working for local read/write.

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