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
 |