Exportable version of WizziLab's modem driver.
include/modem_ref.h@67:e458db8402dc, 2021-10-29 (annotated)
- Committer:
- marin_wizzi
- Date:
- Fri Oct 29 13:54:43 2021 +0000
- Revision:
- 67:e458db8402dc
- Parent:
- 65:c7749f9b6009
had to be commited for Scanner test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jeej | 19:701d5669f2e9 | 1 | /// @copyright |
Jeej | 19:701d5669f2e9 | 2 | /// ========================================================================={{{ |
Jeej | 19:701d5669f2e9 | 3 | /// Copyright (c) 2013-2016 WizziLab / |
Jeej | 19:701d5669f2e9 | 4 | /// All rights reserved / |
Jeej | 19:701d5669f2e9 | 5 | /// =========================================================================}}} |
Jeej | 19:701d5669f2e9 | 6 | /// @endcopyright |
Jeej | 19:701d5669f2e9 | 7 | |
Jeej | 19:701d5669f2e9 | 8 | // ======================================================================= |
Jeej | 19:701d5669f2e9 | 9 | /// @file modem_ref.h |
Jeej | 19:701d5669f2e9 | 10 | /// @brief Wizzilab Modem Reference Driver Implementation |
Jeej | 19:701d5669f2e9 | 11 | /// Source code should be disclosable and easily portable to |
Jeej | 19:701d5669f2e9 | 12 | /// any architecture. |
Jeej | 19:701d5669f2e9 | 13 | // ======================================================================= |
Jeej | 19:701d5669f2e9 | 14 | |
Jeej | 56:67e3d9608403 | 15 | #ifndef __MODEM_REF_H__ |
Jeej | 56:67e3d9608403 | 16 | #define __MODEM_REF_H__ |
Jeej | 19:701d5669f2e9 | 17 | |
Jeej | 56:67e3d9608403 | 18 | #include "mbed.h" |
Jeej | 19:701d5669f2e9 | 19 | #include "hal_types.h" |
Jeej | 19:701d5669f2e9 | 20 | |
Jeej | 19:701d5669f2e9 | 21 | #include "alp_spec.h" |
Jeej | 19:701d5669f2e9 | 22 | #include "alp_helpers.h" |
Jeej | 59:3b38b5f499db | 23 | #include "alp_payload.h" |
Jeej | 19:701d5669f2e9 | 24 | |
Jeej | 19:701d5669f2e9 | 25 | // Stuff depending on implementation |
Jeej | 19:701d5669f2e9 | 26 | #ifdef _ARCH_WIZZILAB_ |
Jeej | 19:701d5669f2e9 | 27 | // Map debug features on Wizzilab's kernel |
Jeej | 19:701d5669f2e9 | 28 | #include "kal.h" |
Jeej | 19:701d5669f2e9 | 29 | #define L_API (1 << 1) |
Jeej | 19:701d5669f2e9 | 30 | #define L_URC (1 << 2) |
Jeej | 19:701d5669f2e9 | 31 | #define L_SER (1 << 3) |
Jeej | 19:701d5669f2e9 | 32 | #define ASSERT(c,...) kal_dbg_assert(c, ##__VA_ARGS__) |
Jeej | 19:701d5669f2e9 | 33 | #define DPRINT(l,...) do {kal_dbg_cprintf(TLEV(7,l), ##__VA_ARGS__);} while(0) |
Jeej | 19:701d5669f2e9 | 34 | #define MALLOC(s) kal_malloc(s) |
Jeej | 19:701d5669f2e9 | 35 | #define FREE(s) kal_free(s) |
Jeej | 19:701d5669f2e9 | 36 | #else |
Jeej | 19:701d5669f2e9 | 37 | // TODO Map on host architecture |
Jeej | 19:701d5669f2e9 | 38 | #endif |
Jeej | 19:701d5669f2e9 | 39 | |
Jeej | 19:701d5669f2e9 | 40 | // Maximum number of concurrent 'users' |
Jeej | 19:701d5669f2e9 | 41 | #define MAX_USER_NB (8) |
Jeej | 19:701d5669f2e9 | 42 | |
Jeej | 19:701d5669f2e9 | 43 | // Depending on Host needs/capacities, choose variable-size buffer allocation style |
Jeej | 19:701d5669f2e9 | 44 | #if 1 // Auto stack alloc |
Jeej | 19:701d5669f2e9 | 45 | #define MAX_CMD_BUFFER_SIZE 256 |
Jeej | 19:701d5669f2e9 | 46 | #define ALLOC_BUFFER(_t,_b,_size) _t _b[MAX_CMD_BUFFER_SIZE]; |
Jeej | 19:701d5669f2e9 | 47 | //#define ALLOC_BUFFER(_t,_b,_size) _t _b[_size]; // If VLA available... |
Jeej | 19:701d5669f2e9 | 48 | #define DEALLOC_BUFFER(_b) |
Jeej | 19:701d5669f2e9 | 49 | #else // Dynamic alloc |
Jeej | 19:701d5669f2e9 | 50 | #define ALLOC_BUFFER(_t,_b,_size) _t* _b = MALLOC(_size); |
Jeej | 19:701d5669f2e9 | 51 | #define DEALLOC_BUFFER(_b) FREE(_b); |
Jeej | 19:701d5669f2e9 | 52 | #endif |
Jeej | 19:701d5669f2e9 | 53 | |
Jeej | 19:701d5669f2e9 | 54 | //====================================================================== |
Jeej | 19:701d5669f2e9 | 55 | // Modem Serial Link input/output functions |
Jeej | 19:701d5669f2e9 | 56 | //==================================================================={{{ |
Jeej | 19:701d5669f2e9 | 57 | // ALP protocol is conveyed on serial link encapsulated in WizziCom (WC) |
Jeej | 19:701d5669f2e9 | 58 | // packets. |
Jeej | 19:701d5669f2e9 | 59 | // WC Serial protocol: |
Jeej | 19:701d5669f2e9 | 60 | // +--------------+--------+--------+--------+---- - - - - - - - - - - --------+ |
Jeej | 19:701d5669f2e9 | 61 | // | SYNC | LEN | SEQ | FLOWID | PAYLOAD | |
Jeej | 19:701d5669f2e9 | 62 | // +--------------+--------+--------+--------+---- - - - - - - - - - - --------+ |
Jeej | 19:701d5669f2e9 | 63 | // | 2 bytes | 1 byte | 1 byte | 1 byte | LEN bytes | |
Jeej | 19:701d5669f2e9 | 64 | // |<------------>|<------>|<------>|<------>|<--- - - - - - - - - - - ------->| |
Jeej | 19:701d5669f2e9 | 65 | #define WC_SYNC_BYTE_0 0x01 |
Jeej | 19:701d5669f2e9 | 66 | #define WC_SYNC_BYTE_1 0x1F |
Jeej | 19:701d5669f2e9 | 67 | #define WC_HEADER_SIZE 5 |
Jeej | 19:701d5669f2e9 | 68 | |
Jeej | 19:701d5669f2e9 | 69 | #define WC_SYNC0_OFFSET 0 |
Jeej | 19:701d5669f2e9 | 70 | #define WC_SYNC1_OFFSET 1 |
Jeej | 19:701d5669f2e9 | 71 | #define WC_LEN_OFFSET 2 |
Jeej | 19:701d5669f2e9 | 72 | #define WC_SEQ_OFFSET 3 |
Jeej | 19:701d5669f2e9 | 73 | #define WC_FLOWID_OFFSET 4 |
Jeej | 19:701d5669f2e9 | 74 | |
Jeej | 32:0d95f66f654a | 75 | // ======================================================================= |
Jeej | 32:0d95f66f654a | 76 | // wm_cfg_t |
Jeej | 32:0d95f66f654a | 77 | // ----------------------------------------------------------------------- |
Jeej | 32:0d95f66f654a | 78 | /// Modem Configuration |
Jeej | 32:0d95f66f654a | 79 | // ===================================================================={{{ |
Jeej | 32:0d95f66f654a | 80 | TYPEDEF_STRUCT_PACKED |
Jeej | 32:0d95f66f654a | 81 | { |
Jeej | 32:0d95f66f654a | 82 | /// Automatic openning of D7A stack |
Jeej | 57:5444cfda9889 | 83 | u8 autostart_d7a; |
Jeej | 32:0d95f66f654a | 84 | /// Automatic 'Join' of LoRaWAN stack |
Jeej | 57:5444cfda9889 | 85 | u8 autostart_lwan; |
Jeej | 32:0d95f66f654a | 86 | /// Automatic procedure start time (sec) |
Jeej | 57:5444cfda9889 | 87 | u16 autostart_delay_s; |
Jeej | 32:0d95f66f654a | 88 | /// Debug COM port number (N/A:KAL_COM_NULL) |
Jeej | 57:5444cfda9889 | 89 | u8 dbg_com; |
Jeej | 32:0d95f66f654a | 90 | } wm_cfg_t; |
Jeej | 32:0d95f66f654a | 91 | //}}} |
Jeej | 32:0d95f66f654a | 92 | |
Jeej | 19:701d5669f2e9 | 93 | // Input:Serial-traffic coming from Modem must be packetized in WC chuncks |
Jeej | 19:701d5669f2e9 | 94 | // before being sent to modem-driver through 'modem_input'. |
Jeej | 19:701d5669f2e9 | 95 | // An example deserializer can be found in "wc_deserialized.c". |
Jeej | 19:701d5669f2e9 | 96 | //====================================================================== |
Jeej | 56:67e3d9608403 | 97 | // modem_ref_input |
Jeej | 19:701d5669f2e9 | 98 | //---------------------------------------------------------------------- |
Jeej | 19:701d5669f2e9 | 99 | /// @brief Parse packets and handles calls to relevant callbacks. |
Jeej | 19:701d5669f2e9 | 100 | /// @param flowid : WizziCom FlowID. |
Jeej | 19:701d5669f2e9 | 101 | /// @param payload : pointer to payload buffer. |
Jeej | 19:701d5669f2e9 | 102 | /// @param size : payload size in bytes. |
Jeej | 19:701d5669f2e9 | 103 | //====================================================================== |
Jeej | 57:5444cfda9889 | 104 | void modem_ref_input(u8 flowid, u8* payload, u8 size); |
Jeej | 19:701d5669f2e9 | 105 | |
Jeej | 19:701d5669f2e9 | 106 | // Output:Modem-driver sends data to Modem through calls to the 'send' |
Jeej | 56:67e3d9608403 | 107 | // function passed in 'modem_ref_open'. |
Jeej | 19:701d5669f2e9 | 108 | // 'send' must be provided by the host application. |
Jeej | 19:701d5669f2e9 | 109 | //====================================================================== |
Jeej | 19:701d5669f2e9 | 110 | // fx_serial_send_t |
Jeej | 19:701d5669f2e9 | 111 | //---------------------------------------------------------------------- |
Jeej | 19:701d5669f2e9 | 112 | /// @brief Send concatenation of 2 buffers of given size over serial link. |
Jeej | 19:701d5669f2e9 | 113 | /// @param buffer1 : Pointer to the 1st data buffer to be sent |
Jeej | 19:701d5669f2e9 | 114 | /// @param size1 : Size in bytes of the 1st buffer to be sent |
Jeej | 19:701d5669f2e9 | 115 | /// @param buffer2 : Pointer to the 2nd data buffer to be sent |
Jeej | 19:701d5669f2e9 | 116 | /// @param size2 : Size in bytes of the 2nd buffer to be sent |
Jeej | 19:701d5669f2e9 | 117 | /// @return number of bytes sent. |
Jeej | 19:701d5669f2e9 | 118 | /// @note either buffers can be of size zero. |
Jeej | 19:701d5669f2e9 | 119 | /// @note buffer1 is used for WC header |
Jeej | 19:701d5669f2e9 | 120 | /// @note buffer2 is used actual payload |
Jeej | 19:701d5669f2e9 | 121 | //====================================================================== |
Jeej | 57:5444cfda9889 | 122 | typedef int (fx_serial_send_t) (u8 type, u8* buffer2, u8 size2); |
Jeej | 19:701d5669f2e9 | 123 | |
Jeej | 19:701d5669f2e9 | 124 | //======================Low-Level-API================================}}} |
Jeej | 19:701d5669f2e9 | 125 | |
Jeej | 19:701d5669f2e9 | 126 | //====================================================================== |
Jeej | 19:701d5669f2e9 | 127 | // High-level API that must be provided by the host application |
Jeej | 19:701d5669f2e9 | 128 | //==================================================================={{{ |
Jeej | 19:701d5669f2e9 | 129 | |
Jeej | 19:701d5669f2e9 | 130 | //====================================================================== |
Jeej | 19:701d5669f2e9 | 131 | // fx_read_t |
Jeej | 19:701d5669f2e9 | 132 | //---------------------------------------------------------------------- |
Jeej | 19:701d5669f2e9 | 133 | /// @brief Called when ALP-Read is requested by the modem. |
Jeej | 19:701d5669f2e9 | 134 | /// Function must perform required actions to fullfil the request |
Jeej | 19:701d5669f2e9 | 135 | /// then should call 'respond_read' (or 'respond' in case of error) |
Jeej | 19:701d5669f2e9 | 136 | /// @param fid : File ID |
Jeej | 19:701d5669f2e9 | 137 | /// @param offset : Access Offset in bytes |
Jeej | 19:701d5669f2e9 | 138 | /// @param length : Access Size in bytes |
Jeej | 19:701d5669f2e9 | 139 | /// @param id : ID of the request |
Jeej | 19:701d5669f2e9 | 140 | //====================================================================== |
Jeej | 57:5444cfda9889 | 141 | typedef void (fx_read_t) (u8 action, u8 fid, u32 offset, u32 length, int id); |
Jeej | 19:701d5669f2e9 | 142 | |
Jeej | 19:701d5669f2e9 | 143 | //====================================================================== |
Jeej | 19:701d5669f2e9 | 144 | // fx_write_t |
Jeej | 19:701d5669f2e9 | 145 | //---------------------------------------------------------------------- |
Jeej | 19:701d5669f2e9 | 146 | /// @brief Called when ALP-Write is requested by the modem. |
Jeej | 19:701d5669f2e9 | 147 | /// Function must perform required actions to fullfil the request |
Jeej | 19:701d5669f2e9 | 148 | /// then should call 'respond' |
Jeej | 19:701d5669f2e9 | 149 | /// @param fid : File ID |
Jeej | 19:701d5669f2e9 | 150 | /// @param data : Pointer to the destination data buffer |
Jeej | 19:701d5669f2e9 | 151 | /// @param offset : Access Offset in bytes |
Jeej | 19:701d5669f2e9 | 152 | /// @param length : Access Size in bytes |
Jeej | 19:701d5669f2e9 | 153 | /// @param id : ID of the request |
Jeej | 19:701d5669f2e9 | 154 | //====================================================================== |
Jeej | 57:5444cfda9889 | 155 | typedef void (fx_write_t) (u8 action, u8 fid, void* data, u32 offset, u32 length, int id); |
Jeej | 19:701d5669f2e9 | 156 | |
Jeej | 19:701d5669f2e9 | 157 | //====================================================================== |
Jeej | 19:701d5669f2e9 | 158 | // fx_read_fprop_t |
Jeej | 19:701d5669f2e9 | 159 | //---------------------------------------------------------------------- |
Jeej | 19:701d5669f2e9 | 160 | /// @brief Called when ALP-Read-file-properties is requested by the modem. |
Jeej | 19:701d5669f2e9 | 161 | /// Function must perform required actions to fullfil the request |
Jeej | 19:701d5669f2e9 | 162 | /// then should call 'respond_fprop' (or 'respond' in case of error) |
Jeej | 19:701d5669f2e9 | 163 | /// @param fid : File ID |
Jeej | 19:701d5669f2e9 | 164 | /// @param id : ID of the request |
Jeej | 19:701d5669f2e9 | 165 | //====================================================================== |
Jeej | 57:5444cfda9889 | 166 | typedef void (fx_read_fprop_t) (u8 action, u8 fid, int id); |
Jeej | 19:701d5669f2e9 | 167 | |
Jeej | 19:701d5669f2e9 | 168 | //====================================================================== |
Jeej | 19:701d5669f2e9 | 169 | // fx_flush_t |
Jeej | 19:701d5669f2e9 | 170 | //---------------------------------------------------------------------- |
Jeej | 19:701d5669f2e9 | 171 | /// @brief Called when ALP-Flush is requested by the modem. |
Jeej | 19:701d5669f2e9 | 172 | /// Function must perform required actions to fullfil the request |
Jeej | 19:701d5669f2e9 | 173 | /// then should call 'respond' |
Jeej | 19:701d5669f2e9 | 174 | /// @param fid : File ID |
Jeej | 19:701d5669f2e9 | 175 | /// @param id : ID of the request |
Jeej | 19:701d5669f2e9 | 176 | //====================================================================== |
Jeej | 57:5444cfda9889 | 177 | typedef void (fx_flush_t) (u8 action, u8 fid, int id); |
Jeej | 19:701d5669f2e9 | 178 | |
Jeej | 19:701d5669f2e9 | 179 | //====================================================================== |
Jeej | 19:701d5669f2e9 | 180 | // fx_delete_t |
Jeej | 19:701d5669f2e9 | 181 | //---------------------------------------------------------------------- |
Jeej | 19:701d5669f2e9 | 182 | /// @brief Called when ALP-Delete is requested by the modem. |
Jeej | 19:701d5669f2e9 | 183 | /// Function must perform required actions to fullfil the request |
Jeej | 19:701d5669f2e9 | 184 | /// then should call 'respond' |
Jeej | 19:701d5669f2e9 | 185 | /// @param fid : File ID |
Jeej | 19:701d5669f2e9 | 186 | /// @param id : ID of the request |
Jeej | 19:701d5669f2e9 | 187 | //====================================================================== |
Jeej | 57:5444cfda9889 | 188 | typedef void (fx_delete_t) (u8 action, u8 fid, int id); |
Jeej | 19:701d5669f2e9 | 189 | |
Jeej | 19:701d5669f2e9 | 190 | //====================================================================== |
Jeej | 19:701d5669f2e9 | 191 | // fx_udata_t |
Jeej | 19:701d5669f2e9 | 192 | //---------------------------------------------------------------------- |
Jeej | 19:701d5669f2e9 | 193 | /// @brief Called when Unsollicited Data is received by the Modem (i.e. |
Jeej | 19:701d5669f2e9 | 194 | /// peer notifications etc). |
Jeej | 19:701d5669f2e9 | 195 | /// @param data : Pointer to the data buffer |
Jeej | 19:701d5669f2e9 | 196 | /// @param length : Data Size in bytes |
Jeej | 19:701d5669f2e9 | 197 | //====================================================================== |
Jeej | 57:5444cfda9889 | 198 | typedef void (fx_udata_t) (alp_payload_t*); |
Jeej | 19:701d5669f2e9 | 199 | |
Jeej | 19:701d5669f2e9 | 200 | //====================================================================== |
Jeej | 19:701d5669f2e9 | 201 | // fx_reset_t |
Jeej | 19:701d5669f2e9 | 202 | //---------------------------------------------------------------------- |
Jeej | 19:701d5669f2e9 | 203 | /// @brief Called when RESET URC is generated by the modem. |
Jeej | 56:67e3d9608403 | 204 | /// LDOWN URC is setup by the user through 'modem_ref_enable_urc' |
Jeej | 19:701d5669f2e9 | 205 | /// @param ifid : Interface File ID from which LDOWN is issued |
Jeej | 19:701d5669f2e9 | 206 | //====================================================================== |
Jeej | 19:701d5669f2e9 | 207 | typedef void (fx_reset_t) (void); |
Jeej | 19:701d5669f2e9 | 208 | |
Jeej | 19:701d5669f2e9 | 209 | //====================================================================== |
Jeej | 19:701d5669f2e9 | 210 | // fx_boot_t |
Jeej | 19:701d5669f2e9 | 211 | //---------------------------------------------------------------------- |
Jeej | 19:701d5669f2e9 | 212 | /// @brief Called when BOOT URC is generated by the modem. |
Jeej | 19:701d5669f2e9 | 213 | /// @param cause : Cause of the boot 'H':Pin/Hardware reset |
Jeej | 19:701d5669f2e9 | 214 | /// 'P':POR reset |
Jeej | 19:701d5669f2e9 | 215 | /// 'S':Software reset |
Jeej | 19:701d5669f2e9 | 216 | /// 'L':Low-power reset |
Jeej | 19:701d5669f2e9 | 217 | /// 'W':Watchdog reset |
Jeej | 19:701d5669f2e9 | 218 | /// @param nb_boot : Number of boots since last POR |
Jeej | 19:701d5669f2e9 | 219 | //====================================================================== |
Jeej | 57:5444cfda9889 | 220 | typedef void (fx_boot_t) (u8 cause, u16 nb_boot); |
Jeej | 19:701d5669f2e9 | 221 | |
Jeej | 19:701d5669f2e9 | 222 | // Set of functions passed together at modem openning |
Jeej | 19:701d5669f2e9 | 223 | typedef struct { |
Jeej | 19:701d5669f2e9 | 224 | // ALP File 'Action' callbacks |
Jeej | 19:701d5669f2e9 | 225 | fx_read_t* read; |
Jeej | 19:701d5669f2e9 | 226 | fx_write_t* write; |
Jeej | 19:701d5669f2e9 | 227 | fx_read_fprop_t* read_fprop; |
Jeej | 19:701d5669f2e9 | 228 | fx_flush_t* flush; |
Jeej | 19:701d5669f2e9 | 229 | fx_delete_t* remove; |
Jeej | 19:701d5669f2e9 | 230 | // 'URC' callbacks |
Jeej | 19:701d5669f2e9 | 231 | fx_udata_t* udata; |
Jeej | 19:701d5669f2e9 | 232 | fx_reset_t* reset; |
Jeej | 19:701d5669f2e9 | 233 | fx_boot_t* boot; |
Jeej | 56:67e3d9608403 | 234 | } modem_ref_callbacks_t; |
Jeej | 56:67e3d9608403 | 235 | |
Jeej | 19:701d5669f2e9 | 236 | //======================High-Level-API===============================}}} |
Jeej | 19:701d5669f2e9 | 237 | |
Jeej | 19:701d5669f2e9 | 238 | //====================================================================== |
Jeej | 19:701d5669f2e9 | 239 | // action_callback_t |
Jeej | 19:701d5669f2e9 | 240 | //---------------------------------------------------------------------- |
Jeej | 19:701d5669f2e9 | 241 | /// @brief Type of function called on response(s) generated by an |
Jeej | 19:701d5669f2e9 | 242 | /// 'action' function. Different functions of this kind can be |
Jeej | 19:701d5669f2e9 | 243 | /// associated to different IDs through 'get_id'. |
Jeej | 19:701d5669f2e9 | 244 | /// 'Action' function are subsequently called with relevant ID. |
Jeej | 19:701d5669f2e9 | 245 | /// @param terminal : '1' at the last call for this ID, '0' otherwise |
Jeej | 19:701d5669f2e9 | 246 | /// @param err : ALP Error code |
Jeej | 19:701d5669f2e9 | 247 | /// @param id : ID of the request |
Jeej | 19:701d5669f2e9 | 248 | //====================================================================== |
Jeej | 65:c7749f9b6009 | 249 | typedef void (action_callback_t) (u8 id); |
Jeej | 19:701d5669f2e9 | 250 | |
Jeej | 19:701d5669f2e9 | 251 | //====================================================================== |
Jeej | 56:67e3d9608403 | 252 | // modem_ref_open |
Jeej | 19:701d5669f2e9 | 253 | //---------------------------------------------------------------------- |
Jeej | 19:701d5669f2e9 | 254 | /// @brief Open Wizzilab Modem Driver |
Jeej | 19:701d5669f2e9 | 255 | /// @param send : User function implementing serial output. |
Jeej | 19:701d5669f2e9 | 256 | /// @param callbacks : Set of functions called by the driver upon |
Jeej | 19:701d5669f2e9 | 257 | /// reception of commands |
Jeej | 19:701d5669f2e9 | 258 | /// @return 0 |
Jeej | 19:701d5669f2e9 | 259 | //====================================================================== |
Jeej | 57:5444cfda9889 | 260 | void modem_ref_open(fx_serial_send_t* send, modem_ref_callbacks_t* callbacks); |
Jeej | 56:67e3d9608403 | 261 | void modem_ref_close(void); |
Jeej | 61:820395fc5572 | 262 | void modem_ref_set_boot_cb(fx_boot_t* boot_cb); |
Jeej | 19:701d5669f2e9 | 263 | |
Jeej | 19:701d5669f2e9 | 264 | //====================================================================== |
Jeej | 56:67e3d9608403 | 265 | // modem_ref_get_id |
Jeej | 19:701d5669f2e9 | 266 | //---------------------------------------------------------------------- |
Jeej | 19:701d5669f2e9 | 267 | /// @brief Request an ID to perform modem operations |
Jeej | 19:701d5669f2e9 | 268 | /// @param cb : Function called on responses generated for |
Jeej | 19:701d5669f2e9 | 269 | /// this ID. |
Jeej | 19:701d5669f2e9 | 270 | /// @return Positive ID value, -1 if no more IDs available. |
Jeej | 19:701d5669f2e9 | 271 | //====================================================================== |
Jeej | 56:67e3d9608403 | 272 | int modem_ref_get_id(action_callback_t* cb); |
Jeej | 19:701d5669f2e9 | 273 | |
Jeej | 19:701d5669f2e9 | 274 | //====================================================================== |
Jeej | 56:67e3d9608403 | 275 | // modem_ref_free_id |
Jeej | 19:701d5669f2e9 | 276 | //---------------------------------------------------------------------- |
Jeej | 19:701d5669f2e9 | 277 | /// @brief Release an ID |
Jeej | 19:701d5669f2e9 | 278 | /// @param id : ID to release. |
Jeej | 19:701d5669f2e9 | 279 | /// @return ID value, -1 if ID was not in use. |
Jeej | 19:701d5669f2e9 | 280 | //====================================================================== |
Jeej | 57:5444cfda9889 | 281 | int modem_ref_free_id(u8 id); |
Jeej | 19:701d5669f2e9 | 282 | |
Jeej | 19:701d5669f2e9 | 283 | //====================================================================== |
Jeej | 19:701d5669f2e9 | 284 | // "Action" functions performing requests to the modem |
Jeej | 19:701d5669f2e9 | 285 | //==================================================================={{{ |
Jeej | 19:701d5669f2e9 | 286 | |
Jeej | 57:5444cfda9889 | 287 | void modem_ref_alp(void* itf, alp_payload_t* alp_user, alp_payload_t** alp_rsp, int id); |
Jeej | 19:701d5669f2e9 | 288 | |
Jeej | 19:701d5669f2e9 | 289 | //==========================Action===================================}}} |
Jeej | 19:701d5669f2e9 | 290 | |
Jeej | 19:701d5669f2e9 | 291 | //====================================================================== |
Jeej | 19:701d5669f2e9 | 292 | // "Response" functions to be called-back on requests from the modem |
Jeej | 19:701d5669f2e9 | 293 | //==================================================================={{{ |
Jeej | 57:5444cfda9889 | 294 | void modem_ref_respond(u8 action, s8 status, int id); |
Jeej | 57:5444cfda9889 | 295 | void modem_ref_respond_fprop(u8 fid, alp_file_header_t* hdr, int id); |
Jeej | 57:5444cfda9889 | 296 | void modem_ref_respond_read(u8 fid, void* data, u32 offset, u32 length, int id); |
Jeej | 19:701d5669f2e9 | 297 | //==========================Response=================================}}} |
Jeej | 19:701d5669f2e9 | 298 | |
Jeej | 19:701d5669f2e9 | 299 | |
Jeej | 19:701d5669f2e9 | 300 | //======================================================================= |
Jeej | 19:701d5669f2e9 | 301 | // Modem File IDs are mapped from 64 to 127 |
Jeej | 19:701d5669f2e9 | 302 | // These files are mandatory when building an application that |
Jeej | 19:701d5669f2e9 | 303 | // uses Wizzilab's D7A Stack, so it will be included in all "Modem" |
Jeej | 19:701d5669f2e9 | 304 | // applications. |
Jeej | 19:701d5669f2e9 | 305 | //======================================================================= |
Jeej | 30:74aa36420c61 | 306 | // Modem Config/Status |
Jeej | 56:67e3d9608403 | 307 | #define FID_WM_REV 2 // aka D7A_FID_FIRMWARE_VERSION |
Jeej | 56:67e3d9608403 | 308 | #define FID_WM_RFU_64 64 |
Jeej | 56:67e3d9608403 | 309 | #define FID_HOST_REV 65 |
Jeej | 56:67e3d9608403 | 310 | #define FID_WM_SCRATCH 66 |
Jeej | 56:67e3d9608403 | 311 | #define FID_WM_STATUS 67 |
Jeej | 56:67e3d9608403 | 312 | #define FID_WM_CFG 68 |
Jeej | 56:67e3d9608403 | 313 | #define FID_WM_HWCFG 69 |
Jeej | 56:67e3d9608403 | 314 | #define FID_WM_CTRL 70 |
Jeej | 56:67e3d9608403 | 315 | #define FID_WM_LED_CFG 71 |
Jeej | 56:67e3d9608403 | 316 | #define FID_WM_DEBUG 72 |
Jeej | 56:67e3d9608403 | 317 | #define FID_WM_POWER_STATUS 73 // For GW power supervisor reporting |
Jeej | 56:67e3d9608403 | 318 | #define FID_WM_TLEV 74 // Trace levels |
Jeej | 56:67e3d9608403 | 319 | #define FID_WM_USER_STORAGE 75 // Big generic file for APPs to store data since we can't create permanent files on NRF52. |
Jeej | 56:67e3d9608403 | 320 | #define FID_WM_INVT 76 // Inventory commands |
Jeej | 56:67e3d9608403 | 321 | #define FID_WM_RFU_77 77 |
Jeej | 56:67e3d9608403 | 322 | #define FID_WM_RFU_78 78 |
Jeej | 56:67e3d9608403 | 323 | #define FID_WM_RFU_79 79 |
Jeej | 19:701d5669f2e9 | 324 | |
Jeej | 56:67e3d9608403 | 325 | // LORAWAN Stack |
Jeej | 56:67e3d9608403 | 326 | #define FID_LWAN_CFG 96 |
Jeej | 56:67e3d9608403 | 327 | #define FID_LWAN_NLS 97 |
Jeej | 56:67e3d9608403 | 328 | #define FID_LWAN_ITF 98 // XXX useless |
Jeej | 56:67e3d9608403 | 329 | #define FID_LWAN_STATUS 99 |
Jeej | 30:74aa36420c61 | 330 | |
Jeej | 19:701d5669f2e9 | 331 | // Action files |
Jeej | 56:67e3d9608403 | 332 | #define FID_ACTP_RPT_FULL 100 |
Jeej | 56:67e3d9608403 | 333 | #define FID_ACTP_RPT_PART 101 |
Jeej | 30:74aa36420c61 | 334 | |
Jeej | 56:67e3d9608403 | 335 | // Unallocated FIDs |
Jeej | 56:67e3d9608403 | 336 | #define FID_UNUSED_102 102 |
Jeej | 56:67e3d9608403 | 337 | #define FID_UNUSED_103 103 |
Jeej | 56:67e3d9608403 | 338 | #define FID_UNUSED_104 104 |
Jeej | 56:67e3d9608403 | 339 | #define FID_UNUSED_105 105 |
Jeej | 56:67e3d9608403 | 340 | #define FID_UNUSED_106 106 |
Jeej | 56:67e3d9608403 | 341 | #define FID_UNUSED_107 107 |
Jeej | 56:67e3d9608403 | 342 | #define FID_UNUSED_108 108 |
Jeej | 56:67e3d9608403 | 343 | #define FID_UNUSED_109 109 |
Jeej | 56:67e3d9608403 | 344 | |
Jeej | 56:67e3d9608403 | 345 | #define IFID_REPORT 110 |
Jeej | 30:74aa36420c61 | 346 | |
Jeej | 56:67e3d9608403 | 347 | // Unallocated FIDs |
Jeej | 56:67e3d9608403 | 348 | #define FID_UNUSED_111 111 |
Jeej | 56:67e3d9608403 | 349 | #define FID_UNUSED_112 112 |
Jeej | 56:67e3d9608403 | 350 | #define FID_UNUSED_113 113 |
Jeej | 56:67e3d9608403 | 351 | #define FID_UNUSED_114 114 |
Jeej | 56:67e3d9608403 | 352 | #define FID_UNUSED_115 115 |
Jeej | 56:67e3d9608403 | 353 | #define FID_UNUSED_116 116 |
Jeej | 56:67e3d9608403 | 354 | #define FID_UNUSED_117 117 |
Jeej | 56:67e3d9608403 | 355 | #define FID_UNUSED_118 118 |
Jeej | 56:67e3d9608403 | 356 | #define FID_UNUSED_119 119 |
Jeej | 56:67e3d9608403 | 357 | #define FID_UNUSED_120 120 |
Jeej | 56:67e3d9608403 | 358 | #define FID_UNUSED_121 121 |
Jeej | 56:67e3d9608403 | 359 | #define FID_UNUSED_122 122 |
Jeej | 56:67e3d9608403 | 360 | #define FID_UNUSED_123 123 |
Jeej | 30:74aa36420c61 | 361 | |
Jeej | 30:74aa36420c61 | 362 | // Modem Security protocols |
Jeej | 56:67e3d9608403 | 363 | #define FID_WM_CHALLENGE 124 |
Jeej | 30:74aa36420c61 | 364 | |
Jeej | 30:74aa36420c61 | 365 | // Modem CUP |
Jeej | 56:67e3d9608403 | 366 | #define FID_CUP_CFG_BCAST 125 |
Jeej | 56:67e3d9608403 | 367 | #define FID_CUP_CFG 126 |
Jeej | 56:67e3d9608403 | 368 | #define FID_CUP_CODE 127 |
Jeej | 30:74aa36420c61 | 369 | |
Jeej | 30:74aa36420c61 | 370 | // HST CUP |
Jeej | 56:67e3d9608403 | 371 | #define FID_APP_CUP_CFG_BCAST 252 |
Jeej | 56:67e3d9608403 | 372 | #define FID_APP_CUP_CFG 253 |
Jeej | 56:67e3d9608403 | 373 | #define FID_APP_CUP_CODE 254 |
Jeej | 56:67e3d9608403 | 374 | |
Jeej | 56:67e3d9608403 | 375 | // System status |
Jeej | 56:67e3d9608403 | 376 | #define FID_SYS_STATUS 255 |
Jeej | 30:74aa36420c61 | 377 | |
Jeej | 30:74aa36420c61 | 378 | #endif |
Jeej | 30:74aa36420c61 | 379 | |
Jeej | 56:67e3d9608403 | 380 | // vim:fdm=marker:fdc=2 |