Imported Upstream version 0.9.2
[platform/upstream/iotivity.git] / resource / csdk / connectivity / inc / caadapterinterface.h
1 /* ****************************************************************
2  *
3  * Copyright 2014 Samsung Electronics All Rights Reserved.
4  *
5  *
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  ******************************************************************/
20
21 /**
22  * @file
23  *
24  * This file contains the APIs for adapters to be implemented.
25  */
26
27 #ifndef CA_ADAPTER_INTERFACE_H_
28 #define CA_ADAPTER_INTERFACE_H_
29
30 #include "cacommon.h"
31
32 #ifdef __cplusplus
33 extern "C"
34 {
35 #endif
36
37 /**
38  * @brief Starting connectivity adapters and each adapter have transport specific behavior.
39  * Transport Specific Behavior:
40  * WIFI/ETH connectivity Starts unicast server on  all available IPs and defined
41  * port number as per specification.
42  * EDR will not start any specific servers.
43  * LE will not start any specific servers.
44  * @return CA_STATUS_OK or CA_STATUS_FAILED
45  *  ERROR CODES (CAResult_t error codes in cacommon.h)
46  */
47 typedef CAResult_t (*CAAdapterStart)();
48
49 /**
50  * @brief Starting listening server for receiving multicast search requests
51  * Transport Specific Behavior:
52  * WIFI/ETH Starts multicast server on  all available IPs and defined
53  * port number and as per specification.
54  * EDR  Starts RFCOMM Server with prefixed UUID as per specification.
55  * LE Start GATT Server with prefixed UUID and Characteristics as per OIC Specification.
56  * @return CA_STATUS_OK or CA_STATUS_FAILED
57  * ERROR CODES (CAResult_t error codes in cacommon.h)
58  */
59 typedef CAResult_t (*CAAdapterStartListeningServer)();
60
61 /**
62  * @brief for starting discovery servers for receiving multicast advertisements
63  * Transport Specific Behavior:
64  * WIFI/ETH Starts multicast server on all available IPs and defined port
65  * number as per OIC Specification.
66  * EDR Starts RFCOMM Server with prefixed UUID as per OIC Specification.
67  * LE Starts GATT Server with prefixed UUID and Characteristics as per OIC Specification.
68  * @return CA_STATUS_OK or CA_STATUS_FAILED
69  * ERROR CODES (CAResult_t error codes in cacommon.h)
70  */
71 typedef CAResult_t (*CAAdapterStartDiscoveryServer)();
72
73 /**
74  * @brief Sends data to the endpoint using the adapter connectivity.
75  * Note: length must be > 0.
76  * @param   endpoint    [IN]    Remote Endpoint information (like ipaddress , port,
77  * reference uri and connectivity type) to which the unicast data has to be sent.
78  * @param   data        [IN]    Data which required to be sent.
79  * @param   dataLen     [IN]    Size of data to be sent.
80  * @return The number of bytes sent on the network. Return value equal to -1 indicates error.
81  */
82 typedef int32_t (*CAAdapterSendUnicastData)(const CAEndpoint_t *endpoint,
83                                             const void *data, uint32_t dataLen);
84
85 /**
86  * @brief Sends Multicast data to the endpoint using the adapter connectivity.
87  * Note: length must be > 0.
88  * @param   endpoint    [IN]    Remote Endpoint information (like ipaddress , port,
89  * @param   data        [IN]    Data which required to be sent.
90  * @param   dataLen     [IN]    Size of data to be sent.
91  * @return The number of bytes sent on the network. Return value equal to -1 indicates error.
92  */
93 typedef int32_t (*CAAdapterSendMulticastData)(const CAEndpoint_t *endpoint,
94         const void *data, uint32_t dataLen);
95
96 /**
97  * @brief Get Network Information
98  * @param   info        [OUT]   Local connectivity information structures
99  * @param   size        [OUT]   Number of local connectivity structures.
100  * @return CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
101  */
102 typedef CAResult_t (*CAAdapterGetNetworkInfo)(CAEndpoint_t **info, uint32_t *size);
103
104 /**
105  * @brief Read Synchronous API callback.
106  * @return CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
107  */
108 typedef CAResult_t (*CAAdapterReadData)();
109
110 /**
111  * @brief Stopping the adapters and close socket connections
112  * Transport Specific Behavior:
113  * WIFI/ETH Stops all listening servers and close sockets.
114  * EDR Stops all RFCOMM servers and close sockets.
115  * LE Stops all GATT servers and close sockets.
116  * @return CA_STATUS_OK or ERROR CODES ( CAResult_t error codes in cacommon.h)
117  */
118 typedef CAResult_t (*CAAdapterStop)();
119
120 /**
121  * @brief Terminate the connectivity adapter.Configuration information will be deleted from
122  * further use. Freeing Memory of threadpool and mutexs and cleanup will be done.
123  */
124 typedef void (*CAAdapterTerminate)();
125
126 /**
127  * @brief Connectivity handler information for adapter
128  */
129 typedef struct
130 {
131     /** Start Transport specific functions*/
132     CAAdapterStart startAdapter;
133
134     /** Listening Server function address*/
135     CAAdapterStartListeningServer startListenServer;
136
137     /** Discovery Server function address **/
138     CAAdapterStartDiscoveryServer startDiscoveryServer;
139
140     /** Unicast data function address**/
141     CAAdapterSendUnicastData sendData;
142
143     /** Multicast data function address**/
144     CAAdapterSendMulticastData sendDataToAll;
145
146     /** Get Networking information  **/
147     CAAdapterGetNetworkInfo GetnetInfo;
148
149     /** Read Data function address**/
150     CAAdapterReadData readData;
151
152     /** Stop Transport specific functions*/
153     CAAdapterStop stopAdapter;
154
155     /** Terminate function address stored in this pointer**/
156     CAAdapterTerminate terminate;
157
158 } CAConnectivityHandler_t;
159
160 /**
161  * @brief This will be used during the registration of adapters call backs to the common logic
162  * @see CAConnectivityHandler_t , CATransportAdapter_t
163  */
164 typedef void (*CARegisterConnectivityCallback)(CAConnectivityHandler_t handler,
165         CATransportAdapter_t cType);
166
167 /**
168  * @brief This will be used during the recive of network requests and response.
169  * @see SendUnicastData(), SendMulticastData()
170  */
171 typedef void (*CANetworkPacketReceivedCallback)(const CAEndpoint_t *endPoint, void *data,
172         uint32_t dataLen);
173
174 /**
175  * @brief This will be used to notify network changes to the connectivity common logic layer
176  * @see SendUnicastData(), SendMulticastData()
177  */
178 typedef void (*CANetworkChangeCallback)(const CAEndpoint_t *info, CANetworkStatus_t status);
179
180 /**
181  * @brief This will be used to notify error result to the connectivity common logic layer
182  */
183 typedef void (*CAErrorHandleCallback)(const CAEndpoint_t *endpoint,
184                                       const void *data, uint32_t dataLen,
185                                       CAResult_t result);
186
187 #ifdef __cplusplus
188 } /* extern "C" */
189 #endif
190
191 #endif  /* CA_ADAPTER_INTERFACE_H_ */
192