Files
kunlun/cli/communicator/communicator.h

135 lines
4.2 KiB
C
Raw Normal View History

2024-09-28 14:24:04 +08:00
/****************************************************************************
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 COMMUNICATOR_H
#define COMMUNICATOR_H
#include "os_types.h"
#include "os_event.h"
#include "os_lock.h"
#include "iot_config.h"
#include "iot_pkt_api.h"
#include "iot_frame_parse.h"
#include "cli_lwip_api.h"
#if HW_PLATFORM == HW_PLATFORM_SIMU
#include "os_socket.h"
#ifdef __cplusplus
extern "C" {
#endif
#endif
#define CLI_FTM_BAUD (115200 * 8)
#define CLI_FTM_PARITY (0)
#define CLI_FTM_DATA_BITS (8)
#define CLI_FTM_STOP_BITS (1)
#define ARRAYLEN(a) (sizeof(a)/sizeof((a)[0]))
typedef void(*communicator_rx_cb)(void* pdev, void *buffer, uint32_t len,
void* rxdesc);
typedef void(*communicator_tx_comp_cb)(void* pdev, void *buffer, uint32_t len);
enum _commnunicator_port
{
UDP_BROADCAST_PORT_NUMBER_START = 6514,
UDP_BROADCAST_PORT_NUMBER_RF = UDP_BROADCAST_PORT_NUMBER_START,
UDP_BROADCAST_PORT_NUMBER = 6515UL,
UDP_CHANNEL_SIMULATION_SEND_PORT,
UDP_CHANNEL_SIMULATION_RECV_PORT,
UDP_CLI_SEND_PORT,
UDP_CLI_RECV_PORT,
UDP_BROADCAST_PORT_NUMBER_END = UDP_CLI_RECV_PORT
};
typedef enum _interface_type
{
COMMUNICATOR_SOCKET,
COMMUNICATOR_UART,
COMMUNICATOR_LWIP_SOCKET,
COMMUNICATOR_BT,
COMMUNICATOR_APP,
}interface_type_t;
typedef enum _caller_type
{
CALLER_HW_SIMULATOR,
CALLER_PLC_CLI,
}caller_type_t;
typedef struct _commnucator_t
{
interface_type_t type;
#if HW_PLATFORM == HW_PLATFORM_SIMU
os_socket_t udprecvsocket;
// for channel simulation
os_socket_t csrecvsock;
os_socket_t udpsendsocket;
os_socket_t clirecvsocket;
#endif
int lwip_tcp_raw_socket;
int lwip_tcp_con_socket;
uint8_t com_num;
void* uart_handle;
iot_frame_fmt uart_frame;
communicator_rx_cb rx_ctrl_cb;
communicator_tx_comp_cb tx_comp_cb;
/* callback func for communicator sending data to cli */
communicator_tx_comp_cb ext_tx_cb;
uint8_t is_initiated;
void *ref_caller_ptr; // back pointer to the module that use this struct
} commnucator_t;
typedef struct _commnucator_t *commnuicator_handle ;
uint8_t commnunicator_init(commnuicator_handle commnu, void *caller_module,
caller_type_t caller, uint8_t work_mode);
uint8_t commnunicator_deinit(commnuicator_handle commnu);
int commnuicator_register_callback_packet_recv(commnuicator_handle commnu,
communicator_rx_cb rx_cb);
int commnuicator_deregister_callback_packet_recv(commnuicator_handle pcommnu);
int commnuicator_register_callback_tx_comp(commnuicator_handle commnu,
communicator_tx_comp_cb tx_comp_cb);
/* cli register callback func to communicator for data sending: from commu to cli */
int commnuicator_register_cb_ext_tx_comp(commnuicator_handle pcommnu,
communicator_tx_comp_cb tx_comp_cb);
/*
* package_send() - send package to hardware layer.
*
* @commnuicator_handle:commnuicator_handle
* @buffer_to_send: buffer to be sent
* @buffer_len: length of buffer to be sent
* @need_free: if the buffer need to be freed
*
*/
//int package_send(commnuicator_handle pcommnu, uint32_t port,
// const char * buffer_to_send, uint32_t buffer_len);
int package_send(commnuicator_handle pcommnu, uint32_t port,
iot_pkt_t *pkt);
//this func only support ethernet inteface. for uart, it need premable, iot_pkt is
//must-have.
int package_send_with_rawdata(commnuicator_handle pcommnu, uint32_t port,
uint8_t* data, uint32_t data_len);
#ifdef __cplusplus
}
#endif
#endif // !COMMUNICATOR_H