Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
include/alp_helpers.h
- Committer:
- Jeej
- Date:
- 2021-01-27
- Revision:
- 56:67e3d9608403
- Parent:
- 41:6f83174ffed4
- Child:
- 57:5444cfda9889
File content as of revision 56:67e3d9608403:
/// @copyright
/// ========================================================================={{{
/// Copyright (c) 2012-2020 WizziLab /
/// All rights reserved /
/// /
/// =========================================================================}}}
/// @endcopyright
// =======================================================================
/// @file alp_helpers.h
/// @defgroup ALP
/// @brief ALP helpers functions
// =======================================================================
#ifndef __ALP_HELPERS_H__
#define __ALP_HELPERS_H__
#include "hal_types.h"
//======================================================================
//======================================================================
// ALP Helpers
//======================================================================
//======================================================================
// Basic _public container for ALP payload.
typedef struct {
u32 len;
u8 d[1];
} alp_pub_payload_t;
typedef struct {
u8* data; // data
int type;
union
{
struct {
u32 length;
u32 offset;
u8 fid;
} f_data;
struct {
u32 length;
u32 offset;
u8 fid;
} f_prop;
struct {
s8 code;
u8 id; // Action ID
} status;
struct {
u8 itf;
s8 err;
} istatus;
struct {
u32 length;
u8 type;
} itf;
struct {
u8 id;
u8 eop;
u8 err;
} tag;
struct {
u32 per;
u8 type;
u8 ifid;
} urc;
} meta;
} alp_parsed_chunk_t;
//======================================================================
// alp_size
//----------------------------------------------------------------------
/// @brief Return payload length of most ALP operations
/// @param op : ALP Action amongst alp_opcodes_t
/// @param offset : Associated Offset if relevant
/// @param size : Associated Size if relevant
/// @retval payload size in bytes
//======================================================================
uint alp_size(u8 op, u32 offset, u32 length);
//======================================================================
// alp_encode_length
//----------------------------------------------------------------------
/// @brief Encodes an ALP length/offset field
/// @param p : pointer to the payload buffer
/// @param len : value to be encoded
/// @retval resulting payload size in bytes
//======================================================================
u8 alp_encode_length(u8* p, u32 len);
//======================================================================
// alp_encode_length
//----------------------------------------------------------------------
/// @brief Decodes an ALP length/offset field
/// @param p : pointer to the pointer to payload buffer
/// @param actp : pointer to ALP's Action Protocol Substitution flag
/// Result amongst alp_actp_substitution_mode_t
/// @retval decoded value
//======================================================================
u32 alp_decode_length(u8** p, u8* actp);
//======================================================================
// alp_parse_chunk
//----------------------------------------------------------------------
/// @brief Parses an ALP response payload to a more generic
/// alp_parsed_chunk_t structure.
/// @param payload : pointer to the pointer to payload buffer
/// @param resp : pointer to alp_parsed_chunk_t structure
/// @retval number of parsed bytes
//======================================================================
int alp_parse_chunk(u8** payload, alp_parsed_chunk_t* resp);
//======================================================================
/// @brief Creates malloc'ed ALP payload
/// @param alp alp_pub_payload_t* Payload to append the ALP message to. A new payload will be malloc'ed if NULL
/// @param ...
/// @return alp_pub_payload_t* New ALP payload
/// @revent NONE
//======================================================================
alp_pub_payload_t* alp_append( alp_pub_payload_t* alp_1, alp_pub_payload_t* alp_2);
alp_pub_payload_t* alp_payload_root_auth( alp_pub_payload_t* alp);
alp_pub_payload_t* alp_payload_root_auth_enc(alp_pub_payload_t* alp, u8* challenge);
alp_pub_payload_t* alp_payload_root_sign( alp_pub_payload_t* alp, u8* iv);
alp_pub_payload_t* alp_payload_nop( alp_pub_payload_t* alp);
alp_pub_payload_t* alp_payload_forward( alp_pub_payload_t* alp, void* itf);
alp_pub_payload_t* alp_payload_tag( alp_pub_payload_t* alp, u8 tag);
alp_pub_payload_t* alp_payload_rsp_tag( alp_pub_payload_t* alp, u8 tag, u8 eop, u8 err);
alp_pub_payload_t* alp_payload_rsp_f_data( alp_pub_payload_t* alp, u8 fid, void* data, u32 offset, u32 length);
//alp_pub_payload_t* alp_payload_rsp_f_data_fs(alp_pub_payload_t* alp, u8 fid, u32 offset, u32 length);
alp_pub_payload_t* alp_payload_rsp_status( alp_pub_payload_t* alp, u8 action, s8 status);
alp_pub_payload_t* alp_payload_rsp_fprop( alp_pub_payload_t* alp, u8 fid, alp_file_header_t* hdr);
alp_pub_payload_t* alp_payload_f_wr_data( alp_pub_payload_t* alp, u8 fid, void* data, u32 offset, u32 length, u8 group);
alp_pub_payload_t* alp_payload_f_wr_data_nr( alp_pub_payload_t* alp, u8 fid, void* data, u32 offset, u32 length, u8 group);
alp_pub_payload_t* alp_payload_f_rd_data( alp_pub_payload_t* alp, u8 fid, u32 offset, u32 length, u8 group);
alp_pub_payload_t* alp_payload_f_flush( alp_pub_payload_t* alp, u8 fid, u8 group);
alp_pub_payload_t* alp_payload_f_declare( alp_pub_payload_t* alp, u8 fid, alp_file_header_t* hdr);
alp_pub_payload_t* alp_payload_activate_itf( alp_pub_payload_t* alp, uint8_t type, uint8_t nb_dev, uint8_t ifid, uint8_t flags, uint8_t enable);
alp_pub_payload_t* alp_payload_urcc_en( alp_pub_payload_t* alp, uint8_t type, uint8_t ifid, uint8_t val);
alp_pub_payload_t* alp_payload_query( alp_pub_payload_t* alp, u8 fid, void* data, u32 offset, u32 length, u8 group);
alp_pub_payload_t* alp_payload_qbreak( alp_pub_payload_t* alp, u8 fid, void* data, u32 offset, u32 length, u8 group);
alp_pub_payload_t* alp_payload_qbreak_eq( alp_pub_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
alp_pub_payload_t* alp_payload_qbreak_ne( alp_pub_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
alp_pub_payload_t* alp_payload_qbreak_gt( alp_pub_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
alp_pub_payload_t* alp_payload_qbreak_gte( alp_pub_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
alp_pub_payload_t* alp_payload_qbreak_lt( alp_pub_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
alp_pub_payload_t* alp_payload_qbreak_lte( alp_pub_payload_t* alp, u8 fid, u32 data, u32 offset, u32 length, u8 group);
alp_pub_payload_t* alp_payload_qbreak_eq_msk(alp_pub_payload_t* alp, u8 fid, u32 mask, u32 data, u32 offset, u32 length, u8 group);
void alp_payload_print(alp_pub_payload_t* alp);
//======================================================================
/// @brief Parses one OP from a payload.
/// Returns at first matching OP.
/// Let payload untouched.
/// @param alp alp_pub_payload_t* Payload to parse from
/// @param op u8 OP to look for
/// @param buffer void* Parsed OP
/// @return int Size of parsed OP
/// @revent NONE
//======================================================================
int alp_payload_get(alp_pub_payload_t* alp, u8 op, void* buffer);
//======================================================================
/// @brief Parses one OP from a payload.
/// Returns at first matching OP.
/// Removes parsed OP from the payload.
/// @param alp alp_pub_payload_t* Payload to parse from
/// @param op u8 OP to look for
/// @param buffer void* Parsed OP
/// @return int Size of parsed OP
/// @revent NONE
//======================================================================
int alp_payload_extract(alp_pub_payload_t* alp, u8 op, void* buffer);
#endif // __ALP_HELPERS_H__