Exportable version of WizziLab's modem driver.

Dependents:   modem_ref_helper

Committer:
Jeej
Date:
Wed Feb 20 13:43:19 2019 +0000
Revision:
45:6a4c373e1178
Parent:
44:656cbcc7843b
Child:
50:9eb5eed8b014
Fix typo.

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 19:701d5669f2e9 15 #ifndef __MODEM_REF_DRV_H__
Jeej 19:701d5669f2e9 16 #define __MODEM_REF_DRV_H__
Jeej 19:701d5669f2e9 17
Jeej 19:701d5669f2e9 18 #include "hal_types.h"
Jeej 19:701d5669f2e9 19
Jeej 19:701d5669f2e9 20 #include "alp_spec.h"
Jeej 19:701d5669f2e9 21 #include "alp_helpers.h"
Jeej 19:701d5669f2e9 22
Jeej 19:701d5669f2e9 23 // Stuff depending on implementation
Jeej 19:701d5669f2e9 24 #ifdef _ARCH_WIZZILAB_
Jeej 19:701d5669f2e9 25 // Map debug features on Wizzilab's kernel
Jeej 19:701d5669f2e9 26 #include "kal.h"
Jeej 19:701d5669f2e9 27 #define L_API (1 << 1)
Jeej 19:701d5669f2e9 28 #define L_URC (1 << 2)
Jeej 19:701d5669f2e9 29 #define L_SER (1 << 3)
Jeej 19:701d5669f2e9 30 #define ASSERT(c,...) kal_dbg_assert(c, ##__VA_ARGS__)
Jeej 19:701d5669f2e9 31 #define DPRINT(l,...) do {kal_dbg_cprintf(TLEV(7,l), ##__VA_ARGS__);} while(0)
Jeej 19:701d5669f2e9 32 #define MALLOC(s) kal_malloc(s)
Jeej 19:701d5669f2e9 33 #define FREE(s) kal_free(s)
Jeej 19:701d5669f2e9 34 #else
Jeej 19:701d5669f2e9 35 // TODO Map on host architecture
Jeej 19:701d5669f2e9 36 #endif
Jeej 19:701d5669f2e9 37
Jeej 19:701d5669f2e9 38 // Maximum number of concurrent 'users'
Jeej 19:701d5669f2e9 39 #define MAX_USER_NB (8)
Jeej 19:701d5669f2e9 40
Jeej 19:701d5669f2e9 41 // Depending on Host needs/capacities, choose variable-size buffer allocation style
Jeej 19:701d5669f2e9 42 #if 1 // Auto stack alloc
Jeej 19:701d5669f2e9 43 #define MAX_CMD_BUFFER_SIZE 256
Jeej 19:701d5669f2e9 44 #define ALLOC_BUFFER(_t,_b,_size) _t _b[MAX_CMD_BUFFER_SIZE];
Jeej 19:701d5669f2e9 45 //#define ALLOC_BUFFER(_t,_b,_size) _t _b[_size]; // If VLA available...
Jeej 19:701d5669f2e9 46 #define DEALLOC_BUFFER(_b)
Jeej 19:701d5669f2e9 47 #else // Dynamic alloc
Jeej 19:701d5669f2e9 48 #define ALLOC_BUFFER(_t,_b,_size) _t* _b = MALLOC(_size);
Jeej 19:701d5669f2e9 49 #define DEALLOC_BUFFER(_b) FREE(_b);
Jeej 19:701d5669f2e9 50 #endif
Jeej 19:701d5669f2e9 51
Jeej 19:701d5669f2e9 52 //======================================================================
Jeej 19:701d5669f2e9 53 // Modem Serial Link input/output functions
Jeej 19:701d5669f2e9 54 //==================================================================={{{
Jeej 19:701d5669f2e9 55 // ALP protocol is conveyed on serial link encapsulated in WizziCom (WC)
Jeej 19:701d5669f2e9 56 // packets.
Jeej 19:701d5669f2e9 57 // WC Serial protocol:
Jeej 19:701d5669f2e9 58 // +--------------+--------+--------+--------+---- - - - - - - - - - - --------+
Jeej 19:701d5669f2e9 59 // | SYNC | LEN | SEQ | FLOWID | PAYLOAD |
Jeej 19:701d5669f2e9 60 // +--------------+--------+--------+--------+---- - - - - - - - - - - --------+
Jeej 19:701d5669f2e9 61 // | 2 bytes | 1 byte | 1 byte | 1 byte | LEN bytes |
Jeej 19:701d5669f2e9 62 // |<------------>|<------>|<------>|<------>|<--- - - - - - - - - - - ------->|
Jeej 19:701d5669f2e9 63 #define WC_SYNC_BYTE_0 0x01
Jeej 19:701d5669f2e9 64 #define WC_SYNC_BYTE_1 0x1F
Jeej 19:701d5669f2e9 65 #define WC_HEADER_SIZE 5
Jeej 19:701d5669f2e9 66
Jeej 19:701d5669f2e9 67 #define WC_SYNC0_OFFSET 0
Jeej 19:701d5669f2e9 68 #define WC_SYNC1_OFFSET 1
Jeej 19:701d5669f2e9 69 #define WC_LEN_OFFSET 2
Jeej 19:701d5669f2e9 70 #define WC_SEQ_OFFSET 3
Jeej 19:701d5669f2e9 71 #define WC_FLOWID_OFFSET 4
Jeej 19:701d5669f2e9 72
Jeej 32:0d95f66f654a 73 // =======================================================================
Jeej 32:0d95f66f654a 74 // wm_cfg_t
Jeej 32:0d95f66f654a 75 // -----------------------------------------------------------------------
Jeej 32:0d95f66f654a 76 /// Modem Configuration
Jeej 32:0d95f66f654a 77 // ===================================================================={{{
Jeej 32:0d95f66f654a 78 TYPEDEF_STRUCT_PACKED
Jeej 32:0d95f66f654a 79 {
Jeej 32:0d95f66f654a 80 /// Automatic openning of D7A stack
Jeej 32:0d95f66f654a 81 u8 autostart_d7a;
Jeej 32:0d95f66f654a 82 /// Automatic 'Join' of LoRaWAN stack
Jeej 32:0d95f66f654a 83 u8 autostart_lwan;
Jeej 32:0d95f66f654a 84 /// Automatic procedure start time (sec)
Jeej 32:0d95f66f654a 85 u16 autostart_delay_s;
Jeej 32:0d95f66f654a 86 /// Debug COM port number (N/A:KAL_COM_NULL)
Jeej 32:0d95f66f654a 87 u8 dbg_com;
Jeej 32:0d95f66f654a 88 } wm_cfg_t;
Jeej 32:0d95f66f654a 89 //}}}
Jeej 32:0d95f66f654a 90
Jeej 19:701d5669f2e9 91 // Input:Serial-traffic coming from Modem must be packetized in WC chuncks
Jeej 19:701d5669f2e9 92 // before being sent to modem-driver through 'modem_input'.
Jeej 19:701d5669f2e9 93 // An example deserializer can be found in "wc_deserialized.c".
Jeej 19:701d5669f2e9 94 //======================================================================
Jeej 19:701d5669f2e9 95 // modem_input
Jeej 19:701d5669f2e9 96 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 97 /// @brief Parse packets and handles calls to relevant callbacks.
Jeej 19:701d5669f2e9 98 /// @param flowid : WizziCom FlowID.
Jeej 19:701d5669f2e9 99 /// @param payload : pointer to payload buffer.
Jeej 19:701d5669f2e9 100 /// @param size : payload size in bytes.
Jeej 19:701d5669f2e9 101 //======================================================================
Jeej 19:701d5669f2e9 102 protected void modem_input(u8 flowid,u8* payload,u8 size);
Jeej 19:701d5669f2e9 103
Jeej 19:701d5669f2e9 104 // Output:Modem-driver sends data to Modem through calls to the 'send'
Jeej 19:701d5669f2e9 105 // function passed in 'modem_open'.
Jeej 19:701d5669f2e9 106 // 'send' must be provided by the host application.
Jeej 19:701d5669f2e9 107 //======================================================================
Jeej 19:701d5669f2e9 108 // fx_serial_send_t
Jeej 19:701d5669f2e9 109 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 110 /// @brief Send concatenation of 2 buffers of given size over serial link.
Jeej 19:701d5669f2e9 111 /// @param buffer1 : Pointer to the 1st data buffer to be sent
Jeej 19:701d5669f2e9 112 /// @param size1 : Size in bytes of the 1st buffer to be sent
Jeej 19:701d5669f2e9 113 /// @param buffer2 : Pointer to the 2nd data buffer to be sent
Jeej 19:701d5669f2e9 114 /// @param size2 : Size in bytes of the 2nd buffer to be sent
Jeej 19:701d5669f2e9 115 /// @return number of bytes sent.
Jeej 19:701d5669f2e9 116 /// @note either buffers can be of size zero.
Jeej 19:701d5669f2e9 117 /// @note buffer1 is used for WC header
Jeej 19:701d5669f2e9 118 /// @note buffer2 is used actual payload
Jeej 19:701d5669f2e9 119 //======================================================================
Jeej 19:701d5669f2e9 120 typedef int (fx_serial_send_t) (u8* buffer1, u8 size1,u8* buffer2, u8 size2);
Jeej 19:701d5669f2e9 121
Jeej 19:701d5669f2e9 122 //======================Low-Level-API================================}}}
Jeej 19:701d5669f2e9 123
Jeej 19:701d5669f2e9 124 //======================================================================
Jeej 19:701d5669f2e9 125 // High-level API that must be provided by the host application
Jeej 19:701d5669f2e9 126 //==================================================================={{{
Jeej 19:701d5669f2e9 127
Jeej 19:701d5669f2e9 128 //======================================================================
Jeej 19:701d5669f2e9 129 // fx_read_t
Jeej 19:701d5669f2e9 130 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 131 /// @brief Called when ALP-Read is requested by the modem.
Jeej 19:701d5669f2e9 132 /// Function must perform required actions to fullfil the request
Jeej 19:701d5669f2e9 133 /// then should call 'respond_read' (or 'respond' in case of error)
Jeej 19:701d5669f2e9 134 /// @param fid : File ID
Jeej 19:701d5669f2e9 135 /// @param offset : Access Offset in bytes
Jeej 19:701d5669f2e9 136 /// @param length : Access Size in bytes
Jeej 19:701d5669f2e9 137 /// @param id : ID of the request
Jeej 19:701d5669f2e9 138 //======================================================================
Jeej 19:701d5669f2e9 139 typedef void (fx_read_t) (u8 fid,u32 offset,u32 length, int id);
Jeej 19:701d5669f2e9 140
Jeej 19:701d5669f2e9 141 //======================================================================
Jeej 19:701d5669f2e9 142 // fx_write_t
Jeej 19:701d5669f2e9 143 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 144 /// @brief Called when ALP-Write is requested by the modem.
Jeej 19:701d5669f2e9 145 /// Function must perform required actions to fullfil the request
Jeej 19:701d5669f2e9 146 /// then should call 'respond'
Jeej 19:701d5669f2e9 147 /// @param fid : File ID
Jeej 19:701d5669f2e9 148 /// @param data : Pointer to the destination data buffer
Jeej 19:701d5669f2e9 149 /// @param offset : Access Offset in bytes
Jeej 19:701d5669f2e9 150 /// @param length : Access Size in bytes
Jeej 19:701d5669f2e9 151 /// @param id : ID of the request
Jeej 19:701d5669f2e9 152 //======================================================================
Jeej 19:701d5669f2e9 153 typedef void (fx_write_t) (u8 fid,void *data,u32 offset,u32 length, int id);
Jeej 19:701d5669f2e9 154
Jeej 19:701d5669f2e9 155 //======================================================================
Jeej 19:701d5669f2e9 156 // fx_read_fprop_t
Jeej 19:701d5669f2e9 157 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 158 /// @brief Called when ALP-Read-file-properties is requested by the modem.
Jeej 19:701d5669f2e9 159 /// Function must perform required actions to fullfil the request
Jeej 19:701d5669f2e9 160 /// then should call 'respond_fprop' (or 'respond' in case of error)
Jeej 19:701d5669f2e9 161 /// @param fid : File ID
Jeej 19:701d5669f2e9 162 /// @param id : ID of the request
Jeej 19:701d5669f2e9 163 //======================================================================
Jeej 19:701d5669f2e9 164 typedef void (fx_read_fprop_t) (u8 fid, int id);
Jeej 19:701d5669f2e9 165
Jeej 19:701d5669f2e9 166 //======================================================================
Jeej 19:701d5669f2e9 167 // fx_flush_t
Jeej 19:701d5669f2e9 168 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 169 /// @brief Called when ALP-Flush is requested by the modem.
Jeej 19:701d5669f2e9 170 /// Function must perform required actions to fullfil the request
Jeej 19:701d5669f2e9 171 /// then should call 'respond'
Jeej 19:701d5669f2e9 172 /// @param fid : File ID
Jeej 19:701d5669f2e9 173 /// @param id : ID of the request
Jeej 19:701d5669f2e9 174 //======================================================================
Jeej 19:701d5669f2e9 175 typedef void (fx_flush_t) (u8 fid, int id);
Jeej 19:701d5669f2e9 176
Jeej 19:701d5669f2e9 177 //======================================================================
Jeej 19:701d5669f2e9 178 // fx_delete_t
Jeej 19:701d5669f2e9 179 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 180 /// @brief Called when ALP-Delete is requested by the modem.
Jeej 19:701d5669f2e9 181 /// Function must perform required actions to fullfil the request
Jeej 19:701d5669f2e9 182 /// then should call 'respond'
Jeej 19:701d5669f2e9 183 /// @param fid : File ID
Jeej 19:701d5669f2e9 184 /// @param id : ID of the request
Jeej 19:701d5669f2e9 185 //======================================================================
Jeej 19:701d5669f2e9 186 typedef void (fx_delete_t) (u8 fid, int id);
Jeej 19:701d5669f2e9 187
Jeej 19:701d5669f2e9 188 //======================================================================
Jeej 19:701d5669f2e9 189 // fx_udata_t
Jeej 19:701d5669f2e9 190 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 191 /// @brief Called when Unsollicited Data is received by the Modem (i.e.
Jeej 19:701d5669f2e9 192 /// peer notifications etc).
Jeej 19:701d5669f2e9 193 /// @param data : Pointer to the data buffer
Jeej 19:701d5669f2e9 194 /// @param length : Data Size in bytes
Jeej 19:701d5669f2e9 195 //======================================================================
Jeej 31:517fc900afba 196 typedef void (fx_udata_t) (void *data, u32 length);
Jeej 19:701d5669f2e9 197
Jeej 19:701d5669f2e9 198 //======================================================================
Jeej 19:701d5669f2e9 199 // fx_lqual_t
Jeej 19:701d5669f2e9 200 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 201 /// @brief Called when LQUAL URC is generated by the modem.
Jeej 19:701d5669f2e9 202 /// LQUAL URC is setup by the user through 'modem_enable_urc'.
Jeej 19:701d5669f2e9 203 /// LQUAL gives percentage of successfully sent packets on a
Jeej 19:701d5669f2e9 204 /// particular interface (IFID).
Jeej 19:701d5669f2e9 205 /// @param ifid : Interface File ID from which LQUAL is issued
Jeej 19:701d5669f2e9 206 /// @param per : Packet Error Rate in %
Jeej 19:701d5669f2e9 207 //======================================================================
Jeej 19:701d5669f2e9 208 typedef void (fx_lqual_t) (u8 ifid, int per);
Jeej 19:701d5669f2e9 209
Jeej 19:701d5669f2e9 210 //======================================================================
Jeej 19:701d5669f2e9 211 // fx_ldown_t
Jeej 19:701d5669f2e9 212 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 213 /// @brief Called when LDOWN URC is generated by the modem.
Jeej 19:701d5669f2e9 214 /// LDOWN URC is setup by the user through 'modem_enable_urc'
Jeej 19:701d5669f2e9 215 /// LDOWN is generated for a particular interface (IFID) after
Jeej 19:701d5669f2e9 216 /// a (configurable) number of consecutive transmission have failed.
Jeej 19:701d5669f2e9 217 /// @param ifid : Interface File ID from which LDOWN is issued
Jeej 19:701d5669f2e9 218 //======================================================================
Jeej 19:701d5669f2e9 219 typedef void (fx_ldown_t) (u8 ifid);
Jeej 19:701d5669f2e9 220
Jeej 19:701d5669f2e9 221 //======================================================================
Jeej 19:701d5669f2e9 222 // fx_reset_t
Jeej 19:701d5669f2e9 223 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 224 /// @brief Called when RESET URC is generated by the modem.
Jeej 19:701d5669f2e9 225 /// LDOWN URC is setup by the user through 'modem_enable_urc'
Jeej 19:701d5669f2e9 226 /// @param ifid : Interface File ID from which LDOWN is issued
Jeej 19:701d5669f2e9 227 //======================================================================
Jeej 19:701d5669f2e9 228 typedef void (fx_reset_t) (void);
Jeej 19:701d5669f2e9 229
Jeej 19:701d5669f2e9 230 //======================================================================
Jeej 19:701d5669f2e9 231 // fx_boot_t
Jeej 19:701d5669f2e9 232 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 233 /// @brief Called when BOOT URC is generated by the modem.
Jeej 19:701d5669f2e9 234 /// @param cause : Cause of the boot 'H':Pin/Hardware reset
Jeej 19:701d5669f2e9 235 /// 'P':POR reset
Jeej 19:701d5669f2e9 236 /// 'S':Software reset
Jeej 19:701d5669f2e9 237 /// 'L':Low-power reset
Jeej 19:701d5669f2e9 238 /// 'W':Watchdog reset
Jeej 19:701d5669f2e9 239 /// @param nb_boot : Number of boots since last POR
Jeej 19:701d5669f2e9 240 //======================================================================
Jeej 19:701d5669f2e9 241 typedef void (fx_boot_t) (u8 cause, u16 nb_boot);
Jeej 19:701d5669f2e9 242
Jeej 25:14c01b9fc04d 243 //======================================================================
Jeej 30:74aa36420c61 244 // fx_busy_t
Jeej 25:14c01b9fc04d 245 //----------------------------------------------------------------------
Jeej 25:14c01b9fc04d 246 /// @brief Called when BUSY URC is generated by the modem.
Jeej 25:14c01b9fc04d 247 /// @param busy : 0 if not busy, else busy
Jeej 25:14c01b9fc04d 248 //======================================================================
Jeej 25:14c01b9fc04d 249 typedef void (fx_busy_t) (u8 busy);
Jeej 25:14c01b9fc04d 250
Jeej 41:6f83174ffed4 251 //======================================================================
Jeej 41:6f83174ffed4 252 // fx_itf_busy_t
Jeej 41:6f83174ffed4 253 //----------------------------------------------------------------------
Jeej 41:6f83174ffed4 254 /// @brief Called when BUSY URC is generated by the modem.
Jeej 41:6f83174ffed4 255 /// @param ifid : interface file id
Jeej 41:6f83174ffed4 256 /// @param busy : busy time in seconds
Jeej 41:6f83174ffed4 257 //======================================================================
Jeej 41:6f83174ffed4 258 typedef void (fx_itf_busy_t) (u8 ifid, u32 busy);
Jeej 41:6f83174ffed4 259
Jeej 19:701d5669f2e9 260 // Set of functions passed together at modem openning
Jeej 19:701d5669f2e9 261 typedef struct {
Jeej 19:701d5669f2e9 262 // ALP File 'Action' callbacks
Jeej 19:701d5669f2e9 263 fx_read_t* read;
Jeej 19:701d5669f2e9 264 fx_write_t* write;
Jeej 19:701d5669f2e9 265 fx_read_fprop_t* read_fprop;
Jeej 19:701d5669f2e9 266 fx_flush_t* flush;
Jeej 19:701d5669f2e9 267 fx_delete_t* remove;
Jeej 19:701d5669f2e9 268 // 'URC' callbacks
Jeej 19:701d5669f2e9 269 fx_udata_t* udata;
Jeej 19:701d5669f2e9 270 fx_lqual_t* lqual;
Jeej 19:701d5669f2e9 271 fx_ldown_t* ldown;
Jeej 19:701d5669f2e9 272 fx_reset_t* reset;
Jeej 19:701d5669f2e9 273 fx_boot_t* boot;
Jeej 25:14c01b9fc04d 274 fx_busy_t* busy;
Jeej 41:6f83174ffed4 275 fx_itf_busy_t* itf_busy;
Jeej 19:701d5669f2e9 276 } modem_callbacks_t;
Jeej 19:701d5669f2e9 277 //======================High-Level-API===============================}}}
Jeej 19:701d5669f2e9 278
Jeej 19:701d5669f2e9 279 //======================================================================
Jeej 19:701d5669f2e9 280 // action_callback_t
Jeej 19:701d5669f2e9 281 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 282 /// @brief Type of function called on response(s) generated by an
Jeej 19:701d5669f2e9 283 /// 'action' function. Different functions of this kind can be
Jeej 19:701d5669f2e9 284 /// associated to different IDs through 'get_id'.
Jeej 19:701d5669f2e9 285 /// 'Action' function are subsequently called with relevant ID.
Jeej 19:701d5669f2e9 286 /// @param terminal : '1' at the last call for this ID, '0' otherwise
Jeej 19:701d5669f2e9 287 /// @param err : ALP Error code
Jeej 19:701d5669f2e9 288 /// @param id : ID of the request
Jeej 19:701d5669f2e9 289 //======================================================================
Jeej 19:701d5669f2e9 290 typedef void (action_callback_t) (u8 terminal, s8 err, u8 id);
Jeej 19:701d5669f2e9 291
Jeej 19:701d5669f2e9 292 //======================================================================
Jeej 19:701d5669f2e9 293 // modem_open
Jeej 19:701d5669f2e9 294 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 295 /// @brief Open Wizzilab Modem Driver
Jeej 19:701d5669f2e9 296 /// @param send : User function implementing serial output.
Jeej 19:701d5669f2e9 297 /// @param callbacks : Set of functions called by the driver upon
Jeej 19:701d5669f2e9 298 /// reception of commands
Jeej 19:701d5669f2e9 299 /// @return 0
Jeej 19:701d5669f2e9 300 //======================================================================
Jeej 19:701d5669f2e9 301 public void modem_open(fx_serial_send_t* send,modem_callbacks_t* callbacks);
Jeej 19:701d5669f2e9 302 public void modem_close(void);
Jeej 19:701d5669f2e9 303
Jeej 19:701d5669f2e9 304 //======================================================================
Jeej 19:701d5669f2e9 305 // modem_get_id
Jeej 19:701d5669f2e9 306 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 307 /// @brief Request an ID to perform modem operations
Jeej 19:701d5669f2e9 308 /// @param cb : Function called on responses generated for
Jeej 19:701d5669f2e9 309 /// this ID.
Jeej 19:701d5669f2e9 310 /// @return Positive ID value, -1 if no more IDs available.
Jeej 19:701d5669f2e9 311 //======================================================================
Jeej 19:701d5669f2e9 312 public int modem_get_id(action_callback_t* cb);
Jeej 19:701d5669f2e9 313
Jeej 19:701d5669f2e9 314 //======================================================================
Jeej 19:701d5669f2e9 315 // modem_free_id
Jeej 19:701d5669f2e9 316 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 317 /// @brief Release an ID
Jeej 19:701d5669f2e9 318 /// @param id : ID to release.
Jeej 19:701d5669f2e9 319 /// @return ID value, -1 if ID was not in use.
Jeej 19:701d5669f2e9 320 //======================================================================
Jeej 19:701d5669f2e9 321 public int modem_free_id(u8 id);
Jeej 19:701d5669f2e9 322
Jeej 19:701d5669f2e9 323 //======================================================================
Jeej 19:701d5669f2e9 324 // "Action" functions performing requests to the modem
Jeej 19:701d5669f2e9 325 //==================================================================={{{
Jeej 19:701d5669f2e9 326
Jeej 19:701d5669f2e9 327 //======================================================================
Jeej 19:701d5669f2e9 328 // modem_read_file
Jeej 19:701d5669f2e9 329 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 330 /// @brief Read a file on Modem
Jeej 19:701d5669f2e9 331 /// @param fid : File ID
Jeej 19:701d5669f2e9 332 /// @param data : Pointer to the destination data buffer
Jeej 19:701d5669f2e9 333 /// @param offset : Access Offset in bytes
Jeej 19:701d5669f2e9 334 /// @param length : Access Size in bytes
Jeej 19:701d5669f2e9 335 /// @param id : User ID
Jeej 19:701d5669f2e9 336 //======================================================================
Jeej 19:701d5669f2e9 337 public void modem_read_file(u8 fid, void *data, u32 offset, u32 length, u8 id);
Jeej 19:701d5669f2e9 338
Jeej 19:701d5669f2e9 339 //======================================================================
Jeej 19:701d5669f2e9 340 // modem_read_fprop
Jeej 19:701d5669f2e9 341 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 342 /// @brief Read a file-properties on Modem
Jeej 19:701d5669f2e9 343 /// @param fid : File ID
Jeej 19:701d5669f2e9 344 /// @param data : Pointer to the destination data buffer
Jeej 19:701d5669f2e9 345 /// @param id : User ID
Jeej 19:701d5669f2e9 346 //======================================================================
Jeej 19:701d5669f2e9 347 public void modem_read_fprop(u8 fid, alp_file_header_t* data, u8 id);
Jeej 19:701d5669f2e9 348
Jeej 19:701d5669f2e9 349 //======================================================================
Jeej 19:701d5669f2e9 350 // modem_read_fprop
Jeej 19:701d5669f2e9 351 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 352 /// @brief Read a file-properties on Modem with ROOT privileges
Jeej 19:701d5669f2e9 353 /// @param fid : File ID
Jeej 19:701d5669f2e9 354 /// @param data : Pointer to the destination data buffer
Jeej 19:701d5669f2e9 355 /// @param root_key : Pointer to the ROOT key
Jeej 19:701d5669f2e9 356 /// @param id : User ID
Jeej 19:701d5669f2e9 357 //======================================================================
Jeej 19:701d5669f2e9 358 public void modem_read_fprop_root(u8 fid, alp_file_header_t* data, u8* root_key, u8 id);
Jeej 19:701d5669f2e9 359
Jeej 19:701d5669f2e9 360 //======================================================================
Jeej 19:701d5669f2e9 361 // modem_write_fprop
Jeej 19:701d5669f2e9 362 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 363 /// @brief Write a file-properties on Modem
Jeej 19:701d5669f2e9 364 /// @param fid : File ID
Jeej 19:701d5669f2e9 365 /// @param data : Pointer to the header data
Jeej 19:701d5669f2e9 366 /// @param id : User ID
Jeej 19:701d5669f2e9 367 //======================================================================
Jeej 43:6e3b117f1d67 368 public void modem_write_fprop(u8 fid, alp_file_header_t* data, u8 id);
Jeej 19:701d5669f2e9 369
Jeej 19:701d5669f2e9 370 //======================================================================
Jeej 19:701d5669f2e9 371 // modem_write_fprop_root
Jeej 19:701d5669f2e9 372 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 373 /// @brief Write a file-properties on Modem with ROOT privileges
Jeej 19:701d5669f2e9 374 /// @param fid : File ID
Jeej 19:701d5669f2e9 375 /// @param data : Pointer to the header data
Jeej 19:701d5669f2e9 376 /// @param root_key : Pointer to the ROOT key
Jeej 19:701d5669f2e9 377 /// @param id : User ID
Jeej 19:701d5669f2e9 378 //======================================================================
Jeej 43:6e3b117f1d67 379 public void modem_write_fprop_root(u8 fid, alp_file_header_t* data, u8* root_key, u8 id);
Jeej 19:701d5669f2e9 380
Jeej 19:701d5669f2e9 381 //======================================================================
Jeej 19:701d5669f2e9 382 // modem_write_file
Jeej 19:701d5669f2e9 383 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 384 /// @brief Write a file on Modem
Jeej 19:701d5669f2e9 385 /// @note Writing can trigger a 'notification' depending on file properties.
Jeej 19:701d5669f2e9 386 /// @param fid : File ID
Jeej 19:701d5669f2e9 387 /// @param data : Pointer to the source data buffer
Jeej 19:701d5669f2e9 388 /// @param offset : Access Offset in bytes
Jeej 19:701d5669f2e9 389 /// @param length : Access Size in bytes
Jeej 19:701d5669f2e9 390 /// @param id : User ID
Jeej 19:701d5669f2e9 391 //======================================================================
Jeej 19:701d5669f2e9 392 public void modem_write_file(u8 fid, void *data, u32 offset, u32 length, u8 id);
Jeej 19:701d5669f2e9 393
Jeej 19:701d5669f2e9 394 //======================================================================
Jeej 19:701d5669f2e9 395 // modem_write_file_root
Jeej 19:701d5669f2e9 396 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 397 /// @brief Write a file on Modem with ROOT privileges
Jeej 19:701d5669f2e9 398 /// @note Writing can trigger a 'notification' depending on file properties.
Jeej 19:701d5669f2e9 399 /// @param fid : File ID
Jeej 19:701d5669f2e9 400 /// @param data : Pointer to the source data buffer
Jeej 19:701d5669f2e9 401 /// @param offset : Access Offset in bytes
Jeej 19:701d5669f2e9 402 /// @param length : Access Size in bytes
Jeej 19:701d5669f2e9 403 /// @param root_key : Pointer to the ROOT key
Jeej 19:701d5669f2e9 404 /// @param id : User ID
Jeej 19:701d5669f2e9 405 //======================================================================
Jeej 19:701d5669f2e9 406 public void modem_write_file_root(u8 fid, void *data, u32 offset, u32 length, u8* root_key, u8 id);
Jeej 19:701d5669f2e9 407
Jeej 19:701d5669f2e9 408 //======================================================================
Jeej 19:701d5669f2e9 409 // modem_flush_file
Jeej 19:701d5669f2e9 410 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 411 /// @brief Flush a file on Modem
Jeej 19:701d5669f2e9 412 /// @param fid : File ID
Jeej 19:701d5669f2e9 413 /// @param id : User ID
Jeej 19:701d5669f2e9 414 //======================================================================
Jeej 19:701d5669f2e9 415 public void modem_flush_file(u8 fid, u8 id);
Jeej 19:701d5669f2e9 416
Jeej 19:701d5669f2e9 417 //======================================================================
Jeej 19:701d5669f2e9 418 // modem_write_file_root
Jeej 19:701d5669f2e9 419 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 420 /// @brief Flush a file on Modem with ROOT privileges
Jeej 19:701d5669f2e9 421 /// @param fid : File ID
Jeej 19:701d5669f2e9 422 /// @param root_key : Pointer to the ROOT key
Jeej 19:701d5669f2e9 423 /// @param id : User ID
Jeej 19:701d5669f2e9 424 //======================================================================
Jeej 19:701d5669f2e9 425 public void modem_flush_file_root(u8 fid, u8* root_key, u8 id);
Jeej 19:701d5669f2e9 426
Jeej 19:701d5669f2e9 427 //======================================================================
Jeej 19:701d5669f2e9 428 // modem_declare_file
Jeej 19:701d5669f2e9 429 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 430 /// @brief Declare a local file to the Modem. Once declared, the file
Jeej 19:701d5669f2e9 431 /// becomes virtually part of Modem's file-system and can:
Jeej 19:701d5669f2e9 432 /// - be remotely accessed (depending on its permissions)
Jeej 19:701d5669f2e9 433 /// - be "Notified" through notify_file use
Jeej 19:701d5669f2e9 434 /// @note The file must exist locally.
Jeej 19:701d5669f2e9 435 /// @note Modem will access the file when needed using ALP commands.
Jeej 19:701d5669f2e9 436 /// @param fid : File ID
Jeej 19:701d5669f2e9 437 /// @param hdr : ALP File Header.
Jeej 19:701d5669f2e9 438 /// @param local : File is local.
Jeej 19:701d5669f2e9 439 /// @param id : User ID
Jeej 19:701d5669f2e9 440 //======================================================================
Jeej 19:701d5669f2e9 441 public void modem_declare_file(u8 fid, alp_file_header_t* hdr, u8 local, u8 id);
Jeej 19:701d5669f2e9 442
Jeej 19:701d5669f2e9 443 //======================================================================
Jeej 19:701d5669f2e9 444 // modem_create_file
Jeej 19:701d5669f2e9 445 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 446 /// @brief Creates a file on the Modem.
Jeej 19:701d5669f2e9 447 /// @param fid : File ID
Jeej 19:701d5669f2e9 448 /// @param hdr : ALP File Header.
Jeej 19:701d5669f2e9 449 /// @param id : User ID
Jeej 19:701d5669f2e9 450 //======================================================================
Jeej 19:701d5669f2e9 451 public void modem_create_file(u8 fid, alp_file_header_t* hdr, u8 id);
Jeej 19:701d5669f2e9 452
Jeej 19:701d5669f2e9 453 //======================================================================
Jeej 19:701d5669f2e9 454 // modem_delete_file
Jeej 19:701d5669f2e9 455 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 456 /// @brief Deletes a file on the Modem.
Jeej 19:701d5669f2e9 457 /// @param fid : File ID
Jeej 19:701d5669f2e9 458 /// @param id : User ID
Jeej 19:701d5669f2e9 459 //======================================================================
Jeej 19:701d5669f2e9 460 public void modem_delete_file(u8 fid, u8 id);
Jeej 19:701d5669f2e9 461
Jeej 41:6f83174ffed4 462 public void modem_delete_file_root(u8 fid, u8* root_key, u8 id);
Jeej 41:6f83174ffed4 463
Jeej 19:701d5669f2e9 464 //======================================================================
Jeej 19:701d5669f2e9 465 // modem_notify_file
Jeej 19:701d5669f2e9 466 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 467 /// @brief "Notify" a local file using its D7AActP properties.
Jeej 19:701d5669f2e9 468 /// @note The file must exist locally and must have been 'declared'.
Jeej 19:701d5669f2e9 469 /// @param fid : File ID
Jeej 19:701d5669f2e9 470 /// @param offset : Access Offset in bytes
Jeej 19:701d5669f2e9 471 /// @param length : Access Size in bytes
Jeej 19:701d5669f2e9 472 /// @param id : User ID
Jeej 19:701d5669f2e9 473 //======================================================================
Jeej 19:701d5669f2e9 474 public void modem_notify_file(u8 fid, u32 offset, u32 length, u8 id);
Jeej 19:701d5669f2e9 475
Jeej 19:701d5669f2e9 476 //======================================================================
Jeej 19:701d5669f2e9 477 // modem_alp_raw
Jeej 19:701d5669f2e9 478 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 479 /// @brief Execute specific ALP payload on Modem.
Jeej 19:701d5669f2e9 480 /// @param payload : pointer to ALP Payload to be executed on Modem
Jeej 19:701d5669f2e9 481 /// @param length : ALP Payload size
Jeej 19:701d5669f2e9 482 /// @param id : User ID
Jeej 19:701d5669f2e9 483 //======================================================================
Jeej 19:701d5669f2e9 484 public void modem_send_raw_alp(u8* payload, u32 length, u8 id);
Jeej 19:701d5669f2e9 485
Jeej 19:701d5669f2e9 486 public void modem_send_file_content(u8* itf, u8 itf_length, void *istatus, u8 fid, void *data,u32 offset,u32 length, u8 id);
Jeej 19:701d5669f2e9 487
Jeej 19:701d5669f2e9 488 public void modem_remote_read_file(u8* itf, u8 itf_length, void *istatus , u8 fid, void *data, u32 offset, u32 length, u8 id);
Jeej 19:701d5669f2e9 489
Jeej 19:701d5669f2e9 490 public void modem_remote_write_file(u8* itf, u8 itf_length, void *istatus , u8 fid, void *data, u32 offset, u32 length, u8 id);
Jeej 19:701d5669f2e9 491
Jeej 44:656cbcc7843b 492 public void modem_remote_write_file_root(u8* itf, u8 itf_length, void *istatus , u8 fid, void *data, u32 offset, u32 length, u8* root_key, u8 id);
Jeej 44:656cbcc7843b 493
Jeej 19:701d5669f2e9 494 public void modem_enable_urc(u8 type, u8 ifid, u8 val, u8 enable, u8 id);
Jeej 19:701d5669f2e9 495
Jeej 19:701d5669f2e9 496 public void modem_activate_itf(u8 type, u8 nb_dev, u8 ifid, u8 flags, u8 enable, u8 id);
Jeej 19:701d5669f2e9 497
Jeej 19:701d5669f2e9 498 //==========================Action===================================}}}
Jeej 19:701d5669f2e9 499
Jeej 19:701d5669f2e9 500 //======================================================================
Jeej 19:701d5669f2e9 501 // "Response" functions to be called-back on requests from the modem
Jeej 19:701d5669f2e9 502 //==================================================================={{{
Jeej 41:6f83174ffed4 503 public void modem_respond(s8 status, int id);
Jeej 19:701d5669f2e9 504 public void modem_respond_fprop(u8 fid, u8* hdr, int id);
Jeej 19:701d5669f2e9 505 public void modem_respond_read(u8 fid,void *data,u32 offset,u32 length, int id);
Jeej 19:701d5669f2e9 506 //==========================Response=================================}}}
Jeej 19:701d5669f2e9 507
Jeej 19:701d5669f2e9 508
Jeej 19:701d5669f2e9 509 //=======================================================================
Jeej 19:701d5669f2e9 510 // Modem File IDs are mapped from 64 to 127
Jeej 19:701d5669f2e9 511 // These files are mandatory when building an application that
Jeej 19:701d5669f2e9 512 // uses Wizzilab's D7A Stack, so it will be included in all "Modem"
Jeej 19:701d5669f2e9 513 // applications.
Jeej 19:701d5669f2e9 514 //=======================================================================
Jeej 30:74aa36420c61 515 // Modem Config/Status
Jeej 30:74aa36420c61 516 #define FID_WM_REV 2 // Match D7A one.
Jeej 30:74aa36420c61 517 #define FID_HOST_REV 65
Jeej 30:74aa36420c61 518 #define FID_WM_SCRATCH 66
Jeej 30:74aa36420c61 519 #define FID_WM_STATUS 67
Jeej 30:74aa36420c61 520 #define FID_WM_CFG 68
Jeej 30:74aa36420c61 521 #define FID_WM_HWCFG 69
Jeej 30:74aa36420c61 522 #define FID_WM_CTRL 70
Jeej 30:74aa36420c61 523 #define FID_WM_LED_CFG 71
Jeej 35:ac940cf8ebe6 524 #define FID_WM_DEBUG 72
Jeej 37:f5424d109c6d 525 #define FID_WM_POWER_STATUS 73 // For GW power supervisor reporting
Jeej 19:701d5669f2e9 526
Jeej 30:74aa36420c61 527 // LORAWAN "ITFs"
Jeej 30:74aa36420c61 528 #define FID_LWAN_ITF0 98
Jeej 30:74aa36420c61 529 #define FID_LWAN_ITF1 99
Jeej 30:74aa36420c61 530
Jeej 19:701d5669f2e9 531 // Action files
Jeej 30:74aa36420c61 532 #define FID_ACTP_RPT_FULL 100
Jeej 30:74aa36420c61 533 #define FID_ACTP_RPT_PART 101
Jeej 30:74aa36420c61 534
Jeej 30:74aa36420c61 535 // Reserved
Jeej 35:ac940cf8ebe6 536 #define FID_RESERVED_102 102
Jeej 35:ac940cf8ebe6 537 #define FID_RESERVED_103 103
Jeej 35:ac940cf8ebe6 538 #define FID_RESERVED_104 104
Jeej 35:ac940cf8ebe6 539 #define FID_RESERVED_105 105
Jeej 35:ac940cf8ebe6 540 #define FID_RESERVED_106 106
Jeej 35:ac940cf8ebe6 541 #define FID_RESERVED_107 107
Jeej 30:74aa36420c61 542
Jeej 19:701d5669f2e9 543 // Interface files
Jeej 30:74aa36420c61 544 #define IFID_ONESHOT_HOST 108
Jeej 30:74aa36420c61 545 #define IFID_ONESHOT_ACTP 109
Jeej 30:74aa36420c61 546 #define IFID_REPORT 110
Jeej 30:74aa36420c61 547 #define IFID_ITF3 111
Jeej 30:74aa36420c61 548 #define IFID_ITF4 112
Jeej 30:74aa36420c61 549 #define IFID_BLINKER 113
Jeej 19:701d5669f2e9 550
Jeej 30:74aa36420c61 551 // Reserved
Jeej 30:74aa36420c61 552 #define FID_RESERVED_114 114
Jeej 30:74aa36420c61 553 #define FID_RESERVED_115 115
Jeej 30:74aa36420c61 554 #define FID_RESERVED_116 116
Jeej 30:74aa36420c61 555 #define FID_RESERVED_117 117
Jeej 30:74aa36420c61 556 #define FID_RESERVED_118 118
Jeej 30:74aa36420c61 557 #define FID_RESERVED_119 119
Jeej 30:74aa36420c61 558 #define FID_RESERVED_120 120
Jeej 30:74aa36420c61 559 #define FID_RESERVED_121 121
Jeej 30:74aa36420c61 560 #define FID_RESERVED_122 122
Jeej 30:74aa36420c61 561 #define FID_RESERVED_123 123
Jeej 30:74aa36420c61 562
Jeej 30:74aa36420c61 563 // Modem Security protocols
Jeej 30:74aa36420c61 564 #define FID_WM_CHALLENGE 124
Jeej 30:74aa36420c61 565
Jeej 30:74aa36420c61 566 // Modem CUP
Jeej 30:74aa36420c61 567 #define FID_CUP_CFG_BCAST 125
Jeej 30:74aa36420c61 568 #define FID_CUP_CFG 126
Jeej 30:74aa36420c61 569 #define FID_CUP_CODE 127
Jeej 30:74aa36420c61 570
Jeej 30:74aa36420c61 571 // HST CUP
Jeej 30:74aa36420c61 572 #define FID_APP_CUP_CFG_BCAST 252
Jeej 30:74aa36420c61 573 #define FID_APP_CUP_CFG 253
Jeej 30:74aa36420c61 574 #define FID_APP_CUP_CODE 254
Jeej 30:74aa36420c61 575
Jeej 30:74aa36420c61 576 #endif
Jeej 30:74aa36420c61 577
Jeej 30:74aa36420c61 578 // vim:fdm=marker:fdc=2