diff options
author | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2018-09-07 18:40:34 +0200 |
---|---|---|
committer | Jonathan Aillet <jonathan.aillet@iot.bzh> | 2018-10-08 15:57:27 +0200 |
commit | 6b215041cfe7b072344704d820bbe74fe07ab8eb (patch) | |
tree | b2b654e0c5d4fd3e3f073c1b06070ab2f49d28dd | |
parent | 624971371bba5ca9a9fa6a862c70b0e928e5649c (diff) |
Add handling of hci and profile in hal-bt plugin
Add handling of bluetoothg hci and bluetooth profile when keep bluetooth
connected devices up to date.
Change-Id: I49b3e67136168bcae711eb8f7ffb2e1ccdbad3ae
Signed-off-by: Jonathan Aillet <jonathan.aillet@iot.bzh>
-rw-r--r-- | plugins/lib/bluetooth/hal-bt-cb.c | 17 | ||||
-rw-r--r-- | plugins/lib/bluetooth/hal-bt-data.c | 38 | ||||
-rw-r--r-- | plugins/lib/bluetooth/hal-bt-data.h | 6 |
3 files changed, 50 insertions, 11 deletions
diff --git a/plugins/lib/bluetooth/hal-bt-cb.c b/plugins/lib/bluetooth/hal-bt-cb.c index 243b3b9..f57f7ac 100644 --- a/plugins/lib/bluetooth/hal-bt-cb.c +++ b/plugins/lib/bluetooth/hal-bt-cb.c @@ -98,9 +98,11 @@ void HalBtGetConnectedBluetoothDevices(AFB_ReqT request) while(currentBtDeviceData) { wrap_json_pack(¤tBtDeviceObjectJ, - "{s:s s:s}", + "{s:s s:s s:s s:b}", + "Hci", currentBtDeviceData->hci, "Name", currentBtDeviceData->name, - "Address", currentBtDeviceData->address); + "Address", currentBtDeviceData->address, + "A2dp", currentBtDeviceData->a2dp); json_object_array_add(requestAnswer, currentBtDeviceObjectJ); currentBtDeviceData = currentBtDeviceData->next; @@ -126,9 +128,11 @@ void HalBtGetSelectedBluetoothDevice(AFB_ReqT request) } wrap_json_pack(&selectedBtDeviceObject, - "{s:s s:s}", + "{s:s s:s s:s s:b}", + "Hci", localHalBtPluginData->selectedBtDevice->hci, "Name", localHalBtPluginData->selectedBtDevice->name, - "Address", localHalBtPluginData->selectedBtDevice->address); + "Address", localHalBtPluginData->selectedBtDevice->address, + "A2dp", localHalBtPluginData->selectedBtDevice->a2dp); AFB_ReqSuccess(request, selectedBtDeviceObject, "Selected Bluetooth device"); } @@ -162,6 +166,11 @@ void HalBtSetSelectedBluetoothDevice(AFB_ReqT request) return; } + if(! selectedBtDeviceData->a2dp) { + AFB_ReqFail(request, "requested_device_to_select", "Requested bluetooth device to select is not able to use A2DP profile"); + return; + } + localHalBtPluginData->selectedBtDevice = selectedBtDeviceData; // TODO JAI : Tell the softmixer that we want it as an input using 'bluealsa:HCI=hci0,DEV=F6:32:15:2A:80:70,PROFILE=a2dp' diff --git a/plugins/lib/bluetooth/hal-bt-data.c b/plugins/lib/bluetooth/hal-bt-data.c index d56d0db..ff93ab8 100644 --- a/plugins/lib/bluetooth/hal-bt-data.c +++ b/plugins/lib/bluetooth/hal-bt-data.c @@ -55,6 +55,7 @@ int HalBtDataRemoveSelectedBtDeviceFromList(struct HalBtDeviceData **firstBtDevi } } + free(matchingBtDevice->hci); free(matchingBtDevice->uid); free(matchingBtDevice->name); free(matchingBtDevice->address); @@ -76,7 +77,6 @@ struct HalBtDeviceData *HalBtDataAddBtDeviceToBtDeviceList(struct HalBtDeviceDat currentBtDeviceData = *firstBtDeviceData; if(! currentBtDeviceData) { - currentBtDeviceData = (struct HalBtDeviceData *) calloc(1, sizeof(struct HalBtDeviceData)); if(! currentBtDeviceData) return NULL; @@ -84,7 +84,6 @@ struct HalBtDeviceData *HalBtDataAddBtDeviceToBtDeviceList(struct HalBtDeviceDat *firstBtDeviceData = currentBtDeviceData; } else { - while(currentBtDeviceData->next) currentBtDeviceData = currentBtDeviceData->next; @@ -95,6 +94,8 @@ struct HalBtDeviceData *HalBtDataAddBtDeviceToBtDeviceList(struct HalBtDeviceDat currentBtDeviceData = currentBtDeviceData->next; } + // TODO JAI : get hci device of bt device here + // TODO JAI : check if a2dp profile is supported here if(wrap_json_unpack(currentSingleBtDeviceDataJ, "{s:s s:s}", "Name", ¤tBtDeviceName, @@ -108,6 +109,12 @@ struct HalBtDeviceData *HalBtDataAddBtDeviceToBtDeviceList(struct HalBtDeviceDat return NULL; } + // JAI : WARNING : hci bt device is currently harcoded + if(! (currentBtDeviceData->hci = strdup("hci0"))) { + HalBtDataRemoveSelectedBtDeviceFromList(firstBtDeviceData, currentBtDeviceData); + return NULL; + } + if(! (currentBtDeviceData->name = strdup(currentBtDeviceName))) { HalBtDataRemoveSelectedBtDeviceFromList(firstBtDeviceData, currentBtDeviceData); return NULL; @@ -118,9 +125,31 @@ struct HalBtDeviceData *HalBtDataAddBtDeviceToBtDeviceList(struct HalBtDeviceDat return NULL; } + // JAI : WARNING : a2dp profile is currently harcoded + currentBtDeviceData->a2dp = 1; + return currentBtDeviceData; } +struct HalBtDeviceData *HalBtDataGetFirstA2dpBtDeviceAvailable(struct HalBtDeviceData **firstBtDeviceData) +{ + struct HalBtDeviceData *currentBtDeviceData; + + if(! firstBtDeviceData) + return NULL; + + currentBtDeviceData = *firstBtDeviceData; + + while(currentBtDeviceData) { + if(currentBtDeviceData->a2dp) + return currentBtDeviceData; + + currentBtDeviceData = currentBtDeviceData->next; + } + + return NULL; +} + int HalBtDataGetNumberOfBtDeviceInList(struct HalBtDeviceData **firstBtDeviceData) { unsigned int btDeviceNb = 0; @@ -184,15 +213,14 @@ int HalBtDataHandleReceivedSingleBtDeviceData(struct HalBtPluginData *halBtPlugi return -3; if(halBtPluginData->selectedBtDevice == currentBtDevice) - halBtPluginData->selectedBtDevice = halBtPluginData->first; + halBtPluginData->selectedBtDevice = HalBtDataGetFirstA2dpBtDeviceAvailable(&halBtPluginData->first); } else if(! currentBtDevice && currentBtDeviceIsConnected) { - if(! HalBtDataAddBtDeviceToBtDeviceList(&halBtPluginData->first, currentSingleBtDeviceDataJ)) return -4; if(! halBtPluginData->selectedBtDevice) - halBtPluginData->selectedBtDevice = halBtPluginData->first; + halBtPluginData->selectedBtDevice = HalBtDataGetFirstA2dpBtDeviceAvailable(&halBtPluginData->first); } return 0; diff --git a/plugins/lib/bluetooth/hal-bt-data.h b/plugins/lib/bluetooth/hal-bt-data.h index 030c8d1..ea3fe99 100644 --- a/plugins/lib/bluetooth/hal-bt-data.h +++ b/plugins/lib/bluetooth/hal-bt-data.h @@ -27,16 +27,18 @@ // Structure to store bluetooth device data struct HalBtDeviceData { char *uid; + + char *hci; char *name; char *address; - // TODO JAI : Get bluetooth device's profile and store it here + + unsigned int a2dp; struct HalBtDeviceData *next; }; // Structure to store hal bluetooth plugin data struct HalBtPluginData { - // TODO JAI : Get hci device and store it here unsigned int btStreamEnabled; struct HalBtDeviceData *selectedBtDevice; |