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
 |