nkjnm

Dependencies:   MAX44000 nexpaq_mdk

Fork of LED_Demo by Maxim nexpaq

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers socket_types.h Source File

socket_types.h

00001 /*
00002  * PackageLicenseDeclared: Apache-2.0
00003  * Copyright (c) 2015 ARM Limited
00004  *
00005  * Licensed under the Apache License, Version 2.0 (the "License");
00006  * you may not use this file except in compliance with the License.
00007  * You may obtain a copy of the License at
00008  *
00009  *     http://www.apache.org/licenses/LICENSE-2.0
00010  *
00011  * Unless required by applicable law or agreed to in writing, software
00012  * distributed under the License is distributed on an "AS IS" BASIS,
00013  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00014  * See the License for the specific language governing permissions and
00015  * limitations under the License.
00016  */
00017 #ifndef __MBED_NET_SOCKET_ABSTRACT_SOCKET_TYPES_H__
00018 #define __MBED_NET_SOCKET_ABSTRACT_SOCKET_TYPES_H__
00019 
00020 #include <stddef.h>
00021 #include <stdint.h>
00022 
00023 #ifdef __cplusplus
00024 extern "C" {
00025 #endif
00026 
00027 #ifndef MBED_NET_LWIP
00028 #define MBED_NET_LWIP 1
00029 #endif
00030 
00031 typedef enum {
00032     SOCKET_ERROR_NONE = 0,
00033     SOCKET_ERROR_UNKNOWN,
00034     SOCKET_ERROR_UNIMPLEMENTED,
00035     SOCKET_ERROR_BUSY,
00036     SOCKET_ERROR_NULL_PTR,
00037     SOCKET_ERROR_BAD_FAMILY,
00038     SOCKET_ERROR_TIMEOUT,
00039     SOCKET_ERROR_BAD_ALLOC,
00040     SOCKET_ERROR_NO_CONNECTION,
00041     SOCKET_ERROR_SIZE,
00042     SOCKET_ERROR_STACK_EXISTS,
00043     SOCKET_ERROR_STACKS,
00044     SOCKET_ERROR_BAD_STACK,
00045     SOCKET_ERROR_BAD_ADDRESS,
00046     SOCKET_ERROR_DNS_FAILED,
00047     SOCKET_ERROR_WOULD_BLOCK,
00048     SOCKET_ERROR_CLOSED,
00049     SOCKET_ERROR_VALUE,
00050     SOCKET_ERROR_ADDRESS_IN_USE,
00051     SOCKET_ERROR_ALREADY_CONNECTED,
00052     SOCKET_ERROR_ABORT,
00053     SOCKET_ERROR_RESET,
00054     SOCKET_ERROR_BAD_ARGUMENT,
00055     SOCKET_ERROR_INTERFACE_ERROR,
00056     SOCKET_ERROR_API_VERSION,
00057     SOCKET_ERROR_NOT_BOUND,
00058 
00059 } socket_error_t;
00060 
00061 typedef enum {
00062     SOCKET_ALLOC_HEAP = 0,
00063     SOCKET_ALLOC_POOL_BEST,
00064 } socket_alloc_pool_t;
00065 
00066 typedef enum {
00067     SOCKET_AF_UNINIT,
00068     SOCKET_AF_INET4,
00069     SOCKET_AF_INET6,
00070     SOCKET_AF_MAX,
00071 } socket_address_family_t;
00072 
00073 typedef enum {
00074     SOCKET_PROTO_UNINIT = 0,
00075     SOCKET_DGRAM,
00076     SOCKET_STREAM,
00077     SOCKET_PROTO_MAX,
00078 } socket_proto_family_t;
00079 
00080 typedef enum {
00081     SOCKET_EVENT_NONE = 0,
00082     SOCKET_EVENT_ERROR,
00083     SOCKET_EVENT_RX_DONE,
00084     SOCKET_EVENT_TX_DONE,
00085     SOCKET_EVENT_RX_ERROR,
00086     SOCKET_EVENT_TX_ERROR,
00087     SOCKET_EVENT_CONNECT,
00088     SOCKET_EVENT_DISCONNECT,
00089     SOCKET_EVENT_DNS,
00090     SOCKET_EVENT_ACCEPT,
00091 } event_flag_t;
00092 
00093 typedef enum {
00094     SOCKET_STATUS_IDLE      = 0,
00095     SOCKET_STATUS_RX_BUSY   = 1 << 0,
00096     SOCKET_STATUS_TX_BUSY   = 1 << 1,
00097     SOCKET_STATUS_CONNECTED = 1 << 2,
00098     SOCKET_STATUS_BOUND     = 1 << 3,
00099 } socket_status_t;
00100 
00101 typedef enum {
00102     SOCKET_STACK_UNINIT = 0,
00103     SOCKET_STACK_LWIP_IPV4,
00104     SOCKET_STACK_LWIP_IPV6,
00105     SOCKET_STACK_RESERVED,
00106     SOCKET_STACK_NANOSTACK_IPV6,
00107     SOCKET_STACK_PICOTCP,
00108     SOCKET_STACK_MAX,
00109 } socket_stack_t;
00110 
00111 typedef enum {
00112     SOCKET_BUFFER_UNINITIALISED = 0,
00113     SOCKET_BUFFER_RAW,
00114     SOCKET_BUFFER_LWIP_PBUF,
00115     SOCKET_BUFFER_NANOSTACK_PBUF,
00116 } socket_buffer_type_t;
00117 
00118 struct socket_addr {
00119     uint32_t ipv6be[4];
00120 };
00121 
00122 struct socket_buffer {
00123     socket_buffer_type_t type;
00124     const struct socket_buf_api *api;
00125     void *impl;
00126 };
00127 
00128 struct socket_rawbuf {
00129     void * buf;
00130     size_t size;
00131     size_t pos;
00132 };
00133 
00134 typedef void (*socket_api_handler_t)(void);
00135 typedef struct {
00136     void * (*alloc)(void *,const size_t);
00137     void (*dealloc)(void *, void *);
00138     void *context;
00139 } socket_allocator_t;
00140 
00141 struct socket_tx_info {
00142     uint16_t sentbytes;
00143 };
00144 
00145 struct socket_dns_info {
00146   struct socket_addr addr; // A stack-specific socket address struct
00147   const char *domain;
00148 };
00149 
00150 struct socket_accept_info {
00151     void * newimpl;
00152     uint8_t reject;
00153 };
00154 
00155 struct socket_event {
00156     event_flag_t event;
00157     struct socket *sock;
00158     union {
00159         struct socket_tx_info t;
00160         socket_error_t e;
00161         struct socket_dns_info d;
00162         struct socket_accept_info a;
00163     } i;
00164 };
00165 typedef struct socket_event socket_event_t;
00166 
00167 struct socket {
00168     socket_api_handler_t handler;
00169     socket_event_t *event; // TODO: (CThunk upgrade/Alpha3)
00170     const struct socket_api *api;
00171     void *impl;
00172     socket_status_t status;
00173     uint8_t family;
00174     socket_stack_t stack;
00175     void *rxBufChain; // TODO: Only required in some stacks, which do not support BSD-style buffering
00176 };
00177 
00178 #ifdef __cplusplus
00179 }
00180 #endif
00181 #endif /* __MBED_NET_SOCKET_ABSTRACT_SOCKET_TYPES_H__ */