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.h@76:fda2e34ff19d, 2016-12-20 (annotated)
- Committer:
- Jeej
- Date:
- Tue Dec 20 09:30:14 2016 +0000
- Revision:
- 76:fda2e34ff19d
- Parent:
- 74:30180585b09e
- Child:
- 87:9b885d12dbb4
Updated for mbed OS 5
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jeej | 43:28202405094d | 1 | #ifndef _D7A_H_ |
Jeej | 43:28202405094d | 2 | #define _D7A_H_ |
Jeej | 43:28202405094d | 3 | |
Jeej | 68:d2778c6abf1a | 4 | #include "rtos.h" |
Jeej | 43:28202405094d | 5 | #include "d7a_common.h" |
Jeej | 43:28202405094d | 6 | |
Jeej | 43:28202405094d | 7 | //====================================================================== |
Jeej | 43:28202405094d | 8 | // Defines |
Jeej | 43:28202405094d | 9 | //====================================================================== |
Jeej | 43:28202405094d | 10 | |
Jeej | 43:28202405094d | 11 | #define D7A_UID_LEN (8) |
Jeej | 43:28202405094d | 12 | |
Jeej | 71:f03727ff0f99 | 13 | // Predefined Access classes |
Jeej | 71:f03727ff0f99 | 14 | // Normal Rate |
Jeej | 71:f03727ff0f99 | 15 | #define D7A_XCL_ENDPOINT_NO (0x01) |
Jeej | 71:f03727ff0f99 | 16 | #define D7A_XCL_SUBCONTROLLER_NO (0x02) |
Jeej | 71:f03727ff0f99 | 17 | #define D7A_XCL_GATEWAY_NO (0x21) |
Jeej | 71:f03727ff0f99 | 18 | // Low Rate |
Jeej | 71:f03727ff0f99 | 19 | #define D7A_XCL_ENDPOINT_LO (0x11) |
Jeej | 71:f03727ff0f99 | 20 | #define D7A_XCL_SUBCONTROLLER_LO (0x12) |
Jeej | 71:f03727ff0f99 | 21 | #define D7A_XCL_GATEWAY_LO (0x31) |
Jeej | 71:f03727ff0f99 | 22 | // High Rate |
Jeej | 71:f03727ff0f99 | 23 | #define D7A_XCL_ENDPOINT_HI (0x41) |
Jeej | 71:f03727ff0f99 | 24 | #define D7A_XCL_SUBCONTROLLER_HI (0x42) |
Jeej | 71:f03727ff0f99 | 25 | #define D7A_XCL_GATEWAY_HI (0x51) |
Jeej | 55:5ea18a3a01b9 | 26 | |
Jeej | 58:38a366236bda | 27 | #define D7A_CTF_VAL(mant,exp) ((uint8_t)(mant|(exp<<5))) |
Jeej | 58:38a366236bda | 28 | |
Jeej | 58:38a366236bda | 29 | #define D7A_NBID(nbid) (nbid >= 32)? D7A_CTF_VAL(8,1) : D7A_CTF_VAL(nbid,0) |
Jeej | 58:38a366236bda | 30 | |
Jeej | 67:9ac9d109b80a | 31 | #define D7A_ROOT_KEY_SIZE (8) // 16 bytes max |
Jeej | 67:9ac9d109b80a | 32 | |
Jeej | 71:f03727ff0f99 | 33 | // Predefined interface files |
Jeej | 71:f03727ff0f99 | 34 | #define FIRST_IFT_FILE (108) |
Jeej | 71:f03727ff0f99 | 35 | |
Jeej | 71:f03727ff0f99 | 36 | #define D7A_ITF_ONESHOT (108) |
Jeej | 71:f03727ff0f99 | 37 | #define D7A_ITF_SINGLE (109) |
Jeej | 71:f03727ff0f99 | 38 | #define D7A_ITF_REPORT (110) |
Jeej | 71:f03727ff0f99 | 39 | #define D7A_ITF_REPORT_CHECKED (111) |
Jeej | 71:f03727ff0f99 | 40 | #define D7A_ITF_BULK (112) |
Jeej | 71:f03727ff0f99 | 41 | #define D7A_ITF_BLINK (113) |
Jeej | 71:f03727ff0f99 | 42 | |
Jeej | 73:3b7353741c94 | 43 | #define D7A_FID_ALP_CFG (50) |
Jeej | 73:3b7353741c94 | 44 | |
Jeej | 43:28202405094d | 45 | |
Jeej | 43:28202405094d | 46 | //====================================================================== |
Jeej | 43:28202405094d | 47 | // Enums |
Jeej | 43:28202405094d | 48 | //====================================================================== |
Jeej | 43:28202405094d | 49 | |
Jeej | 43:28202405094d | 50 | //====================================================================== |
Jeej | 43:28202405094d | 51 | // d7a_fs_storage_t |
Jeej | 43:28202405094d | 52 | //---------------------------------------------------------------------- |
Jeej | 43:28202405094d | 53 | /// File "Storage Class" |
Jeej | 43:28202405094d | 54 | //====================================================================== |
Jeej | 43:28202405094d | 55 | typedef enum { |
Jeej | 55:5ea18a3a01b9 | 56 | /// No data is keeped. Write only! |
Jeej | 43:28202405094d | 57 | /// Ex: Use for commands. |
Jeej | 43:28202405094d | 58 | TRANSIENT = 0, |
Jeej | 43:28202405094d | 59 | /// Data is stocked in RAM and initialized at 0. |
Jeej | 43:28202405094d | 60 | /// Can not guarantee data integrity over time. |
Jeej | 43:28202405094d | 61 | /// Ex: Use for often updated data. |
Jeej | 43:28202405094d | 62 | VOLATILE, |
Jeej | 43:28202405094d | 63 | /// Data is stocked in RAM and initialized with the last flushed data from EEPROM. |
Jeej | 43:28202405094d | 64 | /// Can not guarantee data integrity over time. |
Jeej | 43:28202405094d | 65 | /// Ex: Use for temporary configurations. |
Jeej | 43:28202405094d | 66 | RESTORABLE, |
Jeej | 43:28202405094d | 67 | /// Data is stoked in EEPROM. |
Jeej | 43:28202405094d | 68 | /// Data integrity is guaranteed. |
Jeej | 43:28202405094d | 69 | /// Ex: Use for important configurations. |
Jeej | 43:28202405094d | 70 | /// /!\ Use sparingly as operations on these type of files are time and ressource consuming |
Jeej | 43:28202405094d | 71 | PERMANENT |
Jeej | 43:28202405094d | 72 | } d7a_fs_storage_t; |
Jeej | 43:28202405094d | 73 | |
Jeej | 43:28202405094d | 74 | //====================================================================== |
Jeej | 43:28202405094d | 75 | // d7a_fs_perm_t |
Jeej | 43:28202405094d | 76 | //---------------------------------------------------------------------- |
Jeej | 43:28202405094d | 77 | /// File permissions for USER/GUEST |
Jeej | 43:28202405094d | 78 | //====================================================================== |
Jeej | 43:28202405094d | 79 | typedef enum { |
Jeej | 66:492b1d7ba370 | 80 | O_O = 0b11000000, |
Jeej | 66:492b1d7ba370 | 81 | R_O = 0b11100000, |
Jeej | 66:492b1d7ba370 | 82 | R_R = 0b11100100, |
Jeej | 66:492b1d7ba370 | 83 | W_O = 0b11010000, |
Jeej | 66:492b1d7ba370 | 84 | W_W = 0b11010010, |
Jeej | 64:49a67f36d9c5 | 85 | RW_O = 0b11110000, |
Jeej | 64:49a67f36d9c5 | 86 | RW_R = 0b11110100, |
Jeej | 64:49a67f36d9c5 | 87 | RW_W = 0b11110010, |
Jeej | 64:49a67f36d9c5 | 88 | RW_RW = 0b11110110, |
Jeej | 64:49a67f36d9c5 | 89 | RWX_O = 0b11111000, |
Jeej | 64:49a67f36d9c5 | 90 | RWX_RWX = 0b11111111, |
Jeej | 43:28202405094d | 91 | } d7a_fs_perm_t; |
Jeej | 43:28202405094d | 92 | |
Jeej | 43:28202405094d | 93 | // ======================================================================= |
Jeej | 43:28202405094d | 94 | // d7a_nls_t |
Jeej | 43:28202405094d | 95 | // ----------------------------------------------------------------------- |
Jeej | 43:28202405094d | 96 | /// Enumerator of the NWL security modes |
Jeej | 43:28202405094d | 97 | // ======================================================================= |
Jeej | 43:28202405094d | 98 | typedef enum |
Jeej | 43:28202405094d | 99 | { |
Jeej | 43:28202405094d | 100 | /// No security enabled |
Jeej | 43:28202405094d | 101 | D7A_NLS_NO = 0, |
Jeej | 43:28202405094d | 102 | /// Encryption only, Counter Mode |
Jeej | 43:28202405094d | 103 | D7A_NLS_AES_CTR, |
Jeej | 43:28202405094d | 104 | /// No encryption, Authentication, Cipher-block chaining with 128 bit MAC |
Jeej | 43:28202405094d | 105 | D7A_NLS_AES_CBC_MAC_128, |
Jeej | 43:28202405094d | 106 | /// No encryption, Authentication, Cipher-block chaining with 64 bit MAC |
Jeej | 43:28202405094d | 107 | D7A_NLS_AES_CBC_MAC_64, |
Jeej | 43:28202405094d | 108 | /// No encryption, Authentication, Cipher-block chaining with 32 bit MAC |
Jeej | 43:28202405094d | 109 | D7A_NLS_AES_CBC_MAC_32, |
Jeej | 43:28202405094d | 110 | /// Authentication with CBC-MAC-128 and Encryption with Counter Mode |
Jeej | 43:28202405094d | 111 | D7A_NLS_AES_CCM_128, |
Jeej | 43:28202405094d | 112 | /// Authentication with CBC-MAC-64 and Encryption with Counter Mode |
Jeej | 43:28202405094d | 113 | D7A_NLS_AES_CCM_64, |
Jeej | 43:28202405094d | 114 | /// Authentication with CBC-MAC-32 and Encryption with Counter Mode |
Jeej | 43:28202405094d | 115 | D7A_NLS_AES_CCM_32, |
Jeej | 43:28202405094d | 116 | /// QTY |
Jeej | 43:28202405094d | 117 | D7A_NLS_QTY |
Jeej | 43:28202405094d | 118 | |
Jeej | 43:28202405094d | 119 | } d7a_nls_t; |
Jeej | 43:28202405094d | 120 | |
Jeej | 43:28202405094d | 121 | |
Jeej | 45:b85384e7d825 | 122 | // Mimic ALP Errors |
Jeej | 45:b85384e7d825 | 123 | typedef enum |
Jeej | 45:b85384e7d825 | 124 | { |
Jeej | 45:b85384e7d825 | 125 | D7A_ERR_ITF_FULL = 2, // 0x02: For interfaces supporting buffering, indicates buffer reached maximum capacity (no data loss) |
Jeej | 45:b85384e7d825 | 126 | D7A_ERR_PARTIAL_COMPLETION = 1, // 0x01: Action received and partially completed at response. To be completed after response |
Jeej | 45:b85384e7d825 | 127 | |
Jeej | 45:b85384e7d825 | 128 | D7A_ERR_NONE = 0, // 0x00: Action completed (OK) |
Jeej | 45:b85384e7d825 | 129 | D7A_ERR_FILE_NOT_FOUND = -1, // 0xFF: Error access file: File ID does not exist |
Jeej | 45:b85384e7d825 | 130 | D7A_ERR_FILE_EXIST = -2, // 0xFE: Error create file: File ID already exists |
Jeej | 45:b85384e7d825 | 131 | D7A_ERR_FILE_NOT_RESTORABLE = -3, // 0xFD: Error restore file: File is not restorable |
Jeej | 45:b85384e7d825 | 132 | D7A_ERR_PERMISSION_DENIED = -4, // 0xFC: Error access file: Insufficient permissions |
Jeej | 45:b85384e7d825 | 133 | D7A_ERR_LENGTH_OVERFLOW = -5, // 0xFB: Error create file: Supplied length (in header) is beyond file limits |
Jeej | 45:b85384e7d825 | 134 | D7A_ERR_ALLOC_OVERFLOW = -6, // 0xFA: Error create file: Supplied allocation (in header) is beyond file limits |
Jeej | 45:b85384e7d825 | 135 | D7A_ERR_OFFSET_OVERFLOW = -7, // 0xF9: Error write: Supplied start offset is out of bounds of file allocation |
Jeej | 45:b85384e7d825 | 136 | D7A_ERR_WRITE_OVERFLOW = -8, // 0xF8: Error complete write: Supplied data goes beyond file allocation |
Jeej | 45:b85384e7d825 | 137 | D7A_ERR_WRITE_ERROR = -9, // 0xF7: Error write: impossible to write in storage location |
Jeej | 45:b85384e7d825 | 138 | D7A_ERR_OPERATION_UNKNOWN = -10,// 0xF6: Error unknown Operation |
Jeej | 45:b85384e7d825 | 139 | D7A_ERR_OPERAND_INCOMPLETE = -11,// 0xF5: Error incomplete Operand |
Jeej | 45:b85384e7d825 | 140 | D7A_ERR_OPERAND_WRONG_FORMAT = -12,// 0xF4: Error wrong Operand format |
Jeej | 45:b85384e7d825 | 141 | D7A_ERR_ITF_INVALID = -13,// 0xF3: Error invalid interface |
Jeej | 45:b85384e7d825 | 142 | D7A_ERR_ITF_OVERFLOW = -14,// 0xF2: Error interface overflown (i.e. ressources exhausted, buffer full with data discarded) |
Jeej | 45:b85384e7d825 | 143 | D7A_ERR_QUERY_FAIL = -15,// 0xF1: (Group of) Query result was false (Informative error code). |
Jeej | 45:b85384e7d825 | 144 | |
Jeej | 45:b85384e7d825 | 145 | D7A_ERR_UNKNOWN = -128,// 0x80: Unknown error |
Jeej | 57:fd9c8b67ffdc | 146 | D7A_ERR_FS_TIMEOUT ,// 0x81: Internal FS Error |
Jeej | 57:fd9c8b67ffdc | 147 | D7A_ERR_ITF_UNKNOWN ,// 0x82: Unknown Interface |
Jeej | 45:b85384e7d825 | 148 | |
Jeej | 45:b85384e7d825 | 149 | // Modem errors |
Jeej | 45:b85384e7d825 | 150 | D7A_ERR_NOT_READY ,// The modem is not ready to recieve commands |
Jeej | 45:b85384e7d825 | 151 | D7A_ERR_COM_LINK ,// A serial link timeout occured |
Jeej | 45:b85384e7d825 | 152 | D7A_ERR_ILLEGAL_FID ,// The FID specified is illegal |
Jeej | 45:b85384e7d825 | 153 | D7A_ERR_ILLEGAL_FILE_DEF ,// The FILE parameters specified are illegal |
Jeej | 45:b85384e7d825 | 154 | D7A_ERR_CMD_TO ,// The command expired |
Jeej | 45:b85384e7d825 | 155 | D7A_ERR_TX_FAILED ,// Transmission failed |
Jeej | 66:492b1d7ba370 | 156 | D7A_ERR_STATE ,// The device is not in the right state to execute the command |
Jeej | 56:da34fc11e760 | 157 | |
Jeej | 45:b85384e7d825 | 158 | } d7a_errors_t; |
Jeej | 45:b85384e7d825 | 159 | |
Jeej | 55:5ea18a3a01b9 | 160 | |
Jeej | 73:3b7353741c94 | 161 | |
Jeej | 73:3b7353741c94 | 162 | TYPEDEF_STRUCT_PACKED { |
Jeej | 73:3b7353741c94 | 163 | struct { |
Jeej | 73:3b7353741c94 | 164 | /// Backoff time generator for retry attempts |
Jeej | 73:3b7353741c94 | 165 | /// - if '0': No backoff |
Jeej | 73:3b7353741c94 | 166 | /// - if '1': Linear backoff, retry every slot_time seconds |
Jeej | 73:3b7353741c94 | 167 | /// - if '2': RFU |
Jeej | 73:3b7353741c94 | 168 | /// - if '3': RFU |
Jeej | 73:3b7353741c94 | 169 | uint8_t procedure : 4; |
Jeej | 73:3b7353741c94 | 170 | /// On transmission success or at the end of the retry procedure: |
Jeej | 73:3b7353741c94 | 171 | /// - if '1': a response is generated to requester (source ITF) |
Jeej | 73:3b7353741c94 | 172 | /// - if '0': nothing notified to the source |
Jeej | 73:3b7353741c94 | 173 | uint8_t respond : 1; |
Jeej | 73:3b7353741c94 | 174 | /// On transmission success or at the end of the retry procedure: |
Jeej | 73:3b7353741c94 | 175 | /// - if '1': Session fifo remains opened for further messaging |
Jeej | 73:3b7353741c94 | 176 | /// - if '0': Session fifo is closed/released |
Jeej | 73:3b7353741c94 | 177 | uint8_t persistant : 1; |
Jeej | 73:3b7353741c94 | 178 | /// When a payload is send to an ITF that implements buffering, |
Jeej | 73:3b7353741c94 | 179 | /// if 'bulk' is set the ITF should not start actual transfer until |
Jeej | 73:3b7353741c94 | 180 | /// buffer is full. |
Jeej | 73:3b7353741c94 | 181 | uint8_t bulk : 1; |
Jeej | 73:3b7353741c94 | 182 | |
Jeej | 73:3b7353741c94 | 183 | uint8_t rfu : 1; |
Jeej | 73:3b7353741c94 | 184 | } meta; |
Jeej | 73:3b7353741c94 | 185 | /// Number of "pushed" messages that will be internally buffered |
Jeej | 73:3b7353741c94 | 186 | /// until they are successfully sent. In case of overflow, the oldest |
Jeej | 73:3b7353741c94 | 187 | /// message is lost. |
Jeej | 73:3b7353741c94 | 188 | uint8_t depth; |
Jeej | 73:3b7353741c94 | 189 | /// Maximum number of retry steps |
Jeej | 73:3b7353741c94 | 190 | uint8_t retries; |
Jeej | 73:3b7353741c94 | 191 | /// Unit of time (in second) used for Backoff time calculation |
Jeej | 73:3b7353741c94 | 192 | uint8_t slot_time; |
Jeej | 73:3b7353741c94 | 193 | } alp_retry_policy_t; |
Jeej | 73:3b7353741c94 | 194 | |
Jeej | 73:3b7353741c94 | 195 | |
Jeej | 55:5ea18a3a01b9 | 196 | /// Types of retry policies |
Jeej | 55:5ea18a3a01b9 | 197 | /// Respond: When finished the host will be notified |
Jeej | 55:5ea18a3a01b9 | 198 | /// Persist: When finished on error data is kept in the queue for next transmission |
Jeej | 55:5ea18a3a01b9 | 199 | /// Depth: Number of commands kept in the queue |
Jeej | 55:5ea18a3a01b9 | 200 | /// Bulk: Notifications sent only when the queue is full |
Jeej | 73:3b7353741c94 | 201 | /// Retries: Number of retries after initial transmission (if 0 no backoff, else linear backoff) |
Jeej | 55:5ea18a3a01b9 | 202 | /// Slot: Time between retries (sec) |
Jeej | 46:665391110051 | 203 | typedef enum { |
Jeej | 55:5ea18a3a01b9 | 204 | /// Respond: true |
Jeej | 55:5ea18a3a01b9 | 205 | /// Persist: false |
Jeej | 55:5ea18a3a01b9 | 206 | /// Depth: 1 |
Jeej | 55:5ea18a3a01b9 | 207 | /// Bulk: false |
Jeej | 55:5ea18a3a01b9 | 208 | /// Retries: 0 |
Jeej | 55:5ea18a3a01b9 | 209 | /// Slot: 0 |
Jeej | 73:3b7353741c94 | 210 | ALP_RPOL_ONESHOT, |
Jeej | 73:3b7353741c94 | 211 | |
Jeej | 55:5ea18a3a01b9 | 212 | /// Respond: true |
Jeej | 55:5ea18a3a01b9 | 213 | /// Persist: false |
Jeej | 55:5ea18a3a01b9 | 214 | /// Depth: 1 |
Jeej | 55:5ea18a3a01b9 | 215 | /// Bulk: false |
Jeej | 55:5ea18a3a01b9 | 216 | /// Retries: 3 |
Jeej | 55:5ea18a3a01b9 | 217 | /// Slot: 2 |
Jeej | 73:3b7353741c94 | 218 | ALP_RPOL_SINGLE, |
Jeej | 73:3b7353741c94 | 219 | |
Jeej | 55:5ea18a3a01b9 | 220 | /// Respond: true |
Jeej | 55:5ea18a3a01b9 | 221 | /// Persist: false |
Jeej | 55:5ea18a3a01b9 | 222 | /// Depth: 1 |
Jeej | 55:5ea18a3a01b9 | 223 | /// Bulk: false |
Jeej | 55:5ea18a3a01b9 | 224 | /// Retries: 3 |
Jeej | 55:5ea18a3a01b9 | 225 | /// Slot: 2 |
Jeej | 73:3b7353741c94 | 226 | ALP_RPOL_REPORT, |
Jeej | 73:3b7353741c94 | 227 | |
Jeej | 55:5ea18a3a01b9 | 228 | /// Respond: false |
Jeej | 55:5ea18a3a01b9 | 229 | /// Persist: true |
Jeej | 55:5ea18a3a01b9 | 230 | /// Depth: 4 |
Jeej | 55:5ea18a3a01b9 | 231 | /// Bulk: false |
Jeej | 55:5ea18a3a01b9 | 232 | /// Retries: 16 |
Jeej | 55:5ea18a3a01b9 | 233 | /// Slot: 20 |
Jeej | 73:3b7353741c94 | 234 | ALP_RPOL_REPORT_CHECKED, |
Jeej | 73:3b7353741c94 | 235 | |
Jeej | 55:5ea18a3a01b9 | 236 | /// Respond: true |
Jeej | 55:5ea18a3a01b9 | 237 | /// Persist: false |
Jeej | 55:5ea18a3a01b9 | 238 | /// Depth: 4 |
Jeej | 55:5ea18a3a01b9 | 239 | /// Bulk: true |
Jeej | 55:5ea18a3a01b9 | 240 | /// Retries: 0 |
Jeej | 55:5ea18a3a01b9 | 241 | /// Slot: 1 |
Jeej | 73:3b7353741c94 | 242 | ALP_RPOL_BULK, |
Jeej | 73:3b7353741c94 | 243 | |
Jeej | 73:3b7353741c94 | 244 | ALP_RPOL_SPARE_5, |
Jeej | 73:3b7353741c94 | 245 | ALP_RPOL_SPARE_6, |
Jeej | 73:3b7353741c94 | 246 | |
Jeej | 59:b42eae56b51b | 247 | /// Respond: false |
Jeej | 59:b42eae56b51b | 248 | /// Persist: false |
Jeej | 59:b42eae56b51b | 249 | /// Depth: 1 |
Jeej | 59:b42eae56b51b | 250 | /// Bulk: false |
Jeej | 59:b42eae56b51b | 251 | /// Retries: 0 |
Jeej | 59:b42eae56b51b | 252 | /// Slot: 1 |
Jeej | 73:3b7353741c94 | 253 | ALP_RPOL_BLINK, |
Jeej | 73:3b7353741c94 | 254 | |
Jeej | 73:3b7353741c94 | 255 | ALP_RPOL_QTY, |
Jeej | 55:5ea18a3a01b9 | 256 | } alp_rpol_t; |
Jeej | 46:665391110051 | 257 | |
Jeej | 73:3b7353741c94 | 258 | |
Jeej | 55:5ea18a3a01b9 | 259 | /// Action when file notifying |
Jeej | 55:5ea18a3a01b9 | 260 | typedef enum { |
Jeej | 55:5ea18a3a01b9 | 261 | D7A_ACTION_NONE = 0, |
Jeej | 55:5ea18a3a01b9 | 262 | /// Notify the whole file |
Jeej | 55:5ea18a3a01b9 | 263 | D7A_NOTIFICATION_FULL = 100, |
Jeej | 55:5ea18a3a01b9 | 264 | /// Notify only part of the file |
Jeej | 55:5ea18a3a01b9 | 265 | D7A_NOTIFICATION_PART |
Jeej | 55:5ea18a3a01b9 | 266 | } d7a_action_t; |
Jeej | 45:b85384e7d825 | 267 | |
Jeej | 58:38a366236bda | 268 | |
Jeej | 58:38a366236bda | 269 | // ======================================================================= |
Jeej | 58:38a366236bda | 270 | // d7a_id_t |
Jeej | 58:38a366236bda | 271 | // ----------------------------------------------------------------------- |
Jeej | 58:38a366236bda | 272 | // Identifier types enumerator |
Jeej | 58:38a366236bda | 273 | // ======================================================================= |
Jeej | 58:38a366236bda | 274 | typedef enum |
Jeej | 58:38a366236bda | 275 | { |
Jeej | 58:38a366236bda | 276 | // Void identifier (broadcast) |
Jeej | 58:38a366236bda | 277 | // with indication of number of reached devices |
Jeej | 58:38a366236bda | 278 | D7A_ID_NBID = 0, |
Jeej | 58:38a366236bda | 279 | // Void identifier (broadcast) |
Jeej | 58:38a366236bda | 280 | D7A_ID_NOID = 1, |
Jeej | 58:38a366236bda | 281 | // Unique Identifier |
Jeej | 58:38a366236bda | 282 | D7A_ID_UID = 2, |
Jeej | 58:38a366236bda | 283 | // Virtual identifier |
Jeej | 58:38a366236bda | 284 | D7A_ID_VID = 3, |
Jeej | 58:38a366236bda | 285 | |
Jeej | 58:38a366236bda | 286 | } d7a_id_t; |
Jeej | 58:38a366236bda | 287 | |
Jeej | 43:28202405094d | 288 | //====================================================================== |
Jeej | 43:28202405094d | 289 | // Structures |
Jeej | 43:28202405094d | 290 | //====================================================================== |
Jeej | 43:28202405094d | 291 | |
Jeej | 43:28202405094d | 292 | //====================================================================== |
Jeej | 43:28202405094d | 293 | // d7a_com_config_t |
Jeej | 43:28202405094d | 294 | //---------------------------------------------------------------------- |
Jeej | 43:28202405094d | 295 | /// Com port configuration structure |
Jeej | 43:28202405094d | 296 | //====================================================================== |
Jeej | 43:28202405094d | 297 | typedef struct { |
Jeej | 43:28202405094d | 298 | /// Tx pin |
Jeej | 43:28202405094d | 299 | PinName tx; |
Jeej | 43:28202405094d | 300 | /// RX pin |
Jeej | 43:28202405094d | 301 | PinName rx; |
Jeej | 43:28202405094d | 302 | /// WKUP pin |
Jeej | 43:28202405094d | 303 | PinName rts; |
Jeej | 43:28202405094d | 304 | /// HST_WKUP pin |
Jeej | 43:28202405094d | 305 | PinName cts; |
Jeej | 43:28202405094d | 306 | } d7a_com_config_t; |
Jeej | 43:28202405094d | 307 | |
Jeej | 59:b42eae56b51b | 308 | TYPEDEF_STRUCT_PACKED { |
Jeej | 59:b42eae56b51b | 309 | uint8_t fid; |
Jeej | 59:b42eae56b51b | 310 | uint32_t length; |
Jeej | 59:b42eae56b51b | 311 | uint32_t offset; |
Jeej | 59:b42eae56b51b | 312 | uint8_t buf[1]; |
Jeej | 59:b42eae56b51b | 313 | } d7a_data_t; |
Jeej | 59:b42eae56b51b | 314 | |
Jeej | 59:b42eae56b51b | 315 | // ======================================================================= |
Jeej | 59:b42eae56b51b | 316 | // d7a_msg_t |
Jeej | 59:b42eae56b51b | 317 | // ----------------------------------------------------------------------- |
Jeej | 59:b42eae56b51b | 318 | /// Response data and meta-data from a device |
Jeej | 59:b42eae56b51b | 319 | // ======================================================================= |
Jeej | 59:b42eae56b51b | 320 | typedef struct |
Jeej | 59:b42eae56b51b | 321 | { |
Jeej | 59:b42eae56b51b | 322 | /// Error code |
Jeej | 59:b42eae56b51b | 323 | int8_t err; |
Jeej | 59:b42eae56b51b | 324 | /// Responder's UID |
Jeej | 59:b42eae56b51b | 325 | uint8_t id[D7A_UID_LEN]; |
Jeej | 59:b42eae56b51b | 326 | /// Transmission Link Budget |
Jeej | 59:b42eae56b51b | 327 | int8_t lb; |
Jeej | 61:87be16080640 | 328 | /// Transmission RSSI |
Jeej | 61:87be16080640 | 329 | int8_t rxlev; |
Jeej | 59:b42eae56b51b | 330 | /// Potential data |
Jeej | 59:b42eae56b51b | 331 | d7a_data_t* data; |
Jeej | 59:b42eae56b51b | 332 | } d7a_msg_t; |
Jeej | 49:81d5bddb02f0 | 333 | |
Jeej | 49:81d5bddb02f0 | 334 | |
Jeej | 43:28202405094d | 335 | typedef uint32_t (*WriteFileFunction)( const uint8_t file_id, |
Jeej | 43:28202405094d | 336 | const uint16_t offset, |
Jeej | 43:28202405094d | 337 | const uint16_t size, |
Jeej | 43:28202405094d | 338 | const uint8_t* const content); |
Jeej | 43:28202405094d | 339 | |
Jeej | 43:28202405094d | 340 | typedef uint32_t (*ReadFileFunction)( const uint8_t file_id, |
Jeej | 43:28202405094d | 341 | const uint16_t offset, |
Jeej | 43:28202405094d | 342 | const uint16_t size, |
Jeej | 43:28202405094d | 343 | uint8_t* buf); |
Jeej | 43:28202405094d | 344 | |
Jeej | 46:665391110051 | 345 | typedef void (*NotifDoneFunction)( const uint8_t file_id, |
Jeej | 46:665391110051 | 346 | const uint8_t error); |
Jeej | 59:b42eae56b51b | 347 | |
Jeej | 59:b42eae56b51b | 348 | typedef void (*UnsolicitedMsgFunction)( d7a_msg_t** msg); |
Jeej | 46:665391110051 | 349 | |
Jeej | 43:28202405094d | 350 | //====================================================================== |
Jeej | 43:28202405094d | 351 | // d7a_fs_callbacks_t |
Jeej | 43:28202405094d | 352 | //---------------------------------------------------------------------- |
Jeej | 43:28202405094d | 353 | /// File system callbacks |
Jeej | 43:28202405094d | 354 | //====================================================================== |
Jeej | 43:28202405094d | 355 | typedef struct { |
Jeej | 43:28202405094d | 356 | /// Write in local file |
Jeej | 43:28202405094d | 357 | WriteFileFunction write_file; |
Jeej | 43:28202405094d | 358 | /// Read from local file |
Jeej | 43:28202405094d | 359 | ReadFileFunction read_file; |
Jeej | 49:81d5bddb02f0 | 360 | /// Is called when the notification is finished (depending on the retry policy) |
Jeej | 46:665391110051 | 361 | NotifDoneFunction notif_done; |
Jeej | 59:b42eae56b51b | 362 | /// This function is called when an unsolicited message is catched |
Jeej | 59:b42eae56b51b | 363 | UnsolicitedMsgFunction unsolicited_msg; |
Jeej | 49:81d5bddb02f0 | 364 | } d7a_callbacks_t; |
Jeej | 43:28202405094d | 365 | |
Jeej | 43:28202405094d | 366 | //====================================================================== |
Jeej | 43:28202405094d | 367 | // fw_version_t |
Jeej | 43:28202405094d | 368 | //---------------------------------------------------------------------- |
Jeej | 43:28202405094d | 369 | /// Firmware version Structure |
Jeej | 43:28202405094d | 370 | /// Used within the revision structure |
Jeej | 43:28202405094d | 371 | //====================================================================== |
Jeej | 43:28202405094d | 372 | TYPEDEF_STRUCT_PACKED |
Jeej | 43:28202405094d | 373 | { |
Jeej | 43:28202405094d | 374 | /// Software identifier |
Jeej | 43:28202405094d | 375 | uint8_t id; |
Jeej | 43:28202405094d | 376 | /// Version major |
Jeej | 43:28202405094d | 377 | uint8_t major; |
Jeej | 43:28202405094d | 378 | /// Version minor |
Jeej | 43:28202405094d | 379 | uint8_t minor; |
Jeej | 43:28202405094d | 380 | /// Version patch |
Jeej | 43:28202405094d | 381 | uint16_t patch; |
Jeej | 43:28202405094d | 382 | /// Version hash |
Jeej | 43:28202405094d | 383 | uint32_t hash; |
Jeej | 43:28202405094d | 384 | } fw_version_t; |
Jeej | 43:28202405094d | 385 | |
Jeej | 43:28202405094d | 386 | //====================================================================== |
Jeej | 43:28202405094d | 387 | // d7a_revision_t |
Jeej | 43:28202405094d | 388 | //---------------------------------------------------------------------- |
Jeej | 43:28202405094d | 389 | /// Revision Structure |
Jeej | 43:28202405094d | 390 | /// |
Jeej | 43:28202405094d | 391 | /// Usage within D7B server: |
Jeej | 43:28202405094d | 392 | /// An XML describing the File system of a device is associated to a |
Jeej | 43:28202405094d | 393 | /// couple manufacturer_id/device_id (==Device). |
Jeej | 43:28202405094d | 394 | /// Different versions of the Device's XML can exist and can be mapped |
Jeej | 43:28202405094d | 395 | /// according to fw_version id/major/minor |
Jeej | 43:28202405094d | 396 | //====================================================================== |
Jeej | 43:28202405094d | 397 | TYPEDEF_STRUCT_PACKED |
Jeej | 43:28202405094d | 398 | { |
Jeej | 43:28202405094d | 399 | /// Manufacturer ID: provided by Wizzilab |
Jeej | 43:28202405094d | 400 | uint32_t manufacturer_id; |
Jeej | 43:28202405094d | 401 | /// Device ID: Arbitrary number, at user/customer choice |
Jeej | 43:28202405094d | 402 | uint32_t device_id; |
Jeej | 43:28202405094d | 403 | /// Hardware Board ID: |
Jeej | 43:28202405094d | 404 | uint32_t hw_version; |
Jeej | 43:28202405094d | 405 | /// Firmware Version: made of |
Jeej | 43:28202405094d | 406 | /// - major,minor and patch indexes : comes from versioning tool |
Jeej | 43:28202405094d | 407 | /// - fw_id : "build-flavour" : comes from build setup |
Jeej | 43:28202405094d | 408 | /// FW_ID | MAJOR | MINOR | PATCH | HASH | |
Jeej | 43:28202405094d | 409 | /// 1B | 1B | 1B | 2B | 4B | |
Jeej | 43:28202405094d | 410 | fw_version_t fw_version; |
Jeej | 43:28202405094d | 411 | /// "file-system" signature XXX: to be worked out |
Jeej | 43:28202405094d | 412 | uint32_t fs_crc; |
Jeej | 43:28202405094d | 413 | } d7a_revision_t; |
Jeej | 43:28202405094d | 414 | |
Jeej | 43:28202405094d | 415 | |
Jeej | 43:28202405094d | 416 | // ======================================================================= |
Jeej | 43:28202405094d | 417 | // d7a_addressee_ctrl_t |
Jeej | 43:28202405094d | 418 | // ----------------------------------------------------------------------- |
Jeej | 43:28202405094d | 419 | /// Bitfield structure of the Addressee control byte |
Jeej | 43:28202405094d | 420 | // ======================================================================= |
Jeej | 43:28202405094d | 421 | typedef union |
Jeej | 43:28202405094d | 422 | { |
Jeej | 53:3e4aa4b57090 | 423 | /// bit access fields |
Jeej | 43:28202405094d | 424 | struct { |
Jeej | 43:28202405094d | 425 | /// Network security method |
Jeej | 43:28202405094d | 426 | uint8_t nls : 4; |
Jeej | 43:28202405094d | 427 | /// ID type |
Jeej | 43:28202405094d | 428 | uint8_t idf : 2; |
Jeej | 43:28202405094d | 429 | /// RFU |
Jeej | 43:28202405094d | 430 | uint8_t rfu_6 : 1; |
Jeej | 43:28202405094d | 431 | uint8_t rfu_7 : 1; |
Jeej | 43:28202405094d | 432 | } bf; |
Jeej | 43:28202405094d | 433 | |
Jeej | 53:3e4aa4b57090 | 434 | /// byte access |
Jeej | 43:28202405094d | 435 | uint8_t byte; |
Jeej | 43:28202405094d | 436 | |
Jeej | 43:28202405094d | 437 | } d7a_addressee_ctrl_t; |
Jeej | 43:28202405094d | 438 | |
Jeej | 43:28202405094d | 439 | // ======================================================================= |
Jeej | 43:28202405094d | 440 | // d7a_xcl_t |
Jeej | 43:28202405094d | 441 | // ----------------------------------------------------------------------- |
Jeej | 43:28202405094d | 442 | /// Bitfield structure of the Addressee Access Class |
Jeej | 43:28202405094d | 443 | // ======================================================================= |
Jeej | 43:28202405094d | 444 | typedef union |
Jeej | 43:28202405094d | 445 | { |
Jeej | 53:3e4aa4b57090 | 446 | /// bit access fields |
Jeej | 43:28202405094d | 447 | struct { |
Jeej | 43:28202405094d | 448 | /// Subclass mask |
Jeej | 43:28202405094d | 449 | uint8_t m : 4; |
Jeej | 43:28202405094d | 450 | /// Specifier |
Jeej | 43:28202405094d | 451 | uint8_t s : 4; |
Jeej | 43:28202405094d | 452 | } bf; |
Jeej | 43:28202405094d | 453 | |
Jeej | 53:3e4aa4b57090 | 454 | /// byte access |
Jeej | 43:28202405094d | 455 | uint8_t byte; |
Jeej | 43:28202405094d | 456 | |
Jeej | 43:28202405094d | 457 | } d7a_xcl_t; |
Jeej | 43:28202405094d | 458 | |
Jeej | 43:28202405094d | 459 | // ======================================================================= |
Jeej | 43:28202405094d | 460 | // d7a_addressee_t |
Jeej | 43:28202405094d | 461 | // ----------------------------------------------------------------------- |
Jeej | 43:28202405094d | 462 | /// Structure of the D7ATP Addressee byte |
Jeej | 43:28202405094d | 463 | // ======================================================================= |
Jeej | 43:28202405094d | 464 | TYPEDEF_STRUCT_PACKED |
Jeej | 43:28202405094d | 465 | { |
Jeej | 54:540b327bfa14 | 466 | /// Addressee control byte |
Jeej | 43:28202405094d | 467 | d7a_addressee_ctrl_t ctrl; |
Jeej | 54:540b327bfa14 | 468 | /// Access Class |
Jeej | 43:28202405094d | 469 | d7a_xcl_t xcl; |
Jeej | 54:540b327bfa14 | 470 | /// UID |
Jeej | 43:28202405094d | 471 | uint8_t id[D7A_UID_LEN]; |
Jeej | 43:28202405094d | 472 | |
Jeej | 43:28202405094d | 473 | } d7a_addressee_t; |
Jeej | 43:28202405094d | 474 | |
Jeej | 43:28202405094d | 475 | |
Jeej | 71:f03727ff0f99 | 476 | // ======================================================================= |
Jeej | 71:f03727ff0f99 | 477 | // d7a_ctf_t |
Jeej | 71:f03727ff0f99 | 478 | // ----------------------------------------------------------------------- |
Jeej | 71:f03727ff0f99 | 479 | // DLL compressed time format |
Jeej | 71:f03727ff0f99 | 480 | // ======================================================================= |
Jeej | 71:f03727ff0f99 | 481 | typedef union |
Jeej | 71:f03727ff0f99 | 482 | { |
Jeej | 71:f03727ff0f99 | 483 | // bit access fields |
Jeej | 71:f03727ff0f99 | 484 | struct { |
Jeej | 71:f03727ff0f99 | 485 | // Mantissa |
Jeej | 71:f03727ff0f99 | 486 | uint8_t mant : 5; |
Jeej | 71:f03727ff0f99 | 487 | // Exponent |
Jeej | 71:f03727ff0f99 | 488 | uint8_t exp : 3; |
Jeej | 71:f03727ff0f99 | 489 | } bf; |
Jeej | 71:f03727ff0f99 | 490 | |
Jeej | 71:f03727ff0f99 | 491 | // byte access |
Jeej | 71:f03727ff0f99 | 492 | uint8_t byte; |
Jeej | 71:f03727ff0f99 | 493 | |
Jeej | 71:f03727ff0f99 | 494 | } d7a_ctf_t; |
Jeej | 71:f03727ff0f99 | 495 | |
Jeej | 71:f03727ff0f99 | 496 | // ======================================================================= |
Jeej | 71:f03727ff0f99 | 497 | // d7a_qos_t |
Jeej | 71:f03727ff0f99 | 498 | // ----------------------------------------------------------------------- |
Jeej | 71:f03727ff0f99 | 499 | // Bitfield structure of the D7ASP Quality of Service control byte |
Jeej | 71:f03727ff0f99 | 500 | // ======================================================================= |
Jeej | 71:f03727ff0f99 | 501 | typedef union |
Jeej | 71:f03727ff0f99 | 502 | { |
Jeej | 71:f03727ff0f99 | 503 | // bit access fields |
Jeej | 71:f03727ff0f99 | 504 | struct { |
Jeej | 71:f03727ff0f99 | 505 | // Response mode |
Jeej | 71:f03727ff0f99 | 506 | uint8_t resp : 3; |
Jeej | 71:f03727ff0f99 | 507 | // Retry mode |
Jeej | 71:f03727ff0f99 | 508 | uint8_t retry : 3; |
Jeej | 71:f03727ff0f99 | 509 | // Responder has to keep the ACK template (TPL status file) |
Jeej | 71:f03727ff0f99 | 510 | uint8_t record : 1; |
Jeej | 71:f03727ff0f99 | 511 | // Stop D7ASP on not acknowledged request |
Jeej | 71:f03727ff0f99 | 512 | uint8_t stop_on_err : 1; |
Jeej | 71:f03727ff0f99 | 513 | |
Jeej | 71:f03727ff0f99 | 514 | } bf; |
Jeej | 71:f03727ff0f99 | 515 | |
Jeej | 71:f03727ff0f99 | 516 | // byte access |
Jeej | 71:f03727ff0f99 | 517 | uint8_t byte; |
Jeej | 71:f03727ff0f99 | 518 | |
Jeej | 71:f03727ff0f99 | 519 | } d7a_qos_t; |
Jeej | 71:f03727ff0f99 | 520 | |
Jeej | 71:f03727ff0f99 | 521 | |
Jeej | 71:f03727ff0f99 | 522 | // ======================================================================= |
Jeej | 71:f03727ff0f99 | 523 | // d7a_sp_cfg_t |
Jeej | 71:f03727ff0f99 | 524 | // ----------------------------------------------------------------------- |
Jeej | 71:f03727ff0f99 | 525 | // Structure of the D7ASP Configuration |
Jeej | 71:f03727ff0f99 | 526 | // ======================================================================= |
Jeej | 71:f03727ff0f99 | 527 | TYPEDEF_STRUCT_PACKED |
Jeej | 71:f03727ff0f99 | 528 | { |
Jeej | 71:f03727ff0f99 | 529 | // D7ASP QoS |
Jeej | 71:f03727ff0f99 | 530 | d7a_qos_t qos; |
Jeej | 71:f03727ff0f99 | 531 | // Dormant Timeout (0, no timeout) |
Jeej | 76:fda2e34ff19d | 532 | d7a_ctf_t to; |
Jeej | 74:30180585b09e | 533 | // Response execution delay |
Jeej | 74:30180585b09e | 534 | d7a_ctf_t te; |
Jeej | 71:f03727ff0f99 | 535 | // Addressee |
Jeej | 71:f03727ff0f99 | 536 | d7a_addressee_t addressee; |
Jeej | 71:f03727ff0f99 | 537 | |
Jeej | 71:f03727ff0f99 | 538 | } d7a_sp_cfg_t; |
Jeej | 71:f03727ff0f99 | 539 | |
Jeej | 71:f03727ff0f99 | 540 | // ======================================================================= |
Jeej | 71:f03727ff0f99 | 541 | // d7a_itf_t |
Jeej | 71:f03727ff0f99 | 542 | // ----------------------------------------------------------------------- |
Jeej | 71:f03727ff0f99 | 543 | // ALP/D7A Interface file TODO:should be in alp_d7a.h when/if it exists |
Jeej | 71:f03727ff0f99 | 544 | // but not in alp.h as it requires D7A |
Jeej | 71:f03727ff0f99 | 545 | // ==================================================================== |
Jeej | 71:f03727ff0f99 | 546 | TYPEDEF_STRUCT_PACKED { |
Jeej | 71:f03727ff0f99 | 547 | uint8_t type; |
Jeej | 71:f03727ff0f99 | 548 | d7a_sp_cfg_t cfg; |
Jeej | 71:f03727ff0f99 | 549 | } d7a_itf_t; |
Jeej | 71:f03727ff0f99 | 550 | |
Jeej | 71:f03727ff0f99 | 551 | |
Jeej | 71:f03727ff0f99 | 552 | // ======================================================================= |
Jeej | 71:f03727ff0f99 | 553 | // d7a_resp_t |
Jeej | 71:f03727ff0f99 | 554 | // ----------------------------------------------------------------------- |
Jeej | 71:f03727ff0f99 | 555 | // Enumerator of the D7ASP Response types |
Jeej | 71:f03727ff0f99 | 556 | // ======================================================================= |
Jeej | 71:f03727ff0f99 | 557 | typedef enum |
Jeej | 71:f03727ff0f99 | 558 | { |
Jeej | 71:f03727ff0f99 | 559 | // No response requested |
Jeej | 71:f03727ff0f99 | 560 | D7A_RESP_NO = 0, |
Jeej | 71:f03727ff0f99 | 561 | // Get all responses in response period |
Jeej | 71:f03727ff0f99 | 562 | D7A_RESP_ALL, |
Jeej | 71:f03727ff0f99 | 563 | // Get at least one acknowledgement per request during response period |
Jeej | 71:f03727ff0f99 | 564 | D7A_RESP_ANY, |
Jeej | 71:f03727ff0f99 | 565 | // RFU |
Jeej | 71:f03727ff0f99 | 566 | D7A_RESP_RFU_1, |
Jeej | 71:f03727ff0f99 | 567 | // No response requested, repeat 3 times |
Jeej | 71:f03727ff0f99 | 568 | D7A_RESP_NO_RPT, |
Jeej | 71:f03727ff0f99 | 569 | // Get all responses in response period, only Responders having not received packets respond |
Jeej | 71:f03727ff0f99 | 570 | D7A_RESP_ON_ERR, |
Jeej | 71:f03727ff0f99 | 571 | // Get at least one acknowledgement per request during response period. |
Jeej | 71:f03727ff0f99 | 572 | // Stick to a single responder when possible |
Jeej | 71:f03727ff0f99 | 573 | D7A_RESP_PREFERRED, |
Jeej | 71:f03727ff0f99 | 574 | // RFU |
Jeej | 71:f03727ff0f99 | 575 | D7A_RESP_RFU_2, |
Jeej | 71:f03727ff0f99 | 576 | |
Jeej | 71:f03727ff0f99 | 577 | } d7a_resp_t; |
Jeej | 71:f03727ff0f99 | 578 | |
Jeej | 71:f03727ff0f99 | 579 | |
Jeej | 43:28202405094d | 580 | //====================================================================== |
Jeej | 43:28202405094d | 581 | // Prototypes |
Jeej | 43:28202405094d | 582 | //====================================================================== |
Jeej | 43:28202405094d | 583 | |
Jeej | 43:28202405094d | 584 | //====================================================================== |
Jeej | 43:28202405094d | 585 | // d7a_open |
Jeej | 43:28202405094d | 586 | //---------------------------------------------------------------------- |
Jeej | 43:28202405094d | 587 | /// @brief Open D7A driver and start the modem |
Jeej | 53:3e4aa4b57090 | 588 | /// @param com_config Com port configuration structure |
Jeej | 53:3e4aa4b57090 | 589 | /// @param reset_pin Reset pin |
Jeej | 53:3e4aa4b57090 | 590 | /// @param callbacks File system callbacks (You cannot use local files if this is not specified) |
Jeej | 45:b85384e7d825 | 591 | /// @return d7a_errors_t Error code |
Jeej | 43:28202405094d | 592 | //====================================================================== |
Jeej | 55:5ea18a3a01b9 | 593 | d7a_errors_t d7a_open(const d7a_com_config_t* com_config, |
Jeej | 55:5ea18a3a01b9 | 594 | PinName reset_pin, |
Jeej | 55:5ea18a3a01b9 | 595 | const d7a_callbacks_t* callbacks); |
Jeej | 43:28202405094d | 596 | |
Jeej | 43:28202405094d | 597 | //====================================================================== |
Jeej | 43:28202405094d | 598 | // d7a_close |
Jeej | 43:28202405094d | 599 | //---------------------------------------------------------------------- |
Jeej | 43:28202405094d | 600 | /// @brief Close D7A driver and stop the modem |
Jeej | 45:b85384e7d825 | 601 | /// @return d7a_errors_t Error code |
Jeej | 43:28202405094d | 602 | //====================================================================== |
Jeej | 45:b85384e7d825 | 603 | d7a_errors_t d7a_close(void); |
Jeej | 43:28202405094d | 604 | |
Jeej | 43:28202405094d | 605 | //====================================================================== |
Jeej | 43:28202405094d | 606 | // d7a_start |
Jeej | 43:28202405094d | 607 | //---------------------------------------------------------------------- |
Jeej | 43:28202405094d | 608 | /// @brief Start the modem |
Jeej | 45:b85384e7d825 | 609 | /// @return d7a_errors_t Error code |
Jeej | 43:28202405094d | 610 | //====================================================================== |
Jeej | 45:b85384e7d825 | 611 | d7a_errors_t d7a_start(void); |
Jeej | 43:28202405094d | 612 | |
Jeej | 43:28202405094d | 613 | //====================================================================== |
Jeej | 43:28202405094d | 614 | // d7a_stop |
Jeej | 43:28202405094d | 615 | //---------------------------------------------------------------------- |
Jeej | 43:28202405094d | 616 | /// @brief Stop the modem (goes to low power) |
Jeej | 45:b85384e7d825 | 617 | /// @return d7a_errors_t Error code |
Jeej | 43:28202405094d | 618 | //====================================================================== |
Jeej | 45:b85384e7d825 | 619 | d7a_errors_t d7a_stop(void); |
Jeej | 43:28202405094d | 620 | |
Jeej | 43:28202405094d | 621 | //====================================================================== |
Jeej | 43:28202405094d | 622 | // d7a_create |
Jeej | 43:28202405094d | 623 | //---------------------------------------------------------------------- |
Jeej | 43:28202405094d | 624 | /// @brief Creates a file on the modem |
Jeej | 53:3e4aa4b57090 | 625 | /// @param file_id ID of the file to create |
Jeej | 53:3e4aa4b57090 | 626 | /// @param prop Type of file |
Jeej | 53:3e4aa4b57090 | 627 | /// @param perm Access permissions |
Jeej | 53:3e4aa4b57090 | 628 | /// @param size Length of the created file |
Jeej | 53:3e4aa4b57090 | 629 | /// @param alloc Maximum size of the file |
Jeej | 55:5ea18a3a01b9 | 630 | /// @param action Type of action to trigger |
Jeej | 71:f03727ff0f99 | 631 | /// @param interface File ID of the interface file to use for notifications |
Jeej | 45:b85384e7d825 | 632 | /// @return d7a_errors_t Error code |
Jeej | 43:28202405094d | 633 | //====================================================================== |
Jeej | 55:5ea18a3a01b9 | 634 | d7a_errors_t d7a_create(const uint8_t file_id, |
Jeej | 55:5ea18a3a01b9 | 635 | d7a_fs_storage_t prop, |
Jeej | 55:5ea18a3a01b9 | 636 | d7a_fs_perm_t perm, |
Jeej | 55:5ea18a3a01b9 | 637 | uint32_t size, |
Jeej | 55:5ea18a3a01b9 | 638 | uint32_t alloc, |
Jeej | 71:f03727ff0f99 | 639 | d7a_action_t action = D7A_ACTION_NONE, |
Jeej | 71:f03727ff0f99 | 640 | const uint8_t interface = D7A_ITF_ONESHOT); |
Jeej | 43:28202405094d | 641 | |
Jeej | 43:28202405094d | 642 | //====================================================================== |
Jeej | 43:28202405094d | 643 | // d7a_declare |
Jeej | 43:28202405094d | 644 | //---------------------------------------------------------------------- |
mikl_andre | 48:950406be9810 | 645 | /// @brief Declare a file stored on the host to the modem (need to have implemented the fs_callbacks) |
Jeej | 53:3e4aa4b57090 | 646 | /// @param file_id ID of the file to declare |
Jeej | 53:3e4aa4b57090 | 647 | /// @param prop Type of file |
Jeej | 53:3e4aa4b57090 | 648 | /// @param perm Access permissions |
Jeej | 53:3e4aa4b57090 | 649 | /// @param size Length of the created file |
Jeej | 53:3e4aa4b57090 | 650 | /// @param alloc Maximum size of the file |
Jeej | 55:5ea18a3a01b9 | 651 | /// @param action Type of action to trigger |
Jeej | 71:f03727ff0f99 | 652 | /// @param interface File ID of the interface file to use for notifications |
Jeej | 45:b85384e7d825 | 653 | /// @return d7a_errors_t Error code |
Jeej | 43:28202405094d | 654 | //====================================================================== |
Jeej | 55:5ea18a3a01b9 | 655 | d7a_errors_t d7a_declare(const uint8_t file_id, |
Jeej | 55:5ea18a3a01b9 | 656 | d7a_fs_storage_t prop, |
Jeej | 55:5ea18a3a01b9 | 657 | d7a_fs_perm_t perm, |
Jeej | 55:5ea18a3a01b9 | 658 | uint32_t size, |
Jeej | 55:5ea18a3a01b9 | 659 | uint32_t alloc, |
Jeej | 55:5ea18a3a01b9 | 660 | d7a_action_t action = D7A_ACTION_NONE, |
Jeej | 71:f03727ff0f99 | 661 | const uint8_t interface = D7A_ITF_ONESHOT); |
Jeej | 43:28202405094d | 662 | |
Jeej | 43:28202405094d | 663 | //====================================================================== |
Jeej | 43:28202405094d | 664 | // d7a_read |
Jeej | 43:28202405094d | 665 | //---------------------------------------------------------------------- |
Jeej | 43:28202405094d | 666 | /// @brief Read data from a file |
Jeej | 53:3e4aa4b57090 | 667 | /// @param file_id File ID of file to read |
Jeej | 53:3e4aa4b57090 | 668 | /// @param offset Offset from which to start reading |
Jeej | 53:3e4aa4b57090 | 669 | /// @param size Size of data to read |
Jeej | 53:3e4aa4b57090 | 670 | /// @param buf Buffer to retrieve data |
Jeej | 53:3e4aa4b57090 | 671 | /// @param addressee Addressee to an eventual distant device |
Jeej | 53:3e4aa4b57090 | 672 | /// @param retry Index to the retry policy to use |
Jeej | 45:b85384e7d825 | 673 | /// @return d7a_errors_t Error code |
Jeej | 43:28202405094d | 674 | //====================================================================== |
Jeej | 58:38a366236bda | 675 | d7a_msg_t** d7a_read(const uint8_t file_id, |
Jeej | 55:5ea18a3a01b9 | 676 | const uint32_t offset, |
Jeej | 67:9ac9d109b80a | 677 | const uint32_t size, |
Jeej | 67:9ac9d109b80a | 678 | const uint8_t* root_key = NULL, |
Jeej | 55:5ea18a3a01b9 | 679 | d7a_addressee_t* addressee = NULL, |
Jeej | 55:5ea18a3a01b9 | 680 | alp_rpol_t retry = ALP_RPOL_ONESHOT); |
Jeej | 43:28202405094d | 681 | |
Jeej | 43:28202405094d | 682 | //====================================================================== |
Jeej | 43:28202405094d | 683 | // d7a_write |
Jeej | 43:28202405094d | 684 | //---------------------------------------------------------------------- |
Jeej | 43:28202405094d | 685 | /// @brief Write data to a file |
Jeej | 53:3e4aa4b57090 | 686 | /// @param file_id File ID of file to write |
Jeej | 53:3e4aa4b57090 | 687 | /// @param offset Offset from which to start reading |
Jeej | 53:3e4aa4b57090 | 688 | /// @param size Size of data to read |
Jeej | 53:3e4aa4b57090 | 689 | /// @param buf Buffer to retrieve data |
Jeej | 53:3e4aa4b57090 | 690 | /// @param addressee Addressee to an eventual distant device |
Jeej | 53:3e4aa4b57090 | 691 | /// @param retry Index to the retry policy to use |
Jeej | 53:3e4aa4b57090 | 692 | /// @param resp Wait to see if write is OK |
Jeej | 45:b85384e7d825 | 693 | /// @return d7a_errors_t Error code |
Jeej | 43:28202405094d | 694 | //====================================================================== |
Jeej | 67:9ac9d109b80a | 695 | d7a_msg_t** d7a_write(const uint8_t file_id, |
Jeej | 67:9ac9d109b80a | 696 | const uint32_t offset, |
Jeej | 67:9ac9d109b80a | 697 | const uint32_t size, |
Jeej | 67:9ac9d109b80a | 698 | const uint8_t* const buf, |
Jeej | 67:9ac9d109b80a | 699 | const uint8_t* root_key = NULL, |
Jeej | 55:5ea18a3a01b9 | 700 | d7a_addressee_t* addressee = NULL, |
Jeej | 55:5ea18a3a01b9 | 701 | alp_rpol_t retry = ALP_RPOL_ONESHOT, |
Jeej | 55:5ea18a3a01b9 | 702 | bool resp = true); |
Jeej | 46:665391110051 | 703 | |
Jeej | 67:9ac9d109b80a | 704 | d7a_msg_t** d7a_flush(const uint8_t file_id, |
Jeej | 67:9ac9d109b80a | 705 | const uint8_t* root_key = NULL, |
Jeej | 67:9ac9d109b80a | 706 | d7a_addressee_t* addressee = NULL, |
Jeej | 67:9ac9d109b80a | 707 | alp_rpol_t retry = ALP_RPOL_ONESHOT, |
Jeej | 67:9ac9d109b80a | 708 | bool resp = true); |
Jeej | 67:9ac9d109b80a | 709 | |
Jeej | 46:665391110051 | 710 | //====================================================================== |
mikl_andre | 48:950406be9810 | 711 | // d7a_notify |
Jeej | 46:665391110051 | 712 | //---------------------------------------------------------------------- |
Jeej | 46:665391110051 | 713 | /// @brief Write data to a file |
Jeej | 53:3e4aa4b57090 | 714 | /// @param file_id File ID of file to write |
Jeej | 53:3e4aa4b57090 | 715 | /// @param offset Offset from which to start writing |
Jeej | 53:3e4aa4b57090 | 716 | /// @param size Size of data to write |
Jeej | 46:665391110051 | 717 | /// @return d7a_errors_t Error code |
Jeej | 46:665391110051 | 718 | //====================================================================== |
Jeej | 55:5ea18a3a01b9 | 719 | d7a_errors_t d7a_notify(const uint8_t file_id, |
Jeej | 55:5ea18a3a01b9 | 720 | const uint32_t offset = 0, |
Jeej | 55:5ea18a3a01b9 | 721 | const uint32_t size = 0); |
Jeej | 43:28202405094d | 722 | |
Jeej | 60:8d4133fbc060 | 723 | //====================================================================== |
Jeej | 60:8d4133fbc060 | 724 | // d7a_free_msg |
Jeej | 60:8d4133fbc060 | 725 | //---------------------------------------------------------------------- |
Jeej | 68:d2778c6abf1a | 726 | /// @brief Free the message |
Jeej | 60:8d4133fbc060 | 727 | /// @param msg message to free |
Jeej | 60:8d4133fbc060 | 728 | //====================================================================== |
Jeej | 60:8d4133fbc060 | 729 | void d7a_free_msg(d7a_msg_t** msg); |
Jeej | 50:30440c9aeb7c | 730 | |
Jeej | 60:8d4133fbc060 | 731 | //====================================================================== |
Jeej | 60:8d4133fbc060 | 732 | // d7a_print_msg |
Jeej | 60:8d4133fbc060 | 733 | //---------------------------------------------------------------------- |
Jeej | 60:8d4133fbc060 | 734 | /// @brief Prints the message |
Jeej | 60:8d4133fbc060 | 735 | /// @param msg message to print |
Jeej | 60:8d4133fbc060 | 736 | //====================================================================== |
Jeej | 60:8d4133fbc060 | 737 | void d7a_print_msg(d7a_msg_t** msg); |
Jeej | 58:38a366236bda | 738 | |
Jeej | 50:30440c9aeb7c | 739 | //====================================================================== |
Jeej | 50:30440c9aeb7c | 740 | // d7a_modem_print_infos |
Jeej | 50:30440c9aeb7c | 741 | //---------------------------------------------------------------------- |
Jeej | 50:30440c9aeb7c | 742 | /// @brief Prints the modem infos |
Jeej | 50:30440c9aeb7c | 743 | //====================================================================== |
Jeej | 50:30440c9aeb7c | 744 | void d7a_modem_print_infos(void); |
Jeej | 50:30440c9aeb7c | 745 | |
Jeej | 68:d2778c6abf1a | 746 | //====================================================================== |
Jeej | 68:d2778c6abf1a | 747 | // d7a_modem_print_infos |
Jeej | 68:d2778c6abf1a | 748 | //---------------------------------------------------------------------- |
Jeej | 68:d2778c6abf1a | 749 | /// @brief Wait for modem to finish boot |
Jeej | 68:d2778c6abf1a | 750 | //====================================================================== |
Jeej | 68:d2778c6abf1a | 751 | d7a_errors_t d7a_wait_ready(uint32_t millisec = osWaitForever); |
Jeej | 50:30440c9aeb7c | 752 | |
Jeej | 50:30440c9aeb7c | 753 | |
Jeej | 43:28202405094d | 754 | #endif // _D7A_H_ |