135 lines
4.2 KiB
C
135 lines
4.2 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 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
|