Exportable version of WizziLab's modem driver.

Dependents:   modem_ref_helper

Committer:
Jeej
Date:
Wed Feb 17 11:10:41 2021 +0000
Revision:
59:3b38b5f499db
Child:
60:08efaaca0e83
Fixed memory leak. ALP payload is now consumed.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 59:3b38b5f499db 1 /// @copyright
Jeej 59:3b38b5f499db 2 /// ========================================================================={{{
Jeej 59:3b38b5f499db 3 /// Copyright (c) 2012-2020 WizziLab /
Jeej 59:3b38b5f499db 4 /// All rights reserved /
Jeej 59:3b38b5f499db 5 /// /
Jeej 59:3b38b5f499db 6 /// =========================================================================}}}
Jeej 59:3b38b5f499db 7 /// @endcopyright
Jeej 59:3b38b5f499db 8
Jeej 59:3b38b5f499db 9 // =======================================================================
Jeej 59:3b38b5f499db 10 /// @file alp_helpers.h
Jeej 59:3b38b5f499db 11 /// @defgroup ALP
Jeej 59:3b38b5f499db 12 /// @brief ALP helpers functions
Jeej 59:3b38b5f499db 13 // =======================================================================
Jeej 59:3b38b5f499db 14
Jeej 59:3b38b5f499db 15 #ifndef __ALP_PAYLOAD_H__
Jeej 59:3b38b5f499db 16 #define __ALP_PAYLOAD_H__
Jeej 59:3b38b5f499db 17
Jeej 59:3b38b5f499db 18 #include "hal_types.h"
Jeej 59:3b38b5f499db 19
Jeej 59:3b38b5f499db 20 //======================================================================
Jeej 59:3b38b5f499db 21 //======================================================================
Jeej 59:3b38b5f499db 22 // ALP Helpers
Jeej 59:3b38b5f499db 23 //======================================================================
Jeej 59:3b38b5f499db 24 //======================================================================
Jeej 59:3b38b5f499db 25
Jeej 59:3b38b5f499db 26 // ALP payload (chained list)
Jeej 59:3b38b5f499db 27 // Each element contains ONE ALP OP
Jeej 59:3b38b5f499db 28 typedef struct _alp_payload_t {
Jeej 59:3b38b5f499db 29 u32 len;
Jeej 59:3b38b5f499db 30 _alp_payload_t* next;
Jeej 59:3b38b5f499db 31 u8 d[1];
Jeej 59:3b38b5f499db 32 } alp_payload_t;
Jeej 59:3b38b5f499db 33
Jeej 59:3b38b5f499db 34 // Utils
Jeej 59:3b38b5f499db 35 alp_payload_t* alp_payload_new(u32 size);
Jeej 59:3b38b5f499db 36 void alp_payload_free(alp_payload_t* alp);
Jeej 59:3b38b5f499db 37 alp_payload_t* alp_payload_append(alp_payload_t* alp_1, alp_payload_t* alp_2);
Jeej 59:3b38b5f499db 38 int alp_payload_get_err(alp_payload_t* alp);
Jeej 59:3b38b5f499db 39 alp_payload_t* alp_payload_parse(u8* p, int length);
Jeej 59:3b38b5f499db 40 void alp_payload_print(alp_payload_t* alp);
Jeej 59:3b38b5f499db 41 u32 alp_payload_to_buf(alp_payload_t* alp, u8* buf, u32 offset, u32 max);
Jeej 59:3b38b5f499db 42
Jeej 59:3b38b5f499db 43 //======================================================================
Jeej 59:3b38b5f499db 44 /// @brief Parses one OP from a payload.
Jeej 59:3b38b5f499db 45 /// Returns at first matching OP.
Jeej 59:3b38b5f499db 46 /// Let payload untouched.
Jeej 59:3b38b5f499db 47 /// @param alp alp_payload_t* Payload to parse from
Jeej 59:3b38b5f499db 48 /// @param op u8 OP to look for
Jeej 59:3b38b5f499db 49 /// @param buffer void* Parsed OP
Jeej 59:3b38b5f499db 50 /// @return int Size of parsed OP
Jeej 59:3b38b5f499db 51 /// @revent NONE
Jeej 59:3b38b5f499db 52 //======================================================================
Jeej 59:3b38b5f499db 53 alp_payload_t* alp_payload_get(alp_payload_t* alp, u8 op);
Jeej 59:3b38b5f499db 54
Jeej 59:3b38b5f499db 55 //======================================================================
Jeej 59:3b38b5f499db 56 /// @brief Parses one OP from a payload.
Jeej 59:3b38b5f499db 57 /// Returns at first matching OP.
Jeej 59:3b38b5f499db 58 /// Removes parsed OP from the payload.
Jeej 59:3b38b5f499db 59 /// @param alp alp_payload_t* Payload to parse from
Jeej 59:3b38b5f499db 60 /// @param op u8 OP to look for
Jeej 59:3b38b5f499db 61 /// @param buffer void* Parsed OP
Jeej 59:3b38b5f499db 62 /// @return int Size of parsed OP
Jeej 59:3b38b5f499db 63 /// @revent NONE
Jeej 59:3b38b5f499db 64 //======================================================================
Jeej 59:3b38b5f499db 65 alp_payload_t* alp_payload_extract(alp_payload_t** alp, u8 op);
Jeej 59:3b38b5f499db 66
Jeej 59:3b38b5f499db 67 //======================================================================
Jeej 59:3b38b5f499db 68 /// @brief Creates malloc'ed ALP payload
Jeej 59:3b38b5f499db 69 /// @param alp alp_payload_t* Payload to append the ALP message to. A new payload will be malloc'ed if NULL
Jeej 59:3b38b5f499db 70 /// @param ...
Jeej 59:3b38b5f499db 71 /// @return alp_payload_t* New ALP payload
Jeej 59:3b38b5f499db 72 /// @revent NONE
Jeej 59:3b38b5f499db 73 //======================================================================
Jeej 59:3b38b5f499db 74 alp_payload_t* alp_payload_root_auth( alp_payload_t* alp);
Jeej 59:3b38b5f499db 75 alp_payload_t* alp_payload_root_auth_enc(alp_payload_t* alp, u8* challenge);
Jeej 59:3b38b5f499db 76 alp_payload_t* alp_payload_root_sign( alp_payload_t* alp, u8* iv);
Jeej 59:3b38b5f499db 77 alp_payload_t* alp_payload_nop( alp_payload_t* alp);
Jeej 59:3b38b5f499db 78 alp_payload_t* alp_payload_forward( alp_payload_t* alp, void* itf);
Jeej 59:3b38b5f499db 79 alp_payload_t* alp_payload_tag( alp_payload_t* alp, u8 tag);
Jeej 59:3b38b5f499db 80 alp_payload_t* alp_payload_rsp_tag( alp_payload_t* alp, u8 tag, u8 eop, u8 err);
Jeej 59:3b38b5f499db 81 alp_payload_t* alp_payload_rsp_f_data( alp_payload_t* alp, u8 fid, void* data, u32 offset, u32 length);
Jeej 59:3b38b5f499db 82 //alp_payload_t* alp_payload_rsp_f_data_fs(alp_payload_t* alp, u8 fid, u32 offset, u32 length);
Jeej 59:3b38b5f499db 83 alp_payload_t* alp_payload_rsp_status( alp_payload_t* alp, u8 action, s8 status);
Jeej 59:3b38b5f499db 84 alp_payload_t* alp_payload_rsp_fprop( alp_payload_t* alp, u8 fid, alp_file_header_t* hdr);
Jeej 59:3b38b5f499db 85 alp_payload_t* alp_payload_f_wr_data( alp_payload_t* alp, u8 fid, void* data, u32 offset, u32 length, u8 group);
Jeej 59:3b38b5f499db 86 alp_payload_t* alp_payload_f_wr_data_nr( alp_payload_t* alp, u8 fid, void* data, u32 offset, u32 length, u8 group);
Jeej 59:3b38b5f499db 87 alp_payload_t* alp_payload_f_rd_data( alp_payload_t* alp, u8 fid, u32 offset, u32 length, u8 group);
Jeej 59:3b38b5f499db 88 alp_payload_t* alp_payload_f_flush( alp_payload_t* alp, u8 fid, u8 group);
Jeej 59:3b38b5f499db 89 alp_payload_t* alp_payload_f_declare( alp_payload_t* alp, u8 fid, alp_file_header_t* hdr);
Jeej 59:3b38b5f499db 90 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 59:3b38b5f499db 91 alp_payload_t* alp_payload_urcc_en( alp_payload_t* alp, uint8_t type, uint8_t ifid, uint8_t val);
Jeej 59:3b38b5f499db 92 alp_payload_t* alp_payload_query( alp_payload_t* alp, u8 fid, void* data, u32 offset, u32 length, u8 group);
Jeej 59:3b38b5f499db 93 alp_payload_t* alp_payload_qbreak( alp_payload_t* alp, u8 fid, void* data, u32 offset, u32 length, u8 group);
Jeej 59:3b38b5f499db 94 alp_payload_t* alp_payload_qbreak_eq( alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
Jeej 59:3b38b5f499db 95 alp_payload_t* alp_payload_qbreak_ne( alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
Jeej 59:3b38b5f499db 96 alp_payload_t* alp_payload_qbreak_gt( alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
Jeej 59:3b38b5f499db 97 alp_payload_t* alp_payload_qbreak_gte( alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
Jeej 59:3b38b5f499db 98 alp_payload_t* alp_payload_qbreak_lt( alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
Jeej 59:3b38b5f499db 99 alp_payload_t* alp_payload_qbreak_lte( alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
Jeej 59:3b38b5f499db 100 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 59:3b38b5f499db 101
Jeej 59:3b38b5f499db 102
Jeej 59:3b38b5f499db 103 #endif // __ALP_PAYLOAD_H__