Trond Enger / d7a_1x

Fork of d7a_1x by WizziLab

Committer:
Jeej
Date:
Thu Sep 01 18:13:46 2016 +0000
Revision:
46:665391110051
Parent:
45:b85384e7d825
Child:
49:81d5bddb02f0
Point to point implemented. Need to support several commands at the same time.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 43:28202405094d 1 #ifndef _D7A_ALP_H_
Jeej 43:28202405094d 2 #define _D7A_ALP_H_
Jeej 43:28202405094d 3
Jeej 43:28202405094d 4
Jeej 43:28202405094d 5 #define ALP_CTRL_GROUP 0x80
Jeej 43:28202405094d 6 #define ALP_CTRL_RESP 0x40
Jeej 43:28202405094d 7 #define ALP_CTRL_OVERLOAD 0x80
Jeej 43:28202405094d 8 #define ALP_CTRL_INDIRECT 0x40
Jeej 43:28202405094d 9 #define ALP_CTRL_EOP 0x80
Jeej 43:28202405094d 10 #define ALP_CTRL_ERR 0x40
Jeej 43:28202405094d 11
Jeej 43:28202405094d 12
Jeej 43:28202405094d 13 typedef enum {
Jeej 43:28202405094d 14 // OPCODE | OPERAND
Jeej 43:28202405094d 15 ALP_OPCODE_NOP = 0, //| -
Jeej 43:28202405094d 16
Jeej 43:28202405094d 17 ALP_OPCODE_F_RD_DATA = 1, //| FDR
Jeej 43:28202405094d 18 ALP_OPCODE_F_RD_PROP = 2, //| FID
Jeej 43:28202405094d 19
Jeej 43:28202405094d 20 ALP_OPCODE_F_WR_DATA = 4, //| FD
Jeej 43:28202405094d 21 ALP_OPCODE_F_WR_FLUSH = 5, //| FD
Jeej 43:28202405094d 22 ALP_OPCODE_F_WR_PROP = 6, //| FD
Jeej 43:28202405094d 23
Jeej 43:28202405094d 24 ALP_OPCODE_QUERY = 8, //| Q
Jeej 43:28202405094d 25 ALP_OPCODE_QBREAK = 9, //| Q
Jeej 43:28202405094d 26 ALP_OPCODE_PERM_REQ = 10, //| P
Jeej 43:28202405094d 27
Jeej 43:28202405094d 28 ALP_OPCODE_CRC_CHECK = 11, //| Q
Jeej 43:28202405094d 29
Jeej 43:28202405094d 30 ALP_OPCODE_F_EXIST = 16, //| FID
Jeej 43:28202405094d 31 ALP_OPCODE_F_CREATE = 17, //| FD
Jeej 43:28202405094d 32 ALP_OPCODE_F_DELETE = 18, //| FID
Jeej 43:28202405094d 33 ALP_OPCODE_F_RESTORE = 19, //| FID
Jeej 43:28202405094d 34 ALP_OPCODE_F_FLUSH = 20, //| FID
Jeej 43:28202405094d 35 ALP_OPCODE_F_OPEN = 21, //| FID
Jeej 43:28202405094d 36 ALP_OPCODE_F_CLOSE = 22, //| FID
Jeej 43:28202405094d 37 ALP_OPCODE_F_COPY = 23, //| 2xFID
Jeej 43:28202405094d 38 ALP_OPCODE_F_EXECUTE = 31, //| FID
Jeej 43:28202405094d 39
Jeej 43:28202405094d 40 ALP_OPCODE_RSP_F_DATA = 32, //| FD
Jeej 43:28202405094d 41 ALP_OPCODE_RSP_F_PROP = 33, //| FH
Jeej 43:28202405094d 42 ALP_OPCODE_RSP_STATUS = 34, //| S
Jeej 43:28202405094d 43 ALP_OPCODE_RSP_ISTATUS = ALP_OPCODE_RSP_STATUS + (1 << 6), //| SI
Jeej 43:28202405094d 44 ALP_OPCODE_RSP_TAG = 35, //| PID
Jeej 43:28202405094d 45 ALP_OPCODE_RSP_EOPTAG = ALP_OPCODE_RSP_TAG + (2 << 6), //| PID
Jeej 43:28202405094d 46 ALP_OPCODE_RSP_ERRTAG = ALP_OPCODE_RSP_TAG + (1 << 6), //| PID
Jeej 43:28202405094d 47
Jeej 43:28202405094d 48 ALP_OPCODE_CHUNK = 48, //| -
Jeej 43:28202405094d 49 ALP_OPCODE_LOGIC = 49, //| -
Jeej 43:28202405094d 50 ALP_OPCODE_FORWARD = 50, //| I
Jeej 43:28202405094d 51 ALP_OPCODE_IFORWARD = 51, //| IFID
Jeej 43:28202405094d 52 ALP_OPCODE_TAG = 52, //| PID
Jeej 43:28202405094d 53
Jeej 43:28202405094d 54 ALP_OPCODE_EXT = 63, //| RFU
Jeej 43:28202405094d 55
Jeej 43:28202405094d 56 // Modifiers
Jeej 43:28202405094d 57 ALP_OPCODE_RESP = 0x40,
Jeej 43:28202405094d 58 ALP_OPCODE_GROUP = 0x80,
Jeej 43:28202405094d 59
Jeej 43:28202405094d 60 ALP_OPCODE_ERR = 0x40,
Jeej 43:28202405094d 61 ALP_OPCODE_EOP = 0x80,
Jeej 43:28202405094d 62
Jeej 43:28202405094d 63 ALP_OPCODE_INDIRECT = 0x40,
Jeej 43:28202405094d 64 ALP_OPCODE_OVERLOAD = 0x80,
Jeej 43:28202405094d 65
Jeej 43:28202405094d 66 } alp_opcodes_t;
Jeej 43:28202405094d 67
Jeej 43:28202405094d 68 // =======================================================================
Jeej 43:28202405094d 69 // d7a_id_t
Jeej 43:28202405094d 70 // -----------------------------------------------------------------------
Jeej 43:28202405094d 71 /// Identifier types enumerator
Jeej 43:28202405094d 72 // =======================================================================
Jeej 43:28202405094d 73 typedef enum
Jeej 43:28202405094d 74 {
Jeej 43:28202405094d 75 /// Void identifier (broadcast)
Jeej 43:28202405094d 76 /// with indication of number of reached devices
Jeej 43:28202405094d 77 D7A_ID_NBID = 0,
Jeej 43:28202405094d 78 /// Void identifier (broadcast)
Jeej 43:28202405094d 79 D7A_ID_NOID = 1,
Jeej 43:28202405094d 80 /// Unique Identifier
Jeej 43:28202405094d 81 D7A_ID_UID = 2,
Jeej 43:28202405094d 82 /// Virtual identifier
Jeej 43:28202405094d 83 D7A_ID_VID = 3,
Jeej 43:28202405094d 84
Jeej 43:28202405094d 85 } d7a_id_t;
Jeej 43:28202405094d 86
Jeej 45:b85384e7d825 87 typedef enum {
Jeej 45:b85384e7d825 88 ALP_RESP_TYPE_UNKNOWN = 0,
Jeej 45:b85384e7d825 89 ALP_RESP_TYPE_F_DATA = ALP_OPCODE_RSP_F_DATA,
Jeej 45:b85384e7d825 90 ALP_RESP_TYPE_F_PROP = ALP_OPCODE_RSP_F_PROP,
Jeej 45:b85384e7d825 91 ALP_RESP_TYPE_ISTATUS = ALP_OPCODE_RSP_ISTATUS,
Jeej 45:b85384e7d825 92 ALP_RESP_TYPE_STATUS = ALP_OPCODE_RSP_STATUS,
Jeej 45:b85384e7d825 93 ALP_RESP_TYPE_TAG = ALP_OPCODE_RSP_TAG,
Jeej 45:b85384e7d825 94 } alp_resp_type_t;
Jeej 45:b85384e7d825 95
Jeej 46:665391110051 96 // =======================================================================
Jeej 46:665391110051 97 // d7a_resp_t
Jeej 46:665391110051 98 // -----------------------------------------------------------------------
Jeej 46:665391110051 99 /// Enumerator of the D7ASP Response types
Jeej 46:665391110051 100 // =======================================================================
Jeej 46:665391110051 101 typedef enum
Jeej 46:665391110051 102 {
Jeej 46:665391110051 103 /// No response requested
Jeej 46:665391110051 104 D7A_RESP_NO = 0,
Jeej 46:665391110051 105 /// Get all responses in response period
Jeej 46:665391110051 106 D7A_RESP_ALL,
Jeej 46:665391110051 107 /// Get at least one acknowledgement per request during response period
Jeej 46:665391110051 108 D7A_RESP_ANY,
Jeej 46:665391110051 109 /// RFU
Jeej 46:665391110051 110 D7A_RESP_RFU_1,
Jeej 46:665391110051 111 /// No response requested, repeat 3 times
Jeej 46:665391110051 112 D7A_RESP_NO_RPT,
Jeej 46:665391110051 113 /// Get all responses in response period, only Responders having not received packets respond
Jeej 46:665391110051 114 D7A_RESP_ON_ERR,
Jeej 46:665391110051 115 /// Get at least one acknowledgement per request during response period.
Jeej 46:665391110051 116 /// Stick to a single responder when possible
Jeej 46:665391110051 117 D7A_RESP_PREFERRED,
Jeej 46:665391110051 118 /// RFU
Jeej 46:665391110051 119 D7A_RESP_RFU_2,
Jeej 46:665391110051 120
Jeej 46:665391110051 121 } d7a_resp_t;
Jeej 46:665391110051 122
Jeej 46:665391110051 123
Jeej 45:b85384e7d825 124 typedef struct {
Jeej 45:b85384e7d825 125 uint8_t type;
Jeej 45:b85384e7d825 126 uint8_t* data; // data
Jeej 45:b85384e7d825 127 union
Jeej 45:b85384e7d825 128 {
Jeej 45:b85384e7d825 129 struct {
Jeej 45:b85384e7d825 130 uint32_t length;
Jeej 45:b85384e7d825 131 uint32_t offset;
Jeej 45:b85384e7d825 132 uint8_t fid;
Jeej 45:b85384e7d825 133 } f_data;
Jeej 45:b85384e7d825 134 struct {
Jeej 45:b85384e7d825 135 uint32_t length;
Jeej 45:b85384e7d825 136 uint32_t offset;
Jeej 45:b85384e7d825 137 uint8_t fid;
Jeej 45:b85384e7d825 138 } f_prop;
Jeej 45:b85384e7d825 139 struct {
Jeej 45:b85384e7d825 140 uint8_t code;
Jeej 45:b85384e7d825 141 uint8_t id; // Action ID
Jeej 45:b85384e7d825 142 } status;
Jeej 45:b85384e7d825 143 struct {
Jeej 45:b85384e7d825 144 uint32_t length;
Jeej 45:b85384e7d825 145 uint8_t type;
Jeej 45:b85384e7d825 146 } itf;
Jeej 45:b85384e7d825 147 struct {
Jeej 45:b85384e7d825 148 uint8_t id;
Jeej 45:b85384e7d825 149 uint8_t eop;
Jeej 45:b85384e7d825 150 uint8_t err;
Jeej 45:b85384e7d825 151 } tag;
Jeej 45:b85384e7d825 152 } meta;
Jeej 45:b85384e7d825 153 } alp_uns_resp_parsed_t;
Jeej 45:b85384e7d825 154
Jeej 45:b85384e7d825 155 TYPEDEF_STRUCT_PACKED
Jeej 45:b85384e7d825 156 {
Jeej 45:b85384e7d825 157 uint8_t aid;
Jeej 45:b85384e7d825 158 int8_t status;
Jeej 45:b85384e7d825 159 } d7a_alp_rsp_status_t;
Jeej 45:b85384e7d825 160
Jeej 45:b85384e7d825 161 TYPEDEF_STRUCT_PACKED
Jeej 45:b85384e7d825 162 {
Jeej 45:b85384e7d825 163 uint8_t tag;
Jeej 45:b85384e7d825 164 uint8_t tag_status;
Jeej 45:b85384e7d825 165 uint8_t nb_status;
Jeej 45:b85384e7d825 166 d7a_alp_rsp_status_t status[5];
Jeej 45:b85384e7d825 167 uint32_t length;
Jeej 45:b85384e7d825 168 uint8_t* data;
Jeej 45:b85384e7d825 169 } d7a_alp_rsp_t;
Jeej 45:b85384e7d825 170
Jeej 46:665391110051 171 // =======================================================================
Jeej 46:665391110051 172 // d7a_ctf_t
Jeej 46:665391110051 173 // -----------------------------------------------------------------------
Jeej 46:665391110051 174 /// DLL compressed time format
Jeej 46:665391110051 175 // =======================================================================
Jeej 46:665391110051 176 typedef union
Jeej 46:665391110051 177 {
Jeej 46:665391110051 178 // bit access fields
Jeej 46:665391110051 179 struct {
Jeej 46:665391110051 180 /// Mantissa
Jeej 46:665391110051 181 uint8_t mant : 5;
Jeej 46:665391110051 182 /// Exponent
Jeej 46:665391110051 183 uint8_t exp : 3;
Jeej 46:665391110051 184 } bf;
Jeej 46:665391110051 185
Jeej 46:665391110051 186 // byte access
Jeej 46:665391110051 187 uint8_t byte;
Jeej 46:665391110051 188
Jeej 46:665391110051 189 } d7a_ctf_t;
Jeej 46:665391110051 190
Jeej 46:665391110051 191 // =======================================================================
Jeej 46:665391110051 192 // d7a_qos_t
Jeej 46:665391110051 193 // -----------------------------------------------------------------------
Jeej 46:665391110051 194 /// Bitfield structure of the D7ASP Quality of Service control byte
Jeej 46:665391110051 195 // =======================================================================
Jeej 46:665391110051 196 typedef union
Jeej 46:665391110051 197 {
Jeej 46:665391110051 198 // bit access fields
Jeej 46:665391110051 199 struct {
Jeej 46:665391110051 200 /// Response mode
Jeej 46:665391110051 201 uint8_t resp : 3;
Jeej 46:665391110051 202 /// Retry mode
Jeej 46:665391110051 203 uint8_t retry : 3;
Jeej 46:665391110051 204 /// Responder has to keep the ACK template (TPL status file)
Jeej 46:665391110051 205 uint8_t record : 1;
Jeej 46:665391110051 206 /// Stop D7ASP on not acknowledged request
Jeej 46:665391110051 207 uint8_t stop_on_err : 1;
Jeej 46:665391110051 208
Jeej 46:665391110051 209 } bf;
Jeej 46:665391110051 210
Jeej 46:665391110051 211 // byte access
Jeej 46:665391110051 212 uint8_t byte;
Jeej 46:665391110051 213
Jeej 46:665391110051 214 } d7a_qos_t;
Jeej 46:665391110051 215
Jeej 46:665391110051 216 // =======================================================================
Jeej 46:665391110051 217 // d7a_sp_cfg_t
Jeej 46:665391110051 218 // -----------------------------------------------------------------------
Jeej 46:665391110051 219 /// Structure of the D7ASP Configuration
Jeej 46:665391110051 220 // =======================================================================
Jeej 46:665391110051 221 TYPEDEF_STRUCT_PACKED
Jeej 46:665391110051 222 {
Jeej 46:665391110051 223 /// D7ASP QoS
Jeej 46:665391110051 224 d7a_qos_t qos;
Jeej 46:665391110051 225 /// Dormant Timeout (0, no timeout)
Jeej 46:665391110051 226 d7a_ctf_t dorm_to;
Jeej 46:665391110051 227 /// Addressee
Jeej 46:665391110051 228 d7a_addressee_t addressee;
Jeej 46:665391110051 229
Jeej 46:665391110051 230 } d7a_sp_cfg_t;
Jeej 46:665391110051 231
Jeej 46:665391110051 232
Jeej 46:665391110051 233 // =======================================================================
Jeej 46:665391110051 234 // alp_d7a_itf_t
Jeej 46:665391110051 235 // -----------------------------------------------------------------------
Jeej 46:665391110051 236 /// ALP/D7A Interface file TODO:should be in alp_d7a.h when/if it exists
Jeej 46:665391110051 237 /// but not in alp.h as it requires D7A
Jeej 46:665391110051 238 // ====================================================================
Jeej 46:665391110051 239 TYPEDEF_STRUCT_PACKED {
Jeej 46:665391110051 240 uint8_t type;
Jeej 46:665391110051 241 d7a_sp_cfg_t cfg;
Jeej 46:665391110051 242 } alp_d7a_itf_t;
Jeej 46:665391110051 243
Jeej 46:665391110051 244
Jeej 43:28202405094d 245 void d7a_alp_open(void);
Jeej 43:28202405094d 246 void d7a_alp_new_pkt(d7a_com_rx_msg_t* pkt);
Jeej 43:28202405094d 247 d7a_com_rx_msg_t* d7a_alp_wait_pkt(uint32_t millisec = osWaitForever);
Jeej 46:665391110051 248 d7a_errors_t d7a_alp_write_file(const uint8_t file_id, const uint32_t offset, const uint32_t size, const uint8_t* const buf, d7a_addressee_t* addressee = NULL, uint8_t retry = 0, bool resp = true);
Jeej 46:665391110051 249 d7a_errors_t d7a_alp_read_file(const uint8_t file_id, const uint32_t offset, const uint32_t size, const uint8_t* const buf, d7a_addressee_t* addressee = NULL, uint8_t retry = 0);
Jeej 43:28202405094d 250
Jeej 43:28202405094d 251 #endif // _D7A_ALP_H_