WizziLab / modem_ref

Dependents:   modem_ref_helper

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers alp_payload.h Source File

alp_payload.h

00001 /// @copyright
00002 /// ========================================================================={{{
00003 /// Copyright (c) 2012-2020 WizziLab                                           /
00004 /// All rights reserved                                                        /
00005 ///                                                                            /
00006 /// =========================================================================}}}
00007 /// @endcopyright
00008 
00009 //  =======================================================================
00010 /// @file           alp_helpers.h
00011 /// @defgroup       ALP
00012 /// @brief          ALP helpers functions
00013 //  =======================================================================
00014 
00015 #ifndef __ALP_PAYLOAD_H__
00016 #define __ALP_PAYLOAD_H__
00017 
00018 #include "hal_types.h"
00019 
00020 //======================================================================
00021 //======================================================================
00022 //  ALP Helpers
00023 //======================================================================
00024 //======================================================================
00025 
00026 // ALP payload (chained list)
00027 // Each element contains ONE ALP OP
00028 typedef struct _alp_payload_t {
00029     u32             len;
00030     _alp_payload_t* next;
00031     u8              d[1];
00032 } alp_payload_t;
00033 
00034 // Utils
00035 alp_payload_t*  alp_payload_new(u32 size);
00036 void            alp_payload_free(alp_payload_t* alp);
00037 void            alp_payload_print_nb(void);
00038 alp_payload_t*  alp_payload_append(alp_payload_t* alp_1, alp_payload_t* alp_2);
00039 int             alp_payload_get_err(alp_payload_t* alp);
00040 alp_payload_t*  alp_payload_parse(u8* p, int length);
00041 int             alp_payload_parse_chunk(alp_payload_t* alp, alp_parsed_chunk_t* r);
00042 void            alp_payload_print(alp_payload_t* alp);
00043 u32             alp_payload_to_buf(alp_payload_t* alp, u8* buf, u32 max);
00044 
00045 //======================================================================
00046 /// @brief  Parses one OP from a payload.
00047 ///         Returns at first matching OP.
00048 ///         Let payload untouched.
00049 /// @param  alp             alp_payload_t*  Payload to parse from
00050 /// @param  op              u8                  OP to look for
00051 /// @param  buffer          void*               Parsed OP
00052 /// @return                 int                 Size of parsed OP
00053 /// @revent                 NONE
00054 //======================================================================
00055 alp_payload_t*  alp_payload_get(alp_payload_t* alp, u8 op);
00056 
00057 //======================================================================
00058 /// @brief  Extract one OP from a payload.
00059 ///         Returns at first matching OP.
00060 ///         Removes parsed OP from the payload.
00061 /// @param  alp             alp_payload_t**     Payload to extract from
00062 /// @param  op              u8                  OP to look for
00063 /// @return                 alp_payload_t*      Extracted OP
00064 /// @revent                 NONE
00065 //======================================================================
00066 alp_payload_t*  alp_payload_extract(alp_payload_t** alp, u8 op);
00067 
00068 //======================================================================
00069 /// @brief  Parses one OP from a payload.
00070 ///         Returns at first matching OP.
00071 ///         Removes parsed OP from the payload.
00072 ///         Copy payload data into provider buffer
00073 /// @param  alp             alp_payload_t**     Payload to extract from
00074 /// @param  op              u8                  OP to look for
00075 /// @param  data            void*               Parsed OP data buffer
00076 /// @return                 bool                true if OP found else false
00077 /// @revent                 NONE
00078 //======================================================================
00079 bool alp_payload_extract_data(alp_payload_t** alp, u8 op, void* data);
00080 
00081 //======================================================================
00082 /// @brief  Creates malloc'ed ALP payload
00083 /// @param  alp             alp_payload_t*  Payload to append the ALP message to. A new payload will be malloc'ed if NULL
00084 /// @param  ...
00085 /// @return                 alp_payload_t*  New ALP payload
00086 /// @revent                 NONE
00087 //======================================================================
00088 alp_payload_t* alp_payload_root_auth(    alp_payload_t* alp);
00089 alp_payload_t* alp_payload_root_auth_enc(alp_payload_t* alp, u8* challenge);
00090 alp_payload_t* alp_payload_root_sign(    alp_payload_t* alp, u8* iv);
00091 alp_payload_t* alp_payload_nop(          alp_payload_t* alp, u8 group);
00092 alp_payload_t* alp_payload_forward(      alp_payload_t* alp, void* itf);
00093 alp_payload_t* alp_payload_tag(          alp_payload_t* alp, u8 tag);
00094 alp_payload_t* alp_payload_rsp_tag(      alp_payload_t* alp, u8 tag, u8 eop, u8 err);
00095 alp_payload_t* alp_payload_rsp_f_data(   alp_payload_t* alp, u8 fid, void* data, u32 offset, u32 length);
00096 //alp_payload_t* alp_payload_rsp_f_data_fs(alp_payload_t* alp, u8 fid, u32 offset, u32 length);
00097 alp_payload_t* alp_payload_rsp_status(   alp_payload_t* alp, u8 action, s8 status);
00098 alp_payload_t* alp_payload_rsp_fprop(    alp_payload_t* alp, u8 fid, alp_file_header_t* hdr);
00099 alp_payload_t* alp_payload_f_wr_data(    alp_payload_t* alp, u8 fid, void* data, u32 offset, u32 length, u8 group);
00100 alp_payload_t* alp_payload_f_wr_data_nr( alp_payload_t* alp, u8 fid, void* data, u32 offset, u32 length, u8 group);
00101 alp_payload_t* alp_payload_f_rd_data(    alp_payload_t* alp, u8 fid, u32 offset, u32 length, u8 group);
00102 alp_payload_t* alp_payload_f_flush(      alp_payload_t* alp, u8 fid, u8 group);
00103 alp_payload_t* alp_payload_f_declare(    alp_payload_t* alp, u8 fid, alp_file_header_t* hdr);
00104 alp_payload_t* alp_payload_f_touch(      alp_payload_t* alp, u8 fid, u32 offset, u32 length, u8 group);
00105 alp_payload_t* alp_payload_activate_itf( alp_payload_t* alp, u8 type, u8 nb_dev, u8 ifid, u8 flags, u8 enable);
00106 alp_payload_t* alp_payload_urcc_en(      alp_payload_t* alp, u8 type, u8 ifid, u8 val);
00107 alp_payload_t* alp_payload_query(        alp_payload_t* alp, u8 fid, void* data, u32 offset, u32 length, u8 group);
00108 alp_payload_t* alp_payload_qbreak(       alp_payload_t* alp, u8 fid, void* data, u32 offset, u32 length, u8 group);
00109 alp_payload_t* alp_payload_qbreak_eq(    alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
00110 alp_payload_t* alp_payload_qbreak_ne(    alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
00111 alp_payload_t* alp_payload_qbreak_gt(    alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
00112 alp_payload_t* alp_payload_qbreak_gte(   alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
00113 alp_payload_t* alp_payload_qbreak_lt(    alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
00114 alp_payload_t* alp_payload_qbreak_lte(   alp_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
00115 alp_payload_t* alp_payload_qbreak_eq_msk(alp_payload_t* alp, u8 fid, u32 mask, u32 data, u32 offset, u32 length, u8 group);
00116 
00117 
00118 #endif // __ALP_PAYLOAD_H__