260 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			260 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			C
		
	
	
	
| /*
 | |
| * Copyright (c) 2020 AIIT XUOS Lab
 | |
| * XiUOS is licensed under Mulan PSL v2.
 | |
| * You can use this software according to the terms and conditions of the Mulan PSL v2.
 | |
| * You may obtain a copy of Mulan PSL v2 at:
 | |
| *        http://license.coscl.org.cn/MulanPSL2
 | |
| * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 | |
| * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 | |
| * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 | |
| * See the Mulan PSL v2 for more details.
 | |
| */
 | |
| 
 | |
| /**
 | |
|  * @file adapter.h
 | |
|  * @brief Structure and function declarations of the connection adapter framework
 | |
|  * @version 1.1
 | |
|  * @author AIIT XUOS Lab
 | |
|  * @date 2021.05.10
 | |
|  */
 | |
| 
 | |
| #ifndef ADAPTER_H
 | |
| #define ADAPTER_H
 | |
| 
 | |
| #include <list.h>
 | |
| #include <transform.h>
 | |
| #include <stdio.h>
 | |
| #include <string.h>
 | |
| #include <stdint.h>
 | |
| #include <sys/types.h>
 | |
| #include <at_agent.h>
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| #define ADAPTER_BUFFSIZE 64
 | |
| 
 | |
| #define ADAPTER_AT_OPERATION    1
 | |
| #define ADAPTER_LWIP_OPERATION    2
 | |
| #define ADAPTER_RAWIP_OPERATION    3
 | |
| 
 | |
| #ifdef CONNECTION_FRAMEWORK_DEBUG
 | |
| #define ADAPTER_DEBUG printf
 | |
| #else
 | |
| #define ADAPTER_DEBUG
 | |
| #endif
 | |
| 
 | |
| #define ADAPTER_4G_NAME "4G"
 | |
| #define ADAPTER_BLUETOOTH_NAME "bluetooth"
 | |
| #define ADAPTER_ETHERNET_NAME "ethernet"
 | |
| #define ADAPTER_ETHERCAT_NAME "ethercat"
 | |
| #define ADAPTER_LORA_NAME "lora"
 | |
| #define ADAPTER_NBIOT_NAME "nbiot"
 | |
| #define ADAPTER_WIFI_NAME "wifi"
 | |
| #define ADAPTER_ZIGBEE_NAME "zigbee"
 | |
| 
 | |
| struct Adapter;
 | |
| struct AdapterProductInfo;
 | |
| typedef struct Adapter *AdapterType;
 | |
| typedef struct AdapterProductInfo *AdapterProductInfoType;
 | |
| 
 | |
| struct Socket
 | |
| {
 | |
|     uint8_t type;                ///< socket type:DGRAM->UDP,STREAM->TCP
 | |
|     uint8_t protocal;            ///< udp or tcp
 | |
|     unsigned short listen_port;  ///< 0-65535
 | |
|     uint8_t socket_id;           ///< socket id
 | |
|     uint8_t recv_control;        ///< receive control
 | |
|     uint8_t af_type;             ///< IPv4 or IPv6
 | |
|     char *src_ip_addr;           ///< source P address  
 | |
|     char *dst_ip_addr;           ///< destination IP address
 | |
| };
 | |
| 
 | |
| enum AdapterType
 | |
| {
 | |
|     ADAPTER_TYPE_LORA = 0,
 | |
|     ADAPTER_TYPE_4G ,
 | |
|     ADAPTER_TYPE_NBIOT ,
 | |
|     ADAPTER_TYPE_WIFI ,
 | |
|     ADAPTER_TYPE_ETHERNET ,
 | |
|     ADAPTER_TYPE_BLUETOOTH ,
 | |
|     ADAPTER_TYPE_ZIGBEE ,
 | |
|     ADAPTER_TYPE_5G ,
 | |
| };
 | |
| 
 | |
| enum NetProtocolType
 | |
