Files
kunlun/inc/cli/iot_cli.h
2024-09-28 14:24:04 +08:00

190 lines
6.1 KiB
C

/****************************************************************************
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
be copied by any method or incorporated into another program without
the express written consent of Aerospace C.Power. This Information or any portion
thereof remains the property of Aerospace C.Power. The Information contained herein
is believed to be accurate and Aerospace C.Power assumes no responsibility or
liability for its use in any way and conveys no license or title under
any patent or copyright and makes no representation or warranty that this
Information is free from patent or copyright infringement.
****************************************************************************/
#ifndef IOT_CLI_H
#define IOT_CLI_H
/* os shim includes */
#include "os_types.h"
#include "os_lock.h"
#include "os_task.h"
#include "os_event.h"
#include "iot_config.h"
#include "iot_queue.h"
#include "iot_mem_pool.h"
#include "iot_task.h"
#include "iot_dbglog.h"
#include "iot_pkt_api.h"
#include "communicator.h"
#include "iot_cli_type_definition.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _cli_mini_mode_data
{
void *buffer;
uint32_t len;
} cli_mini_mode_data;
typedef struct _cli_cvg_inf
{
uint8_t cvg_role; //the role of the cvg
} cli_cvg_info_t;
typedef struct _iot_cli_entry
{
commnucator_t commu;
dbglog_info_t *dbglog;
iot_task_h cli_task_h;
cli_cvg_info_t local_info;
uint8_t need_download_cli_to_flash : 1,
/* enable commnucator */
enable_commu : 1,
/* reserved for further use */
rsvd : 6;
} iot_cli_t;
iot_task_msg_t *iot_cli_create_cli_msg(
uint16_t id, iot_pkt_t *pkt);
uint32_t iot_cli_init(uint8_t interface_type, uint8_t ftm_mode);
/* pack for the structures in the whole file */
#pragma pack(push) // save the pack status
#pragma pack(1) // 1 byte align
#if HW_PLATFORM == HW_PLATFORM_SIMU
typedef struct _snr_info
{
uint32_t ip_addr;
uint32_t snr;
uint32_t phase;
uint32_t src_phase;
} snr_info_t;
typedef struct _snr_hdr
{
uint32_t dest_addr;
uint32_t num;
uint32_t mode; //0:rf, 1:plc
}snr_hdr_t;
#endif
/*
*the buffer is alloced by cli mode, and consided that some up-level mode need
*access the buffer at another task, so give a param to tell if cli need free
*the buffer or not, if need cli free the iot_pkt, please set the need_free
* to true, by default the value of bool param is true
*/
typedef void(*FTM_MSG_HANDLER)(int msgid, iot_pkt_t* buffer, bool_t* need_free);
typedef void(*PT_BOARD_MSG_HANDLER)(int msgid, iot_pkt_t* buffer);
typedef void(*IC_TOOL_MSG_HANDLER)(int msgid, iot_pkt_t* buffer, uint32_t len);
typedef void(*CLI_REGULAR_LOG)();
void register_regular_log(CLI_REGULAR_LOG cb);
void register_ftm_recv_cb(FTM_MSG_HANDLER cb);
void register_pd_board_recv_cb(PT_BOARD_MSG_HANDLER cb);
void register_ic_tool_recv_cb(IC_TOOL_MSG_HANDLER cb);
void register_ic_rf_tool_recv_cb(IC_TOOL_MSG_HANDLER cb);
void cli_send_module_msg_with_sn(uint32_t moduleid, uint32_t msgid,
uint8_t *buffer, uint32_t bufferlen, uint16_t sn, uint8_t *src_mac);
void cli_send_module_msg(uint32_t moduleid, uint32_t msgid,
uint8_t *buffer, uint32_t bufferlen);
/**
* @brief iot_cli_pre_handle_data() - cli module pre handle communicator data.
* @param buffer: communicator received data ptr.
* @param len: data length.
* @param type: communicator type , see - COMMUNICATOR_XXX.
* @retval: ERR_OK - handle is ok.
* others - handle is fail.
*/
uint32_t iot_cli_pre_handle_data(void *buffer, uint32_t len,
interface_type_t type);
#define IOT_CLI_MSG_TYPE 1
#define IOT_CLI_SEND_MSG 1 /* send messages */
#define IOT_CLI_REV_MSG 3 /* cli rx msg */
#define IOT_CLI_HOST_MSG 4 /* cli host msg */
#define IOT_CLI_LOG_TIMER 5 /* cli log timer */
#define IOT_CLI_UPGRADE_TIMER 6 /* cli upgrade timer */
#define IOT_CLI_SG_MSG 7 /* cli and smart grid msg */
#define IOT_CLI_RATE_TEST_TIMER 8 /* cli rate test timer */
#define IOT_CLI_SET_TIMER 9 /* cli set timer */
#define IOT_CLI_ALIVE_TIMER 10 /* cli alive timer */
#define IOT_CLI_ADA_MSG 11 /* cli ada msg */
#define IOT_CLI_TPUT_MSG 12 /* cli handle tput msg */
#define IOT_CLI_DUMP_TIMER 13 /* cli dump timer */
#define IOT_CLI_UL_BUF_TIMER 14 /* cli ul buf timer */
#define IOT_CLI_QUERY_HW_TIMER 15 /* cli query hw ver timer */
#define IOT_CLI_MINI_UART_RECV 16 /* cli mini uart recv */
#define IOT_CLI_RPT_TOPO_TIMER 17 /* cli rpt topo data timer */
#define IOT_CLI_RX_APP_DATA_MSG 18 /* cli received data from app */
#define IOT_CLI_BCAST_TX_DONE 19 /* cli upgrade bcast tx done */
#define IOT_CLI_QUEUE_TX 0
#define IOT_CLI_QUEUE_RX 1
#define IOT_CLI_QUEUE_HOST 2
#define IOT_CLI_QUEUE_TIMER 3
#define MAC_IS_EMPTY(mac) \
((!mac[0]) && (!mac[1]) && (!mac[2]) && \
(!mac[3]) && (!mac[4]) && (!mac[5]))
#pragma pack(pop) // restore the pack status
/* iot_cli_queue_data - post a msg to iot_cli task with these data
* @buffer: buffer containing data
* @len: length of the buffer
*/
void iot_cli_queue_data(void *buffer, uint32_t len);
void send_tx_msg_to_cli_task(iot_pkt_t* data);
/**
* @brief cli_add_msg_header() - fillwith cli packet.
* @param input_buffer: src cli data ptr.
* @param buffer_len: src cli data length.
* @param moduleid: cli hdr moduleid.
* @param msgid: cli hdr msgid.
* @param sn: cli hdr sn.
* @param output_buffer: desc cli data ptr.
* @param out_len: fillwithed cli data total length.
* @param src_mac: cli src mac.
*/
void cli_add_msg_header(void* input_buffer, uint32_t buffer_len,
uint32_t moduleid, uint32_t msgid, uint16_t sn,
uint8_t** output_buffer, uint32_t *out_len, uint8_t *src_mac);
#ifdef __cplusplus
}
#endif
#endif