+ OIC_LOG(DEBUG, TAG, "IN");
+
+ oc_mutex_lock(g_leServerStateMutex);
+ if (true == g_isLEGattServerStarted)
+ {
+ OIC_LOG(ERROR, TAG, "Gatt Server is already running");
+ oc_mutex_unlock(g_leServerStateMutex);
+ return CA_STATUS_OK;
+ }
+
+ CAResult_t ret = CAInitLEGattServer();
+ if (CA_STATUS_OK != ret)
+ {
+ OIC_LOG_V(ERROR, TAG, "CAInitLEGattServer failed[%d]", ret);
+ oc_mutex_unlock(g_leServerStateMutex);
+ CATerminateLEGattServer();
+ return CA_STATUS_FAILED;
+ }
+
+ ret = CAAddNewLEServiceInGattServer(CA_GATT_SERVICE_UUID);
+ if (CA_STATUS_OK != ret)
+ {
+ OIC_LOG_V(ERROR, TAG, "CAAddNewLEServiceInGattServer failed[%d]", ret);
+ oc_mutex_unlock(g_leServerStateMutex);
+ CATerminateLEGattServer();
+ return CA_STATUS_FAILED;
+ }
+
+ static const char charReadUUID[] = CA_GATT_RESPONSE_CHRC_UUID;
+ char charReadValue[] = {33, 44, 55, 66}; // These are initial random values
+
+ // For Read Characteristics.
+ ret = CAAddNewCharacteristicsToGattServer(g_gattSvcPath, charReadUUID, charReadValue,
+ CA_LE_INITIAL_BUF_SIZE, true);
+ if (CA_STATUS_OK != ret)
+ {
+ OIC_LOG_V(ERROR, TAG, "CAAddNewCharacteristicsToGattServer failed[%d]", ret);
+ oc_mutex_unlock(g_leServerStateMutex);
+ CATerminateLEGattServer();
+ return CA_STATUS_FAILED;
+ }
+
+ static const char charWriteUUID[] = CA_GATT_REQUEST_CHRC_UUID;
+ char charWriteValue[] = {33, 44, 55, 66}; // These are initial random values
+
+
+ ret = CAAddNewCharacteristicsToGattServer(g_gattSvcPath, charWriteUUID, charWriteValue,
+ CA_LE_INITIAL_BUF_SIZE, false); // For Write Characteristics.
+ if (CA_STATUS_OK != ret )
+ {
+ OIC_LOG_V(ERROR, TAG, "CAAddNewCharacteristicsToGattServer failed[%d]", ret);
+ oc_mutex_unlock(g_leServerStateMutex);
+ CATerminateLEGattServer();
+ return CA_STATUS_FAILED;
+ }
+
+ ret = CARegisterLEServicewithGattServer(g_gattSvcPath);
+ if (CA_STATUS_OK != ret )
+ {
+ OIC_LOG_V(ERROR, TAG, "CARegisterLEServicewithGattServer failed[%d]", ret);
+ oc_mutex_unlock(g_leServerStateMutex);
+ CATerminateLEGattServer();
+ return CA_STATUS_FAILED;
+ }
+
+ ret = CALEStartAdvertise();
+ if (CA_STATUS_OK != ret)
+ {
+ OIC_LOG_V(ERROR, TAG, "CALEStartAdvertise failed[%d]", ret);
+ oc_mutex_unlock(g_leServerStateMutex);
+ CATerminateLEGattServer();
+ return CA_STATUS_FAILED;
+ }
+
+ g_isLEGattServerStarted = true;
+
+ oc_mutex_unlock(g_leServerStateMutex);
+
+ OIC_LOG(DEBUG, TAG, "OUT");