Trond Enger / d7a_1x

Fork of d7a_1x by WizziLab

Committer:
Jeej
Date:
Tue Sep 06 15:23:39 2016 +0000
Revision:
52:c7a58fc48bd2
Parent:
49:81d5bddb02f0
Updated comments

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 52:c7a58fc48bd2 26 // +--------------+--------+--------+--------+---- - - - - - - - - - - --------+
Jeej 52:c7a58fc48bd2 27 // | SYNC | LEN | SEQ | ID | PAYLOAD |
Jeej 52:c7a58fc48bd2 28 // +--------------+--------+--------+--------+---- - - - - - - - - - - --------+
Jeej 52:c7a58fc48bd2 29 //
Jeej 52:c7a58fc48bd2 30 // 2 bytes 1 byte 1 byte 1 byte LEN bytes
Jeej 52:c7a58fc48bd2 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 52:c7a58fc48bd2 49 // Enumerator of serial Flow-ids
Jeej 25:aac250164497 50 //======================================================================
Jeej 25:aac250164497 51 typedef enum
Jeej 25:aac250164497 52 {
Jeej 52:c7a58fc48bd2 53 // Trace channel
Jeej 25:aac250164497 54 KAL_COM_FLOWID_TRC = 0,
Jeej 52:c7a58fc48bd2 55 // General purpose Command channel
Jeej 25:aac250164497 56 KAL_COM_FLOWID_CMD,
Jeej 52:c7a58fc48bd2 57 // ALP channel
Jeej 25:aac250164497 58 KAL_COM_FLOWID_ALP,
Jeej 52:c7a58fc48bd2 59 // System notifications
Jeej 25:aac250164497 60 KAL_COM_FLOWID_SYS,
Jeej 52:c7a58fc48bd2 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 52:c7a58fc48bd2 75 // Enumerator of serial flows
Jeej 25:aac250164497 76 //======================================================================
Jeej 25:aac250164497 77 typedef enum
Jeej 25:aac250164497 78 {
Jeej 52:c7a58fc48bd2 79 // Default printf type
Jeej 25:aac250164497 80 KAL_COM_FLOW_PRINTF = KAL_COM_FLOW(KAL_COM_FLOWID_TRC,0),
Jeej 52:c7a58fc48bd2 81 // Substitute the string by a codeword
Jeej 52:c7a58fc48bd2 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 52:c7a58fc48bd2 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 52:c7a58fc48bd2 87 // AT command
Jeej 25:aac250164497 88 KAL_COM_FLOW_AT_CMD = KAL_COM_FLOW(KAL_COM_FLOWID_ALP,0),
Jeej 52:c7a58fc48bd2 89 // AT command response
Jeej 25:aac250164497 90 KAL_COM_FLOW_AT_RESP = KAL_COM_FLOW(KAL_COM_FLOWID_ALP,1),
Jeej 52:c7a58fc48bd2 91 // AT unsolicited message
Jeej 25:aac250164497 92 KAL_COM_FLOW_AT_UNS = KAL_COM_FLOW(KAL_COM_FLOWID_ALP,2),
Jeej 52:c7a58fc48bd2 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 52:c7a58fc48bd2 96 // Remote Commands
Jeej 25:aac250164497 97 KAL_COM_FLOW_CMD = KAL_COM_FLOW(KAL_COM_FLOWID_CMD,0),
Jeej 25:aac250164497 98
Jeej 52:c7a58fc48bd2 99 // Remote System reset
Jeej 25:aac250164497 100 KAL_COM_FLOW_SYS_RST = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,0),
Jeej 52:c7a58fc48bd2 101 // Button Emulator
Jeej 25:aac250164497 102 KAL_COM_FLOW_SYS_BUTTON = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,1),
Jeej 52:c7a58fc48bd2 103 // Dump Debug parameters
Jeej 25:aac250164497 104 KAL_COM_FLOW_SYS_INFO = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,2),
Jeej 52:c7a58fc48bd2 105 // CUP signalisation
Jeej 25:aac250164497 106 KAL_COM_FLOW_SYS_CUP = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,3),
Jeej 52:c7a58fc48bd2 107 // Ping distant COM
Jeej 25:aac250164497 108 KAL_COM_FLOW_SYS_PING = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,4),
Jeej 52:c7a58fc48bd2 109 // Pong from distant COM
Jeej 25:aac250164497 110 KAL_COM_FLOW_SYS_PONG = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,5),
Jeej 52:c7a58fc48bd2 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 52:c7a58fc48bd2 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 52:c7a58fc48bd2 115 // Configure COM port redirection
Jeej 25:aac250164497 116 KAL_COM_FLOW_SYS_REDIR = KAL_COM_FLOW(KAL_COM_FLOWID_SYS,8),
Jeej 52:c7a58fc48bd2 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 52:c7a58fc48bd2 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 52:c7a58fc48bd2 132 // Transmit message structure
Jeej 25:aac250164497 133 //======================================================================
Jeej 24:a8433b091764 134 typedef struct
Jeej 24:a8433b091764 135 {
Jeej 52:c7a58fc48bd2 136 // identifier d7a_com_flow_t
Jeej 25:aac250164497 137 uint8_t id;
Jeej 52:c7a58fc48bd2 138 // length of the string buffer defined by a pointer
Jeej 25:aac250164497 139 uint8_t plen;
Jeej 52:c7a58fc48bd2 140 // length of the allocated buffer
Jeej 25:aac250164497 141 uint8_t alen;
Jeej 52:c7a58fc48bd2 142 // pointer to a string buffer that does not need to be freed
Jeej 25:aac250164497 143 uint8_t* pbuf;
Jeej 52:c7a58fc48bd2 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 52:c7a58fc48bd2 152 // Receive message structure
Jeej 25:aac250164497 153 //======================================================================
Jeej 25:aac250164497 154 typedef struct
Jeej 25:aac250164497 155 {
Jeej 52:c7a58fc48bd2 156 // error message
Jeej 25:aac250164497 157 hal_error_t err;
Jeej 52:c7a58fc48bd2 158 // length of the log (string) buffer
Jeej 25:aac250164497 159 uint8_t blen;
Jeej 52:c7a58fc48bd2 160 // identifier d7a_com_flow_t
Jeej 25:aac250164497 161 uint8_t id;
Jeej 52:c7a58fc48bd2 162 // Com port where the message came from
Jeej 25:aac250164497 163 uint8_t com_id;
Jeej 52:c7a58fc48bd2 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 49:81d5bddb02f0 170 d7a_errors_t d7a_com_open( const d7a_com_config_t* config );
Jeej 49:81d5bddb02f0 171 d7a_errors_t 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_