| {
 | |
|     PRIVATE_PROTOCOL = 1,
 | |
|     IP_PROTOCOL,
 | |
|     PROTOCOL_NONE,
 | |
| };
 | |
| 
 | |
| enum NetRoleType
 | |
| {
 | |
|     CLIENT = 1, 
 | |
|     SERVER,
 | |
|     MASTER,
 | |
|     SLAVE,
 | |
|     COORDINATOR,
 | |
|     ROUTER,
 | |
|     END_DEVICE,
 | |
|     GATEWAY,
 | |
|     ROLE_NONE,
 | |
| };
 | |
| 
 | |
| enum AdapterStatus
 | |
| {
 | |
|     REGISTERED = 1,
 | |
|     UNREGISTERED,
 | |
|     INSTALL,
 | |
|     UNINSTALL,
 | |
| };
 | |
| 
 | |
| enum IpType
 | |
| {
 | |
|     IPV4 = 1,
 | |
|     IPV6,
 | |
| };
 | |
| 
 | |
| struct AdapterData
 | |
| {
 | |
|     uint32 len;
 | |
|     uint8 *buffer;
 | |
| };
 | |
| 
 | |
| struct AdapterProductInfo
 | |
| {
 | |
|     uint32_t functions;
 | |
|     char vendor_name[NAME_NUM_MAX];
 | |
|     char model_name[NAME_NUM_MAX];
 | |
|     uint32_t work_mode;
 | |
| 
 | |
|     void *model_done;
 | |
| };
 | |
| 
 | |
| struct IpProtocolDone
 | |
| {
 | |
|     int (*open)(struct Adapter *adapter);
 | |
|     int (*close)(struct Adapter *adapter);
 | |
|     int (*ioctl)(struct Adapter *adapter, int cmd, void *args);
 | |
|     int (*setup)(struct Adapter *adapter);
 | |
|     int (*setdown)(struct Adapter *adapter);
 | |
|     int (*setaddr)(struct Adapter *adapter, const char *ip, const char *gateway, const char *netmask);
 | |
|     int (*setdns)(struct Adapter *adapter, const char *dns_addr, uint8 dns_count);
 | |
|     int (*setdhcp)(struct Adapter *adapter, int enable);
 | |
|     int (*ping)(struct Adapter *adapter, const char *destination);
 | |
|     int (*netstat)(struct Adapter *adapter);
 | |
|     int (*connect)(struct Adapter *adapter, enum NetRoleType net_role, const char *ip, const char *port, enum IpType ip_type);
 | |
|     int (*send)(struct Adapter *adapter, const void *buf, size_t len);
 | |
|     int (*recv)(struct Adapter *adapter, void *buf, size_t len);
 | |
|     int (*disconnect)(struct Adapter *adapter);
 | |
| };
 | |
| 
 | |
| struct PrivProtocolDone
 | |
| {
 | |
|     int (*open)(struct Adapter *adapter);
 | |
|     int (*close)(struct Adapter *adapter);
 | |
|     int (*ioctl)(struct Adapter *adapter, int cmd, void *args);
 | |
|     int (*setup)(struct Adapter *adapter);
 | |
|     int (*setdown)(struct Adapter *adapter);
 | |
|     int (*setaddr)(struct Adapter *adapter, const char *ip, const char *gateway, const char *netmask);
 | |
|     int (*setdns)(struct Adapter *adapter, const char *dns_addr, uint8 dns_count);
 | |
|     int (*setdhcp)(struct Adapter *adapter, int enable);
 | |
|     int (*ping)(struct Adapter *adapter, const char *destination);
 | |
|     int (*netstat)(struct Adapter *adapter);
 | |
|     int (*join)(struct Adapter *adapter, unsigned char *priv_net_group);
 | |
|     int (*send)(struct Adapter *adapter, const void *buf, size_t len);
 | |
|     int (*recv)(struct Adapter *adapter, void *buf, size_t len);
 | |
|     int (*quit)(struct Adapter *adapter, unsigned char *priv_net_group);
 | |
| };
 | |
