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