コード例 #1
0
ファイル: caleserver.c プロジェクト: aaronkim/iotivity
CAResult_t CALEStartAdvertise(const char *serviceUUID)
{
    OIC_LOG(DEBUG, TAG, "IN");

    int res = bt_adapter_le_create_advertiser(&g_hAdvertiser);
    if (NULL == g_hAdvertiser || BT_ERROR_NONE != res)
    {
        OIC_LOG_V(ERROR, TAG, "g_hAdvertiser is NULL/ Result is %d", res);
        return CA_STATUS_FAILED;
    }

    res = bt_adapter_le_add_advertising_service_uuid(g_hAdvertiser,
                                                     BT_ADAPTER_LE_PACKET_ADVERTISING,
                                                     serviceUUID);
    if (BT_ERROR_NONE != res)
    {
        OIC_LOG_V(ERROR, TAG, "bt_adapter_le_add_advertising_service_uuid failed with ret[%s]",
                  CALEGetErrorMsg(res));
        return CA_STATUS_FAILED;
    }

    res = bt_adapter_le_set_advertising_device_name(g_hAdvertiser,
                                                    BT_ADAPTER_LE_PACKET_SCAN_RESPONSE, true);
    if (BT_ERROR_NONE != res)
    {
        OIC_LOG_V(ERROR, TAG, "bt_adapter_le_set_advertising_device_name failed with ret[%s]",
                  CALEGetErrorMsg(res));
        return CA_STATUS_FAILED;
    }

    res = bt_adapter_le_start_advertising_new(g_hAdvertiser, NULL, NULL);
    if (BT_ERROR_NONE != res)
    {
        OIC_LOG_V(ERROR, TAG, "bt_adapter_le_start_advertising_new failed with ret[%s]",
                  CALEGetErrorMsg(res));
        return CA_STATUS_FAILED;
    }

    OIC_LOG(DEBUG, TAG, "OUT");
    return CA_STATUS_OK;
}
コード例 #2
0
ファイル: cableserver.c プロジェクト: darcyg/iotivity-1
void CAStartBleGattServerThread(void *data)
{
    OIC_LOG(DEBUG, TZ_BLE_SERVER_TAG, "IN");
    ca_mutex_lock(g_bleServerStateMutex);
    if (true == g_isBleGattServerStarted)
    {
        OIC_LOG(ERROR, TZ_BLE_SERVER_TAG, "Gatt Server is already running");
        ca_mutex_unlock(g_bleServerStateMutex);
        CATerminateLEGattServer();
        return;
    }

    CAResult_t ret  =  CAInitBleGattService();
    if (CA_STATUS_OK != ret )
    {
        OIC_LOG(ERROR, TZ_BLE_SERVER_TAG, "_bt_gatt_init_service failed");
        ca_mutex_unlock(g_bleServerStateMutex);
        CATerminateLEGattServer();
        return;
    }

    sleep(5); // Sleep is must because of the platform issue.

    char *serviceUUID = OIC_BLE_SERVICE_ID;

    ret  = CAAddNewBleServiceInGattServer(serviceUUID);
    if (CA_STATUS_OK != ret )
    {
        OIC_LOG(ERROR, TZ_BLE_SERVER_TAG, "CAAddNewBleServiceInGattServer failed");
        ca_mutex_unlock(g_bleServerStateMutex);
        CATerminateLEGattServer();
        return;
    }

    char *charReadUUID = CA_BLE_READ_CHAR_UUID;
    char charReadValue[] = {33, 44, 55, 66}; // These are initial random values

    ret = CAAddNewCharacteristicsToGattServer(g_gattSvcPath, charReadUUID, charReadValue,
            CA_BLE_INITIAL_BUF_SIZE, true); // For Read Characteristics.
    if (CA_STATUS_OK != ret )
    {
        OIC_LOG(ERROR, TZ_BLE_SERVER_TAG, "CAAddNewCharacteristicsToGattServer failed");
        ca_mutex_unlock(g_bleServerStateMutex);
        CATerminateLEGattServer();
        return;
    }

    char *charWriteUUID = CA_BLE_WRITE_CHAR_UUID;
    char charWriteValue[] = {33, 44, 55, 66}; // These are initial random values


    ret = CAAddNewCharacteristicsToGattServer(g_gattSvcPath, charWriteUUID, charWriteValue,
            CA_BLE_INITIAL_BUF_SIZE, false); // For Write Characteristics.
    if (CA_STATUS_OK != ret )
    {
        OIC_LOG(ERROR, TZ_BLE_SERVER_TAG, "CAAddNewCharacteristicsToGattServer failed");
        ca_mutex_unlock(g_bleServerStateMutex);
        CATerminateLEGattServer();
        return;
    }

    ret = CARegisterBleServicewithGattServer(g_gattSvcPath);
    if (CA_STATUS_OK != ret )
    {
        OIC_LOG(ERROR, TZ_BLE_SERVER_TAG, "CARegisterBleServicewithGattServer failed");
        ca_mutex_unlock(g_bleServerStateMutex);
        CATerminateLEGattServer();
        return;
    }

    int res = bt_gatt_set_connection_state_changed_cb(CABleGattServerConnectionStateChangedCb,
                                                          NULL);
    if (BT_ERROR_NONE != res)
    {
        OIC_LOG_V(ERROR, TZ_BLE_SERVER_TAG,
                  "bt_gatt_set_connection_state_changed_cb Failed with return as [%s]",
                  CABTGetErrorMsg(res));
        return;
    }

    bt_adapter_le_create_advertiser(&g_hAdvertiser);
    if (NULL == g_hAdvertiser)
    {
        OIC_LOG(ERROR, TZ_BLE_SERVER_TAG, "g_hAdvertiser is NULL");
        ca_mutex_unlock(g_bleServerStateMutex);
        CATerminateLEGattServer();
        return;
    }

    res = bt_adapter_le_start_advertising(g_hAdvertiser, NULL, NULL, NULL);
    if (BT_ERROR_NONE != res)
    {
        OIC_LOG_V(DEBUG, TZ_BLE_SERVER_TAG, "bt_adapter_le_start_advertising failed with ret [%d] ",
                  res);
        ca_mutex_unlock(g_bleServerStateMutex);
        CATerminateLEGattServer();
        return;
    }

    g_isBleGattServerStarted = true;

    ca_mutex_unlock(g_bleServerStateMutex);

    OIC_LOG(DEBUG, TZ_BLE_SERVER_TAG,
            "LE Server initialization complete.");

    GMainContext *thread_context = NULL;

    thread_context = g_main_context_new();

    g_eventLoop = g_main_loop_new(thread_context, FALSE);

    g_main_context_push_thread_default(thread_context);

    g_main_loop_run(g_eventLoop);

    OIC_LOG(DEBUG, TZ_BLE_SERVER_TAG, "OUT");
}