| 
 | |
| struct Adapter
 | |
| {
 | |
|     char name[NAME_NUM_MAX];
 | |
|     int fd;
 | |
| 
 | |
|     int product_info_flag;
 | |
|     struct AdapterProductInfo *info;
 | |
|     ATAgentType agent;
 | |
| 
 | |
|     struct Socket socket;
 | |
| 
 | |
|     int net_role_id;
 | |
|     enum NetProtocolType net_protocol;
 | |
|     enum NetRoleType net_role;
 | |
|     enum AdapterStatus adapter_status;
 | |
| 
 | |
|     char buffer[ADAPTER_BUFFSIZE];
 | |
|     
 | |
|     void *done;
 | |
|     void *adapter_param;
 | |
| 
 | |
|     sem_t sem;
 | |
|     pthread_mutex_t lock;
 | |
|  
 | |
|     struct DoublelistNode link;
 | |
| };
 | |
| 
 | |
| /*Init adapter framework*/
 | |
| int AdapterFrameworkInit(void);
 | |
| 
 | |
| /*Find adapter device by name*/
 | |
| AdapterType AdapterDeviceFindByName(const char *name);
 | |
| 
 | |
| /*Register the adapter to the linked list*/
 | |
| int AdapterDeviceRegister(struct Adapter *adapter);
 | |
| 
 | |
| /*Unregister the adapter from the linked list*/
 | |
| int AdapterDeviceUnregister(struct Adapter *adapter);
 | |
| 
 | |
| /*Open adapter device*/
 | |
| int AdapterDeviceOpen(struct Adapter *adapter);
 | |
| 
 | |
| /*Close adapter device*/
 | |
| int AdapterDeviceClose(struct Adapter *adapter);
 | |
| 
 | |
| /*Receice data from adapter*/
 | |
| ssize_t AdapterDeviceRecv(struct Adapter *adapter, void *dst, size_t len);
 | |
| 
 | |
| /*Send data to adapter*/
 | |
| ssize_t AdapterDeviceSend(struct Adapter *adapter, const void *src, size_t len);
 | |
| 
 | |
| /*Configure adapter device*/
 | |
| int AdapterDeviceControl(struct Adapter *adapter, int cmd, void *args);
 | |
| 
 | |
| /*Connect to a certain ip net, only support IP_PROTOCOL*/
 | |
| int AdapterDeviceConnect(struct Adapter *adapter, enum NetRoleType net_role, const char *ip, const char *port, enum IpType ip_type);
 | |
| 
 | |
| /*Join to a certain private net, only support PRIVATE_PROTOCOL*/
 | |
| int AdapterDeviceJoin(struct Adapter *adapter, unsigned char *priv_net_group);
 | |
| 
 | |
| /*Adapter disconnect from ip net or private net group*/
 | |
| int AdapterDeviceDisconnect(struct Adapter *adapter, unsigned char *priv_net_group);
 | |
| 
 | |
| /*Set up to net*/
 | |
| int AdapterDeviceSetUp(struct Adapter *adapter);
 | |
| 
 | |
| /*Set down from net*/
 | |
| int AdapterDeviceSetDown(struct Adapter *adapter);
 | |
| 
 | |
| /*Set ip/gateway/netmask address*/
 | |
| int AdapterDeviceSetAddr(struct Adapter *adapter, const char *ip, const char *gateway, const char *netmask);
 | |
| 
 | |
| /*Set DNS function*/
 | |
| int AdapterDeviceSetDns(struct Adapter *adapter, const char *dns_addr, uint8 dns_count);
 | |
| 
 | |
| /*Set DHCP function*/
 | |
| int AdapterDeviceSetDhcp(struct Adapter *adapter, int enable);
 | |
| 
 | |
| /*ping function*/
 | |
| int AdapterDevicePing(struct Adapter *adapter, const char *destination);
 | |
| 
 | |
| /*Show the net status*/
 | |
| int AdapterDeviceNetstat(struct Adapter *adapter);
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif |