int32_t CASendLEData(const void *data, uint32_t dataLen) { OIC_LOG(DEBUG, TAG, "IN"); char header[CA_HEADER_LENGTH] = {0}; CAResult_t result = CAGenerateHeader(header, dataLen); if (CA_STATUS_OK != result) { return -1; } if (!CAIsBleConnected()) { OIC_LOG(DEBUG, TAG, "le not conn"); return -1; } CAUpdateCharacteristicsInGattServer(header, CA_HEADER_LENGTH); int32_t dataLimit = dataLen / CA_SUPPORTED_BLE_MTU_SIZE; int32_t iter = 0; for (iter = 0; iter < dataLimit; iter++) { CAUpdateCharacteristicsInGattServer((data + (iter * CA_SUPPORTED_BLE_MTU_SIZE)), CA_SUPPORTED_BLE_MTU_SIZE); CABleDoEvents(); } CAUpdateCharacteristicsInGattServer((data + (dataLimit * CA_SUPPORTED_BLE_MTU_SIZE)), dataLen % CA_SUPPORTED_BLE_MTU_SIZE); CABleDoEvents(); OIC_LOG(DEBUG, TAG, "writebytes done"); OIC_LOG(DEBUG, TAG, "OUT"); // Arduino BLEWrite doesnot return value. So, Return the received DataLength return dataLen; }
uint32_t CASendLEMulticastData(void *data, uint32_t dataLen) { OCLog(DEBUG, CALEADAPTER_TAG, "IN"); //Input validation VERIFY_NON_NULL(data, NULL, "Data is null"); if (0 >= dataLen) { OCLog(ERROR, CALEADAPTER_TAG, "Invalid Parameter"); return 0; } CAResult_t result = CA_STATUS_FAILED; #ifdef __TIZEN__ pthread_mutex_lock(&gBleIsServerMutex); if (gIsServer) { result = CAUpdateCharacteristicsInGattServer(data, dataLen); if (CA_STATUS_OK != result) { OCLogv(ERROR, CALEADAPTER_TAG, "[CASendLEMulticastData] updating data in server is failed"); pthread_mutex_unlock(&gBleIsServerMutex); return 0; } } else { result = CAUpdateCharacteristicsToAllGattServers(data, dataLen); if (CA_STATUS_OK != result) { OCLogv(ERROR, CALEADAPTER_TAG, "[SendLEMulticastDataToAll] multicasting data to servers failed" ); pthread_mutex_unlock(&gBleIsServerMutex); return 0; } } pthread_mutex_unlock(&gBleIsServerMutex); #else char *tempPath = "temp_path"; updateCharacteristicsInGattServer(tempPath, (char *) data, dataLen); #endif //#ifdef __TIZEN__ OCLog(DEBUG, CALEADAPTER_TAG, "OUT"); return dataLen; }
uint32_t CASendLEUnicastData(const CARemoteEndpoint_t *endpoint, void *data, uint32_t dataLen) { OCLog(DEBUG, CALEADAPTER_TAG, "IN"); //Input validation VERIFY_NON_NULL(endpoint, NULL, "Remote endpoint is null"); VERIFY_NON_NULL(data, NULL, "Data is null"); CAResult_t result = CA_STATUS_FAILED; #ifdef __TIZEN__ pthread_mutex_lock(&gBleIsServerMutex); if (gIsServer) { result = CAUpdateCharacteristicsInGattServer(data, dataLen); if (CA_STATUS_OK != result) { OCLogv(ERROR, CALEADAPTER_TAG, "[SendLEUnicastData] sending unicast data to [%s] failed\n", endpoint->addressInfo.BT.btMacAddress); pthread_mutex_unlock(&gBleIsServerMutex); return 0; } } else { result = CAUpdateCharacteristicsToGattServer(endpoint->addressInfo.BT.btMacAddress, data, dataLen, UNICAST, 0); if (CA_STATUS_OK != result) { OCLogv(ERROR, CALEADAPTER_TAG, "[SendLEUnicastData] sending unicast data to [%s] failed\n", endpoint->addressInfo.BT.btMacAddress); pthread_mutex_unlock(&gBleIsServerMutex); return 0; } } pthread_mutex_unlock(&gBleIsServerMutex); #else char *tempPath = "temp_path"; updateCharacteristicsInGattServer(tempPath, (char *) data, dataLen); #endif //#ifdef __TIZEN__ OCLog(DEBUG, CALEADAPTER_TAG, "OUT"); return dataLen; }