Exportable version of WizziLab's modem driver.

Dependents:   modem_ref_helper

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?

UserRevisionLine numberNew 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