WizziLab / modem_ref

Dependents:   modem_ref_helper

Committer:
Jeej
Date:
Fri Jan 29 16:36:32 2021 +0000
Revision:
57:5444cfda9889
Parent:
56:67e3d9608403
Child:
59:3b38b5f499db
Sanity commit. Reworked driver version. Partially functional. To be tested with all demo applications.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 0:027760f45e2c 1 /// @copyright
Jeej 0:027760f45e2c 2 /// ========================================================================={{{
Jeej 56:67e3d9608403 3 /// Copyright (c) 2012-2020 WizziLab /
Jeej 0:027760f45e2c 4 /// All rights reserved /
Jeej 0:027760f45e2c 5 /// /
Jeej 0:027760f45e2c 6 /// =========================================================================}}}
Jeej 0:027760f45e2c 7 /// @endcopyright
Jeej 0:027760f45e2c 8
Jeej 0:027760f45e2c 9 // =======================================================================
Jeej 0:027760f45e2c 10 /// @file alp_helpers.h
Jeej 0:027760f45e2c 11 /// @defgroup ALP
Jeej 0:027760f45e2c 12 /// @brief ALP helpers functions
Jeej 0:027760f45e2c 13 // =======================================================================
Jeej 0:027760f45e2c 14
Jeej 0:027760f45e2c 15 #ifndef __ALP_HELPERS_H__
Jeej 0:027760f45e2c 16 #define __ALP_HELPERS_H__
Jeej 0:027760f45e2c 17
Jeej 0:027760f45e2c 18 #include "hal_types.h"
Jeej 56:67e3d9608403 19
Jeej 0:027760f45e2c 20 //======================================================================
Jeej 0:027760f45e2c 21 //======================================================================
Jeej 0:027760f45e2c 22 // ALP Helpers
Jeej 0:027760f45e2c 23 //======================================================================
Jeej 0:027760f45e2c 24 //======================================================================
Jeej 56:67e3d9608403 25
Jeej 56:67e3d9608403 26 // Basic _public container for ALP payload.
Jeej 56:67e3d9608403 27 typedef struct {
Jeej 56:67e3d9608403 28 u32 len;
Jeej 56:67e3d9608403 29 u8 d[1];
Jeej 56:67e3d9608403 30 } alp_pub_payload_t;
Jeej 56:67e3d9608403 31
Jeej 57:5444cfda9889 32 // ALP payload (chained list)
Jeej 57:5444cfda9889 33 // Each element contains ONE ALP OP
Jeej 57:5444cfda9889 34 typedef struct _alp_payload_t {
Jeej 57:5444cfda9889 35 u32 len;
Jeej 57:5444cfda9889 36 _alp_payload_t* next;
Jeej 57:5444cfda9889 37 u8 d[1];
Jeej 57:5444cfda9889 38 } alp_payload_t;
Jeej 57:5444cfda9889 39
Jeej 0:027760f45e2c 40 typedef struct {
Jeej 0:027760f45e2c 41 u8* data; // data
Jeej 0:027760f45e2c 42 int type;
Jeej 0:027760f45e2c 43 union
Jeej 0:027760f45e2c 44 {
Jeej 0:027760f45e2c 45 struct {
Jeej 0:027760f45e2c 46 u32 length;
Jeej 0:027760f45e2c 47 u32 offset;
Jeej 0:027760f45e2c 48 u8 fid;
Jeej 0:027760f45e2c 49 } f_data;
Jeej 0:027760f45e2c 50 struct {
Jeej 0:027760f45e2c 51 u32 length;
Jeej 0:027760f45e2c 52 u32 offset;
Jeej 0:027760f45e2c 53 u8 fid;
Jeej 0:027760f45e2c 54 } f_prop;
Jeej 0:027760f45e2c 55 struct {
Jeej 0:027760f45e2c 56 s8 code;
Jeej 0:027760f45e2c 57 u8 id; // Action ID
Jeej 0:027760f45e2c 58 } status;
Jeej 0:027760f45e2c 59 struct {
Jeej 37:f5424d109c6d 60 u8 itf;
Jeej 37:f5424d109c6d 61 s8 err;
Jeej 37:f5424d109c6d 62 } istatus;
Jeej 37:f5424d109c6d 63 struct {
Jeej 0:027760f45e2c 64 u32 length;
Jeej 0:027760f45e2c 65 u8 type;
Jeej 0:027760f45e2c 66 } itf;
Jeej 0:027760f45e2c 67 struct {
Jeej 0:027760f45e2c 68 u8 id;
Jeej 0:027760f45e2c 69 u8 eop;
Jeej 0:027760f45e2c 70 u8 err;
Jeej 0:027760f45e2c 71 } tag;
Jeej 0:027760f45e2c 72 struct {
Jeej 41:6f83174ffed4 73 u32 per;
Jeej 0:027760f45e2c 74 u8 type;
Jeej 0:027760f45e2c 75 u8 ifid;
Jeej 0:027760f45e2c 76 } urc;
Jeej 0:027760f45e2c 77 } meta;
Jeej 0:027760f45e2c 78 } alp_parsed_chunk_t;
Jeej 0:027760f45e2c 79
Jeej 0:027760f45e2c 80 //======================================================================
Jeej 0:027760f45e2c 81 // alp_size
Jeej 0:027760f45e2c 82 //----------------------------------------------------------------------
Jeej 0:027760f45e2c 83 /// @brief Return payload length of most ALP operations
Jeej 0:027760f45e2c 84 /// @param op : ALP Action amongst alp_opcodes_t
Jeej 0:027760f45e2c 85 /// @param offset : Associated Offset if relevant
Jeej 0:027760f45e2c 86 /// @param size : Associated Size if relevant
Jeej 0:027760f45e2c 87 /// @retval payload size in bytes
Jeej 0:027760f45e2c 88 //======================================================================
Jeej 56:67e3d9608403 89 uint alp_size(u8 op, u32 offset, u32 length);
Jeej 0:027760f45e2c 90
Jeej 0:027760f45e2c 91 //======================================================================
Jeej 0:027760f45e2c 92 // alp_encode_length
Jeej 0:027760f45e2c 93 //----------------------------------------------------------------------
Jeej 0:027760f45e2c 94 /// @brief Encodes an ALP length/offset field
Jeej 0:027760f45e2c 95 /// @param p : pointer to the payload buffer
Jeej 0:027760f45e2c 96 /// @param len : value to be encoded
Jeej 0:027760f45e2c 97 /// @retval resulting payload size in bytes
Jeej 0:027760f45e2c 98 //======================================================================
Jeej 56:67e3d9608403 99 u8 alp_encode_length(u8* p, u32 len);
Jeej 0:027760f45e2c 100
Jeej 0:027760f45e2c 101 //======================================================================
Jeej 0:027760f45e2c 102 // alp_encode_length
Jeej 0:027760f45e2c 103 //----------------------------------------------------------------------
Jeej 0:027760f45e2c 104 /// @brief Decodes an ALP length/offset field
Jeej 0:027760f45e2c 105 /// @param p : pointer to the pointer to payload buffer
Jeej 0:027760f45e2c 106 /// @param actp : pointer to ALP's Action Protocol Substitution flag
Jeej 0:027760f45e2c 107 /// Result amongst alp_actp_substitution_mode_t
Jeej 0:027760f45e2c 108 /// @retval decoded value
Jeej 0:027760f45e2c 109 //======================================================================
Jeej 56:67e3d9608403 110 u32 alp_decode_length(u8** p, u8* actp);
Jeej 0:027760f45e2c 111
Jeej 0:027760f45e2c 112 //======================================================================
Jeej 0:027760f45e2c 113 // alp_parse_chunk
Jeej 0:027760f45e2c 114 //----------------------------------------------------------------------
Jeej 0:027760f45e2c 115 /// @brief Parses an ALP response payload to a more generic
Jeej 0:027760f45e2c 116 /// alp_parsed_chunk_t structure.
Jeej 0:027760f45e2c 117 /// @param payload : pointer to the pointer to payload buffer
Jeej 0:027760f45e2c 118 /// @param resp : pointer to alp_parsed_chunk_t structure
Jeej 0:027760f45e2c 119 /// @retval number of parsed bytes
Jeej 0:027760f45e2c 120 //======================================================================
Jeej 56:67e3d9608403 121 int alp_parse_chunk(u8** payload, alp_parsed_chunk_t* resp);
Jeej 11:a077da5fe68f 122
Jeej 57:5444cfda9889 123
Jeej 57:5444cfda9889 124 // Utils
Jeej 57:5444cfda9889 125 alp_payload_t* alp_payload_new(u32 size);
Jeej 57:5444cfda9889 126 void alp_payload_free(alp_payload_t* alp);
Jeej 57:5444cfda9889 127 alp_payload_t* alp_payload_append(alp_payload_t* alp_1, alp_payload_t* alp_2);
Jeej 57:5444cfda9889 128 int alp_payload_get_err(alp_payload_t* alp);
Jeej 57:5444cfda9889 129 alp_payload_t* alp_payload_parse(u8* p, int length);
Jeej 57:5444cfda9889 130 void alp_payload_print(alp_payload_t* alp);
Jeej 57:5444cfda9889 131 alp_payload_t* alp_payload_get(alp_payload_t* alp, u8 op);
Jeej 57:5444cfda9889 132 alp_payload_t* alp_payload_extract(alp_payload_t** alp, u8 op);
Jeej 57:5444cfda9889 133 u32 alp_payload_to_buf(alp_payload_t* alp, u8* buf, u32 offset, u32 max);
Jeej 57:5444cfda9889 134
Jeej 56:67e3d9608403 135 //======================================================================
Jeej 56:67e3d9608403 136 /// @brief Creates malloc'ed ALP payload
Jeej 57:5444cfda9889 137 /// @param alp alp_payload_t* Payload to append the ALP message to. A new payload will be malloc'ed if NULL
Jeej 56:67e3d9608403 138 /// @param ...
Jeej 57:5444cfda9889 139 /// @return alp_payload_t* New ALP payload
Jeej 56:67e3d9608403 140 /// @revent NONE
Jeej 56:67e3d9608403 141 //======================================================================
Jeej 57:5444cfda9889 142 alp_payload_t* alp_payload_root_auth( alp_payload_t* alp);
Jeej 57:5444cfda9889 143 alp_payload_t* alp_payload_root_auth_enc(alp_payload_t* alp, u8* challenge);
Jeej 57:5444cfda9889 144 alp_payload_t* alp_payload_root_sign( alp_payload_t* alp, u8* iv);
Jeej 57:5444cfda9889 145 alp_payload_t* alp_payload_nop( alp_payload_t* alp);
Jeej 57:5444cfda9889 146 alp_payload_t* alp_payload_forward( alp_payload_t* alp, void* itf);
Jeej 57:5444cfda9889 147 alp_payload_t* alp_payload_tag( alp_payload_t* alp, u8 tag);
Jeej 57:5444cfda9889 148 alp_payload_t* alp_payload_rsp_tag( alp_payload_t* alp, u8 tag, u8 eop, u8 err);
Jeej 57:5444cfda9889 149 alp_payload_t* alp_payload_rsp_f_data( alp_payload_t* alp, u8 fid, void* data, u32 offset, u32 length);
Jeej 57:5444cfda9889 150 //alp_payload_t* alp_payload_rsp_f_data_fs(alp_payload_t* alp, u8 fid, u32 offset, u32 length);
Jeej 57:5444cfda9889 151 alp_payload_t* alp_payload_rsp_status( alp_payload_t* alp, u8 action, s8 status);
Jeej 57:5444cfda9889 152 alp_payload_t* alp_payload_rsp_fprop( alp_payload_t* alp, u8 fid, alp_file_header_t* hdr);
Jeej 57:5444cfda9889 153 alp_payload_t* alp_payload_f_wr_data( alp_payload_t* alp, u8 fid, void* data, u32 offset, u32 length, u8 group);
Jeej 57:5444cfda9889 154 alp_payload_t* alp_payload_f_wr_data_nr( alp_payload_t* alp, u8 fid, void* data, u32 offset, u32 length, u8 group);
Jeej 57:5444cfda9889 155 alp_payload_t* alp_payload_f_rd_data( alp_payload_t* alp, u8 fid, u32 offset, u32 length, u8 group);
Jeej 57:5444cfda9889 156 alp_payload_t* alp_payload_f_flush( alp_payload_t* alp, u8 fid, u8 group);
Jeej 57:5444cfda9889 157 alp_payload_t* alp_payload_f_declare( alp_payload_t* alp, u8 fid, alp_file_header_t* hdr);
Jeej 57:5444cfda9889 158 alp_payload_t* alp_payload_activate_itf( alp_payload_t* alp, uint8_t type, uint8_t nb_dev, uint8_t ifid, uint8_t flags, uint8_t enable);
Jeej 57:5444cfda9889 159 alp_payload_t* alp_payload_urcc_en( alp_payload_t* alp, uint8_t type, uint8_t ifid, uint8_t val);
Jeej 57:5444cfda9889 160 alp_payload_t* alp_payload_query( alp_payload_t* alp, u8 fid, void* data, u32 offset, u32 length, u8 group);
Jeej 57:5444cfda9889 161 alp_payload_t* alp_payload_qbreak( alp_payload_t* alp, u8 fid, void* data, u32 offset, u32 length, u8 group);
Jeej 57:5444cfda9889 162 alp_payload_t* alp_payload_qbreak_eq( alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
Jeej 57:5444cfda9889 163 alp_payload_t* alp_payload_qbreak_ne( alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
Jeej 57:5444cfda9889 164 alp_payload_t* alp_payload_qbreak_gt( alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
Jeej 57:5444cfda9889 165 alp_payload_t* alp_payload_qbreak_gte( alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
Jeej 57:5444cfda9889 166 alp_payload_t* alp_payload_qbreak_lt( alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
Jeej 57:5444cfda9889 167 alp_payload_t* alp_payload_qbreak_lte( alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
Jeej 57:5444cfda9889 168 alp_payload_t* alp_payload_qbreak_eq_msk(alp_payload_t* alp, u8 fid, u32 mask, u32 data, u32 offset, u32 length, u8 group);
Jeej 11:a077da5fe68f 169
Jeej 56:67e3d9608403 170
Jeej 56:67e3d9608403 171 //======================================================================
Jeej 56:67e3d9608403 172 /// @brief Parses one OP from a payload.
Jeej 56:67e3d9608403 173 /// Returns at first matching OP.
Jeej 56:67e3d9608403 174 /// Let payload untouched.
Jeej 57:5444cfda9889 175 /// @param alp alp_payload_t* Payload to parse from
Jeej 56:67e3d9608403 176 /// @param op u8 OP to look for
Jeej 56:67e3d9608403 177 /// @param buffer void* Parsed OP
Jeej 56:67e3d9608403 178 /// @return int Size of parsed OP
Jeej 56:67e3d9608403 179 /// @revent NONE
Jeej 56:67e3d9608403 180 //======================================================================
Jeej 57:5444cfda9889 181 int alp_payload_get(alp_payload_t* alp, u8 op, void* buffer);
Jeej 56:67e3d9608403 182
Jeej 56:67e3d9608403 183 //======================================================================
Jeej 56:67e3d9608403 184 /// @brief Parses one OP from a payload.
Jeej 56:67e3d9608403 185 /// Returns at first matching OP.
Jeej 56:67e3d9608403 186 /// Removes parsed OP from the payload.
Jeej 57:5444cfda9889 187 /// @param alp alp_payload_t* Payload to parse from
Jeej 56:67e3d9608403 188 /// @param op u8 OP to look for
Jeej 56:67e3d9608403 189 /// @param buffer void* Parsed OP
Jeej 56:67e3d9608403 190 /// @return int Size of parsed OP
Jeej 56:67e3d9608403 191 /// @revent NONE
Jeej 56:67e3d9608403 192 //======================================================================
Jeej 57:5444cfda9889 193 int alp_payload_extract(alp_payload_t* alp, u8 op, void* buffer);
Jeej 56:67e3d9608403 194
Jeej 56:67e3d9608403 195 #endif // __ALP_HELPERS_H__