1 /******************************************************************
3 * Copyright 2014 Samsung Electronics All Rights Reserved.
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 ******************************************************************/
21 #include "cawifiadapter_singlethread.h"
25 #include "caadapterutils.h"
28 #include "cawifiadapterutils.h"
31 * @def WIFI_ETHERNET_ADAPTER_TAG
32 * @brief Logging tag for module name
34 #define WIFI_ADAPTER_TAG "WIFIADAP"
38 * @brief Port to listen for incoming data
42 #define CA_MCAST_PORT 5683
45 * @def CA_MULTICAST_IP
46 * @brief Multicast IP Address
48 #define CA_MULTICAST_IP "224.0.1.187"
51 * @var gNetworkCallback
52 * @brief Network callback
54 static CANetworkChangeCallback gNetworkCallback = NULL;
57 * @var gIsMulticastServerStarted
58 * @brief Flag to check if multicast server is started
60 static bool gIsMulticastServerStarted = false;
62 CAResult_t CAWIFIRegisterNetworkNotifications(CANetworkChangeCallback netCallback)
64 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "IN");
66 gNetworkCallback = netCallback;
68 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "OUT");
72 CAResult_t CAInitializeWifi(CARegisterConnectivityCallback registerCallback,
73 CANetworkPacketReceivedCallback networkPacketCallback, CANetworkChangeCallback netCallback)
75 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "IN");
76 VERIFY_NON_NULL(registerCallback, WIFI_ADAPTER_TAG, "registerCallback");
77 VERIFY_NON_NULL(networkPacketCallback, WIFI_ADAPTER_TAG, "networkPacketCallback");
78 VERIFY_NON_NULL(netCallback, WIFI_ADAPTER_TAG, "netCallback");
80 CAConnectivityHandler_t wifiHandler;
81 wifiHandler.startAdapter = CAStartWIFI;
82 wifiHandler.startListenServer = CAStartWIFIListeningServer;
83 wifiHandler.startDiscoverServer = CAStartWIFIDiscoveryServer;
84 wifiHandler.sendData = CASendWIFIUnicastData;
85 wifiHandler.sendDataToAll = CASendWIFIMulticastData;
86 wifiHandler.GetnetInfo = CAGetWIFIInterfaceInformation;
87 wifiHandler.readData = CAReadWIFIData;
88 wifiHandler.stopAdapter = CAStopWIFI;
89 wifiHandler.terminate = CATerminateWIfI;
90 registerCallback(wifiHandler, CA_WIFI);
92 CASetWIFINetworkPacketCallback(networkPacketCallback);
93 CAWIFIRegisterNetworkNotifications(netCallback);
95 OIC_LOG(INFO, WIFI_ADAPTER_TAG, "IntializeWifi is Success");
97 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "OUT");
101 CAResult_t CAStartWIFI()
103 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "IN");
104 int16_t unicastPort = CA_PORT;
105 CAResult_t ret = CA_STATUS_OK;
107 /*Address is hardcoded as we are using Single Interface*/
108 ret = CAStartUnicastServer("0.0.0.0", &unicastPort);
110 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "OUT");
114 CAResult_t CAStartWIFIListeningServer()
116 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "IN");
118 CAResult_t ret = CA_STATUS_OK;
119 int16_t multicastPort = CA_MCAST_PORT;
121 if (gIsMulticastServerStarted == true)
123 OIC_LOG(ERROR, WIFI_ADAPTER_TAG, "Server is already Started");
124 return CA_SERVER_STARTED_ALREADY;
127 ret = CAStartMulticastServer(CA_MULTICAST_IP, "0.0.0.0", &multicastPort);
128 if (ret == CA_STATUS_OK)
130 OIC_LOG(INFO, WIFI_ADAPTER_TAG, "Multicast Server is Started Successfully");
131 gIsMulticastServerStarted = true;
134 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "OUT");
138 CAResult_t CAStartWIFIDiscoveryServer()
140 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "IN");
142 CAResult_t ret = CA_STATUS_OK;
143 int16_t multicastPort = CA_MCAST_PORT;
145 if (gIsMulticastServerStarted == true)
147 OIC_LOG(ERROR, WIFI_ADAPTER_TAG, "Server is already Started");
148 return CA_SERVER_STARTED_ALREADY;
151 ret = CAStartMulticastServer(CA_MULTICAST_IP, "0.0.0.0", &multicastPort);
152 if (ret == CA_STATUS_OK)
154 OIC_LOG(INFO, WIFI_ADAPTER_TAG, "Multicast Server is Started Successfully");
155 gIsMulticastServerStarted = true;
158 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "OUT");
162 uint32_t CASendWIFIUnicastData(const CARemoteEndpoint_t *remoteEndpoint, void *data,
165 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "IN");
167 uint32_t dataSize = 0;
169 VERIFY_NON_NULL_RET(remoteEndpoint, WIFI_ADAPTER_TAG, "remoteEndpoint",
171 VERIFY_NON_NULL_RET(data, WIFI_ADAPTER_TAG, "data", dataSize);
175 OIC_LOG(ERROR, WIFI_ADAPTER_TAG, "DataLen is 0");
180 dataSize = CAWIFISendData(remoteEndpoint->addressInfo.IP.ipAddress,
181 remoteEndpoint->addressInfo.IP.port, data, dataLen, 0);
183 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "OUT");
187 uint32_t CASendWIFIMulticastData(void *data, uint32_t dataLength)
189 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "IN");
190 VERIFY_NON_NULL_RET(data, WIFI_ADAPTER_TAG, "data", 0);
192 uint32_t dataSize = 0;
195 OIC_LOG(ERROR, WIFI_ADAPTER_TAG, "DataLen is 0");
199 dataSize = CAWIFISendData(CA_MULTICAST_IP, CA_MCAST_PORT, data, dataLength, 1);
201 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "OUT");
205 CAResult_t CAStartWIFINotifyRecvServers()
207 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "IN");
209 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "OUT");
213 uint32_t CASendWIFINotification(const CARemoteEndpoint_t *endpoint, void *data, uint32_t dataLen)
215 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "IN");
217 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "OUT");
221 CAResult_t CAGetWIFIInterfaceInformation(CALocalConnectivity_t **info, uint32_t *size)
223 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "IN");
225 VERIFY_NON_NULL(info, WIFI_ADAPTER_TAG, "info");
226 char localIpAddress[CA_IPADDR_SIZE];
227 int32_t localIpAddressLen = sizeof(localIpAddress);
229 CAArduinoGetInterfaceAddress(localIpAddress, localIpAddressLen);
231 * Create local endpoint using util function
233 (*info) = CAAdapterCreateLocalEndpoint(CA_WIFI, localIpAddress, "WiFi");
236 OIC_LOG(ERROR, WIFI_ADAPTER_TAG, "Out of memory");
237 return CA_MEMORY_ALLOC_FAILED;
242 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "OUT");
246 CAResult_t CAReadWIFIData()
248 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "IN");
249 CAArduoinoCheckServerData();
250 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "OUT");
254 CAResult_t CAStopWIFI()
256 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "IN");
257 CAResult_t result = CA_STATUS_FAILED;
258 result = CAStopUnicastServer();
259 if (result != CA_STATUS_OK)
261 OIC_LOG(ERROR, WIFI_ADAPTER_TAG, "Error");
265 result = CAStopMulticastServer();
266 if (result != CA_STATUS_OK)
268 OIC_LOG(ERROR, WIFI_ADAPTER_TAG, "Error");
273 gIsMulticastServerStarted = false;
275 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "OUT");
279 void CATerminateWIfI()
281 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "IN");
283 CASetWIFINetworkPacketCallback(NULL);
284 CAResult_t result = CAWIFIRegisterNetworkNotifications(NULL);
285 if (result != CA_STATUS_OK)
287 OIC_LOG(ERROR, WIFI_ADAPTER_TAG, "Error");
290 OIC_LOG(INFO, WIFI_ADAPTER_TAG, "TerminateWifi Success");
292 OIC_LOG(DEBUG, WIFI_ADAPTER_TAG, "OUT");