33 #include "btrMgr_logger.h"
46 #include "btrMgr_Columbo.h"
50 #define BTRMGR_SIGNAL_POOR (-90)
51 #define BTRMGR_SIGNAL_FAIR (-70)
52 #define BTRMGR_SIGNAL_GOOD (-60)
54 #define BTRMGR_CONNECT_RETRY_ATTEMPTS 2
55 #define BTRMGR_DEVCONN_CHECK_RETRY_ATTEMPTS 3
56 #define BTRMGR_DEVCONN_PWRST_CHANGE_TIME 3
58 #define BTRMGR_DISCOVERY_HOLD_OFF_TIME 120
59 #define BTRTEST_LE_ONBRDG_ENABLE 1
64 tBTRMgrAcHdl hBTRMgrAcHdl;
65 tBTRMgrSoHdl hBTRMgrSoHdl;
66 tBTRMgrSoHdl hBTRMgrSiHdl;
68 unsigned long bytesWritten;
71 unsigned bitsPerSample;
75 typedef enum _BTRMGR_DiscoveryState_t {
76 BTRMGR_DISCOVERY_ST_UNKNOWN,
77 BTRMGR_DISCOVERY_ST_STARTED,
78 BTRMGR_DISCOVERY_ST_PAUSED,
79 BTRMGR_DISCOVERY_ST_RESUMED,
80 BTRMGR_DISCOVERY_ST_STOPPED,
81 } BTRMGR_DiscoveryState_t;
83 typedef enum _enBTRMGRStartupAudio {
84 BTRMGR_STARTUP_AUD_INPROGRESS,
85 BTRMGR_STARTUP_AUD_SKIPPED,
86 BTRMGR_STARTUP_AUD_COMPLETED,
87 BTRMGR_STARTUP_AUD_UNKNOWN,
88 } enBTRMGRStartupAudio;
92 BTRMGR_DiscoveryState_t m_disStatus;
97 static tBTRCoreHandle ghBTRCoreHdl = NULL;
98 static tBTRMgrPIHdl ghBTRMgrPiHdl = NULL;
99 static tBTRMgrSDHdl ghBTRMgrSdHdl = NULL;
100 static BTRMgrDeviceHandle ghBTRMgrDevHdlLastConnected = 0;
101 static BTRMgrDeviceHandle ghBTRMgrDevHdlCurStreaming = 0;
112 static unsigned char gui8IsSoDevAvrcpSupported = 0;
113 static unsigned char gIsLeDeviceConnected = 0;
114 static unsigned char gIsAgentActivated = 0;
115 static unsigned char gEventRespReceived = 0;
116 static unsigned char gAcceptConnection = 0;
117 static unsigned char gIsUserInitiated = 0;
118 static unsigned char gDiscHoldOffTimeOutCbData = 0;
119 static unsigned char gConnPwrStChTimeOutCbData = 0;
120 static unsigned char gIsAudioInEnabled = 0;
121 static unsigned char gIsHidGamePadEnabled = 0;
122 static volatile guint gTimeOutRef = 0;
123 static volatile guint gConnPwrStChangeTimeOutRef = 0;
124 static volatile unsigned int gIsAdapterDiscovering = 0;
128 static enBTRMGRStartupAudio gIsAudOutStartupInProgress = BTRMGR_STARTUP_AUD_UNKNOWN;
130 static void* gpvMainLoop = NULL;
131 static void* gpvMainLoopThread = NULL;
133 static BTRMGR_EventCallback gfpcBBTRMgrEventOut = NULL;
134 static char gLeReadOpResponse[BTRMGR_MAX_DEV_OP_DATA_LEN] =
"\0";
135 static BOOLEAN gIsAdvertisementSet = FALSE;
136 static BOOLEAN gIsDeviceAdvertising = FALSE;
137 static BOOLEAN gIsDiscoveryOpInternal = FALSE;
165 #ifdef RDK_LOGGER_ENABLED
166 int b_rdk_logger_enabled = 0;
172 static inline unsigned char btrMgr_GetAdapterCnt (
void);
173 static const char* btrMgr_GetAdapterPath (
unsigned char aui8AdapterIdx);
175 static inline void btrMgr_SetAgentActivated (
unsigned char aui8AgentActivated);
176 static inline unsigned char btrMgr_GetAgentActivated (
void);
177 static void btrMgr_CheckAudioInServiceAvailability (
void);
178 static void btrMgr_CheckHidGamePadServiceAvailability (
void);
182 static const char* btrMgr_GetDiscoveryStateAsString (BTRMGR_DiscoveryState_t aScanStatus);
186 static inline void btrMgr_SetDiscoveryState (
BTRMGR_DiscoveryHandle_t* ahdiscoveryHdl, BTRMGR_DiscoveryState_t aScanStatus);
194 static inline gboolean btrMgr_isTimeOutSet (
void);
195 static inline void btrMgr_ClearDiscoveryHoldOffTimer(
void);
196 static inline void btrMgr_SetDiscoveryHoldOffTimer(
unsigned char aui8AdapterIdx);
214 static void btrMgr_GetPairedDevInfo (BTRMgrDeviceHandle ahBTRMgrDevHdl,
BTRMGR_PairedDevices_t* apBtMgrPairedDevInfo);
215 static void btrMgr_GetDiscoveredDevInfo (BTRMgrDeviceHandle ahBTRMgrDevHdl,
BTRMGR_DiscoveredDevices_t* apBtMgrDiscoveredDevInfo);
217 static unsigned char btrMgr_GetDevPaired (BTRMgrDeviceHandle ahBTRMgrDevHdl);
219 static void btrMgr_SetDevConnected (BTRMgrDeviceHandle ahBTRMgrDevHdl,
unsigned char aui8isDeviceConnected);
220 static unsigned char btrMgr_IsDevConnected (BTRMgrDeviceHandle ahBTRMgrDevHdl);
222 static unsigned char btrMgr_IsDevNameSameAsAddress (
char* apcDeviceName,
char* apcDeviceAddress,
unsigned int ui32StrLen);
223 static unsigned char btrMgr_CheckIfDevicePrevDetected (BTRMgrDeviceHandle ahBTRMgrDevHdl);
225 static BTRMGR_DeviceType_t btrMgr_MapDeviceTypeFromCore (enBTRCoreDeviceClass device_type);
230 static eBTRMgrRet btrMgr_StartCastingAudio (
int outFileFd,
int outMTUSize,
unsigned int outDevDelay, eBTRCoreDevMediaType aenBtrCoreDevOutMType,
void* apstBtrCoreDevOutMCodecInfo);
231 static eBTRMgrRet btrMgr_StopCastingAudio (
void);
233 static eBTRMgrRet btrMgr_StartReceivingAudio (
int inFileFd,
int inMTUSize,
unsigned int inDevDelay, eBTRCoreDevMediaType aenBtrCoreDevInMType,
void* apstBtrCoreDevInMCodecInfo);
234 static eBTRMgrRet btrMgr_StopReceivingAudio (
void);
236 static eBTRMgrRet btrMgr_ConnectToDevice (
unsigned char aui8AdapterIdx, BTRMgrDeviceHandle ahBTRMgrDevHdl,
BTRMGR_DeviceOperationType_t connectAs,
unsigned int aui32ConnectRetryIdx,
unsigned int aui32ConfirmIdx);
238 static eBTRMgrRet btrMgr_StartAudioStreamingOut (
unsigned char aui8AdapterIdx, BTRMgrDeviceHandle ahBTRMgrDevHdl,
BTRMGR_DeviceOperationType_t streamOutPref,
unsigned int aui32ConnectRetryIdx,
unsigned int aui32ConfirmIdx,
unsigned int aui32SleepIdx);
240 static eBTRMgrRet btrMgr_AddPersistentEntry(
unsigned char aui8AdapterIdx, BTRMgrDeviceHandle ahBTRMgrDevHdl,
const char* apui8ProfileStr,
int ai32DevConnected);
241 static eBTRMgrRet btrMgr_RemovePersistentEntry(
unsigned char aui8AdapterIdx, BTRMgrDeviceHandle ahBTRMgrDevHdl,
const char* apui8ProfileStr);
245 static void btrMgr_AddStandardAdvGattInfo(
void);
247 static void btrMgr_AddColumboGATTInfo(
void);
250 static BTRMGR_SysDiagChar_t btrMgr_MapUUIDtoDiagElement(
char *aUUID);
253 static gpointer btrMgr_g_main_loop_Task (gpointer appvMainLoop);
257 static gboolean btrMgr_DiscoveryHoldOffTimerCb (gpointer gptr);
258 static gboolean btrMgr_ConnPwrStChangeTimerCb (gpointer gptr);
260 static eBTRMgrRet btrMgr_ACDataReadyCb (
void* apvAcDataBuf,
unsigned int aui32AcDataLen,
void* apvUserData);
267 static enBTRCoreRet btrMgr_DeviceDiscoveryCb (
stBTRCoreDiscoveryCBInfo* astBTRCoreDiscoveryCbInfo,
void* apvUserData);
268 static enBTRCoreRet btrMgr_ConnectionInIntimationCb (
stBTRCoreConnCBInfo* apstConnCbInfo,
int* api32ConnInIntimResp,
void* apvUserData);
269 static enBTRCoreRet btrMgr_ConnectionInAuthenticationCb (
stBTRCoreConnCBInfo* apstConnCbInfo,
int* api32ConnInAuthResp,
void* apvUserData);
272 #ifdef RDKTV_PERSIST_VOLUME_SKY
273 static eBTRMgrRet btrMgr_SetLastVolume(
unsigned char aui8AdapterIdx,
unsigned char ui8Volume);
274 static eBTRMgrRet btrMgr_GetLastVolume(
unsigned char aui8AdapterIdx,
unsigned char *pVolume);
275 static eBTRMgrRet btrMgr_SetLastMuteState(
unsigned char aui8AdapterIdx, gboolean Mute);
276 static eBTRMgrRet btrMgr_GetLastMuteState(
unsigned char aui8AdapterIdx, gboolean *pMute);
280 static inline unsigned char
281 btrMgr_GetAdapterCnt (
284 return gListOfAdapters.number_of_adapters;
288 btrMgr_GetAdapterPath (
289 unsigned char aui8AdapterIdx
291 const char* pReturn = NULL;
293 if (gListOfAdapters.number_of_adapters) {
294 if ((aui8AdapterIdx < gListOfAdapters.number_of_adapters) && (aui8AdapterIdx < BTRCORE_MAX_NUM_BT_ADAPTERS)) {
295 pReturn = gListOfAdapters.adapter_path[aui8AdapterIdx];
303 btrMgr_SetAgentActivated (
304 unsigned char aui8AgentActivated
306 gIsAgentActivated = aui8AgentActivated;
309 static inline unsigned char
310 btrMgr_GetAgentActivated (
313 return gIsAgentActivated;
318 btrMgr_CheckAudioInServiceAvailability (
323 gIsAudioInEnabled = 1;
324 BTRMGRLOG_INFO (
"Enabling BTR AudioIn Service for raspberry pi devices.\n");
326 RFC_ParamData_t param = {0};
328 WDMP_STATUS status = getRFCParameter(
"BTRMGR",
"Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Feature.BTR.AudioIn.Enable", ¶m);
330 if (status == WDMP_SUCCESS) {
331 BTRMGRLOG_DEBUG (
"name = %s, type = %d, value = %s\n", param.name, param.type, param.value);
333 if (!strncmp(param.value,
"true", strlen(
"true"))) {
334 gIsAudioInEnabled = 1;
335 BTRMGRLOG_INFO (
"BTR AudioIn Serivce will be available.\n");
338 BTRMGRLOG_INFO (
"BTR AudioIn Serivce will not be available.\n");
342 BTRMGRLOG_ERROR (
"getRFCParameter Failed : %s\n", getRFCErrorString(status));
348 btrMgr_CheckHidGamePadServiceAvailability (
353 gIsHidGamePadEnabled = 1;
354 BTRMGRLOG_INFO (
"Enabling BTR HidGamePad Service for raspberry pi devices.\n");
356 RFC_ParamData_t param = {0};
358 WDMP_STATUS status = getRFCParameter(
"BTRMGR",
"Device.DeviceInfo.X_RDKCENTRAL-COM_RFC.Feature.BTR.GamePad.Enable", ¶m);
360 if (status == WDMP_SUCCESS) {
361 BTRMGRLOG_DEBUG (
"name = %s, type = %d, value = %s\n", param.name, param.type, param.value);
363 if (!strncmp(param.value,
"true", strlen(
"true"))) {
364 gIsHidGamePadEnabled = 1;
365 BTRMGRLOG_INFO (
"BTR HidGamePad Serivce will be available.\n");
368 BTRMGRLOG_INFO (
"BTR HidGamePad Serivce will not be available.\n");
372 BTRMGRLOG_ERROR (
"getRFCParameter Failed : %s\n", getRFCErrorString(status));
378 btrMgr_GetDiscoveryDeviceTypeAsString (
383 switch (adevOpType) {
384 case BTRMGR_DEVICE_OP_TYPE_AUDIO_OUTPUT:
385 opType =
"AUDIO_OUT";
387 case BTRMGR_DEVICE_OP_TYPE_AUDIO_INPUT:
390 case BTRMGR_DEVICE_OP_TYPE_LE:
393 case BTRMGR_DEVICE_OP_TYPE_HID:
396 case BTRMGR_DEVICE_OP_TYPE_UNKNOWN:
405 btrMgr_GetDiscoveryFilterAsString (
406 BTRMGR_ScanFilter_t ascanFlt
411 case BTRMGR_DISCOVERY_FILTER_UUID:
414 case BTRMGR_DISCOVERY_FILTER_RSSI:
417 case BTRMGR_DISCOVERY_FILTER_PATH_LOSS:
418 filter =
"PATH_LOSS";
420 case BTRMGR_DISCOVERY_FILTER_SCAN_TYPE:
421 filter =
"SCAN_TYPE";
429 btrMgr_GetDiscoveryStateAsString (
430 BTRMGR_DiscoveryState_t aScanStatus
434 switch (aScanStatus) {
435 case BTRMGR_DISCOVERY_ST_STARTED:
436 state =
"ST_STARTED";
438 case BTRMGR_DISCOVERY_ST_PAUSED:
441 case BTRMGR_DISCOVERY_ST_RESUMED:
442 state =
"ST_RESUMED";
444 case BTRMGR_DISCOVERY_ST_STOPPED:
445 state =
"ST_STOPPED";
447 case BTRMGR_DISCOVERY_ST_UNKNOWN:
449 state =
"ST_UNKNOWN";
456 btrMgr_SetBgDiscoveryType (
459 gBgDiscoveryType = adevOpType;
463 btrMgr_SetDiscoveryState (
465 BTRMGR_DiscoveryState_t aScanStatus
467 ahdiscoveryHdl->m_disStatus = aScanStatus;
471 btrMgr_SetDiscoveryDeviceType (
475 ahdiscoveryHdl->m_devOpType = aeDevOpType;
479 btrMgr_GetBgDiscoveryType (
482 return gBgDiscoveryType;
485 static inline BTRMGR_DiscoveryState_t
486 btrMgr_GetDiscoveryState (
489 return ahdiscoveryHdl->m_disStatus;
493 btrMgr_GetDiscoveryDeviceType (
496 return ahdiscoveryHdl->m_devOpType;
500 btrMgr_SetDiscoveryHandle (
502 BTRMGR_DiscoveryState_t aScanStatus
506 if (aDevOpType == btrMgr_GetBgDiscoveryType()) {
507 ldiscoveryHdl = &ghBTRMgrBgDiscoveryHdl;
510 ldiscoveryHdl = &ghBTRMgrDiscoveryHdl;
514 if (btrMgr_GetDiscoveryState(ldiscoveryHdl) != BTRMGR_DISCOVERY_ST_PAUSED) {
515 btrMgr_SetDiscoveryDeviceType (ldiscoveryHdl, aDevOpType);
516 btrMgr_SetDiscoveryState (ldiscoveryHdl, aScanStatus);
523 btrMgr_GetDiscoveryFilter (
526 return &ahdiscoveryHdl->m_disFilter;
530 static inline gboolean
531 btrMgr_isTimeOutSet (
534 return (gTimeOutRef > 0) ?
TRUE : FALSE;
538 btrMgr_ClearDiscoveryHoldOffTimer (
542 BTRMGRLOG_DEBUG (
"Cancelling previous Discovery hold off TimeOut Session : %u\n", gTimeOutRef);
543 g_source_remove (gTimeOutRef);
549 btrMgr_SetDiscoveryHoldOffTimer (
550 unsigned char aui8AdapterIdx
552 gDiscHoldOffTimeOutCbData = aui8AdapterIdx;
553 gTimeOutRef = g_timeout_add_seconds (BTRMGR_DISCOVERY_HOLD_OFF_TIME, btrMgr_DiscoveryHoldOffTimerCb, (gpointer)&gDiscHoldOffTimeOutCbData);
554 BTRMGRLOG_ERROR (
"DiscoveryHoldOffTimeOut set to +%u seconds || TimeOutReference : %u\n", BTRMGR_DISCOVERY_HOLD_OFF_TIME, gTimeOutRef);
559 btrMgr_SetDiscoveryFilter (
561 BTRMGR_ScanFilter_t aeScanFilterType,
566 if (btrMgr_GetDiscoveryState(ahdiscoveryHdl) != BTRMGR_DISCOVERY_ST_INITIALIZING){
567 BTRMGRLOG_ERROR (
"Not in Initializing state !!!. Current state is %s\n"
568 , btrMgr_GetDiscoveryStateAsString (btrMgr_GetDiscoveryState(ahdiscoveryHdl)));
569 return eBTRMgrFailure;
572 switch (aeScanFilterType) {
573 case BTRMGR_DISCOVERY_FILTER_UUID:
574 ldisFilter->m_btuuid.m_uuid = (
char**) realloc (ldisFilter->m_btuuid.m_uuid, (
sizeof(
char*) * (++ldisFilter->m_btuuid.m_uuidCount)));
575 ldisFilter->m_btuuid.m_uuid[ldisFilter->m_btuuid.m_uuidCount] = (
char*) malloc (BTRMGR_NAME_LEN_MAX);
576 strncpy (ldisFilter->m_btuuid.m_uuid[ldisFilter->m_btuuid.m_uuidCount-1], (
char*)aFilterValue, BTRMGR_NAME_LEN_MAX-1);
578 case BTRMGR_DISCOVERY_FILTER_RSSI:
579 ldisFilter->m_rssi = *(
short*)aFilterValue;
581 case BTRMGR_DISCOVERY_FILTER_PATH_LOSS:
582 ldisFilter->m_pathloss = *(
short*)aFilterValue;
584 case BTRMGR_DISCOVERY_FILTER_SCAN_TYPE:
585 ldisFilter->m_scanType = *(BTRMGR_DeviceScanType_t*)aFilterValue;
588 BTRMGRLOG_DEBUG (
"Discovery Filter is set successfully with the given %s...\n"
589 , btrMgr_GetDiscoveryFilterAsString(aeScanFilterType));
591 return eBTRMgrSuccess;
595 btrMgr_ClearDiscoveryFilter (
600 if (btrMgr_GetDiscoveryState(ahdiscoveryHdl) == BTRMGR_DISCOVERY_ST_INITIALIZED ||
601 btrMgr_GetDiscoveryState(ahdiscoveryHdl) == BTRMGR_DISCOVERY_ST_STARTED ||
602 btrMgr_GetDiscoveryState(ahdiscoveryHdl) == BTRMGR_DISCOVERY_ST_RESUMED ||
603 btrMgr_GetDiscoveryState(ahdiscoveryHdl) == BTRMGR_DISCOVERY_ST_PAUSED ){
604 BTRMGRLOG_WARN (
"Cannot clear Discovery Filter when Discovery is in %s\n"
605 , btrMgr_GetDiscoveryStateAsString(btrMgr_GetDiscoveryState(ahdiscoveryHdl)));
606 return eBTRMgrFailure;
609 if (ldisFilter->m_btuuid.m_uuidCount) {
610 while (ldisFilter->m_btuuid.m_uuidCount) {
611 free (ldisFilter->m_btuuid.m_uuid[ldisFilter->m_btuuid.m_uuidCount-1]);
612 ldisFilter->m_btuuid.m_uuid[ldisFilter->m_btuuid.m_uuidCount-1] = NULL;
613 ldisFilter->m_btuuid.m_uuidCount--;
615 free (ldisFilter->m_btuuid.m_uuid);
618 ldisFilter->m_btuuid.m_uuid = NULL;
619 ldisFilter->m_rssi = 0;
620 ldisFilter->m_pathloss = 0;
621 ldisFilter->m_scanType = BTRMGR_DEVICE_SCAN_TYPE_AUTO;
623 return eBTRMgrSuccess;
628 btrMgr_GetDiscoveryInProgress (
633 if (btrMgr_GetDiscoveryState(&ghBTRMgrDiscoveryHdl) == BTRMGR_DISCOVERY_ST_STARTED ||
634 btrMgr_GetDiscoveryState(&ghBTRMgrDiscoveryHdl) == BTRMGR_DISCOVERY_ST_RESUMED ){
635 ldiscoveryHdl = &ghBTRMgrDiscoveryHdl;
637 else if (btrMgr_GetDiscoveryState(&ghBTRMgrBgDiscoveryHdl) == BTRMGR_DISCOVERY_ST_STARTED ||
638 btrMgr_GetDiscoveryState(&ghBTRMgrBgDiscoveryHdl) == BTRMGR_DISCOVERY_ST_RESUMED ){
639 ldiscoveryHdl = &ghBTRMgrBgDiscoveryHdl;
643 BTRMGRLOG_DEBUG (
"[%s] Scan in Progress...\n"
644 , btrMgr_GetDiscoveryDeviceTypeAsString (btrMgr_GetDiscoveryDeviceType(ldiscoveryHdl)));
647 return ldiscoveryHdl;
651 btrMgr_PauseDeviceDiscovery (
652 unsigned char aui8AdapterIdx,
657 if (btrMgr_GetDiscoveryState(ahdiscoveryHdl) == BTRMGR_DISCOVERY_ST_STARTED ||
658 btrMgr_GetDiscoveryState(ahdiscoveryHdl) == BTRMGR_DISCOVERY_ST_RESUMED ){
660 if (BTRMGR_RESULT_SUCCESS == BTRMGR_StopDeviceDiscovery_Internal (aui8AdapterIdx, btrMgr_GetDiscoveryDeviceType(ahdiscoveryHdl))) {
662 btrMgr_SetDiscoveryState (ahdiscoveryHdl, BTRMGR_DISCOVERY_ST_PAUSED);
663 BTRMGRLOG_DEBUG (
"[%s] Successfully Paused Scan\n"
664 , btrMgr_GetDiscoveryDeviceTypeAsString (btrMgr_GetDiscoveryDeviceType(ahdiscoveryHdl)));
667 BTRMGRLOG_ERROR (
"[%s] Failed to Pause Scan\n"
668 , btrMgr_GetDiscoveryDeviceTypeAsString (btrMgr_GetDiscoveryDeviceType(ahdiscoveryHdl)));
669 lenBtrMgrRet = eBTRMgrFailure;
676 btrMgr_ResumeDeviceDiscovery (
677 unsigned char aui8AdapterIdx,
682 if (btrMgr_GetDiscoveryState(ahdiscoveryHdl) != BTRMGR_DISCOVERY_ST_PAUSED) {
683 BTRMGRLOG_WARN (
"\n[%s] Device Discovery Resume is requested, but current state is %s !!!\n"
684 , btrMgr_GetDiscoveryDeviceTypeAsString (btrMgr_GetDiscoveryDeviceType(ahdiscoveryHdl))
685 , btrMgr_GetDiscoveryStateAsString (btrMgr_GetDiscoveryState(ahdiscoveryHdl)));
686 BTRMGRLOG_WARN (
"\n Still continuing to Resume Discovery\n");
689 if (enBTRCoreSuccess != BTRCore_ApplyDiscoveryFilter (btrMgr_GetDiscoveryFilter(ahdiscoveryHdl))) {
690 BTRMGRLOG_ERROR (
"[%s] Failed to set Discovery Filter!!!"
691 , btrMgr_GetDiscoveryDeviceTypeAsString (btrMgr_GetDiscoveryDeviceType(ahdiscoveryHdl)));
692 lenBtrMgrRet = eBTRMgrFailure;
696 if (BTRMGR_RESULT_SUCCESS == BTRMGR_StartDeviceDiscovery_Internal (aui8AdapterIdx, btrMgr_GetDiscoveryDeviceType(ahdiscoveryHdl))) {
699 btrMgr_SetDiscoveryState (ahdiscoveryHdl, BTRMGR_DISCOVERY_ST_RESUMED);
700 BTRMGRLOG_DEBUG (
"[%s] Successfully Resumed Scan\n"
701 , btrMgr_GetDiscoveryDeviceTypeAsString (btrMgr_GetDiscoveryDeviceType(ahdiscoveryHdl)));
703 BTRMGRLOG_ERROR (
"[%s] Failed Resume Scan!!!\n"
704 , btrMgr_GetDiscoveryDeviceTypeAsString (btrMgr_GetDiscoveryDeviceType(ahdiscoveryHdl)));
705 lenBtrMgrRet = eBTRMgrFailure;
715 btrMgr_StopDeviceDiscovery (
716 unsigned char aui8AdapterIdx,
721 if (btrMgr_GetDiscoveryState(ahdiscoveryHdl) == BTRMGR_DISCOVERY_ST_STARTED ||
722 btrMgr_GetDiscoveryState(ahdiscoveryHdl) == BTRMGR_DISCOVERY_ST_RESUMED ){
724 if (BTRMGR_RESULT_SUCCESS == BTRMGR_StopDeviceDiscovery_Internal (aui8AdapterIdx, btrMgr_GetDiscoveryDeviceType(ahdiscoveryHdl))) {
726 BTRMGRLOG_DEBUG (
"[%s] Successfully Stopped scan\n"
727 , btrMgr_GetDiscoveryDeviceTypeAsString (btrMgr_GetDiscoveryDeviceType(ahdiscoveryHdl)));
730 BTRMGRLOG_ERROR (
"[%s] Failed to Stop scan\n"
731 , btrMgr_GetDiscoveryDeviceTypeAsString (btrMgr_GetDiscoveryDeviceType(ahdiscoveryHdl)));
732 lenBtrMgrRet = eBTRMgrFailure;
739 btrMgr_PreCheckDiscoveryStatus (
740 unsigned char aui8AdapterIdx,
746 if ((ldiscoveryHdl = btrMgr_GetDiscoveryInProgress())) {
748 if ( btrMgr_GetDiscoveryDeviceType(ldiscoveryHdl) == btrMgr_GetBgDiscoveryType()) {
749 BTRMGRLOG_WARN (
"Calling btrMgr_PauseDeviceDiscovery\n");
750 lenBtrMgrRet = btrMgr_PauseDeviceDiscovery (aui8AdapterIdx, ldiscoveryHdl);
752 else if (aDevOpType != btrMgr_GetBgDiscoveryType()) {
753 BTRMGRLOG_WARN (
"Calling btrMgr_StopDeviceDiscovery\n");
754 lenBtrMgrRet = btrMgr_StopDeviceDiscovery (aui8AdapterIdx, ldiscoveryHdl);
757 BTRMGRLOG_WARN (
"[%s] Scan in Progress.. Request for %s operation is rejected...\n"
758 , btrMgr_GetDiscoveryDeviceTypeAsString (btrMgr_GetDiscoveryDeviceType(ldiscoveryHdl))
759 , btrMgr_GetDiscoveryDeviceTypeAsString (aDevOpType));
760 lenBtrMgrRet = eBTRMgrFailure;
763 else if (btrMgr_isTimeOutSet()) {
764 if (aDevOpType == btrMgr_GetBgDiscoveryType()) {
765 BTRMGRLOG_WARN (
"[NON-%s] Operation in Progress.. Request for %s operation is rejected...\n"
766 , btrMgr_GetDiscoveryDeviceTypeAsString (aDevOpType)
767 , btrMgr_GetDiscoveryDeviceTypeAsString (aDevOpType));
768 lenBtrMgrRet = eBTRMgrFailure;
772 if (aDevOpType != btrMgr_GetBgDiscoveryType()) {
773 btrMgr_ClearDiscoveryHoldOffTimer();
780 btrMgr_PostCheckDiscoveryStatus (
781 unsigned char aui8AdapterIdx,
786 if (!btrMgr_isTimeOutSet()) {
787 if (aDevOpType == BTRMGR_DEVICE_OP_TYPE_UNKNOWN) {
788 if (btrMgr_GetDiscoveryState(&ghBTRMgrBgDiscoveryHdl) == BTRMGR_DISCOVERY_ST_PAUSED) {
789 BTRMGRLOG_WARN (
"Calling btrMgr_ResumeDeviceDiscovery\n");
790 lenBtrMgrRet = btrMgr_ResumeDeviceDiscovery (aui8AdapterIdx, &ghBTRMgrBgDiscoveryHdl);
794 if (aDevOpType != btrMgr_GetBgDiscoveryType()) {
795 if (btrMgr_GetDiscoveryState(&ghBTRMgrBgDiscoveryHdl) == BTRMGR_DISCOVERY_ST_PAUSED) {
796 btrMgr_SetDiscoveryHoldOffTimer(aui8AdapterIdx);
806 btrMgr_GetDiscoveredDevInfo (
807 BTRMgrDeviceHandle ahBTRMgrDevHdl,
812 for (j = 0; j < gListOfDiscoveredDevices.m_numOfDevices; j++) {
813 if (ahBTRMgrDevHdl == gListOfDiscoveredDevices.m_deviceProperty[j].m_deviceHandle) {
821 btrMgr_GetPairedDevInfo (
822 BTRMgrDeviceHandle ahBTRMgrDevHdl,
827 for (j = 0; j < gListOfPairedDevices.m_numOfDevices; j++) {
828 if (ahBTRMgrDevHdl == gListOfPairedDevices.m_deviceProperty[j].m_deviceHandle) {
837 btrMgr_GetDevPaired (
838 BTRMgrDeviceHandle ahBTRMgrDevHdl
842 for (j = 0; j < gListOfPairedDevices.m_numOfDevices; j++) {
843 if (ahBTRMgrDevHdl == gListOfPairedDevices.m_deviceProperty[j].m_deviceHandle) {
853 btrMgr_SetDevConnected (
854 BTRMgrDeviceHandle ahBTRMgrDevHdl,
855 unsigned char aui8isDeviceConnected
859 for (i = 0; i < gListOfPairedDevices.m_numOfDevices; i++) {
860 if (ahBTRMgrDevHdl == gListOfPairedDevices.m_deviceProperty[i].m_deviceHandle) {
861 gListOfPairedDevices.m_deviceProperty[i].m_isConnected = aui8isDeviceConnected;
862 BTRMGRLOG_WARN (
"Setting = %lld - \tConnected = %d\n", ahBTRMgrDevHdl, aui8isDeviceConnected);
870 btrMgr_IsDevConnected (
871 BTRMgrDeviceHandle ahBTRMgrDevHdl
873 unsigned char lui8isDeviceConnected = 0;
876 for (i = 0; i < gListOfPairedDevices.m_numOfDevices; i++) {
877 if (ahBTRMgrDevHdl == gListOfPairedDevices.m_deviceProperty[i].m_deviceHandle) {
878 lui8isDeviceConnected = gListOfPairedDevices.m_deviceProperty[i].m_isConnected;
879 BTRMGRLOG_WARN (
"Getting = %lld - \tConnected = %d\n", ahBTRMgrDevHdl, lui8isDeviceConnected);
883 return lui8isDeviceConnected;
888 btrMgr_IsDevNameSameAsAddress (
890 char* apcDeviceAddress,
891 unsigned int ui32StrLen
897 if ((apcDeviceName[0] == apcDeviceAddress[0]) &&
898 (apcDeviceName[1] == apcDeviceAddress[1]) &&
899 (apcDeviceName[3] == apcDeviceAddress[3]) &&
900 (apcDeviceName[4] == apcDeviceAddress[4]) &&
901 (apcDeviceName[6] == apcDeviceAddress[6]) &&
902 (apcDeviceName[7] == apcDeviceAddress[7]) &&
903 (apcDeviceName[9] == apcDeviceAddress[9]) &&
904 (apcDeviceName[10] == apcDeviceAddress[10]) &&
905 (apcDeviceName[12] == apcDeviceAddress[12]) &&
906 (apcDeviceName[13] == apcDeviceAddress[13]) &&
907 (apcDeviceName[15] == apcDeviceAddress[15]) &&
908 (apcDeviceName[16] == apcDeviceAddress[16]) ) {
918 btrMgr_CheckIfDevicePrevDetected (
919 BTRMgrDeviceHandle ahBTRMgrDevHdl
923 for (j = 0; j < gListOfDiscoveredDevices.m_numOfDevices; j++) {
924 if (ahBTRMgrDevHdl == gListOfDiscoveredDevices.m_deviceProperty[j].m_deviceHandle) {
925 BTRMGRLOG_WARN (
"DevicePrevDetected = %lld - %s\n", gListOfDiscoveredDevices.m_deviceProperty[j].m_deviceHandle, gListOfDiscoveredDevices.m_deviceProperty[j].m_name);
935 btrMgr_MapDeviceTypeFromCore (
936 enBTRCoreDeviceClass device_type
939 switch (device_type) {
940 case enBTRCore_DC_Tablet:
941 type = BTRMGR_DEVICE_TYPE_TABLET;
943 case enBTRCore_DC_SmartPhone:
944 type = BTRMGR_DEVICE_TYPE_SMARTPHONE;
946 case enBTRCore_DC_WearableHeadset:
947 type = BTRMGR_DEVICE_TYPE_WEARABLE_HEADSET;
949 case enBTRCore_DC_Handsfree:
950 type = BTRMGR_DEVICE_TYPE_HANDSFREE;
952 case enBTRCore_DC_Microphone:
953 type = BTRMGR_DEVICE_TYPE_MICROPHONE;
955 case enBTRCore_DC_Loudspeaker:
956 type = BTRMGR_DEVICE_TYPE_LOUDSPEAKER;
958 case enBTRCore_DC_Headphones:
959 type = BTRMGR_DEVICE_TYPE_HEADPHONES;
961 case enBTRCore_DC_PortableAudio:
963 type = BTRMGR_DEVICE_TYPE_LOUDSPEAKER;
965 case enBTRCore_DC_CarAudio:
967 type = BTRMGR_DEVICE_TYPE_LOUDSPEAKER;
969 case enBTRCore_DC_STB:
970 type = BTRMGR_DEVICE_TYPE_STB;
972 case enBTRCore_DC_HIFIAudioDevice:
974 type = BTRMGR_DEVICE_TYPE_LOUDSPEAKER;
976 case enBTRCore_DC_VCR:
977 type = BTRMGR_DEVICE_TYPE_VCR;
979 case enBTRCore_DC_VideoCamera:
980 type = BTRMGR_DEVICE_TYPE_VIDEO_CAMERA;
982 case enBTRCore_DC_Camcoder:
983 type = BTRMGR_DEVICE_TYPE_CAMCODER;
985 case enBTRCore_DC_VideoMonitor:
986 type = BTRMGR_DEVICE_TYPE_VIDEO_MONITOR;
988 case enBTRCore_DC_TV:
989 type = BTRMGR_DEVICE_TYPE_TV;
991 case enBTRCore_DC_VideoConference:
992 type = BTRMGR_DEVICE_TYPE_VIDEO_CONFERENCE;
994 case enBTRCore_DC_Tile:
995 type = BTRMGR_DEVICE_TYPE_TILE;
997 case enBTRCore_DC_HID_Keyboard:
998 type = BTRMGR_DEVICE_TYPE_HID;
1000 case enBTRCore_DC_HID_Mouse:
1001 type = BTRMGR_DEVICE_TYPE_HID;
1003 case enBTRCore_DC_HID_MouseKeyBoard:
1004 type = BTRMGR_DEVICE_TYPE_HID;
1006 case enBTRCore_DC_HID_Joystick:
1007 type = BTRMGR_DEVICE_TYPE_HID;
1009 case enBTRCore_DC_HID_GamePad:
1010 type = BTRMGR_DEVICE_TYPE_HID_GAMEPAD;
1012 case enBTRCore_DC_HID_AudioRemote:
1013 type = BTRMGR_DEVICE_TYPE_HID;
1015 case enBTRCore_DC_Reserved:
1016 case enBTRCore_DC_Unknown:
1017 type = BTRMGR_DEVICE_TYPE_UNKNOWN;
1025 btrMgr_MapDeviceOpFromDeviceType (
1030 switch (device_type) {
1031 case BTRMGR_DEVICE_TYPE_WEARABLE_HEADSET:
1032 case BTRMGR_DEVICE_TYPE_HANDSFREE:
1033 case BTRMGR_DEVICE_TYPE_LOUDSPEAKER:
1034 case BTRMGR_DEVICE_TYPE_HEADPHONES:
1035 case BTRMGR_DEVICE_TYPE_PORTABLE_AUDIO:
1036 case BTRMGR_DEVICE_TYPE_CAR_AUDIO:
1037 case BTRMGR_DEVICE_TYPE_HIFI_AUDIO_DEVICE:
1038 devOpType = BTRMGR_DEVICE_OP_TYPE_AUDIO_OUTPUT;
1040 case BTRMGR_DEVICE_TYPE_SMARTPHONE:
1041 case BTRMGR_DEVICE_TYPE_TABLET:
1042 devOpType = BTRMGR_DEVICE_OP_TYPE_AUDIO_INPUT;
1044 case BTRMGR_DEVICE_TYPE_TILE:
1045 devOpType = BTRMGR_DEVICE_OP_TYPE_LE;
1047 case BTRMGR_DEVICE_TYPE_HID:
1048 case BTRMGR_DEVICE_TYPE_HID_GAMEPAD:
1049 devOpType = BTRMGR_DEVICE_OP_TYPE_HID;
1051 case BTRMGR_DEVICE_TYPE_STB:
1052 case BTRMGR_DEVICE_TYPE_MICROPHONE:
1053 case BTRMGR_DEVICE_TYPE_VCR:
1054 case BTRMGR_DEVICE_TYPE_VIDEO_CAMERA:
1055 case BTRMGR_DEVICE_TYPE_CAMCODER:
1056 case BTRMGR_DEVICE_TYPE_VIDEO_MONITOR:
1057 case BTRMGR_DEVICE_TYPE_TV:
1058 case BTRMGR_DEVICE_TYPE_VIDEO_CONFERENCE:
1059 case BTRMGR_DEVICE_TYPE_RESERVED:
1060 case BTRMGR_DEVICE_TYPE_UNKNOWN:
1062 devOpType = BTRMGR_DEVICE_OP_TYPE_UNKNOWN;
1069 btrMgr_MapSignalStrengthToRSSI (
1074 if (signalStrength >= BTRMGR_SIGNAL_GOOD)
1076 else if (signalStrength >= BTRMGR_SIGNAL_FAIR)
1078 else if (signalStrength >= BTRMGR_SIGNAL_POOR)
1087 btrMgr_MapDevstatusInfoToEventInfo (
1094 apstEventMessage->m_adapterIndex = 0;
1095 apstEventMessage->m_eventType = type;
1098 return eBTRMgrFailure;
1101 if (type == BTRMGR_EVENT_DEVICE_DISCOVERY_UPDATE) {
1102 apstEventMessage->m_discoveredDevice.m_deviceHandle = ((
stBTRCoreBTDevice*)p_StatusCB)->tDeviceId;
1103 apstEventMessage->m_discoveredDevice.m_signalLevel = ((
stBTRCoreBTDevice*)p_StatusCB)->i32RSSI;
1104 apstEventMessage->m_discoveredDevice.m_deviceType = btrMgr_MapDeviceTypeFromCore(((
stBTRCoreBTDevice*)p_StatusCB)->enDeviceType);
1105 apstEventMessage->m_discoveredDevice.m_rssi = btrMgr_MapSignalStrengthToRSSI(((
stBTRCoreBTDevice*)p_StatusCB)->i32RSSI);
1106 apstEventMessage->m_discoveredDevice.m_isPairedDevice = btrMgr_GetDevPaired(apstEventMessage->m_discoveredDevice.m_deviceHandle);
1107 apstEventMessage->m_discoveredDevice.m_isLowEnergyDevice = (apstEventMessage->m_discoveredDevice.m_deviceType==BTRMGR_DEVICE_TYPE_TILE)?1:0;
1109 apstEventMessage->m_discoveredDevice.m_isDiscovered = ((
stBTRCoreBTDevice*)p_StatusCB)->bFound;
1110 apstEventMessage->m_discoveredDevice.m_isLastConnectedDevice= (ghBTRMgrDevHdlLastConnected == apstEventMessage->m_discoveredDevice.m_deviceHandle) ? 1 : 0;
1111 apstEventMessage->m_discoveredDevice.m_ui32DevClassBtSpec = ((
stBTRCoreBTDevice*)p_StatusCB)->ui32DevClassBtSpec;
1113 strncpy(apstEventMessage->m_discoveredDevice.m_name, ((
stBTRCoreBTDevice*)p_StatusCB)->pcDeviceName, BTRMGR_NAME_LEN_MAX - 1);
1114 strncpy(apstEventMessage->m_discoveredDevice.m_deviceAddress, ((
stBTRCoreBTDevice*)p_StatusCB)->pcDeviceAddress, BTRMGR_NAME_LEN_MAX - 1);
1116 else if (type == BTRMGR_EVENT_RECEIVED_EXTERNAL_PAIR_REQUEST) {
1117 apstEventMessage->m_externalDevice.m_deviceHandle = ((
stBTRCoreConnCBInfo*)p_StatusCB)->stFoundDevice.tDeviceId;
1118 apstEventMessage->m_externalDevice.m_deviceType = btrMgr_MapDeviceTypeFromCore(((
stBTRCoreConnCBInfo*)p_StatusCB)->stFoundDevice.enDeviceType);
1119 apstEventMessage->m_externalDevice.m_vendorID = ((
stBTRCoreConnCBInfo*)p_StatusCB)->stFoundDevice.ui32VendorId;
1120 apstEventMessage->m_externalDevice.m_isLowEnergyDevice = 0;
1121 apstEventMessage->m_externalDevice.m_externalDevicePIN = ((
stBTRCoreConnCBInfo*)p_StatusCB)->ui32devPassKey;
1122 apstEventMessage->m_externalDevice.m_requestConfirmation = ((
stBTRCoreConnCBInfo*)p_StatusCB)->ucIsReqConfirmation;
1123 strncpy(apstEventMessage->m_externalDevice.m_name, ((
stBTRCoreConnCBInfo*)p_StatusCB)->stFoundDevice.pcDeviceName, BTRMGR_NAME_LEN_MAX - 1);
1124 strncpy(apstEventMessage->m_externalDevice.m_deviceAddress, ((
stBTRCoreConnCBInfo*)p_StatusCB)->stFoundDevice.pcDeviceAddress, BTRMGR_NAME_LEN_MAX - 1);
1126 else if (type == BTRMGR_EVENT_RECEIVED_EXTERNAL_CONNECT_REQUEST) {
1127 apstEventMessage->m_externalDevice.m_deviceHandle = ((
stBTRCoreConnCBInfo*)p_StatusCB)->stKnownDevice.tDeviceId;
1128 apstEventMessage->m_externalDevice.m_deviceType = btrMgr_MapDeviceTypeFromCore(((
stBTRCoreConnCBInfo*)p_StatusCB)->stKnownDevice.enDeviceType);
1129 apstEventMessage->m_externalDevice.m_vendorID = ((
stBTRCoreConnCBInfo*)p_StatusCB)->stKnownDevice.ui32VendorId;
1130 apstEventMessage->m_externalDevice.m_isLowEnergyDevice = 0;
1131 strncpy(apstEventMessage->m_externalDevice.m_name, ((
stBTRCoreConnCBInfo*)p_StatusCB)->stKnownDevice.pcDeviceName, BTRMGR_NAME_LEN_MAX - 1);
1132 strncpy(apstEventMessage->m_externalDevice.m_deviceAddress, ((
stBTRCoreConnCBInfo*)p_StatusCB)->stKnownDevice.pcDeviceAddress, BTRMGR_NAME_LEN_MAX - 1);
1134 else if (type == BTRMGR_EVENT_RECEIVED_EXTERNAL_PLAYBACK_REQUEST) {
1136 apstEventMessage->m_externalDevice.m_deviceType = btrMgr_MapDeviceTypeFromCore(((
stBTRCoreDevStatusCBInfo*)p_StatusCB)->eDeviceClass);
1137 apstEventMessage->m_externalDevice.m_vendorID = 0;
1138 apstEventMessage->m_externalDevice.m_isLowEnergyDevice = 0;
1139 strncpy(apstEventMessage->m_externalDevice.m_name, ((
stBTRCoreDevStatusCBInfo*)p_StatusCB)->deviceName, BTRMGR_NAME_LEN_MAX - 1);
1140 strncpy(apstEventMessage->m_externalDevice.m_deviceAddress,
"TO BE FILLED", BTRMGR_NAME_LEN_MAX - 1);
1143 else if (type == BTRMGR_EVENT_DEVICE_OP_INFORMATION) {
1146 apstEventMessage->m_deviceOpInfo.m_deviceType = btrMgr_MapDeviceTypeFromCore(((
stBTRCoreDevStatusCBInfo*)p_StatusCB)->eDeviceClass);
1159 apstEventMessage->m_pairedDevice.m_deviceType = btrMgr_MapDeviceTypeFromCore(((
stBTRCoreDevStatusCBInfo*)p_StatusCB)->eDeviceClass);
1160 apstEventMessage->m_pairedDevice.m_isLastConnectedDevice = (ghBTRMgrDevHdlLastConnected == apstEventMessage->m_pairedDevice.m_deviceHandle) ? 1 : 0;
1162 if (apstEventMessage->m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_TILE) {
1163 apstEventMessage->m_pairedDevice.m_isLowEnergyDevice = 1;
1166 apstEventMessage->m_pairedDevice.m_isLowEnergyDevice = (((
stBTRCoreDevStatusCBInfo*)p_StatusCB)->eDeviceType == enBTRCoreLE)?1:0;
1169 apstEventMessage->m_pairedDevice.m_ui32DevClassBtSpec = ((
stBTRCoreDevStatusCBInfo*)p_StatusCB)->ui32DevClassBtSpec;
1176 return lenBtrMgrRet;
1180 btrMgr_StartCastingAudio (
1183 unsigned int outDevDelay,
1184 eBTRCoreDevMediaType aenBtrCoreDevOutMType,
1185 void* apstBtrCoreDevOutMCodecInfo
1192 int inBytesToEncode = 3072;
1195 tBTRMgrAcType lpi8BTRMgrAcType= BTRMGR_AC_TYPE_PRIMARY;
1196 #ifdef RDKTV_PERSIST_VOLUME_SKY
1197 unsigned char ui8Volume = BTRMGR_SO_MAX_VOLUME;
1198 gboolean lbMute = FALSE;
1201 if ((ghBTRMgrDevHdlCurStreaming != 0) || (outMTUSize == 0)) {
1202 return eBTRMgrFailInArg;
1207 memset(&gstBTRMgrStreamingInfo, 0,
sizeof(gstBTRMgrStreamingInfo));
1209 memset(&lstBtrMgrAcOutASettings, 0,
sizeof(lstBtrMgrAcOutASettings));
1210 memset(&lstBtrMgrSoInASettings, 0,
sizeof(lstBtrMgrSoInASettings));
1211 memset(&lstBtrMgrSoOutASettings, 0,
sizeof(lstBtrMgrSoOutASettings));
1214 if ((lenBtrMgrRet =
BTRMgr_SO_Init(&gstBTRMgrStreamingInfo.hBTRMgrSoHdl, btrMgr_SOStatusCb, &gstBTRMgrStreamingInfo)) != eBTRMgrSuccess) {
1215 BTRMGRLOG_ERROR (
"BTRMgr_SO_Init FAILED\n");
1216 return eBTRMgrInitFailure;
1219 if (lenCurrentSoType == BTRMGR_STREAM_PRIMARY) {
1220 lpi8BTRMgrAcType = BTRMGR_AC_TYPE_PRIMARY;
1221 gstBTRMgrStreamingInfo.tBTRMgrSoType = lenCurrentSoType;
1223 else if (lenCurrentSoType == BTRMGR_STREAM_AUXILIARY) {
1224 lpi8BTRMgrAcType = BTRMGR_AC_TYPE_AUXILIARY;
1225 gstBTRMgrStreamingInfo.tBTRMgrSoType = lenCurrentSoType;
1228 lpi8BTRMgrAcType = BTRMGR_AC_TYPE_PRIMARY;
1229 gstBTRMgrStreamingInfo.tBTRMgrSoType = BTRMGR_STREAM_PRIMARY;
1232 if ((lenBtrMgrRet =
BTRMgr_AC_Init(&gstBTRMgrStreamingInfo.hBTRMgrAcHdl, lpi8BTRMgrAcType)) != eBTRMgrSuccess) {
1233 BTRMGRLOG_ERROR (
"BTRMgr_AC_Init FAILED\n");
1234 return eBTRMgrInitFailure;
1238 gstBTRMgrStreamingInfo.bitsPerSample = 16;
1239 gstBTRMgrStreamingInfo.samplerate = 48000;
1240 gstBTRMgrStreamingInfo.channels = 2;
1251 if (!(lstBtrMgrAcOutASettings.pstBtrMgrOutCodecInfo) || !(lstBtrMgrSoInASettings.pstBtrMgrInCodecInfo) || !(lstBtrMgrSoOutASettings.pstBtrMgrOutCodecInfo)) {
1252 BTRMGRLOG_ERROR (
"MEMORY ALLOC FAILED\n");
1253 return eBTRMgrFailure;
1258 BTRMGRLOG_ERROR(
"BTRMgr_AC_GetDefaultSettings FAILED\n");
1262 lstBtrMgrSoInASettings.eBtrMgrInAType = lstBtrMgrAcOutASettings.eBtrMgrOutAType;
1264 if (lstBtrMgrSoInASettings.eBtrMgrInAType == eBTRMgrATypePCM) {
1268 memcpy(pstBtrMgrSoInPcmInfo, pstBtrMgrAcOutPcmInfo,
sizeof(
stBTRMgrPCMInfo));
1272 if (aenBtrCoreDevOutMType == eBTRCoreDevMediaTypeSBC) {
1276 lstBtrMgrSoOutASettings.eBtrMgrOutAType = eBTRMgrATypeSBC;
1277 if (pstBtrMgrSoOutSbcInfo && pstBtrCoreDevMediaSbcInfo) {
1279 if (pstBtrCoreDevMediaSbcInfo->ui32DevMSFreq == 8000) {
1282 else if (pstBtrCoreDevMediaSbcInfo->ui32DevMSFreq == 16000) {
1285 else if (pstBtrCoreDevMediaSbcInfo->ui32DevMSFreq == 32000) {
1288 else if (pstBtrCoreDevMediaSbcInfo->ui32DevMSFreq == 44100) {
1291 else if (pstBtrCoreDevMediaSbcInfo->ui32DevMSFreq == 48000) {
1299 switch (pstBtrCoreDevMediaSbcInfo->eDevMAChan) {
1300 case eBTRCoreDevMediaAChanMono:
1303 case eBTRCoreDevMediaAChanDualChannel:
1306 case eBTRCoreDevMediaAChanStereo:
1309 case eBTRCoreDevMediaAChanJointStereo:
1312 case eBTRCoreDevMediaAChan5_1:
1315 case eBTRCoreDevMediaAChan7_1:
1318 case eBTRCoreDevMediaAChanUnknown:
1324 pstBtrMgrSoOutSbcInfo->
ui8SbcAllocMethod = pstBtrCoreDevMediaSbcInfo->ui8DevMSbcAllocMethod;
1325 pstBtrMgrSoOutSbcInfo->
ui8SbcSubbands = pstBtrCoreDevMediaSbcInfo->ui8DevMSbcSubbands;
1326 pstBtrMgrSoOutSbcInfo->
ui8SbcBlockLength = pstBtrCoreDevMediaSbcInfo->ui8DevMSbcBlockLength;
1327 pstBtrMgrSoOutSbcInfo->
ui8SbcMinBitpool = pstBtrCoreDevMediaSbcInfo->ui8DevMSbcMinBitpool;
1328 pstBtrMgrSoOutSbcInfo->
ui8SbcMaxBitpool = pstBtrCoreDevMediaSbcInfo->ui8DevMSbcMaxBitpool;
1329 pstBtrMgrSoOutSbcInfo->
ui16SbcFrameLen = pstBtrCoreDevMediaSbcInfo->ui16DevMSbcFrameLen;
1330 pstBtrMgrSoOutSbcInfo->
ui16SbcBitrate = pstBtrCoreDevMediaSbcInfo->ui16DevMSbcBitrate;
1334 lstBtrMgrSoOutASettings.i32BtrMgrDevFd = outFileFd;
1335 lstBtrMgrSoOutASettings.i32BtrMgrDevMtu = outMTUSize;
1338 if ((lenBtrMgrRet =
BTRMgr_SO_GetEstimatedInABufSize(gstBTRMgrStreamingInfo.hBTRMgrSoHdl, &lstBtrMgrSoInASettings, &lstBtrMgrSoOutASettings)) != eBTRMgrSuccess) {
1339 BTRMGRLOG_ERROR (
"BTRMgr_SO_GetEstimatedInABufSize FAILED\n");
1340 lstBtrMgrSoInASettings.i32BtrMgrInBufMaxSize = inBytesToEncode;
1343 gstBTRMgrStreamingInfo.i32BytesToEncode = lstBtrMgrSoInASettings.i32BtrMgrInBufMaxSize;
1346 #ifdef RDKTV_PERSIST_VOLUME_SKY
1347 if (btrMgr_GetLastVolume(0, &ui8Volume) == eBTRMgrSuccess) {
1348 if (!gui8IsSoDevAvrcpSupported && (
BTRMgr_SO_SetVolume(gstBTRMgrStreamingInfo.hBTRMgrSoHdl, ui8Volume) != eBTRMgrSuccess)) {
1349 BTRMGRLOG_ERROR (
" BTRMgr_SO_SetVolume FAILED \n");
1353 if (btrMgr_GetLastMuteState(0, &lbMute) == eBTRMgrSuccess) {
1354 if (
BTRMgr_SO_SetMute(gstBTRMgrStreamingInfo.hBTRMgrSoHdl, lbMute) != eBTRMgrSuccess) {
1355 BTRMGRLOG_ERROR (
" BTRMgr_SO_SetMute FAILED \n");
1360 if ((lenBtrMgrRet =
BTRMgr_SO_Start(gstBTRMgrStreamingInfo.hBTRMgrSoHdl, &lstBtrMgrSoInASettings, &lstBtrMgrSoOutASettings)) != eBTRMgrSuccess) {
1361 BTRMGRLOG_ERROR (
"BTRMgr_SO_Start FAILED\n");
1364 if (lenBtrMgrRet == eBTRMgrSuccess) {
1365 lstBtrMgrAcOutASettings.i32BtrMgrOutBufMaxSize = lstBtrMgrSoInASettings.i32BtrMgrInBufMaxSize;
1366 lstBtrMgrAcOutASettings.ui32BtrMgrDevDelay = outDevDelay;
1368 if ((lenBtrMgrRet =
BTRMgr_AC_Start(gstBTRMgrStreamingInfo.hBTRMgrAcHdl,
1369 &lstBtrMgrAcOutASettings,
1370 btrMgr_ACDataReadyCb,
1372 &gstBTRMgrStreamingInfo)) != eBTRMgrSuccess) {
1373 BTRMGRLOG_ERROR (
"BTRMgr_AC_Start FAILED\n");
1377 if (lstBtrMgrSoOutASettings.pstBtrMgrOutCodecInfo)
1378 free(lstBtrMgrSoOutASettings.pstBtrMgrOutCodecInfo);
1380 if (lstBtrMgrSoInASettings.pstBtrMgrInCodecInfo)
1381 free(lstBtrMgrSoInASettings.pstBtrMgrInCodecInfo);
1383 if (lstBtrMgrAcOutASettings.pstBtrMgrOutCodecInfo)
1384 free(lstBtrMgrAcOutASettings.pstBtrMgrOutCodecInfo);
1386 return lenBtrMgrRet;
1390 btrMgr_StopCastingAudio (
1395 if (ghBTRMgrDevHdlCurStreaming == 0) {
1396 return eBTRMgrFailInArg;
1400 if ((lenBtrMgrRet =
BTRMgr_AC_Stop(gstBTRMgrStreamingInfo.hBTRMgrAcHdl)) != eBTRMgrSuccess) {
1401 BTRMGRLOG_ERROR (
"BTRMgr_AC_Stop FAILED\n");
1404 if ((lenBtrMgrRet =
BTRMgr_SO_SendEOS(gstBTRMgrStreamingInfo.hBTRMgrSoHdl)) != eBTRMgrSuccess) {
1405 BTRMGRLOG_ERROR (
"BTRMgr_SO_SendEOS FAILED\n");
1408 if ((lenBtrMgrRet =
BTRMgr_SO_Stop(gstBTRMgrStreamingInfo.hBTRMgrSoHdl)) != eBTRMgrSuccess) {
1409 BTRMGRLOG_ERROR (
"BTRMgr_SO_Stop FAILED\n");
1412 if ((lenBtrMgrRet =
BTRMgr_AC_DeInit(gstBTRMgrStreamingInfo.hBTRMgrAcHdl)) != eBTRMgrSuccess) {
1413 BTRMGRLOG_ERROR (
"BTRMgr_AC_DeInit FAILED\n");
1416 if ((lenBtrMgrRet =
BTRMgr_SO_DeInit(gstBTRMgrStreamingInfo.hBTRMgrSoHdl)) != eBTRMgrSuccess) {
1417 BTRMGRLOG_ERROR (
"BTRMgr_SO_DeInit FAILED\n");
1420 gstBTRMgrStreamingInfo.hBTRMgrAcHdl = NULL;
1421 gstBTRMgrStreamingInfo.hBTRMgrSoHdl = NULL;
1423 return lenBtrMgrRet;
1427 btrMgr_SwitchCastingAudio_AC (
1431 tBTRMgrAcType lpi8BTRMgrAcType = BTRMGR_AC_TYPE_PRIMARY;
1435 if (ghBTRMgrDevHdlCurStreaming == 0) {
1436 return eBTRMgrFailInArg;
1440 if ((lenBtrMgrRet =
BTRMgr_AC_Stop(gstBTRMgrStreamingInfo.hBTRMgrAcHdl)) != eBTRMgrSuccess) {
1441 BTRMGRLOG_ERROR (
"BTRMgr_AC_Stop FAILED\n");
1444 if ((lenBtrMgrRet =
BTRMgr_SO_Pause(gstBTRMgrStreamingInfo.hBTRMgrSoHdl)) != eBTRMgrSuccess) {
1445 BTRMGRLOG_ERROR (
"BTRMgr_SO_Pause FAILED\n");
1448 if ((lenBtrMgrRet =
BTRMgr_AC_DeInit(gstBTRMgrStreamingInfo.hBTRMgrAcHdl)) != eBTRMgrSuccess) {
1449 BTRMGRLOG_ERROR (
"BTRMgr_AC_DeInit FAILED\n");
1452 gstBTRMgrStreamingInfo.hBTRMgrAcHdl = NULL;
1455 if (aenCurrentSoType == BTRMGR_STREAM_PRIMARY) {
1456 lpi8BTRMgrAcType = BTRMGR_AC_TYPE_PRIMARY;
1458 else if (aenCurrentSoType == BTRMGR_STREAM_AUXILIARY) {
1459 lpi8BTRMgrAcType = BTRMGR_AC_TYPE_AUXILIARY;
1462 lpi8BTRMgrAcType = BTRMGR_AC_TYPE_PRIMARY;
1466 if ((lenBtrMgrRet =
BTRMgr_AC_Init(&gstBTRMgrStreamingInfo.hBTRMgrAcHdl, lpi8BTRMgrAcType)) != eBTRMgrSuccess) {
1467 BTRMGRLOG_ERROR (
"BTRMgr_AC_Init FAILED\n");
1468 return eBTRMgrInitFailure;
1472 memset(&lstBtrMgrAcOutASettings, 0,
sizeof(lstBtrMgrAcOutASettings));
1475 if (!lstBtrMgrAcOutASettings.pstBtrMgrOutCodecInfo) {
1476 BTRMGRLOG_ERROR (
"MEMORY ALLOC FAILED\n");
1477 return eBTRMgrFailure;
1482 BTRMGRLOG_ERROR(
"BTRMgr_AC_GetDefaultSettings FAILED\n");
1485 if ((lenBtrMgrRet =
BTRMgr_SO_Resume(gstBTRMgrStreamingInfo.hBTRMgrSoHdl)) != eBTRMgrSuccess) {
1486 BTRMGRLOG_ERROR (
"BTRMgr_SO_Resume FAILED\n");
1489 lstBtrMgrAcOutASettings.i32BtrMgrOutBufMaxSize = gstBTRMgrStreamingInfo.i32BytesToEncode;
1490 if ((lenBtrMgrRet =
BTRMgr_AC_Start(gstBTRMgrStreamingInfo.hBTRMgrAcHdl,
1491 &lstBtrMgrAcOutASettings,
1492 btrMgr_ACDataReadyCb,
1494 &gstBTRMgrStreamingInfo)) != eBTRMgrSuccess) {
1495 BTRMGRLOG_ERROR (
"BTRMgr_AC_Start FAILED\n");
1498 if (lstBtrMgrAcOutASettings.pstBtrMgrOutCodecInfo)
1499 free(lstBtrMgrAcOutASettings.pstBtrMgrOutCodecInfo);
1501 return lenBtrMgrRet;
1505 btrMgr_StartReceivingAudio (
1508 unsigned int inDevDelay,
1509 eBTRCoreDevMediaType aenBtrCoreDevInMType,
1510 void* apstBtrCoreDevInMCodecInfo
1513 int inBytesToEncode = 3072;
1517 if ((ghBTRMgrDevHdlCurStreaming != 0) || (inMTUSize == 0)) {
1518 return eBTRMgrFailInArg;
1523 memset(&lstBtrMgrSiInASettings, 0,
sizeof(lstBtrMgrSiInASettings));
1527 if ((lenBtrMgrRet =
BTRMgr_SI_Init(&gstBTRMgrStreamingInfo.hBTRMgrSiHdl, btrMgr_SIStatusCb, &gstBTRMgrStreamingInfo)) != eBTRMgrSuccess) {
1528 BTRMGRLOG_ERROR (
"BTRMgr_SI_Init FAILED\n");
1529 return eBTRMgrInitFailure;
1536 if (aenBtrCoreDevInMType == eBTRCoreDevMediaTypeSBC) {
1540 lstBtrMgrSiInASettings.eBtrMgrInAType = eBTRMgrATypeSBC;
1541 if (pstBtrMgrSiInSbcInfo && pstBtrCoreDevMediaSbcInfo) {
1543 if (pstBtrCoreDevMediaSbcInfo->ui32DevMSFreq == 8000) {
1546 else if (pstBtrCoreDevMediaSbcInfo->ui32DevMSFreq == 16000) {
1549 else if (pstBtrCoreDevMediaSbcInfo->ui32DevMSFreq == 32000) {
1552 else if (pstBtrCoreDevMediaSbcInfo->ui32DevMSFreq == 44100) {
1555 else if (pstBtrCoreDevMediaSbcInfo->ui32DevMSFreq == 48000) {
1563 switch (pstBtrCoreDevMediaSbcInfo->eDevMAChan) {
1564 case eBTRCoreDevMediaAChanMono:
1567 case eBTRCoreDevMediaAChanDualChannel:
1570 case eBTRCoreDevMediaAChanStereo:
1573 case eBTRCoreDevMediaAChanJointStereo:
1576 case eBTRCoreDevMediaAChan5_1:
1579 case eBTRCoreDevMediaAChan7_1:
1582 case eBTRCoreDevMediaAChanUnknown:
1588 pstBtrMgrSiInSbcInfo->
ui8SbcAllocMethod = pstBtrCoreDevMediaSbcInfo->ui8DevMSbcAllocMethod;
1589 pstBtrMgrSiInSbcInfo->
ui8SbcSubbands = pstBtrCoreDevMediaSbcInfo->ui8DevMSbcSubbands;
1590 pstBtrMgrSiInSbcInfo->
ui8SbcBlockLength = pstBtrCoreDevMediaSbcInfo->ui8DevMSbcBlockLength;
1591 pstBtrMgrSiInSbcInfo->
ui8SbcMinBitpool = pstBtrCoreDevMediaSbcInfo->ui8DevMSbcMinBitpool;
1592 pstBtrMgrSiInSbcInfo->
ui8SbcMaxBitpool = pstBtrCoreDevMediaSbcInfo->ui8DevMSbcMaxBitpool;
1593 pstBtrMgrSiInSbcInfo->
ui16SbcFrameLen = pstBtrCoreDevMediaSbcInfo->ui16DevMSbcFrameLen;
1594 pstBtrMgrSiInSbcInfo->
ui16SbcBitrate = pstBtrCoreDevMediaSbcInfo->ui16DevMSbcBitrate;
1597 else if (aenBtrCoreDevInMType == eBTRCoreDevMediaTypeAAC) {
1601 lstBtrMgrSiInASettings.eBtrMgrInAType = eBTRMgrATypeAAC;
1602 if (pstBtrMgrSiInAacInfo && pstBtrCoreDevMediaAacInfo) {
1604 if (pstBtrCoreDevMediaAacInfo->ui32DevMSFreq == 8000) {
1607 else if (pstBtrCoreDevMediaAacInfo->ui32DevMSFreq == 16000) {
1610 else if (pstBtrCoreDevMediaAacInfo->ui32DevMSFreq == 32000) {
1613 else if (pstBtrCoreDevMediaAacInfo->ui32DevMSFreq == 44100) {
1616 else if (pstBtrCoreDevMediaAacInfo->ui32DevMSFreq == 48000) {
1624 switch (pstBtrCoreDevMediaAacInfo->eDevMAChan) {
1625 case eBTRCoreDevMediaAChanMono:
1628 case eBTRCoreDevMediaAChanDualChannel:
1631 case eBTRCoreDevMediaAChanStereo:
1634 case eBTRCoreDevMediaAChanJointStereo:
1637 case eBTRCoreDevMediaAChan5_1:
1640 case eBTRCoreDevMediaAChan7_1:
1643 case eBTRCoreDevMediaAChanUnknown:
1649 pstBtrMgrSiInAacInfo->
ui8MpegCrc = pstBtrCoreDevMediaAacInfo->ui8DevMMpegCrc;
1650 pstBtrMgrSiInAacInfo->
ui8MpegLayer = pstBtrCoreDevMediaAacInfo->ui8DevMMpegLayer;
1651 pstBtrMgrSiInAacInfo->
ui8MpegMpf = pstBtrCoreDevMediaAacInfo->ui8DevMMpegMpf;
1652 pstBtrMgrSiInAacInfo->
ui8MpegRfa = pstBtrCoreDevMediaAacInfo->ui8DevMMpegRfa;
1653 pstBtrMgrSiInAacInfo->
ui16MpegBitrate = pstBtrCoreDevMediaAacInfo->ui16DevMMpegBitrate;
1659 lstBtrMgrSiInASettings.i32BtrMgrDevFd = inFileFd;
1660 lstBtrMgrSiInASettings.i32BtrMgrDevMtu = inMTUSize;
1663 if ((lenBtrMgrRet =
BTRMgr_SI_Start(gstBTRMgrStreamingInfo.hBTRMgrSiHdl, inBytesToEncode, &lstBtrMgrSiInASettings)) != eBTRMgrSuccess) {
1664 BTRMGRLOG_ERROR (
"BTRMgr_SI_Start FAILED\n");
1668 if (lstBtrMgrSiInASettings.pstBtrMgrInCodecInfo)
1669 free(lstBtrMgrSiInASettings.pstBtrMgrInCodecInfo);
1671 return lenBtrMgrRet;
1675 btrMgr_StopReceivingAudio (
1680 if (ghBTRMgrDevHdlCurStreaming == 0) {
1681 return eBTRMgrFailInArg;
1685 if ((lenBtrMgrRet =
BTRMgr_SI_SendEOS(gstBTRMgrStreamingInfo.hBTRMgrSiHdl)) != eBTRMgrSuccess) {
1686 BTRMGRLOG_ERROR (
"BTRMgr_SI_SendEOS FAILED\n");
1689 if ((lenBtrMgrRet =
BTRMgr_SI_Stop(gstBTRMgrStreamingInfo.hBTRMgrSiHdl)) != eBTRMgrSuccess) {
1690 BTRMGRLOG_ERROR (
"BTRMgr_SI_Stop FAILED\n");
1693 if ((lenBtrMgrRet =
BTRMgr_SI_DeInit(gstBTRMgrStreamingInfo.hBTRMgrSiHdl)) != eBTRMgrSuccess) {
1694 BTRMGRLOG_ERROR (
"BTRMgr_SI_DeInit FAILED\n");
1697 gstBTRMgrStreamingInfo.hBTRMgrSiHdl = NULL;
1699 return lenBtrMgrRet;
1705 btrMgr_ConnectToDevice (
1706 unsigned char aui8AdapterIdx,
1707 BTRMgrDeviceHandle ahBTRMgrDevHdl,
1709 unsigned int aui32ConnectRetryIdx,
1710 unsigned int aui32ConfirmIdx
1713 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
1714 int i32PairDevIdx = 0;
1715 unsigned int ui32retryIdx = aui32ConnectRetryIdx + 1;
1716 enBTRCoreDeviceType lenBTRCoreDeviceType= enBTRCoreUnknown;
1718 BOOLEAN lbtriggerConnectCompleteEvt = FALSE;
1720 lenBtrMgrRet = btrMgr_PreCheckDiscoveryStatus(aui8AdapterIdx, connectAs);
1722 if (eBTRMgrSuccess != lenBtrMgrRet) {
1723 BTRMGRLOG_ERROR (
"Pre Check Discovery State Rejected !!!\n");
1724 return lenBtrMgrRet;
1727 switch (connectAs) {
1728 case BTRMGR_DEVICE_OP_TYPE_AUDIO_OUTPUT:
1729 gui8IsSoDevAvrcpSupported = 0;
1730 lenBTRCoreDeviceType = enBTRCoreSpeakers;
1732 case BTRMGR_DEVICE_OP_TYPE_AUDIO_INPUT:
1733 lenBTRCoreDeviceType = enBTRCoreMobileAudioIn;
1734 if (!gIsAudioInEnabled) {
1735 BTRMGRLOG_WARN (
"Connection Rejected - BTR AudioIn is currently Disabled!\n");
1736 return BTRMGR_RESULT_GENERIC_FAILURE;
1739 case BTRMGR_DEVICE_OP_TYPE_LE:
1740 lenBTRCoreDeviceType = enBTRCoreLE;
1742 case BTRMGR_DEVICE_OP_TYPE_HID:
1744 lbtriggerConnectCompleteEvt = btrMgr_IsDevConnected(ahBTRMgrDevHdl);
1745 lenBTRCoreDeviceType = enBTRCoreHID;
1747 case BTRMGR_DEVICE_OP_TYPE_UNKNOWN:
1749 lenBTRCoreDeviceType = enBTRCoreUnknown;
1757 if (lenBtrCoreRet != enBTRCoreSuccess) {
1758 BTRMGRLOG_ERROR (
"Failed to Connect to this device - %llu\n", ahBTRMgrDevHdl);
1759 lenBtrMgrRet = eBTRMgrFailure;
1762 for (i32PairDevIdx = 0; i32PairDevIdx <= gListOfPairedDevices.m_numOfDevices; i32PairDevIdx++) {
1763 if (ahBTRMgrDevHdl == gListOfPairedDevices.m_deviceProperty[i32PairDevIdx].m_deviceHandle) {
1764 BTRMGRLOG_INFO (
"Connected Successfully - %llu - Name - %s\n",ahBTRMgrDevHdl,gListOfPairedDevices.m_deviceProperty[i32PairDevIdx].m_name);
1769 lenBtrMgrRet = eBTRMgrSuccess;
1770 if ((lenBTRCoreDeviceType == enBTRCoreSpeakers) || (lenBTRCoreDeviceType == enBTRCoreHeadSet) ||
1771 (lenBTRCoreDeviceType == enBTRCoreMobileAudioIn) || (lenBTRCoreDeviceType == enBTRCorePCAudioIn)) {
1772 if (ghBTRMgrDevHdlLastConnected && ghBTRMgrDevHdlLastConnected != ahBTRMgrDevHdl) {
1773 BTRMGRLOG_DEBUG (
"Remove persistent entry for previously connected device(%llu)\n", ghBTRMgrDevHdlLastConnected);
1775 for (i32PairDevIdx = 0; i32PairDevIdx < gListOfPairedDevices.m_numOfDevices; i32PairDevIdx++) {
1776 if (ghBTRMgrDevHdlLastConnected == gListOfPairedDevices.m_deviceProperty[i32PairDevIdx].m_deviceHandle) {
1777 lenMgrLConDevOpType = btrMgr_MapDeviceOpFromDeviceType(gListOfPairedDevices.m_deviceProperty[i32PairDevIdx].m_deviceType);
1781 if (lenMgrLConDevOpType == BTRMGR_DEVICE_OP_TYPE_AUDIO_OUTPUT) {
1782 btrMgr_RemovePersistentEntry(aui8AdapterIdx, ghBTRMgrDevHdlLastConnected, BTRMGR_A2DP_SINK_PROFILE_ID);
1784 else if (lenMgrLConDevOpType == BTRMGR_DEVICE_OP_TYPE_AUDIO_INPUT) {
1785 btrMgr_RemovePersistentEntry(aui8AdapterIdx, ghBTRMgrDevHdlLastConnected, BTRMGR_A2DP_SRC_PROFILE_ID);
1789 if ((lenBTRCoreDeviceType == enBTRCoreSpeakers) || (lenBTRCoreDeviceType == enBTRCoreHeadSet)) {
1790 btrMgr_AddPersistentEntry(aui8AdapterIdx, ahBTRMgrDevHdl, BTRMGR_A2DP_SINK_PROFILE_ID, 1);
1792 else if ((lenBTRCoreDeviceType == enBTRCoreMobileAudioIn) || (lenBTRCoreDeviceType == enBTRCorePCAudioIn)) {
1793 btrMgr_AddPersistentEntry(aui8AdapterIdx, ahBTRMgrDevHdl, BTRMGR_A2DP_SRC_PROFILE_ID, 1);
1798 if (lenBtrMgrRet != eBTRMgrFailure) {
1800 unsigned int ui32sleepTimeOut = 1;
1801 unsigned int ui32confirmIdx = aui32ConfirmIdx + 1;
1802 unsigned int ui32AdjSleepIdx = (aui32ConfirmIdx > BTRMGR_DEVCONN_CHECK_RETRY_ATTEMPTS) ? 2 : 5;
1805 unsigned int ui32sleepIdx = ui32AdjSleepIdx;
1808 sleep(ui32sleepTimeOut);
1810 }
while ((lenBtrCoreRet != enBTRCoreSuccess) && (--ui32sleepIdx));
1811 }
while (--ui32confirmIdx);
1813 if (lenBtrCoreRet != enBTRCoreSuccess) {
1814 BTRMGRLOG_ERROR (
"Failed to Connect to this device - Confirmed - %llu\n", ahBTRMgrDevHdl);
1815 lenBtrMgrRet = eBTRMgrFailure;
1817 if ((lenBTRCoreDeviceType == enBTRCoreSpeakers) || (lenBTRCoreDeviceType == enBTRCoreHeadSet)) {
1818 btrMgr_RemovePersistentEntry(aui8AdapterIdx, ahBTRMgrDevHdl, BTRMGR_A2DP_SINK_PROFILE_ID);
1820 else if ((lenBTRCoreDeviceType == enBTRCoreMobileAudioIn) || (lenBTRCoreDeviceType == enBTRCorePCAudioIn)) {
1821 btrMgr_RemovePersistentEntry(aui8AdapterIdx, ahBTRMgrDevHdl, BTRMGR_A2DP_SRC_PROFILE_ID);
1824 if (ghBTRMgrDevHdlLastConnected && ghBTRMgrDevHdlLastConnected != ahBTRMgrDevHdl) {
1825 BTRMGRLOG_DEBUG (
"Add back persistent entry for previously connected device(%llu)\n", ghBTRMgrDevHdlLastConnected);
1827 if (lenMgrLConDevOpType == BTRMGR_DEVICE_OP_TYPE_AUDIO_OUTPUT) {
1828 btrMgr_AddPersistentEntry(aui8AdapterIdx, ghBTRMgrDevHdlLastConnected, BTRMGR_A2DP_SINK_PROFILE_ID, 1);
1830 else if (lenMgrLConDevOpType == BTRMGR_DEVICE_OP_TYPE_AUDIO_INPUT) {
1831 btrMgr_AddPersistentEntry(aui8AdapterIdx, ghBTRMgrDevHdlLastConnected, BTRMGR_A2DP_SRC_PROFILE_ID, 1);
1836 BTRMGRLOG_ERROR (
"Failed to Disconnect - %llu\n", ahBTRMgrDevHdl);
1840 BTRMGRLOG_DEBUG (
"Succes Connect to this device - Confirmed - %llu\n", ahBTRMgrDevHdl);
1842 if (lenBTRCoreDeviceType == enBTRCoreLE) {
1843 gIsLeDeviceConnected = 1;
1845 else if ((lenBTRCoreDeviceType == enBTRCoreSpeakers) || (lenBTRCoreDeviceType == enBTRCoreHeadSet) ||
1846 (lenBTRCoreDeviceType == enBTRCoreMobileAudioIn) || (lenBTRCoreDeviceType == enBTRCorePCAudioIn)) {
1847 btrMgr_SetDevConnected(ahBTRMgrDevHdl, 1);
1848 gIsUserInitiated = 0;
1849 ghBTRMgrDevHdlLastConnected = ahBTRMgrDevHdl;
1851 else if (lenBTRCoreDeviceType == enBTRCoreHID) {
1852 btrMgr_SetDevConnected(ahBTRMgrDevHdl, 1);
1853 if (lbtriggerConnectCompleteEvt) {
1855 memset(&lstEventMessage, 0,
sizeof(lstEventMessage));
1857 lstEventMessage.m_adapterIndex = aui8AdapterIdx;
1858 lstEventMessage.m_eventType = BTRMGR_EVENT_DEVICE_CONNECTION_COMPLETE;
1859 memcpy(&lstEventMessage.m_pairedDevice, &gListOfPairedDevices.m_deviceProperty[i32PairDevIdx],
sizeof(
BTRMGR_PairedDevices_t));
1861 if (gfpcBBTRMgrEventOut) {
1862 gfpcBBTRMgrEventOut(lstEventMessage);
1867 btrMgr_SetDevConnected(ahBTRMgrDevHdl, 1);
1871 }
while ((lenBtrMgrRet == eBTRMgrFailure) && (--ui32retryIdx));
1873 if (lenBtrMgrRet == eBTRMgrFailure && lenBTRCoreDeviceType == enBTRCoreLE) {
1874 connectAs = BTRMGR_DEVICE_OP_TYPE_UNKNOWN;
1877 btrMgr_PostCheckDiscoveryStatus(aui8AdapterIdx, connectAs);
1879 return lenBtrMgrRet;
1883 btrMgr_StartAudioStreamingOut (
1884 unsigned char aui8AdapterIdx,
1885 BTRMgrDeviceHandle ahBTRMgrDevHdl,
1887 unsigned int aui32ConnectRetryIdx,
1888 unsigned int aui32ConfirmIdx,
1889 unsigned int aui32SleepIdx
1893 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
1894 unsigned char isFound = 0;
1897 int deviceReadMTU = 0;
1898 int deviceWriteMTU = 0;
1899 unsigned int deviceDelay = 0xFFFFu;
1900 unsigned int ui32retryIdx = aui32ConnectRetryIdx + 1;
1902 eBTRCoreDevMediaType lenBtrCoreDevOutMType = eBTRCoreDevMediaTypeUnknown;
1903 void* lpstBtrCoreDevOutMCodecInfo = NULL;
1906 if (ghBTRMgrDevHdlCurStreaming == ahBTRMgrDevHdl) {
1907 BTRMGRLOG_WARN (
"Its already streaming out in this device.. Check the volume :)\n");
1908 return eBTRMgrSuccess;
1912 if ((ghBTRMgrDevHdlCurStreaming != 0) && (ghBTRMgrDevHdlCurStreaming != ahBTRMgrDevHdl)) {
1913 enBTRCoreDeviceType lenBTRCoreDevTy = enBTRCoreUnknown;
1914 enBTRCoreDeviceClass lenBTRCoreDevCl = enBTRCore_DC_Unknown;
1916 BTRMGRLOG_WARN (
"Its already streaming out. lets stop this and start on other device \n");
1919 BTRMGRLOG_DEBUG (
"Status = %d\t Device Type = %d\t Device Class = %x\n", lenBtrCoreRet, lenBTRCoreDevTy, lenBTRCoreDevCl);
1921 if ((lenBTRCoreDevTy == enBTRCoreSpeakers) || (lenBTRCoreDevTy == enBTRCoreHeadSet)) {
1924 BTRMGRLOG_ERROR (
"This device is being Connected n Playing. Failed to stop Playback.-Out\n");
1925 BTRMGRLOG_ERROR (
"Failed to stop streaming at the current device..\n");
1926 return lenBtrMgrResult;
1929 else if ((lenBTRCoreDevTy == enBTRCoreMobileAudioIn) || (lenBTRCoreDevTy == enBTRCorePCAudioIn)) {
1932 BTRMGRLOG_ERROR (
"This device is being Connected n Playing. Failed to stop Playback.-In\n");
1933 BTRMGRLOG_ERROR (
"Failed to stop streaming at the current device..\n");
1934 return lenBtrMgrResult;
1940 memset(&listOfPDevices, 0,
sizeof(listOfPDevices));
1942 BTRMGRLOG_ERROR (
"Failed to get the paired devices list\n");
1943 return eBTRMgrFailure;
1947 if (!listOfPDevices.numberOfDevices) {
1948 BTRMGRLOG_ERROR (
"No device is paired yet; Will not be able to play at this moment\n");
1949 return eBTRMgrFailure;
1953 for (i = 0; i < listOfPDevices.numberOfDevices; i++) {
1954 if (ahBTRMgrDevHdl == listOfPDevices.devices[i].tDeviceId) {
1961 BTRMGRLOG_ERROR (
"Failed to find this device in the paired devices list\n");
1962 return eBTRMgrFailure;
1966 if (aui32ConnectRetryIdx) {
1967 unsigned int ui32sleepTimeOut = 2;
1968 unsigned int ui32confirmIdx = aui32ConfirmIdx + 1;
1971 unsigned int ui32sleepIdx = aui32SleepIdx + 1;
1973 sleep(ui32sleepTimeOut);
1975 }
while ((lenBtrCoreRet != enBTRCoreSuccess) && (--ui32sleepIdx));
1976 }
while ((lenBtrCoreRet != enBTRCoreSuccess) && (--ui32confirmIdx));
1978 if (lenBtrCoreRet != enBTRCoreSuccess) {
1979 BTRMGRLOG_ERROR (
"Device Not Connectable\n");
1980 return eBTRMgrFailure;
1982 else if (((btrMgr_IsDevConnected(listOfPDevices.devices[i].tDeviceId) == 1) ||
1983 (ghBTRMgrDevHdlCurStreaming == listOfPDevices.devices[i].tDeviceId)) &&
1984 (ghBTRMgrDevHdlLastConnected == listOfPDevices.devices[i].tDeviceId)) {
1985 BTRMGRLOG_INFO (
"Device Already Connected and Streaming = %lld\n", listOfPDevices.devices[i].tDeviceId);
1986 return eBTRMgrSuccess;
1992 unsigned short ui16DevMediaBitrate = 0;
1995 if (aui32ConnectRetryIdx) {
1996 lenBtrMgrRet = btrMgr_ConnectToDevice(aui8AdapterIdx, listOfPDevices.devices[i].tDeviceId, streamOutPref, BTRMGR_CONNECT_RETRY_ATTEMPTS, BTRMGR_DEVCONN_CHECK_RETRY_ATTEMPTS);
1998 else if (strstr(listOfPDevices.devices[i].pcDeviceName,
"Denon") || strstr(listOfPDevices.devices[i].pcDeviceName,
"AVR") ||
1999 strstr(listOfPDevices.devices[i].pcDeviceName,
"DENON") || strstr(listOfPDevices.devices[i].pcDeviceName,
"Avr")) {
2000 lenBtrMgrRet = btrMgr_ConnectToDevice(aui8AdapterIdx, listOfPDevices.devices[i].tDeviceId, streamOutPref, 0, BTRMGR_DEVCONN_CHECK_RETRY_ATTEMPTS + 2);
2003 lenBtrMgrRet = btrMgr_ConnectToDevice(aui8AdapterIdx, listOfPDevices.devices[i].tDeviceId, streamOutPref, 0, 1);
2006 if (lenBtrMgrRet == eBTRMgrSuccess) {
2007 if (gstBtrCoreDevMediaInfo.pstBtrCoreDevMCodecInfo) {
2008 free (gstBtrCoreDevMediaInfo.pstBtrCoreDevMCodecInfo);
2009 gstBtrCoreDevMediaInfo.pstBtrCoreDevMCodecInfo = NULL;
2016 lenBtrCoreRet =
BTRCore_GetDeviceMediaInfo(ghBTRCoreHdl, listOfPDevices.devices[i].tDeviceId, enBTRCoreSpeakers, &gstBtrCoreDevMediaInfo);
2017 if (lenBtrCoreRet == enBTRCoreSuccess) {
2018 lenBtrCoreDevOutMType = gstBtrCoreDevMediaInfo.eBtrCoreDevMType;
2019 lpstBtrCoreDevOutMCodecInfo= gstBtrCoreDevMediaInfo.pstBtrCoreDevMCodecInfo;
2021 if (lenBtrCoreDevOutMType == eBTRCoreDevMediaTypeSBC) {
2024 ui16DevMediaBitrate = lpstBtrCoreDevMSbcInfo->ui16DevMSbcBitrate;
2026 BTRMGRLOG_INFO (
"DevMedInfo SFreq = %d\n", lpstBtrCoreDevMSbcInfo->ui32DevMSFreq);
2027 BTRMGRLOG_INFO (
"DevMedInfo AChan = %d\n", lpstBtrCoreDevMSbcInfo->eDevMAChan);
2028 BTRMGRLOG_INFO (
"DevMedInfo SbcAllocMethod= %d\n", lpstBtrCoreDevMSbcInfo->ui8DevMSbcAllocMethod);
2029 BTRMGRLOG_INFO (
"DevMedInfo SbcSubbands = %d\n", lpstBtrCoreDevMSbcInfo->ui8DevMSbcSubbands);
2030 BTRMGRLOG_INFO (
"DevMedInfo SbcBlockLength= %d\n", lpstBtrCoreDevMSbcInfo->ui8DevMSbcBlockLength);
2031 BTRMGRLOG_INFO (
"DevMedInfo SbcMinBitpool = %d\n", lpstBtrCoreDevMSbcInfo->ui8DevMSbcMinBitpool);
2032 BTRMGRLOG_INFO (
"DevMedInfo SbcMaxBitpool = %d\n", lpstBtrCoreDevMSbcInfo->ui8DevMSbcMaxBitpool);
2033 BTRMGRLOG_INFO (
"DevMedInfo SbcFrameLen = %d\n", lpstBtrCoreDevMSbcInfo->ui16DevMSbcFrameLen);
2034 BTRMGRLOG_DEBUG(
"DevMedInfo SbcBitrate = %d\n", lpstBtrCoreDevMSbcInfo->ui16DevMSbcBitrate);
2038 if (ui16DevMediaBitrate) {
2040 lenBtrCoreRet =
BTRCore_AcquireDeviceDataPath(ghBTRCoreHdl, listOfPDevices.devices[i].tDeviceId, enBTRCoreSpeakers, &deviceFD, &deviceReadMTU, &deviceWriteMTU, &deviceDelay);
2041 if ((lenBtrCoreRet == enBTRCoreSuccess) && deviceWriteMTU) {
2043 if ((lenBtrMgrRet = btrMgr_StartCastingAudio(deviceFD, deviceWriteMTU, deviceDelay, lenBtrCoreDevOutMType, lpstBtrCoreDevOutMCodecInfo)) == eBTRMgrSuccess) {
2044 ghBTRMgrDevHdlCurStreaming = listOfPDevices.devices[i].tDeviceId;
2045 BTRMGRLOG_INFO(
"Streaming Started.. Enjoy the show..! :)\n");
2048 BTRMGRLOG_WARN (
"Failed to set timeout for Audio drop. EXPECT AV SYNC ISSUES!\n");
2052 BTRMGRLOG_ERROR (
"Failed to stream now\n");
2060 if (!ui16DevMediaBitrate || (lenBtrCoreRet != enBTRCoreSuccess) || (lenBtrMgrRet != eBTRMgrSuccess)) {
2061 BTRMGRLOG_ERROR (
"Failed to get Device Data Path. So Will not be able to stream now\n");
2062 BTRMGRLOG_ERROR (
"Failed to get Valid MediaBitrate. So Will not be able to stream now\n");
2063 BTRMGRLOG_ERROR (
"Failed to StartCastingAudio. So Will not be able to stream now\n");
2064 BTRMGRLOG_ERROR (
"Failed to connect to device and not playing\n");
2066 if (lenBtrCoreRet == enBTRCoreSuccess) {
2068 unsigned int ui32sleepTimeOut = 1;
2069 unsigned int ui32confirmIdx = aui32ConfirmIdx + 1;
2072 unsigned int ui32sleepIdx = aui32SleepIdx + 1;
2075 sleep(ui32sleepTimeOut);
2077 }
while ((lenBtrCoreRet != enBTRCoreSuccess) && (--ui32sleepIdx));
2078 }
while (--ui32confirmIdx);
2080 if (lenBtrCoreRet != enBTRCoreSuccess) {
2081 BTRMGRLOG_ERROR (
"Failed to Disconnect from this device - Confirmed - %llu\n", listOfPDevices.devices[i].tDeviceId);
2082 lenBtrMgrRet = eBTRMgrFailure;
2085 BTRMGRLOG_DEBUG (
"Success Disconnect from this device - Confirmed - %llu\n", listOfPDevices.devices[i].tDeviceId);
2088 lenBtrMgrRet = eBTRMgrFailure;
2092 }
while ((lenBtrMgrRet == eBTRMgrFailure) && (--ui32retryIdx));
2097 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
2099 lstEventMessage.m_adapterIndex = aui8AdapterIdx;
2100 lstEventMessage.m_pairedDevice.m_deviceHandle = listOfPDevices.devices[i].tDeviceId;
2101 lstEventMessage.m_pairedDevice.m_deviceType = btrMgr_MapDeviceTypeFromCore(listOfPDevices.devices[i].enDeviceType);
2102 lstEventMessage.m_pairedDevice.m_isConnected = (btrMgr_IsDevConnected(listOfPDevices.devices[i].tDeviceId)) ? 1 : 0;
2103 lstEventMessage.m_pairedDevice.m_isLowEnergyDevice = (lstEventMessage.m_pairedDevice.m_deviceType==BTRMGR_DEVICE_TYPE_TILE)?1:0;
2104 strncpy(lstEventMessage.m_pairedDevice.m_name, listOfPDevices.devices[i].pcDeviceName, BTRMGR_NAME_LEN_MAX);
2105 strncpy(lstEventMessage.m_pairedDevice.m_deviceAddress, listOfPDevices.devices[i].pcDeviceAddress, BTRMGR_NAME_LEN_MAX);
2107 if (lenBtrMgrRet == eBTRMgrSuccess) {
2108 lstEventMessage.m_eventType = BTRMGR_EVENT_DEVICE_CONNECTION_COMPLETE;
2110 if (gfpcBBTRMgrEventOut) {
2111 gfpcBBTRMgrEventOut(lstEventMessage);
2114 else if (lenBtrMgrRet == eBTRMgrFailure) {
2115 lstEventMessage.m_eventType = BTRMGR_EVENT_DEVICE_CONNECTION_FAILED;
2117 if (gfpcBBTRMgrEventOut) {
2118 gfpcBBTRMgrEventOut(lstEventMessage);
2126 return lenBtrMgrRet;
2130 btrMgr_AddPersistentEntry (
2131 unsigned char aui8AdapterIdx,
2132 BTRMgrDeviceHandle ahBTRMgrDevHdl,
2133 const char* apui8ProfileStr,
2134 int ai32DevConnected
2136 char lui8adapterAddr[BD_NAME_LEN] = {
'\0'};
2143 strncpy(btPtofile.adapterId, lui8adapterAddr, BTRMGR_NAME_LEN_MAX -1);
2144 btPtofile.adapterId[BTRMGR_NAME_LEN_MAX -1] =
'\0';
2145 strncpy(btPtofile.profileId, apui8ProfileStr, BTRMGR_NAME_LEN_MAX -1);
2146 btPtofile.profileId[BTRMGR_NAME_LEN_MAX -1] =
'\0';
2147 btPtofile.deviceId = ahBTRMgrDevHdl;
2148 btPtofile.isConnect = ai32DevConnected;
2151 if(lenBtrMgrPiRet == eBTRMgrSuccess) {
2152 BTRMGRLOG_INFO (
"Persistent File updated successfully\n");
2155 BTRMGRLOG_ERROR (
"Persistent File update failed \n");
2158 return lenBtrMgrPiRet;
2162 btrMgr_RemovePersistentEntry (
2163 unsigned char aui8AdapterIdx,
2164 BTRMgrDeviceHandle ahBTRMgrDevHdl,
2165 const char* apui8ProfileStr
2167 char lui8adapterAddr[BD_NAME_LEN] = {
'\0'};
2174 strncpy(btPtofile.adapterId, lui8adapterAddr, BTRMGR_NAME_LEN_MAX -1);
2175 btPtofile.adapterId[BTRMGR_NAME_LEN_MAX -1] =
'\0';
2176 strncpy(btPtofile.profileId, apui8ProfileStr, BTRMGR_NAME_LEN_MAX -1);
2177 btPtofile.profileId[BTRMGR_NAME_LEN_MAX -1] =
'\0';
2178 btPtofile.deviceId = ahBTRMgrDevHdl;
2179 btPtofile.isConnect = 1;
2182 if(lenBtrMgrPiRet == eBTRMgrSuccess) {
2183 BTRMGRLOG_INFO (
"Persistent File updated successfully\n");
2186 BTRMGRLOG_ERROR (
"Persistent File update failed \n");
2189 return lenBtrMgrPiRet;
2192 static BTRMGR_SysDiagChar_t
2193 btrMgr_MapUUIDtoDiagElement(
2196 BTRMGR_SysDiagChar_t lDiagChar = BTRMGR_SYS_DIAG_UNKNOWN;
2197 #ifndef BTRTEST_LE_ONBRDG_ENABLE
2198 if (!strcmp(aUUID, BTRMGR_SYSTEM_ID_UUID)) { lDiagChar = BTRMGR_SYS_DIAG_SYSTEMID; }
2199 else if (!strcmp(aUUID, BTRMGR_MODEL_NUMBER_UUID)) { lDiagChar = BTRMGR_SYS_DIAG_MODELNUMBER; }
2200 else if (!strcmp(aUUID, BTRMGR_SERIAL_NUMBER_UUID)) { lDiagChar = BTRMGR_SYS_DIAG_SERIALNUMBER; }
2201 else if (!strcmp(aUUID, BTRMGR_FIRMWARE_REVISION_UUID)) { lDiagChar = BTRMGR_SYS_DIAG_FWREVISION; }
2202 else if (!strcmp(aUUID, BTRMGR_HARDWARE_REVISION_UUID)) { lDiagChar = BTRMGR_SYS_DIAG_HWREVISION; }
2203 else if (!strcmp(aUUID, BTRMGR_SOFTWARE_REVISION_UUID)) { lDiagChar = BTRMGR_SYS_DIAG_SWREVISION; }
2204 else if (!strcmp(aUUID, BTRMGR_MANUFACTURER_NAME_UUID)) { lDiagChar = BTRMGR_SYS_DIAG_MFGRNAME; }
2206 if (!strcmp(aUUID, BTRMGR_SYSTEM_ID_UUID)) { lDiagChar = BTRMGR_LE_ONBRDG_SYSTEMID; }
2207 else if (!strcmp(aUUID, BTRMGR_MODEL_NUMBER_UUID)) { lDiagChar = BTRMGR_LE_ONBRDG_MODELNUMBER; }
2208 else if (!strcmp(aUUID, BTRMGR_SERIAL_NUMBER_UUID)) { lDiagChar = BTRMGR_LE_ONBRDG_SERIALNUMBER; }
2209 else if (!strcmp(aUUID, BTRMGR_FIRMWARE_REVISION_UUID)) { lDiagChar = BTRMGR_LE_ONBRDG_FWREVISION; }
2210 else if (!strcmp(aUUID, BTRMGR_HARDWARE_REVISION_UUID)) { lDiagChar = BTRMGR_LE_ONBRDG_HWREVISION; }
2211 else if (!strcmp(aUUID, BTRMGR_SOFTWARE_REVISION_UUID)) { lDiagChar = BTRMGR_LE_ONBRDG_SWREVISION; }
2212 else if (!strcmp(aUUID, BTRMGR_MANUFACTURER_NAME_UUID)) { lDiagChar = BTRMGR_LE_ONBRDG_MFGRNAME; }
2214 else if (!strcmp(aUUID, BTRMGR_LEONBRDG_UUID_QR_CODE)) { lDiagChar = BTRMGR_LE_ONBRDG_UUID_QR_CODE; }
2215 else if (!strcmp(aUUID, BTRMGR_LEONBRDG_UUID_PROVISION_STATUS)) { lDiagChar = BTRMGR_LE_ONBRDG_UUID_PROVISION_STATUS; }
2216 else if (!strcmp(aUUID, BTRMGR_LEONBRDG_UUID_PUBLIC_KEY)) { lDiagChar = BTRMGR_LE_ONBRDG_UUID_PUBLIC_KEY; }
2217 else if (!strcmp(aUUID, BTRMGR_LEONBRDG_UUID_WIFI_CONFIG)) { lDiagChar = BTRMGR_LE_ONBRDG_UUID_WIFI_CONFIG; }
2218 else if (!strcmp(aUUID, BTRMGR_DEVICE_STATUS_UUID)) { lDiagChar = BTRMGR_SYS_DIAG_DEVICESTATUS; }
2219 else if (!strcmp(aUUID, BTRMGR_FWDOWNLOAD_STATUS_UUID)) { lDiagChar = BTRMGR_SYS_DIAG_FWDOWNLOADSTATUS; }
2220 else if (!strcmp(aUUID, BTRMGR_WEBPA_STATUS_UUID)) { lDiagChar = BTRMGR_SYS_DIAG_WEBPASTATUS; }
2221 else if (!strcmp(aUUID, BTRMGR_WIFIRADIO1_STATUS_UUID)) { lDiagChar = BTRMGR_SYS_DIAG_WIFIRADIO1STATUS; }
2222 else if (!strcmp(aUUID, BTRMGR_WIFIRADIO2_STATUS_UUID)) { lDiagChar = BTRMGR_SYS_DIAG_WIFIRADIO2STATUS; }
2223 else if (!strcmp(aUUID, BTRMGR_RF_STATUS_UUID)) { lDiagChar = BTRMGR_SYS_DIAG_RFSTATUS; }
2224 else if (!strcmp(aUUID, BTRMGR_DEVICE_MAC)) { lDiagChar = BTRMGR_SYS_DIAG_DEVICEMAC; }
2225 else if (!strcmp(aUUID, BTRMGR_COLUMBO_START)) { lDiagChar = BTRMGR_SYSDIAG_COLUMBO_START; }
2226 else if (!strcmp(aUUID, BTRMGR_COLUMBO_STOP)) { lDiagChar = BTRMGR_SYSDIAG_COLUMBO_STOP; }
2227 else { lDiagChar = BTRMGR_SYS_DIAG_UNKNOWN; }
2233 static void btrMgr_AddColumboGATTInfo(
2235 char l16BitUUID[4] =
"";
2236 char l128BitUUID[BTRMGR_NAME_LEN_MAX] =
"";
2238 strncpy(l128BitUUID, BTRMGR_COLUMBO_UUID, BTRMGR_NAME_LEN_MAX - 1);
2239 snprintf(l16BitUUID, 5,
"%s", l128BitUUID);
2245 BTRCore_SetGattInfo(ghBTRCoreHdl, BTRMGR_COLUMBO_UUID, BTRMGR_COLUMBO_START, 0x2,
" ", enBTRCoreLePropGChar);
2246 BTRCore_SetGattInfo(ghBTRCoreHdl, BTRMGR_COLUMBO_UUID, BTRMGR_COLUMBO_STOP, 0x2,
" ", enBTRCoreLePropGChar);
2247 BTRCore_SetGattInfo(ghBTRCoreHdl, BTRMGR_COLUMBO_UUID, BTRMGR_COLUMBO_STATUS, 0x1,
" ", enBTRCoreLePropGChar);
2248 BTRCore_SetGattInfo(ghBTRCoreHdl, BTRMGR_COLUMBO_UUID, BTRMGR_COLUMBO_REPORT, 0x1,
" ", enBTRCoreLePropGChar);
2251 static void btrMgr_AddStandardAdvGattInfo(
2253 char lPropertyValue[BTRMGR_MAX_STR_LEN] =
"";
2255 BTRMGRLOG_INFO(
"Adding default local services : DEVICE_INFORMATION_UUID - 0x180a, RDKDIAGNOSTICS_UUID - 0xFDB9\n");
2256 BTRMGR_LE_SetServiceInfo(0, BTRMGR_DEVICE_INFORMATION_UUID, 1);
2257 BTRMGR_LE_SetServiceInfo(0, BTRMGR_RDKDIAGNOSTICS_UUID, 1);
2260 BTRMGR_SysDiagInfo(0, BTRMGR_SYSTEM_ID_UUID, lPropertyValue, BTRMGR_LE_OP_READ_VALUE);
2261 BTRMGRLOG_INFO(
"Adding char for the default local services : 0x180a, 0xFDB9\n");
2262 BTRMGR_LE_SetGattInfo(0, BTRMGR_DEVICE_INFORMATION_UUID, BTRMGR_SYSTEM_ID_UUID, 0x1, lPropertyValue, BTRMGR_LE_PROP_CHAR);
2263 BTRMGR_LE_SetGattInfo(0, BTRMGR_DEVICE_INFORMATION_UUID, BTRMGR_MODEL_NUMBER_UUID, 0x1, lPropertyValue, BTRMGR_LE_PROP_CHAR);
2265 BTRMGR_LE_SetGattInfo(0, BTRMGR_DEVICE_INFORMATION_UUID, BTRMGR_HARDWARE_REVISION_UUID, 0x1, lPropertyValue, BTRMGR_LE_PROP_CHAR);
2267 BTRMGR_SysDiagInfo(0, BTRMGR_SERIAL_NUMBER_UUID, lPropertyValue, BTRMGR_LE_OP_READ_VALUE);
2268 BTRMGR_LE_SetGattInfo(0, BTRMGR_DEVICE_INFORMATION_UUID, BTRMGR_SERIAL_NUMBER_UUID, 0x1, lPropertyValue, BTRMGR_LE_PROP_CHAR);
2270 BTRMGR_SysDiagInfo(0, BTRMGR_FIRMWARE_REVISION_UUID, lPropertyValue, BTRMGR_LE_OP_READ_VALUE);
2271 BTRMGR_LE_SetGattInfo(0, BTRMGR_DEVICE_INFORMATION_UUID, BTRMGR_FIRMWARE_REVISION_UUID, 0x1, lPropertyValue, BTRMGR_LE_PROP_CHAR);
2272 BTRMGR_LE_SetGattInfo(0, BTRMGR_DEVICE_INFORMATION_UUID, BTRMGR_SOFTWARE_REVISION_UUID, 0x1, lPropertyValue, BTRMGR_LE_PROP_CHAR);
2274 BTRMGR_SysDiagInfo(0, BTRMGR_MANUFACTURER_NAME_UUID, lPropertyValue, BTRMGR_LE_OP_READ_VALUE);
2275 BTRMGR_LE_SetGattInfo(0, BTRMGR_DEVICE_INFORMATION_UUID, BTRMGR_MANUFACTURER_NAME_UUID, 0x1, lPropertyValue, BTRMGR_LE_PROP_CHAR);
2278 BTRMGR_LE_SetGattInfo(0, BTRMGR_RDKDIAGNOSTICS_UUID, BTRMGR_DEVICE_STATUS_UUID, 0x1,
"READY", BTRMGR_LE_PROP_CHAR);
2279 BTRMGR_SysDiagInfo(0, BTRMGR_FWDOWNLOAD_STATUS_UUID, lPropertyValue, BTRMGR_LE_OP_READ_VALUE);
2280 BTRMGR_LE_SetGattInfo(0, BTRMGR_RDKDIAGNOSTICS_UUID, BTRMGR_FWDOWNLOAD_STATUS_UUID, 0x103, lPropertyValue, BTRMGR_LE_PROP_CHAR);
2281 BTRMGR_SysDiagInfo(0, BTRMGR_WEBPA_STATUS_UUID, lPropertyValue, BTRMGR_LE_OP_READ_VALUE);
2282 BTRMGR_LE_SetGattInfo(0, BTRMGR_RDKDIAGNOSTICS_UUID, BTRMGR_WEBPA_STATUS_UUID, 0x1, lPropertyValue, BTRMGR_LE_PROP_CHAR);
2283 BTRMGR_SysDiagInfo(0, BTRMGR_WIFIRADIO1_STATUS_UUID, lPropertyValue, BTRMGR_LE_OP_READ_VALUE);
2284 BTRMGR_LE_SetGattInfo(0, BTRMGR_RDKDIAGNOSTICS_UUID, BTRMGR_WIFIRADIO1_STATUS_UUID, 0x1, lPropertyValue, BTRMGR_LE_PROP_CHAR);
2285 BTRMGR_LE_SetGattInfo(0, BTRMGR_RDKDIAGNOSTICS_UUID, BTRMGR_WIFIRADIO2_STATUS_UUID, 0x1, lPropertyValue, BTRMGR_LE_PROP_CHAR);
2286 BTRMGR_SysDiagInfo(0, BTRMGR_RF_STATUS_UUID, lPropertyValue, BTRMGR_LE_OP_READ_VALUE);
2287 BTRMGR_LE_SetGattInfo(0, BTRMGR_RDKDIAGNOSTICS_UUID, BTRMGR_RF_STATUS_UUID, 0x1,
"NOT CONNECTED", BTRMGR_LE_PROP_CHAR);
2299 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
2302 GMainLoop* pMainLoop = NULL;
2303 GThread* pMainLoopThread= NULL;
2305 char lpcBtVersion[BTRCORE_STR_LEN] = {
'\0'};
2308 BTRMGRLOG_WARN(
"Already Inited; Return Success\n");
2309 return lenBtrMgrResult;
2312 #ifdef RDK_LOGGER_ENABLED
2313 const char* pDebugConfig = NULL;
2314 const char* BTRMGR_DEBUG_ACTUAL_PATH =
"/etc/debug.ini";
2315 const char* BTRMGR_DEBUG_OVERRIDE_PATH =
"/opt/debug.ini";
2318 if (access(BTRMGR_DEBUG_OVERRIDE_PATH, F_OK) != -1) {
2319 pDebugConfig = BTRMGR_DEBUG_OVERRIDE_PATH;
2322 pDebugConfig = BTRMGR_DEBUG_ACTUAL_PATH;
2326 b_rdk_logger_enabled = 1;
2331 memset(&gDefaultAdapterContext, 0,
sizeof(gDefaultAdapterContext));
2332 memset(&gListOfAdapters, 0,
sizeof(gListOfAdapters));
2333 memset(&gstBTRMgrStreamingInfo, 0,
sizeof(gstBTRMgrStreamingInfo));
2334 memset(&gListOfPairedDevices, 0,
sizeof(gListOfPairedDevices));
2335 memset(&gstBtrCoreDevMediaInfo, 0,
sizeof(gstBtrCoreDevMediaInfo));
2343 if ((!ghBTRCoreHdl) || (lenBtrCoreRet != enBTRCoreSuccess)) {
2344 BTRMGRLOG_ERROR (
"Could not initialize BTRCore/HAL module\n");
2345 return BTRMGR_RESULT_GENERIC_FAILURE;
2350 BTRMGRLOG_ERROR (
"BTR Bluetooth Version: FAILED\n");
2352 BTRMGRLOG_INFO(
"BTR Bluetooth Version: %s\n", lpcBtVersion);
2355 BTRMGRLOG_ERROR (
"Failed to get the total number of Adapters present\n");
2357 BTRMGRLOG_INFO (
"Number of Adapters found are = %u\n", gListOfAdapters.number_of_adapters);
2359 if (0 == gListOfAdapters.number_of_adapters) {
2360 BTRMGRLOG_WARN(
"Bluetooth adapter NOT Found..!!!!\n");
2361 return BTRMGR_RESULT_GENERIC_FAILURE;
2366 gDefaultAdapterContext.bFirstAvailable = 1;
2368 BTRMGRLOG_WARN(
"Bluetooth adapter NOT received..!!!!\n");
2369 return BTRMGR_RESULT_GENERIC_FAILURE;
2372 BTRMGRLOG_DEBUG (
"Aquired default Adapter; Path is %s\n", gDefaultAdapterContext.pcAdapterPath);
2374 if (gListOfAdapters.number_of_adapters > 1) {
2375 BTRMGRLOG_WARN(
"Number of Bluetooth Adapters Found : %u !! Lets handle it properly\n", gListOfAdapters.number_of_adapters);
2380 BTRCore_RegisterStatusCb(ghBTRCoreHdl, btrMgr_DeviceStatusCb, NULL);
2383 BTRCore_RegisterDiscoveryCb(ghBTRCoreHdl, btrMgr_DeviceDiscoveryCb, NULL);
2386 BTRCore_RegisterConnectionIntimationCb(ghBTRCoreHdl, btrMgr_ConnectionInIntimationCb, NULL);
2389 BTRCore_RegisterConnectionAuthenticationCb(ghBTRCoreHdl, btrMgr_ConnectionInAuthenticationCb, NULL);
2392 BTRCore_RegisterMediaStatusCb(ghBTRCoreHdl, btrMgr_MediaStatusCb, NULL);
2396 if (!btrMgr_GetAgentActivated()) {
2397 BTRMGRLOG_INFO (
"Activate agent\n");
2399 BTRMGRLOG_ERROR (
"Failed to Activate Agent\n");
2400 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
2403 btrMgr_SetAgentActivated(1);
2407 btrMgr_SetBgDiscoveryType (BTRMGR_DEVICE_OP_TYPE_LE);
2414 if ((lenBtrMgrPiRet =
BTRMgr_PI_Init(&ghBTRMgrPiHdl)) != eBTRMgrSuccess) {
2415 BTRMGRLOG_ERROR (
"Could not initialize PI module\n");
2419 if ((lenBtrMgrSdRet = BTRMgr_SD_Init(&ghBTRMgrSdHdl, btrMgr_SDStatusCb, NULL)) != eBTRMgrSuccess) {
2420 BTRMGRLOG_ERROR (
"Could not initialize SD - SysDiag module\n");
2423 btrMgr_CheckAudioInServiceAvailability();
2424 btrMgr_CheckHidGamePadServiceAvailability();
2428 char lDeviceMAC[BTRMGR_MAX_STR_LEN] =
"";
2430 BTRMGR_SysDiagInfo(0, BTRMGR_DEVICE_MAC, lDeviceMAC, BTRMGR_LE_OP_READ_VALUE);
2431 strncpy((
char*)stCoreCustomAdv.device_mac, lDeviceMAC, strlen(lDeviceMAC));
2433 btrMgr_AddColumboGATTInfo();
2435 BTRMGR_LE_StartAdvertisement(0, &stCoreCustomAdv);
2437 pMainLoop = g_main_loop_new (NULL, FALSE);
2438 gpvMainLoop = (
void*)pMainLoop;
2441 pMainLoopThread = g_thread_new(
"btrMgr_g_main_loop_Task", btrMgr_g_main_loop_Task, gpvMainLoop);
2442 gpvMainLoopThread = (
void*)pMainLoopThread;
2443 if ((pMainLoop == NULL) || (pMainLoopThread == NULL)) {
2444 BTRMGRLOG_ERROR (
"Could not initialize g_main module\n");
2446 return BTRMGR_RESULT_GENERIC_FAILURE;
2450 return lenBtrMgrResult;
2459 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
2462 unsigned short ui16LoopIdx = 0;
2464 unsigned int ui32sleepTimeOut = 1;
2467 if (btrMgr_isTimeOutSet()) {
2468 btrMgr_ClearDiscoveryHoldOffTimer();
2469 gDiscHoldOffTimeOutCbData = 0;
2472 if ((ldiscoveryHdl = btrMgr_GetDiscoveryInProgress())) {
2473 lenBtrMgrRet = btrMgr_StopDeviceDiscovery (0, ldiscoveryHdl);
2474 BTRMGRLOG_DEBUG (
"Exit Discovery Status = %d\n", lenBtrMgrRet);
2478 BTRMGRLOG_DEBUG (
"Connected Devices = %d\n", lstConnectedDevices.m_numOfDevices);
2480 for (ui16LoopIdx = 0; ui16LoopIdx < lstConnectedDevices.m_numOfDevices; ui16LoopIdx++) {
2481 unsigned int ui32confirmIdx = 2;
2482 enBTRCoreDeviceType lenBtrCoreDevTy = enBTRCoreUnknown;
2483 enBTRCoreDeviceClass lenBtrCoreDevCl = enBTRCore_DC_Unknown;
2485 BTRCore_GetDeviceTypeClass(ghBTRCoreHdl, lstConnectedDevices.m_deviceProperty[ui16LoopIdx].m_deviceHandle, &lenBtrCoreDevTy, &lenBtrCoreDevCl);
2486 if (
BTRCore_DisconnectDevice(ghBTRCoreHdl, lstConnectedDevices.m_deviceProperty[ui16LoopIdx].m_deviceHandle, lenBtrCoreDevTy) != enBTRCoreSuccess) {
2487 BTRMGRLOG_ERROR (
"Failed to Disconnect - %llu\n", lstConnectedDevices.m_deviceProperty[ui16LoopIdx].m_deviceHandle);
2491 unsigned int ui32sleepIdx = 2;
2494 sleep(ui32sleepTimeOut);
2495 lenBtrCoreRet =
BTRCore_GetDeviceDisconnected(ghBTRCoreHdl, lstConnectedDevices.m_deviceProperty[ui16LoopIdx].m_deviceHandle, lenBtrCoreDevTy);
2496 }
while ((lenBtrCoreRet != enBTRCoreSuccess) && (--ui32sleepIdx));
2497 }
while (--ui32confirmIdx);
2502 g_main_loop_quit(gpvMainLoop);
2505 if (gpvMainLoopThread) {
2506 g_thread_join(gpvMainLoopThread);
2507 gpvMainLoopThread = NULL;
2511 g_main_loop_unref(gpvMainLoop);
2516 if (!ghBTRCoreHdl) {
2517 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
2518 return BTRMGR_RESULT_INIT_FAILED;
2521 if (ghBTRMgrSdHdl) {
2522 lenBtrMgrRet = BTRMgr_SD_DeInit(ghBTRMgrSdHdl);
2523 ghBTRMgrSdHdl = NULL;
2524 BTRMGRLOG_ERROR (
"SD Module DeInited = %d\n", lenBtrMgrRet);
2527 if (ghBTRMgrPiHdl) {
2529 ghBTRMgrPiHdl = NULL;
2530 BTRMGRLOG_ERROR (
"PI Module DeInited = %d\n", lenBtrMgrRet);
2536 ghBTRCoreHdl = NULL;
2537 BTRMGRLOG_ERROR (
"BTRCore DeInited; Now will we exit the app = %d\n", lenBtrCoreRet);
2540 lenBtrMgrResult = ((lenBtrMgrRet == eBTRMgrSuccess) &&
2541 (lenBtrCoreRet == enBTRCoreSuccess)) ? BTRMGR_RESULT_SUCCESS : BTRMGR_RESULT_GENERIC_FAILURE;
2542 BTRMGRLOG_DEBUG (
"Exit Status = %d\n", lenBtrMgrResult);
2545 return lenBtrMgrResult;
2551 unsigned char* pNumOfAdapters
2554 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
2558 if (!ghBTRCoreHdl) {
2559 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
2560 return BTRMGR_RESULT_INIT_FAILED;
2562 else if (!pNumOfAdapters) {
2563 BTRMGRLOG_ERROR (
"Input is invalid\n");
2564 return BTRMGR_RESULT_INVALID_INPUT;
2568 memset(&listOfAdapters, 0,
sizeof(listOfAdapters));
2571 if (lenBtrCoreRet == enBTRCoreSuccess) {
2572 *pNumOfAdapters = listOfAdapters.number_of_adapters;
2574 if (listOfAdapters.number_of_adapters != gListOfAdapters.number_of_adapters)
2577 BTRMGRLOG_DEBUG (
"Available Adapters = %d\n", listOfAdapters.number_of_adapters);
2580 BTRMGRLOG_ERROR (
"Could not find Adapters\n");
2581 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
2585 return lenBtrMgrResult;
2590 unsigned char aui8AdapterIdx
2593 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
2594 const char* pAdapterPath = NULL;
2595 char name[BTRMGR_NAME_LEN_MAX] = {
'\0'};
2597 if (!ghBTRCoreHdl) {
2598 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
2599 return BTRMGR_RESULT_INIT_FAILED;
2601 else if (aui8AdapterIdx > btrMgr_GetAdapterCnt()) {
2602 BTRMGRLOG_ERROR (
"Input is invalid\n");
2603 return BTRMGR_RESULT_INVALID_INPUT;
2607 if (!(pAdapterPath = btrMgr_GetAdapterPath(aui8AdapterIdx))) {
2608 BTRMGRLOG_ERROR (
"Failed to get adapter path\n");
2609 return BTRMGR_RESULT_GENERIC_FAILURE;
2615 if (lenBtrCoreRet != enBTRCoreSuccess) {
2616 BTRMGRLOG_ERROR (
"Failed to disable Adapter - %s\n", pAdapterPath);
2617 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
2620 BTRMGRLOG_INFO (
"Bluetooth Adapter Disabled Successfully - %s\n", pAdapterPath);
2624 if (lenBtrCoreRet != enBTRCoreSuccess) {
2625 BTRMGRLOG_ERROR (
"Failed to set Adapter Name\n");
2626 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
2631 if (lenBtrCoreRet != enBTRCoreSuccess) {
2632 BTRMGRLOG_ERROR (
"Failed to enable Adapter\n");
2633 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
2636 BTRMGRLOG_INFO (
"Bluetooth Adapter Enabled Successfully - %s\n", pAdapterPath);
2640 return lenBtrMgrResult;
2646 unsigned char aui8AdapterIdx,
2647 const char* pNameOfAdapter
2650 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
2651 const char* pAdapterPath = NULL;
2652 char name[BTRMGR_NAME_LEN_MAX] = {
'\0'};
2654 if (!ghBTRCoreHdl) {
2655 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
2656 return BTRMGR_RESULT_INIT_FAILED;
2658 else if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!pNameOfAdapter)) {
2659 BTRMGRLOG_ERROR (
"Input is invalid\n");
2660 return BTRMGR_RESULT_INVALID_INPUT;
2664 if (!(pAdapterPath = btrMgr_GetAdapterPath(aui8AdapterIdx))) {
2665 BTRMGRLOG_ERROR (
"Failed to get adapter path\n");
2666 return BTRMGR_RESULT_GENERIC_FAILURE;
2670 strncpy (name, pNameOfAdapter, (BTRMGR_NAME_LEN_MAX - 1));
2672 if (lenBtrCoreRet != enBTRCoreSuccess) {
2673 BTRMGRLOG_ERROR (
"Failed to set Adapter Name\n");
2674 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
2677 BTRMGRLOG_INFO (
"Set Successfully\n");
2681 return lenBtrMgrResult;
2686 unsigned char aui8AdapterIdx,
2687 char* pNameOfAdapter
2690 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
2691 const char* pAdapterPath = NULL;
2692 char name[BTRMGR_NAME_LEN_MAX] = {
'\0'};
2694 if (!ghBTRCoreHdl) {
2695 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
2696 return BTRMGR_RESULT_INIT_FAILED;
2698 else if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!pNameOfAdapter)) {
2699 BTRMGRLOG_ERROR (
"Input is invalid\n");
2700 return BTRMGR_RESULT_INVALID_INPUT;
2704 if (!(pAdapterPath = btrMgr_GetAdapterPath(aui8AdapterIdx))) {
2705 BTRMGRLOG_ERROR (
"Failed to get adapter path\n");
2706 return BTRMGR_RESULT_GENERIC_FAILURE;
2711 if (lenBtrCoreRet != enBTRCoreSuccess) {
2712 BTRMGRLOG_ERROR (
"Failed to get Adapter Name\n");
2713 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
2716 BTRMGRLOG_INFO (
"Fetched Successfully\n");
2720 strncpy (pNameOfAdapter, name, (strlen(pNameOfAdapter) > BTRMGR_NAME_LEN_MAX -1) ? BTRMGR_NAME_LEN_MAX -1 : strlen(name));
2721 pNameOfAdapter[(strlen(pNameOfAdapter) > BTRMGR_NAME_LEN_MAX -1) ? BTRMGR_NAME_LEN_MAX -1 : strlen(name)] =
'\0';
2724 return lenBtrMgrResult;
2729 unsigned char aui8AdapterIdx,
2730 unsigned char power_status
2733 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
2734 enBTRCoreDeviceType lenBTRCoreDevTy = enBTRCoreSpeakers;
2735 enBTRCoreDeviceClass lenBTRCoreDevCl = enBTRCore_DC_Unknown;
2736 const char* pAdapterPath = NULL;
2738 if (!ghBTRCoreHdl) {
2739 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
2740 return BTRMGR_RESULT_INIT_FAILED;
2742 else if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (power_status > 1)) {
2743 BTRMGRLOG_ERROR (
"Input is invalid\n");
2744 return BTRMGR_RESULT_INVALID_INPUT;
2749 if ((ghBTRMgrDevHdlCurStreaming) && (power_status == 0)) {
2752 BTRMGRLOG_DEBUG (
"Status = %d\t Device Type = %d\t Device Class = %x\n", lenBtrCoreRet, lenBTRCoreDevTy, lenBTRCoreDevCl);
2754 if ((lenBTRCoreDevTy == enBTRCoreSpeakers) || (lenBTRCoreDevTy == enBTRCoreHeadSet)) {
2757 BTRMGRLOG_ERROR (
"This device is being Connected n Playing. Failed to stop Playback. Going Ahead to power off Adapter.-Out\n");
2760 else if ((lenBTRCoreDevTy == enBTRCoreMobileAudioIn) || (lenBTRCoreDevTy == enBTRCorePCAudioIn)) {
2763 BTRMGRLOG_ERROR (
"This device is being Connected n Playing. Failed to stop Playback. Going Ahead to power off Adapter.-In\n");
2769 if (!(pAdapterPath = btrMgr_GetAdapterPath(aui8AdapterIdx))) {
2770 BTRMGRLOG_ERROR (
"Failed to get adapter path\n");
2771 return BTRMGR_RESULT_GENERIC_FAILURE;
2777 if (lenBtrCoreRet != enBTRCoreSuccess) {
2778 BTRMGRLOG_ERROR (
"Failed to set Adapter Power Status\n");
2779 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
2782 BTRMGRLOG_INFO (
"Set Successfully\n");
2786 return lenBtrMgrResult;
2791 unsigned char aui8AdapterIdx,
2792 unsigned char* pPowerStatus
2795 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
2796 const char* pAdapterPath = NULL;
2797 unsigned char power_status = 0;
2799 if (!ghBTRCoreHdl) {
2800 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
2801 return BTRMGR_RESULT_INIT_FAILED;
2803 else if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!pPowerStatus)) {
2804 BTRMGRLOG_ERROR (
"Input is invalid\n");
2805 return BTRMGR_RESULT_INVALID_INPUT;
2809 if (!(pAdapterPath = btrMgr_GetAdapterPath(aui8AdapterIdx))) {
2810 BTRMGRLOG_ERROR (
"Failed to get adapter path\n");
2811 return BTRMGR_RESULT_GENERIC_FAILURE;
2816 if (lenBtrCoreRet != enBTRCoreSuccess) {
2817 BTRMGRLOG_ERROR (
"Failed to get Adapter Power\n");
2818 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
2821 BTRMGRLOG_INFO (
"Fetched Successfully\n");
2822 *pPowerStatus = power_status;
2826 return lenBtrMgrResult;
2831 unsigned char aui8AdapterIdx,
2832 unsigned char discoverable,
2836 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
2837 const char* pAdapterPath = NULL;
2839 if (!ghBTRCoreHdl) {
2840 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
2841 return BTRMGR_RESULT_INIT_FAILED;
2845 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (discoverable > 1)) {
2846 BTRMGRLOG_ERROR (
"Input is invalid\n");
2847 return BTRMGR_RESULT_INVALID_INPUT;
2851 if (!(pAdapterPath = btrMgr_GetAdapterPath(aui8AdapterIdx))) {
2852 BTRMGRLOG_ERROR (
"Failed to get adapter path\n");
2853 return BTRMGR_RESULT_GENERIC_FAILURE;
2860 if (lenBtrCoreRet != enBTRCoreSuccess) {
2861 BTRMGRLOG_ERROR (
"Failed to set Adapter discovery timeout\n");
2864 BTRMGRLOG_INFO (
"Set timeout Successfully\n");
2870 BTRMGRLOG_ERROR (
"Failed to set Adapter discoverable status\n");
2871 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
2874 BTRMGRLOG_INFO (
"Set discoverable status Successfully\n");
2876 if (!btrMgr_GetAgentActivated()) {
2877 BTRMGRLOG_INFO (
"Activate agent\n");
2879 BTRMGRLOG_ERROR (
"Failed to Activate Agent\n");
2880 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
2883 btrMgr_SetAgentActivated(1);
2889 return lenBtrMgrResult;
2895 unsigned char aui8AdapterIdx,
2896 unsigned char* pDiscoverable
2899 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
2900 const char* pAdapterPath = NULL;
2901 unsigned char discoverable = 0;
2903 if (!ghBTRCoreHdl) {
2904 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
2905 return BTRMGR_RESULT_INIT_FAILED;
2908 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!pDiscoverable)) {
2909 BTRMGRLOG_ERROR (
"Input is invalid\n");
2910 return BTRMGR_RESULT_INVALID_INPUT;
2914 if (!(pAdapterPath = btrMgr_GetAdapterPath(aui8AdapterIdx))) {
2915 BTRMGRLOG_ERROR (
"Failed to get adapter path\n");
2916 return BTRMGR_RESULT_GENERIC_FAILURE;
2921 BTRMGRLOG_ERROR (
"Failed to get Adapter Status\n");
2922 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
2925 BTRMGRLOG_INFO (
"Fetched Successfully\n");
2926 *pDiscoverable = discoverable;
2928 if (!btrMgr_GetAgentActivated()) {
2929 BTRMGRLOG_INFO (
"Activate agent\n");
2931 BTRMGRLOG_ERROR (
"Failed to Activate Agent\n");
2932 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
2935 btrMgr_SetAgentActivated(1);
2941 return lenBtrMgrResult;
2945 BTRMGR_StartDeviceDiscovery_Internal (
2946 unsigned char aui8AdapterIdx,
2950 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
2951 enBTRCoreDeviceType lenBTRCoreDeviceType = enBTRCoreUnknown;
2952 const char* pAdapterPath = NULL;
2955 if (!ghBTRCoreHdl) {
2956 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
2957 return BTRMGR_RESULT_INIT_FAILED;
2959 else if (aui8AdapterIdx > btrMgr_GetAdapterCnt()) {
2960 BTRMGRLOG_ERROR (
"Input is invalid\n");
2961 return BTRMGR_RESULT_INVALID_INPUT;
2964 if (!(pAdapterPath = btrMgr_GetAdapterPath(aui8AdapterIdx))) {
2965 BTRMGRLOG_ERROR (
"Failed to get adapter path\n");
2966 return BTRMGR_RESULT_GENERIC_FAILURE;
2969 if ((ldiscoveryHdl = btrMgr_GetDiscoveryInProgress())) {
2970 if (aenBTRMgrDevOpT == btrMgr_GetDiscoveryDeviceType(ldiscoveryHdl)) {
2971 BTRMGRLOG_WARN (
"[%s] Scan already in Progress...\n"
2972 , btrMgr_GetDiscoveryDeviceTypeAsString (btrMgr_GetDiscoveryDeviceType(ldiscoveryHdl)));
2973 return BTRMGR_RESULT_SUCCESS;
2977 if (eBTRMgrSuccess != btrMgr_PreCheckDiscoveryStatus(aui8AdapterIdx, aenBTRMgrDevOpT)) {
2978 BTRMGRLOG_ERROR (
"Pre Check Discovery State Rejected !!!\n");
2979 return BTRMGR_RESULT_GENERIC_FAILURE;
2986 switch (aenBTRMgrDevOpT) {
2987 case BTRMGR_DEVICE_OP_TYPE_AUDIO_OUTPUT:
2988 lenBTRCoreDeviceType = enBTRCoreSpeakers;
2990 case BTRMGR_DEVICE_OP_TYPE_AUDIO_INPUT:
2991 lenBTRCoreDeviceType = enBTRCoreMobileAudioIn;
2993 case BTRMGR_DEVICE_OP_TYPE_LE:
2994 lenBTRCoreDeviceType = enBTRCoreLE;
2996 case BTRMGR_DEVICE_OP_TYPE_HID:
2997 lenBTRCoreDeviceType = enBTRCoreHID;
2999 case BTRMGR_DEVICE_OP_TYPE_UNKNOWN:
3001 lenBTRCoreDeviceType = enBTRCoreUnknown;
3007 if (lenBtrCoreRet != enBTRCoreSuccess) {
3008 BTRMGRLOG_ERROR (
"Failed to start discovery\n");
3009 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
3013 unsigned int ui32sleepIdx = 600;
3017 }
while ((!gIsAdapterDiscovering) && (--ui32sleepIdx));
3020 if (!gIsAdapterDiscovering) {
3021 BTRMGRLOG_WARN (
"Discovery is not yet Started !!!\n");
3024 BTRMGRLOG_INFO (
"Discovery started Successfully\n");
3027 btrMgr_SetDiscoveryHandle (aenBTRMgrDevOpT, BTRMGR_DISCOVERY_ST_STARTED);
3030 return lenBtrMgrResult;
3035 BTRMGR_StopDeviceDiscovery_Internal (
3036 unsigned char aui8AdapterIdx,
3040 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
3041 enBTRCoreDeviceType lenBTRCoreDeviceType = enBTRCoreUnknown;
3042 const char* pAdapterPath = NULL;
3045 if (!ghBTRCoreHdl) {
3046 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
3047 return BTRMGR_RESULT_INIT_FAILED;
3050 if (aui8AdapterIdx > btrMgr_GetAdapterCnt()) {
3051 BTRMGRLOG_ERROR (
"Input is invalid\n");
3052 return BTRMGR_RESULT_INVALID_INPUT;
3055 if (!(pAdapterPath = btrMgr_GetAdapterPath(aui8AdapterIdx))) {
3056 BTRMGRLOG_ERROR (
"Failed to get adapter path\n");
3057 return BTRMGR_RESULT_GENERIC_FAILURE;
3060 if (!(ahdiscoveryHdl = btrMgr_GetDiscoveryInProgress())) {
3061 BTRMGRLOG_WARN(
"Scanning is not running now\n");
3064 switch (aenBTRMgrDevOpT) {
3065 case BTRMGR_DEVICE_OP_TYPE_AUDIO_OUTPUT:
3066 lenBTRCoreDeviceType = enBTRCoreSpeakers;
3068 case BTRMGR_DEVICE_OP_TYPE_AUDIO_INPUT:
3069 lenBTRCoreDeviceType = enBTRCoreMobileAudioIn;
3071 case BTRMGR_DEVICE_OP_TYPE_LE:
3072 lenBTRCoreDeviceType = enBTRCoreLE;
3074 case BTRMGR_DEVICE_OP_TYPE_HID:
3075 lenBTRCoreDeviceType = enBTRCoreHID;
3077 case BTRMGR_DEVICE_OP_TYPE_UNKNOWN:
3079 lenBTRCoreDeviceType = enBTRCoreUnknown;
3085 if (lenBtrCoreRet != enBTRCoreSuccess) {
3086 BTRMGRLOG_ERROR (
"Failed to stop discovery\n");
3087 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
3090 BTRMGRLOG_INFO (
"Discovery Stopped Successfully\n");
3093 Let we not make the OutTask Context of BTRCore Layer wait here
3094 TODO: Confirm Discovery Stop
3097 unsigned int ui32sleepIdx = 6;
3099 while ((gIsAdapterDiscovering) && (ui32sleepIdx--)) {
3104 if (gIsAdapterDiscovering) {
3105 BTRMGRLOG_WARN (
"Discovery is not yet Stopped !!!\n");
3108 BTRMGRLOG_INFO (
"Discovery Stopped Successfully\n");
3112 if (ahdiscoveryHdl) {
3113 if ((btrMgr_GetDiscoveryDeviceType(ahdiscoveryHdl) == BTRMGR_DEVICE_OP_TYPE_LE && aenBTRMgrDevOpT == BTRMGR_DEVICE_OP_TYPE_LE)
3114 || btrMgr_GetDiscoveryDeviceType(ahdiscoveryHdl) != BTRMGR_DEVICE_OP_TYPE_LE) {
3116 btrMgr_SetDiscoveryState (ahdiscoveryHdl, BTRMGR_DISCOVERY_ST_STOPPED);
3117 if (btrMgr_GetDiscoveryDeviceType(ahdiscoveryHdl) != BTRMGR_DEVICE_OP_TYPE_LE &&
3118 btrMgr_GetDiscoveryState(&ghBTRMgrBgDiscoveryHdl) == BTRMGR_DISCOVERY_ST_PAUSED) {
3119 btrMgr_ClearDiscoveryHoldOffTimer();
3120 btrMgr_SetDiscoveryHoldOffTimer(aui8AdapterIdx);
3124 btrMgr_SetDiscoveryState (ahdiscoveryHdl, BTRMGR_DISCOVERY_ST_PAUSED);
3125 btrMgr_SetDiscoveryHoldOffTimer(aui8AdapterIdx);
3128 else if (aenBTRMgrDevOpT == BTRMGR_DEVICE_OP_TYPE_LE) {
3129 if (btrMgr_GetDiscoveryState(&ghBTRMgrBgDiscoveryHdl) == BTRMGR_DISCOVERY_ST_PAUSED) {
3130 btrMgr_ClearDiscoveryHoldOffTimer();
3131 btrMgr_SetDiscoveryState (&ghBTRMgrBgDiscoveryHdl, BTRMGR_DISCOVERY_ST_STOPPED);
3136 return lenBtrMgrResult;
3142 unsigned char aui8AdapterIdx,
3147 gIsDiscoveryOpInternal = FALSE;
3149 memset (&gListOfDiscoveredDevices, 0,
sizeof(gListOfDiscoveredDevices));
3150 result = BTRMGR_StartDeviceDiscovery_Internal(aui8AdapterIdx, aenBTRMgrDevOpT);
3152 if ((result == BTRMGR_RESULT_SUCCESS) && gfpcBBTRMgrEventOut) {
3154 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
3156 lstEventMessage.m_adapterIndex = aui8AdapterIdx;
3157 if (gIsAdapterDiscovering) {
3158 lstEventMessage.m_eventType = BTRMGR_EVENT_DEVICE_DISCOVERY_STARTED;
3161 gfpcBBTRMgrEventOut(lstEventMessage);
3170 unsigned char aui8AdapterIdx,
3175 gIsDiscoveryOpInternal = FALSE;
3176 result = BTRMGR_StopDeviceDiscovery_Internal(aui8AdapterIdx, aenBTRMgrDevOpT);
3178 if ((result == BTRMGR_RESULT_SUCCESS) && gfpcBBTRMgrEventOut) {
3180 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
3182 lstEventMessage.m_adapterIndex = aui8AdapterIdx;
3183 if (!gIsAdapterDiscovering) {
3184 lstEventMessage.m_eventType = BTRMGR_EVENT_DEVICE_DISCOVERY_COMPLETE;
3187 gfpcBBTRMgrEventOut(lstEventMessage);
3196 unsigned char aui8AdapterIdx,
3203 if (!ghBTRCoreHdl) {
3204 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
3205 return BTRMGR_RESULT_INIT_FAILED;
3207 else if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!isDiscoveryInProgress) || (!aenBTRMgrDevOpT)) {
3208 BTRMGRLOG_ERROR (
"Input is invalid\n");
3209 return BTRMGR_RESULT_INVALID_INPUT;
3212 if ((ldiscoveryHdl = btrMgr_GetDiscoveryInProgress())) {
3213 *isDiscoveryInProgress = BTRMGR_DISCOVERY_STATUS_IN_PROGRESS;
3214 *aenBTRMgrDevOpT = btrMgr_GetDiscoveryDeviceType(ldiscoveryHdl);
3215 BTRMGRLOG_WARN (
"[%s] Scan already in Progress\n"
3216 , btrMgr_GetDiscoveryDeviceTypeAsString (btrMgr_GetDiscoveryDeviceType(ldiscoveryHdl)));
3219 *isDiscoveryInProgress = BTRMGR_DISCOVERY_STATUS_OFF;
3220 *aenBTRMgrDevOpT = BTRMGR_DEVICE_OP_TYPE_UNKNOWN;
3227 unsigned char aui8AdapterIdx,
3230 return BTRMGR_GetDiscoveredDevices_Internal(aui8AdapterIdx, pDiscoveredDevices);
3235 BTRMGR_GetDiscoveredDevices_Internal (
3236 unsigned char aui8AdapterIdx,
3240 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
3246 if (!ghBTRCoreHdl) {
3247 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
3248 return BTRMGR_RESULT_INIT_FAILED;
3251 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!pDiscoveredDevices)) {
3252 BTRMGRLOG_ERROR (
"Input is invalid\n");
3253 return BTRMGR_RESULT_INVALID_INPUT;
3258 if (lenBtrCoreRet != enBTRCoreSuccess) {
3259 BTRMGRLOG_ERROR (
"Failed to get list of discovered devices\n");
3260 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
3265 if (lstBtrCoreListOfSDevices.numberOfDevices) {
3268 pDiscoveredDevices->m_numOfDevices = (lstBtrCoreListOfSDevices.numberOfDevices < BTRMGR_DEVICE_COUNT_MAX) ?
3269 lstBtrCoreListOfSDevices.numberOfDevices : BTRMGR_DEVICE_COUNT_MAX;
3271 for (i = 0,j = 0; j < pDiscoveredDevices->m_numOfDevices; i++,j++) {
3272 lenBtrMgrDevType = btrMgr_MapDeviceTypeFromCore(lstBtrCoreListOfSDevices.devices[i].enDeviceType);
3273 if (!gIsHidGamePadEnabled && (lenBtrMgrDevType == BTRMGR_DEVICE_TYPE_HID_GAMEPAD)) {
3275 pDiscoveredDevices->m_numOfDevices--;
3276 BTRMGRLOG_WARN (
"HID GamePad RFC not enable, HID GamePad devices are not listing \n");
3280 lpstBtrMgrSDevice = &pDiscoveredDevices->m_deviceProperty[j];
3282 lpstBtrMgrSDevice->m_deviceHandle = lstBtrCoreListOfSDevices.devices[i].tDeviceId;
3283 lpstBtrMgrSDevice->m_signalLevel = lstBtrCoreListOfSDevices.devices[i].i32RSSI;
3284 lpstBtrMgrSDevice->m_rssi = btrMgr_MapSignalStrengthToRSSI (lstBtrCoreListOfSDevices.devices[i].i32RSSI);
3285 lpstBtrMgrSDevice->m_deviceType = btrMgr_MapDeviceTypeFromCore(lstBtrCoreListOfSDevices.devices[i].enDeviceType);
3286 lpstBtrMgrSDevice->m_isPairedDevice = btrMgr_GetDevPaired(lstBtrCoreListOfSDevices.devices[i].tDeviceId);
3288 strncpy(lpstBtrMgrSDevice->m_name, lstBtrCoreListOfSDevices.devices[i].pcDeviceName, (BTRMGR_NAME_LEN_MAX - 1));
3289 strncpy(lpstBtrMgrSDevice->m_deviceAddress, lstBtrCoreListOfSDevices.devices[i].pcDeviceAddress,(BTRMGR_NAME_LEN_MAX - 1));
3291 if (lstBtrCoreListOfSDevices.devices[i].bDeviceConnected) {
3292 lpstBtrMgrSDevice->m_isConnected = 1;
3295 if (!btrMgr_CheckIfDevicePrevDetected(lpstBtrMgrSDevice->m_deviceHandle) && (gListOfDiscoveredDevices.m_numOfDevices < BTRMGR_DEVICE_COUNT_MAX)) {
3297 memcpy(&gListOfDiscoveredDevices.m_deviceProperty[gListOfDiscoveredDevices.m_numOfDevices], lpstBtrMgrSDevice,
sizeof(
BTRMGR_DiscoveredDevices_t));
3298 gListOfDiscoveredDevices.m_numOfDevices++;
3302 BTRMGRLOG_INFO (
"Successful\n");
3305 BTRMGRLOG_WARN(
"No Device is found yet\n");
3309 return lenBtrMgrResult;
3314 unsigned char aui8AdapterIdx,
3315 BTRMgrDeviceHandle ahBTRMgrDevHdl
3318 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
3320 unsigned char ui8reActivateAgent = 0;
3321 enBTRCoreDeviceType lenBTRCoreDevTy = enBTRCoreSpeakers;
3322 enBTRCoreDeviceClass lenBTRCoreDevCl = enBTRCore_DC_Unknown;
3324 if (!ghBTRCoreHdl) {
3325 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
3326 return BTRMGR_RESULT_INIT_FAILED;
3329 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!ahBTRMgrDevHdl)) {
3330 BTRMGRLOG_ERROR (
"Input is invalid\n");
3331 return BTRMGR_RESULT_INVALID_INPUT;
3334 btrMgr_PreCheckDiscoveryStatus(aui8AdapterIdx, BTRMGR_DEVICE_OP_TYPE_UNKNOWN);
3338 if (1 == btrMgr_GetDevPaired(ahBTRMgrDevHdl)) {
3339 BTRMGRLOG_INFO (
"Already a Paired Device; Nothing Done...\n");
3340 return BTRMGR_RESULT_SUCCESS;
3344 BTRMGRLOG_DEBUG (
"Status = %d\t Device Type = %d\t Device Class = %x\n", lenBtrCoreRet, lenBTRCoreDevTy, lenBTRCoreDevCl);
3346 if (!gIsHidGamePadEnabled && (lenBTRCoreDevCl == enBTRCore_DC_HID_GamePad)) {
3347 BTRMGRLOG_WARN (
"BTR HID GamePad is currently Disabled\n");
3348 return BTRMGR_RESULT_GENERIC_FAILURE;
3350 if (!gIsAudioInEnabled && ((lenBTRCoreDevTy == enBTRCoreMobileAudioIn) || (lenBTRCoreDevTy == enBTRCorePCAudioIn))) {
3351 BTRMGRLOG_WARN (
"Pairing Rejected - BTR AudioIn is currently Disabled!\n");
3352 return BTRMGR_RESULT_GENERIC_FAILURE;
3362 if (lenBTRCoreDevTy != enBTRCoreHID) {
3363 if (btrMgr_GetAgentActivated()) {
3364 BTRMGRLOG_INFO (
"De-Activate agent\n");
3366 BTRMGRLOG_ERROR (
"Failed to Deactivate Agent\n");
3367 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
3370 btrMgr_SetAgentActivated(0);
3371 ui8reActivateAgent = 1;
3376 BTRMGRLOG_DEBUG (
"For HID Devices, let us use the agent\n");
3379 BTRMGRLOG_ERROR (
"Failed to pair a device\n");
3380 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
3381 lBtMgrOutEvent = BTRMGR_EVENT_DEVICE_PAIRING_FAILED;
3384 lenBtrMgrResult = BTRMGR_RESULT_SUCCESS;
3385 lBtMgrOutEvent = BTRMGR_EVENT_DEVICE_PAIRING_COMPLETE;
3390 if ((lenBtrMgrResult != BTRMGR_RESULT_SUCCESS) ||
3391 ((lenBtrMgrResult == BTRMGR_RESULT_SUCCESS) &&
3392 ((lenBTRCoreDevTy != enBTRCoreHID) && (lenBTRCoreDevTy != enBTRCoreMobileAudioIn) && (lenBTRCoreDevTy != enBTRCorePCAudioIn)))) {
3394 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
3395 btrMgr_GetDiscoveredDevInfo (ahBTRMgrDevHdl, &lstEventMessage.m_discoveredDevice);
3397 if (lstEventMessage.m_discoveredDevice.m_deviceHandle != ahBTRMgrDevHdl) {
3398 BTRMGRLOG_WARN (
"Attempted to pair Undiscovered device - %lld\n", ahBTRMgrDevHdl);
3399 lstEventMessage.m_discoveredDevice.m_deviceHandle = ahBTRMgrDevHdl;
3402 lstEventMessage.m_adapterIndex = aui8AdapterIdx;
3403 lstEventMessage.m_eventType = lBtMgrOutEvent;
3405 if (gfpcBBTRMgrEventOut) {
3406 gfpcBBTRMgrEventOut(lstEventMessage);
3411 if(lenBTRCoreDevTy == enBTRCoreHID){
3416 for (j = 0; j <= gListOfPairedDevices.m_numOfDevices; j++) {
3417 if ((ahBTRMgrDevHdl == gListOfPairedDevices.m_deviceProperty[j].m_deviceHandle) && ( BTRMGR_EVENT_DEVICE_PAIRING_COMPLETE == lBtMgrOutEvent )) {
3418 BTRMGRLOG_INFO (
"Paired Successfully - %llu - Name - %s\n",ahBTRMgrDevHdl,gListOfPairedDevices.m_deviceProperty[j].m_name);
3423 if (ui8reActivateAgent) {
3424 BTRMGRLOG_INFO (
"Activate agent\n");
3426 BTRMGRLOG_ERROR (
"Failed to Activate Agent\n");
3427 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
3430 btrMgr_SetAgentActivated(1);
3434 btrMgr_PostCheckDiscoveryStatus(aui8AdapterIdx, btrMgr_MapDeviceOpFromDeviceType( btrMgr_MapDeviceTypeFromCore(lenBTRCoreDevCl)));
3436 return lenBtrMgrResult;
3441 unsigned char aui8AdapterIdx,
3442 BTRMgrDeviceHandle ahBTRMgrDevHdl
3445 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
3446 enBTRCoreDeviceType lenBTRCoreDevTy = enBTRCoreSpeakers;
3447 enBTRCoreDeviceClass lenBTRCoreDevCl = enBTRCore_DC_Unknown;
3449 unsigned char ui8reActivateAgent = 0;
3453 if (!ghBTRCoreHdl) {
3454 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
3455 return BTRMGR_RESULT_INIT_FAILED;
3458 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!ahBTRMgrDevHdl)) {
3459 BTRMGRLOG_ERROR (
"Input is invalid\n");
3460 return BTRMGR_RESULT_INVALID_INPUT;
3463 btrMgr_PreCheckDiscoveryStatus(aui8AdapterIdx, BTRMGR_DEVICE_OP_TYPE_UNKNOWN);
3467 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
3468 btrMgr_GetPairedDevInfo (ahBTRMgrDevHdl, &lstEventMessage.m_pairedDevice);
3470 if (!lstEventMessage.m_pairedDevice.m_deviceHandle) {
3471 BTRMGRLOG_ERROR (
"Not a Paired device...\n");
3472 return BTRMGR_RESULT_GENERIC_FAILURE;
3476 BTRMGRLOG_DEBUG (
"Status = %d\t Device Type = %d\t Device Class = %x\n", lenBtrCoreRet, lenBTRCoreDevTy, lenBTRCoreDevCl);
3478 if (btrMgr_GetAgentActivated()) {
3479 BTRMGRLOG_INFO (
"De-Activate agent\n");
3481 BTRMGRLOG_ERROR (
"Failed to Deactivate Agent\n");
3482 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
3485 btrMgr_SetAgentActivated(0);
3486 ui8reActivateAgent = 1;
3492 if (ghBTRMgrDevHdlCurStreaming == ahBTRMgrDevHdl) {
3494 if ((lenBTRCoreDevTy == enBTRCoreSpeakers) || (lenBTRCoreDevTy == enBTRCoreHeadSet)) {
3497 BTRMGRLOG_ERROR (
"BTRMGR_UnpairDevice :This device is being Connected n Playing. Failed to stop Playback. Going Ahead to unpair.-Out\n");
3500 else if ((lenBTRCoreDevTy == enBTRCoreMobileAudioIn) || (lenBTRCoreDevTy == enBTRCorePCAudioIn)) {
3503 BTRMGRLOG_ERROR (
"BTRMGR_UnpairDevice :This device is being Connected n Playing. Failed to stop Playback. Going Ahead to unpair.-In\n");
3510 BTRMGRLOG_ERROR (
"Failed to unpair\n");
3511 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
3512 lBtMgrOutEvent = BTRMGR_EVENT_DEVICE_UNPAIRING_FAILED;
3516 for (j = 0; j <= gListOfPairedDevices.m_numOfDevices; j++) {
3517 if (ahBTRMgrDevHdl == gListOfPairedDevices.m_deviceProperty[j].m_deviceHandle) {
3518 BTRMGRLOG_INFO (
"Unpaired Successfully - %llu - Name - %s\n",ahBTRMgrDevHdl,gListOfPairedDevices.m_deviceProperty[j].m_name);
3522 lenBtrMgrResult = BTRMGR_RESULT_SUCCESS;
3523 lBtMgrOutEvent = BTRMGR_EVENT_DEVICE_UNPAIRING_COMPLETE;
3528 lstEventMessage.m_adapterIndex = aui8AdapterIdx;
3529 lstEventMessage.m_eventType = lBtMgrOutEvent;
3531 if (gfpcBBTRMgrEventOut) {
3532 gfpcBBTRMgrEventOut(lstEventMessage);
3539 if (ui8reActivateAgent) {
3540 BTRMGRLOG_INFO (
"Activate agent\n");
3542 BTRMGRLOG_ERROR (
"Failed to Activate Agent\n");
3543 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
3546 btrMgr_SetAgentActivated(1);
3550 btrMgr_PostCheckDiscoveryStatus(aui8AdapterIdx, btrMgr_MapDeviceOpFromDeviceType( btrMgr_MapDeviceTypeFromCore(lenBTRCoreDevCl)));
3552 return lenBtrMgrResult;
3557 unsigned char aui8AdapterIdx,
3561 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
3566 if (!ghBTRCoreHdl) {
3567 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
3568 return BTRMGR_RESULT_INIT_FAILED;
3571 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!pPairedDevices)) {
3572 BTRMGRLOG_ERROR (
"Input is invalid\n");
3573 return BTRMGR_RESULT_INVALID_INPUT;
3576 lstBtrCoreListOfPDevices.numberOfDevices = 0;
3577 for (i = 0; i < BTRCORE_MAX_NUM_BT_DEVICES; i++) {
3583 if (lenBtrCoreRet != enBTRCoreSuccess) {
3584 BTRMGRLOG_ERROR (
"Failed to get list of paired devices\n");
3585 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
3588 pPairedDevices->m_numOfDevices = 0;
3589 for (i = 0; i < BTRMGR_DEVICE_COUNT_MAX; i++) {
3593 if (lstBtrCoreListOfPDevices.numberOfDevices) {
3596 pPairedDevices->m_numOfDevices = (lstBtrCoreListOfPDevices.numberOfDevices < BTRMGR_DEVICE_COUNT_MAX) ?
3597 lstBtrCoreListOfPDevices.numberOfDevices : BTRMGR_DEVICE_COUNT_MAX;
3599 for (i = 0; i < pPairedDevices->m_numOfDevices; i++) {
3600 lpstBtrMgrPDevice = &pPairedDevices->m_deviceProperty[i];
3602 lpstBtrMgrPDevice->m_deviceHandle = lstBtrCoreListOfPDevices.devices[i].tDeviceId;
3603 lpstBtrMgrPDevice->m_deviceType = btrMgr_MapDeviceTypeFromCore (lstBtrCoreListOfPDevices.devices[i].enDeviceType);
3605 strncpy(lpstBtrMgrPDevice->m_name, lstBtrCoreListOfPDevices.devices[i].pcDeviceName, (BTRMGR_NAME_LEN_MAX - 1));
3606 strncpy(lpstBtrMgrPDevice->m_deviceAddress, lstBtrCoreListOfPDevices.devices[i].pcDeviceAddress,(BTRMGR_NAME_LEN_MAX - 1));
3608 BTRMGRLOG_INFO (
"Paired Device ID = %lld Connected = %d\n", lstBtrCoreListOfPDevices.devices[i].tDeviceId, lstBtrCoreListOfPDevices.devices[i].bDeviceConnected);
3610 lpstBtrMgrPDevice->m_serviceInfo.m_numOfService = lstBtrCoreListOfPDevices.devices[i].stDeviceProfile.numberOfService;
3611 for (j = 0; j < lstBtrCoreListOfPDevices.devices[i].stDeviceProfile.numberOfService; j++) {
3612 BTRMGRLOG_TRACE (
"Profile ID = %u; Profile Name = %s\n", lstBtrCoreListOfPDevices.devices[i].stDeviceProfile.profile[j].uuid_value,
3613 lstBtrCoreListOfPDevices.devices[i].stDeviceProfile.profile[j].profile_name);
3614 lpstBtrMgrPDevice->m_serviceInfo.m_profileInfo[j].m_uuid = lstBtrCoreListOfPDevices.devices[i].stDeviceProfile.profile[j].uuid_value;
3615 strcpy (lpstBtrMgrPDevice->m_serviceInfo.m_profileInfo[j].m_profile, lstBtrCoreListOfPDevices.devices[i].stDeviceProfile.profile[j].profile_name);
3618 if (lstBtrCoreListOfPDevices.devices[i].bDeviceConnected) {
3619 lpstBtrMgrPDevice->m_isConnected = 1;
3623 BTRMGRLOG_TRACE (
"Successful\n");
3626 BTRMGRLOG_WARN(
"No Device is paired yet\n");
3630 return lenBtrMgrResult;
3636 unsigned char aui8AdapterIdx,
3637 BTRMgrDeviceHandle ahBTRMgrDevHdl,
3641 enBTRCoreDeviceType lenBTRCoreDevTy = enBTRCoreUnknown;
3642 enBTRCoreDeviceClass lenBTRCoreDevCl = enBTRCore_DC_Unknown;
3645 if (!ghBTRCoreHdl) {
3646 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
3647 return BTRMGR_RESULT_INIT_FAILED;
3651 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!ahBTRMgrDevHdl)) {
3652 BTRMGRLOG_ERROR (
"Input is invalid\n");
3653 return BTRMGR_RESULT_INVALID_INPUT;
3657 BTRMGRLOG_DEBUG (
" Device Type = %d\t Device Class = %x\n", lenBTRCoreDevTy, lenBTRCoreDevCl);
3659 if (!gIsHidGamePadEnabled && (lenBTRCoreDevCl == enBTRCore_DC_HID_GamePad)) {
3660 BTRMGRLOG_WARN (
"BTR HID GamePad is currently Disabled\n");
3661 return BTRMGR_RESULT_GENERIC_FAILURE;
3664 if (btrMgr_ConnectToDevice(aui8AdapterIdx, ahBTRMgrDevHdl, connectAs, 0, 1) != eBTRMgrSuccess) {
3665 BTRMGRLOG_ERROR (
"Failure\n");
3666 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
3669 return lenBtrMgrResult;
3675 unsigned char aui8AdapterIdx,
3676 BTRMgrDeviceHandle ahBTRMgrDevHdl
3679 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
3680 enBTRCoreDeviceType lenBTRCoreDevTy = enBTRCoreSpeakers;
3681 enBTRCoreDeviceClass lenBTRCoreDevCl = enBTRCore_DC_Unknown;
3684 if (!ghBTRCoreHdl) {
3685 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
3686 return BTRMGR_RESULT_INIT_FAILED;
3689 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!ahBTRMgrDevHdl)) {
3690 BTRMGRLOG_ERROR (
"Input is invalid\n");
3691 return BTRMGR_RESULT_INVALID_INPUT;
3695 BTRMGRLOG_DEBUG (
"Status = %d\t Device Type = %d\t Device Class = %x\n", lenBtrCoreRet, lenBTRCoreDevTy, lenBTRCoreDevCl);
3697 if (((lenBtrMgrDevOpType = btrMgr_MapDeviceOpFromDeviceType( btrMgr_MapDeviceTypeFromCore(lenBTRCoreDevCl))) == BTRMGR_DEVICE_OP_TYPE_UNKNOWN) &&
3698 (lenBtrCoreRet == enBTRCoreFailure) &&
3699 (lenBTRCoreDevTy == enBTRCoreUnknown)) {
3703 lenBTRCoreDevTy = enBTRCoreLE;
3704 lenBtrMgrDevOpType = BTRMGR_DEVICE_OP_TYPE_LE;
3707 if (eBTRMgrSuccess != btrMgr_PreCheckDiscoveryStatus(aui8AdapterIdx, lenBtrMgrDevOpType)) {
3708 BTRMGRLOG_ERROR (
"Pre Check Discovery State Failed !!!\n");
3709 if (lenBTRCoreDevTy == enBTRCoreLE) {
3710 btrMgr_PostCheckDiscoveryStatus(aui8AdapterIdx, BTRMGR_DEVICE_OP_TYPE_UNKNOWN);
3712 return BTRMGR_RESULT_GENERIC_FAILURE;
3715 if ((lenBTRCoreDevTy != enBTRCoreLE) && !btrMgr_IsDevConnected(ahBTRMgrDevHdl)) {
3716 BTRMGRLOG_ERROR (
"No Device is connected at this time\n");
3717 btrMgr_PostCheckDiscoveryStatus(aui8AdapterIdx, lenBtrMgrDevOpType);
3718 return BTRMGR_RESULT_GENERIC_FAILURE;
3721 if (lenBTRCoreDevTy == enBTRCoreLE && !gIsLeDeviceConnected) {
3722 BTRMGRLOG_ERROR (
"No LE Device is connected at this time\n");
3723 btrMgr_PostCheckDiscoveryStatus(aui8AdapterIdx, BTRMGR_DEVICE_OP_TYPE_UNKNOWN);
3724 return BTRMGR_RESULT_GENERIC_FAILURE;
3728 if (lenBTRCoreDevTy != enBTRCoreLE) {
3730 if (ghBTRMgrDevHdlCurStreaming) {
3731 if ((lenBTRCoreDevTy == enBTRCoreSpeakers) || (lenBTRCoreDevTy == enBTRCoreHeadSet)) {
3734 BTRMGRLOG_ERROR (
"Streamout failed to stop\n");
3737 else if ((lenBTRCoreDevTy == enBTRCoreMobileAudioIn) || (lenBTRCoreDevTy == enBTRCorePCAudioIn)) {
3740 BTRMGRLOG_ERROR (
"Streamin failed to stop\n");
3745 gIsUserInitiated = 1;
3751 if (lenBtrCoreRet != enBTRCoreSuccess) {
3752 BTRMGRLOG_ERROR (
"Failed to Disconnect - %llu\n", ahBTRMgrDevHdl);
3753 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
3757 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
3759 btrMgr_GetPairedDevInfo(ahBTRMgrDevHdl, &lstEventMessage.m_pairedDevice);
3761 lstEventMessage.m_adapterIndex = aui8AdapterIdx;
3762 lstEventMessage.m_eventType = BTRMGR_EVENT_DEVICE_DISCONNECT_FAILED;
3763 lstEventMessage.m_pairedDevice.m_isLowEnergyDevice = (lenBTRCoreDevCl==enBTRCore_DC_Tile)?1:0;
3765 if (gfpcBBTRMgrEventOut) {
3766 gfpcBBTRMgrEventOut(lstEventMessage);
3772 for (j = 0; j <= gListOfPairedDevices.m_numOfDevices; j++) {
3773 if (ahBTRMgrDevHdl == gListOfPairedDevices.m_deviceProperty[j].m_deviceHandle) {
3774 BTRMGRLOG_INFO (
"Disconnected Successfully - %llu - Name - %s\n",ahBTRMgrDevHdl,gListOfPairedDevices.m_deviceProperty[j].m_name);
3778 if ((lenBTRCoreDevTy == enBTRCoreSpeakers) || (lenBTRCoreDevTy == enBTRCoreHeadSet)) {
3779 btrMgr_RemovePersistentEntry(aui8AdapterIdx, ahBTRMgrDevHdl, BTRMGR_A2DP_SINK_PROFILE_ID);
3781 else if ((lenBTRCoreDevTy == enBTRCoreMobileAudioIn) || (lenBTRCoreDevTy == enBTRCorePCAudioIn)) {
3782 btrMgr_RemovePersistentEntry(aui8AdapterIdx, ahBTRMgrDevHdl, BTRMGR_A2DP_SRC_PROFILE_ID);
3787 if (lenBtrMgrResult != BTRMGR_RESULT_GENERIC_FAILURE) {
3789 unsigned int ui32sleepTimeOut = 1;
3790 unsigned int ui32confirmIdx = 2;
3793 unsigned int ui32sleepIdx = 2;
3796 sleep(ui32sleepTimeOut);
3798 }
while ((lenBtrCoreRet != enBTRCoreSuccess) && (--ui32sleepIdx));
3799 }
while (--ui32confirmIdx);
3801 if (lenBtrCoreRet != enBTRCoreSuccess) {
3802 BTRMGRLOG_ERROR (
"Failed to Disconnect from this device - Confirmed\n");
3803 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
3804 if ((lenBTRCoreDevTy == enBTRCoreSpeakers) || (lenBTRCoreDevTy == enBTRCoreHeadSet)) {
3805 btrMgr_AddPersistentEntry(aui8AdapterIdx, ahBTRMgrDevHdl, BTRMGR_A2DP_SINK_PROFILE_ID, 1);
3807 else if ((lenBTRCoreDevTy == enBTRCoreMobileAudioIn) || (lenBTRCoreDevTy == enBTRCorePCAudioIn)) {
3808 btrMgr_AddPersistentEntry(aui8AdapterIdx, ahBTRMgrDevHdl, BTRMGR_A2DP_SRC_PROFILE_ID, 1);
3812 BTRMGRLOG_DEBUG (
"Success Disconnect from this device - Confirmed\n");
3814 if (lenBTRCoreDevTy == enBTRCoreLE) {
3815 gIsLeDeviceConnected = 0;
3817 else if ((lenBTRCoreDevTy == enBTRCoreSpeakers) || (lenBTRCoreDevTy == enBTRCoreHeadSet)) {
3818 btrMgr_SetDevConnected(ahBTRMgrDevHdl, 0);
3819 ghBTRMgrDevHdlLastConnected = 0;
3821 else if ((lenBTRCoreDevTy == enBTRCoreMobileAudioIn) || (lenBTRCoreDevTy == enBTRCorePCAudioIn)) {
3822 btrMgr_SetDevConnected(ahBTRMgrDevHdl, 0);
3823 ghBTRMgrDevHdlLastConnected = 0;
3825 else if (lenBTRCoreDevTy == enBTRCoreHID) {
3826 btrMgr_SetDevConnected(ahBTRMgrDevHdl, 0);
3829 btrMgr_SetDevConnected(ahBTRMgrDevHdl, 0);
3834 if (lenBtrMgrDevOpType == BTRMGR_DEVICE_OP_TYPE_LE) {
3835 lenBtrMgrDevOpType = BTRMGR_DEVICE_OP_TYPE_UNKNOWN;
3838 btrMgr_PostCheckDiscoveryStatus(aui8AdapterIdx, lenBtrMgrDevOpType);
3840 return lenBtrMgrResult;
3846 unsigned char aui8AdapterIdx,
3850 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
3853 unsigned char i = 0;
3854 unsigned char j = 0;
3856 if (!ghBTRCoreHdl) {
3857 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
3858 return BTRMGR_RESULT_INIT_FAILED;
3861 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!pConnectedDevices)) {
3862 BTRMGRLOG_ERROR (
"Input is invalid\n");
3863 return BTRMGR_RESULT_INVALID_INPUT;
3868 memset (&lstBtrCoreListOfPDevices, 0,
sizeof(lstBtrCoreListOfPDevices));
3869 memset (&lstBtrCoreListOfSDevices, 0,
sizeof(lstBtrCoreListOfSDevices));
3872 if (lenBtrCoreRet == enBTRCoreSuccess) {
3873 if (lstBtrCoreListOfPDevices.numberOfDevices) {
3876 for (i = 0; i < lstBtrCoreListOfPDevices.numberOfDevices; i++) {
3877 if ((lstBtrCoreListOfPDevices.devices[i].bDeviceConnected) && (pConnectedDevices->m_numOfDevices < BTRMGR_DEVICE_COUNT_MAX)) {
3878 lpstBtrMgrPDevice = &pConnectedDevices->m_deviceProperty[pConnectedDevices->m_numOfDevices];
3880 lpstBtrMgrPDevice->m_deviceType = btrMgr_MapDeviceTypeFromCore(lstBtrCoreListOfPDevices.devices[i].enDeviceType);
3881 lpstBtrMgrPDevice->m_deviceHandle = lstBtrCoreListOfPDevices.devices[i].tDeviceId;
3883 if ((lpstBtrMgrPDevice->m_deviceType == BTRMGR_DEVICE_TYPE_WEARABLE_HEADSET) ||
3884 (lpstBtrMgrPDevice->m_deviceType == BTRMGR_DEVICE_TYPE_HANDSFREE) ||
3885 (lpstBtrMgrPDevice->m_deviceType == BTRMGR_DEVICE_TYPE_LOUDSPEAKER) ||
3886 (lpstBtrMgrPDevice->m_deviceType == BTRMGR_DEVICE_TYPE_HEADPHONES) ||
3887 (lpstBtrMgrPDevice->m_deviceType == BTRMGR_DEVICE_TYPE_PORTABLE_AUDIO) ||
3888 (lpstBtrMgrPDevice->m_deviceType == BTRMGR_DEVICE_TYPE_CAR_AUDIO) ||
3889 (lpstBtrMgrPDevice->m_deviceType == BTRMGR_DEVICE_TYPE_HIFI_AUDIO_DEVICE) ){
3891 if (lpstBtrMgrPDevice->m_deviceHandle != ghBTRMgrDevHdlCurStreaming)
3895 lpstBtrMgrPDevice->m_vendorID = lstBtrCoreListOfPDevices.devices[i].ui32VendorId;
3896 lpstBtrMgrPDevice->m_isConnected = 1;
3898 strncpy (lpstBtrMgrPDevice->m_name, lstBtrCoreListOfPDevices.devices[i].pcDeviceName, (BTRMGR_NAME_LEN_MAX - 1));
3899 strncpy (lpstBtrMgrPDevice->m_deviceAddress, lstBtrCoreListOfPDevices.devices[i].pcDeviceAddress,(BTRMGR_NAME_LEN_MAX - 1));
3901 lpstBtrMgrPDevice->m_serviceInfo.m_numOfService = lstBtrCoreListOfPDevices.devices[i].stDeviceProfile.numberOfService;
3902 for (j = 0; j < lstBtrCoreListOfPDevices.devices[i].stDeviceProfile.numberOfService; j++) {
3903 lpstBtrMgrPDevice->m_serviceInfo.m_profileInfo[j].m_uuid = lstBtrCoreListOfPDevices.devices[i].stDeviceProfile.profile[j].uuid_value;
3904 strncpy (lpstBtrMgrPDevice->m_serviceInfo.m_profileInfo[j].m_profile, lstBtrCoreListOfPDevices.devices[i].stDeviceProfile.profile[j].profile_name, BTRMGR_NAME_LEN_MAX -1);
3905 lpstBtrMgrPDevice->m_serviceInfo.m_profileInfo[j].m_profile[BTRMGR_NAME_LEN_MAX -1] =
'\0';
3908 pConnectedDevices->m_numOfDevices++;
3909 BTRMGRLOG_TRACE (
"Successfully obtained the connected device information from paried list\n");
3914 BTRMGRLOG_WARN(
"No Device in paired list\n");
3919 if (lenBtrCoreRet == enBTRCoreSuccess) {
3920 if (lstBtrCoreListOfSDevices.numberOfDevices) {
3923 for (i = 0; i < lstBtrCoreListOfSDevices.numberOfDevices; i++) {
3924 if ((lstBtrCoreListOfSDevices.devices[i].bDeviceConnected) && (pConnectedDevices->m_numOfDevices < BTRMGR_DEVICE_COUNT_MAX)) {
3925 lpstBtrMgrSDevice = &pConnectedDevices->m_deviceProperty[pConnectedDevices->m_numOfDevices];
3927 lpstBtrMgrSDevice->m_isConnected = 1;
3928 lpstBtrMgrSDevice->m_deviceHandle = lstBtrCoreListOfSDevices.devices[i].tDeviceId;
3929 lpstBtrMgrSDevice->m_vendorID = lstBtrCoreListOfSDevices.devices[i].ui32VendorId;
3930 lpstBtrMgrSDevice->m_deviceType = btrMgr_MapDeviceTypeFromCore(lstBtrCoreListOfSDevices.devices[i].enDeviceType);
3932 strncpy (lpstBtrMgrSDevice->m_name, lstBtrCoreListOfSDevices.devices[i].pcDeviceName, (BTRMGR_NAME_LEN_MAX - 1));
3933 strncpy (lpstBtrMgrSDevice->m_deviceAddress, lstBtrCoreListOfSDevices.devices[i].pcDeviceAddress,(BTRMGR_NAME_LEN_MAX - 1));
3935 lpstBtrMgrSDevice->m_serviceInfo.m_numOfService = lstBtrCoreListOfSDevices.devices[i].stDeviceProfile.numberOfService;
3936 for (j = 0; j < lstBtrCoreListOfSDevices.devices[i].stDeviceProfile.numberOfService; j++) {
3937 lpstBtrMgrSDevice->m_serviceInfo.m_profileInfo[j].m_uuid = lstBtrCoreListOfSDevices.devices[i].stDeviceProfile.profile[j].uuid_value;
3938 strncpy (lpstBtrMgrSDevice->m_serviceInfo.m_profileInfo[j].m_profile, lstBtrCoreListOfSDevices.devices[i].stDeviceProfile.profile[j].profile_name, BTRMGR_NAME_LEN_MAX -1);
3939 lpstBtrMgrSDevice->m_serviceInfo.m_profileInfo[j].m_profile[BTRMGR_NAME_LEN_MAX -1] =
'\0';
3942 pConnectedDevices->m_numOfDevices++;
3943 BTRMGRLOG_TRACE (
"Successfully obtained the connected device information from scanned list\n");
3948 BTRMGRLOG_WARN(
"No Device in scan list\n");
3952 if (enBTRCoreSuccess != lenBtrCoreRet) {
3953 BTRMGRLOG_ERROR (
"Failed to get connected device information\n");
3954 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
3957 return lenBtrMgrResult;
3962 unsigned char aui8AdapterIdx,
3963 BTRMgrDeviceHandle ahBTRMgrDevHdl,
3967 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
3970 unsigned char isFound = 0;
3974 if (!ghBTRCoreHdl) {
3975 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
3976 return BTRMGR_RESULT_INIT_FAILED;
3979 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!pDeviceProperty) || (!ahBTRMgrDevHdl)) {
3980 BTRMGRLOG_ERROR (
"Input is invalid\n");
3981 return BTRMGR_RESULT_INVALID_INPUT;
3986 memset (&lstBtrCoreListOfPDevices, 0,
sizeof(lstBtrCoreListOfPDevices));
3987 memset (&lstBtrCoreListOfSDevices, 0,
sizeof(lstBtrCoreListOfSDevices));
3991 if (lenBtrCoreRet == enBTRCoreSuccess) {
3992 if (lstBtrCoreListOfPDevices.numberOfDevices) {
3994 for (i = 0; i < lstBtrCoreListOfPDevices.numberOfDevices; i++) {
3995 if (ahBTRMgrDevHdl == lstBtrCoreListOfPDevices.devices[i].tDeviceId) {
3996 pDeviceProperty->m_deviceHandle = lstBtrCoreListOfPDevices.devices[i].tDeviceId;
3997 pDeviceProperty->m_deviceType = btrMgr_MapDeviceTypeFromCore(lstBtrCoreListOfPDevices.devices[i].enDeviceType);
3998 pDeviceProperty->m_vendorID = lstBtrCoreListOfPDevices.devices[i].ui32VendorId;
3999 pDeviceProperty->m_isLowEnergyDevice = (pDeviceProperty->m_deviceType==BTRMGR_DEVICE_TYPE_TILE)?1:0;
4000 pDeviceProperty->m_isPaired = 1;
4002 strncpy(pDeviceProperty->m_name, lstBtrCoreListOfPDevices.devices[i].pcDeviceName, (BTRMGR_NAME_LEN_MAX - 1));
4003 strncpy(pDeviceProperty->m_deviceAddress, lstBtrCoreListOfPDevices.devices[i].pcDeviceAddress, (BTRMGR_NAME_LEN_MAX - 1));
4005 pDeviceProperty->m_serviceInfo.m_numOfService = lstBtrCoreListOfPDevices.devices[i].stDeviceProfile.numberOfService;
4006 for (j = 0; j < lstBtrCoreListOfPDevices.devices[i].stDeviceProfile.numberOfService; j++) {
4007 BTRMGRLOG_TRACE (
"Profile ID = %d; Profile Name = %s \n", lstBtrCoreListOfPDevices.devices[i].stDeviceProfile.profile[j].uuid_value,
4008 lstBtrCoreListOfPDevices.devices[i].stDeviceProfile.profile[j].profile_name);
4009 pDeviceProperty->m_serviceInfo.m_profileInfo[j].m_uuid = lstBtrCoreListOfPDevices.devices[i].stDeviceProfile.profile[j].uuid_value;
4010 strncpy (pDeviceProperty->m_serviceInfo.m_profileInfo[j].m_profile, lstBtrCoreListOfPDevices.devices[i].stDeviceProfile.profile[j].profile_name, BTRMGR_NAME_LEN_MAX -1);
4011 pDeviceProperty->m_serviceInfo.m_profileInfo[j].m_profile[BTRMGR_NAME_LEN_MAX -1] =
'\0';
4014 if (lstBtrCoreListOfPDevices.devices[i].bDeviceConnected) {
4015 pDeviceProperty->m_isConnected = 1;
4024 BTRMGRLOG_WARN(
"No Device is paired yet\n");
4030 BTRMGRLOG_DEBUG(
"GetDeviceProperties - Paired Device\n");
4031 return lenBtrMgrResult;
4036 if (lenBtrCoreRet == enBTRCoreSuccess) {
4037 if (lstBtrCoreListOfSDevices.numberOfDevices) {
4039 for (i = 0; i < lstBtrCoreListOfSDevices.numberOfDevices; i++) {
4040 if (ahBTRMgrDevHdl == lstBtrCoreListOfSDevices.devices[i].tDeviceId) {
4042 pDeviceProperty->m_deviceHandle = lstBtrCoreListOfSDevices.devices[i].tDeviceId;
4043 pDeviceProperty->m_deviceType = btrMgr_MapDeviceTypeFromCore(lstBtrCoreListOfSDevices.devices[i].enDeviceType);
4044 pDeviceProperty->m_vendorID = lstBtrCoreListOfSDevices.devices[i].ui32VendorId;
4045 pDeviceProperty->m_isLowEnergyDevice = (pDeviceProperty->m_deviceType==BTRMGR_DEVICE_TYPE_TILE)?1:0;
4047 strncpy(pDeviceProperty->m_name, lstBtrCoreListOfSDevices.devices[i].pcDeviceName, (BTRMGR_NAME_LEN_MAX - 1));
4048 strncpy(pDeviceProperty->m_deviceAddress, lstBtrCoreListOfSDevices.devices[i].pcDeviceAddress, (BTRMGR_NAME_LEN_MAX - 1));
4050 pDeviceProperty->m_serviceInfo.m_numOfService = lstBtrCoreListOfSDevices.devices[i].stDeviceProfile.numberOfService;
4051 for (j = 0; j < lstBtrCoreListOfSDevices.devices[i].stDeviceProfile.numberOfService; j++) {
4052 BTRMGRLOG_TRACE (
"Profile ID = %d; Profile Name = %s \n", lstBtrCoreListOfSDevices.devices[i].stDeviceProfile.profile[j].uuid_value,
4053 lstBtrCoreListOfSDevices.devices[i].stDeviceProfile.profile[j].profile_name);
4054 pDeviceProperty->m_serviceInfo.m_profileInfo[j].m_uuid = lstBtrCoreListOfSDevices.devices[i].stDeviceProfile.profile[j].uuid_value;
4055 strncpy (pDeviceProperty->m_serviceInfo.m_profileInfo[j].m_profile, lstBtrCoreListOfSDevices.devices[i].stDeviceProfile.profile[j].profile_name, BTRMGR_NAME_LEN_MAX -1);
4056 pDeviceProperty->m_serviceInfo.m_profileInfo[j].m_profile[BTRMGR_NAME_LEN_MAX -1] =
'\0';
4058 if(0 != lstBtrCoreListOfSDevices.devices[i].stAdServiceData[j].len)
4060 fprintf(stderr,
"%d\t: %s - ServiceData for UUID : %s \n", __LINE__, __FUNCTION__, lstBtrCoreListOfSDevices.devices[i].stAdServiceData[j].pcUUIDs);
4061 strncpy (pDeviceProperty->m_adServiceData[j].m_UUIDs, lstBtrCoreListOfSDevices.devices[i].stAdServiceData[j].pcUUIDs, (BTRMGR_UUID_STR_LEN_MAX - 1));
4062 memcpy(pDeviceProperty->m_adServiceData[j].m_ServiceData, lstBtrCoreListOfSDevices.devices[i].stAdServiceData[j].pcData, lstBtrCoreListOfSDevices.devices[i].stAdServiceData[j].len);
4063 pDeviceProperty->m_adServiceData[j].m_len = lstBtrCoreListOfSDevices.devices[i].stAdServiceData[j].len;
4065 for (
int k=0; k < pDeviceProperty->m_adServiceData[j].m_len; k++){
4066 fprintf(stderr,
"%d\t: %s - ServiceData[%d] = [%x]\n ", __LINE__, __FUNCTION__, k, pDeviceProperty->m_adServiceData[j].m_ServiceData[k]);
4072 pDeviceProperty->m_signalLevel = lstBtrCoreListOfSDevices.devices[i].i32RSSI;
4074 if (lstBtrCoreListOfSDevices.devices[i].bDeviceConnected) {
4075 pDeviceProperty->m_isConnected = 1;
4084 BTRMGRLOG_WARN(
"No Device in scan list\n");
4087 pDeviceProperty->m_rssi = btrMgr_MapSignalStrengthToRSSI (pDeviceProperty->m_signalLevel);
4090 BTRMGRLOG_ERROR (
"Could not retrive info for this device\n");
4091 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
4094 BTRMGRLOG_DEBUG(
"GetDeviceProperties - Scanned Device\n");
4095 return lenBtrMgrResult;
4101 unsigned char aui8AdapterIdx,
4104 char lui8adapterAddr[BD_NAME_LEN] = {
'\0'};
4105 int i32ProfileIdx = 0;
4106 int i32DeviceIdx = 0;
4107 int numOfProfiles = 0;
4108 int deviceCount = 0;
4109 int isConnected = 0;
4112 BTRMgrDeviceHandle lDeviceHandle;
4116 gIsAudOutStartupInProgress = BTRMGR_STARTUP_AUD_UNKNOWN;
4118 btrMgr_AddPersistentEntry (aui8AdapterIdx, 0, BTRMGR_A2DP_SINK_PROFILE_ID, isConnected);
4119 return BTRMGR_RESULT_GENERIC_FAILURE;
4123 BTRMGRLOG_INFO (
"Successfully get all profiles\n");
4126 if (strcmp(lstPersistentData.adapterId, lui8adapterAddr) == 0) {
4127 gIsAudOutStartupInProgress = BTRMGR_STARTUP_AUD_INPROGRESS;
4128 numOfProfiles = lstPersistentData.numOfProfiles;
4130 BTRMGRLOG_DEBUG (
"Adapter matches = %s\n", lui8adapterAddr);
4131 BTRMGRLOG_DEBUG (
"Number of Profiles = %d\n", numOfProfiles);
4133 for (i32ProfileIdx = 0; i32ProfileIdx < numOfProfiles; i32ProfileIdx++) {
4134 deviceCount = lstPersistentData.profileList[i32ProfileIdx].numOfDevices;
4136 for (i32DeviceIdx = 0; i32DeviceIdx < deviceCount ; i32DeviceIdx++) {
4137 lDeviceHandle = lstPersistentData.profileList[i32ProfileIdx].deviceList[i32DeviceIdx].deviceId;
4138 isConnected = lstPersistentData.profileList[i32ProfileIdx].deviceList[i32DeviceIdx].isConnected;
4140 if (isConnected && lDeviceHandle) {
4141 ghBTRMgrDevHdlLastConnected = lDeviceHandle;
4142 if(strcmp(lstPersistentData.profileList[i32ProfileIdx].profileId, BTRMGR_A2DP_SINK_PROFILE_ID) == 0) {
4143 char lPropValue[BTRMGR_LE_STR_LEN_MAX] = {
'\0'};
4144 BTRMGR_SysDiagChar_t lenDiagElement = BTRMGR_SYS_DIAG_POWERSTATE;
4146 if (eBTRMgrSuccess != BTRMGR_SysDiag_GetData(ghBTRMgrSdHdl, lenDiagElement, lPropValue)) {
4147 gIsAudOutStartupInProgress = BTRMGR_STARTUP_AUD_UNKNOWN;
4148 BTRMGRLOG_ERROR(
"Could not get diagnostic data\n");
4149 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
4152 if ((lenBtrMgrResult == BTRMGR_RESULT_GENERIC_FAILURE) ||
4153 !strncmp(lPropValue, BTRMGR_SYS_DIAG_PWRST_ON, strlen(BTRMGR_SYS_DIAG_PWRST_ON))) {
4154 BTRMGRLOG_INFO (
"Streaming to Device = %lld\n", lDeviceHandle);
4155 if (btrMgr_StartAudioStreamingOut(0, lDeviceHandle, aenBTRMgrDevConT, 1, 1, 1) != eBTRMgrSuccess) {
4156 BTRMGRLOG_ERROR (
"btrMgr_StartAudioStreamingOut - Failure\n");
4157 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
4160 gIsAudOutStartupInProgress = BTRMGR_STARTUP_AUD_COMPLETED;
4163 gIsAudOutStartupInProgress = BTRMGR_STARTUP_AUD_SKIPPED;
4170 if (gIsAudOutStartupInProgress == BTRMGR_STARTUP_AUD_INPROGRESS)
4171 gIsAudOutStartupInProgress = BTRMGR_STARTUP_AUD_UNKNOWN;
4174 return lenBtrMgrResult;
4180 unsigned char aui8AdapterIdx,
4181 BTRMgrDeviceHandle ahBTRMgrDevHdl,
4186 if (!ghBTRCoreHdl) {
4187 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
4188 return BTRMGR_RESULT_INIT_FAILED;
4190 else if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!ahBTRMgrDevHdl)) {
4191 BTRMGRLOG_ERROR (
"Input is invalid\n");
4192 return BTRMGR_RESULT_INVALID_INPUT;
4196 if (btrMgr_StartAudioStreamingOut(aui8AdapterIdx, ahBTRMgrDevHdl, streamOutPref, 0, 0, 0) != eBTRMgrSuccess) {
4197 BTRMGRLOG_ERROR (
"Failure\n");
4198 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
4201 return lenBtrMgrResult;
4206 unsigned char aui8AdapterIdx,
4207 BTRMgrDeviceHandle ahBTRMgrDevHdl
4213 if (!ghBTRCoreHdl) {
4214 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
4215 return BTRMGR_RESULT_INIT_FAILED;
4218 if (aui8AdapterIdx > btrMgr_GetAdapterCnt()) {
4219 BTRMGRLOG_ERROR (
"Input is invalid\n");
4220 return BTRMGR_RESULT_INVALID_INPUT;
4224 if (ghBTRMgrDevHdlCurStreaming != ahBTRMgrDevHdl) {
4225 BTRMGRLOG_ERROR (
"Input is invalid\n");
4226 return BTRMGR_RESULT_INVALID_INPUT;
4230 if ((lenBtrMgrRet = btrMgr_StopCastingAudio()) != eBTRMgrSuccess) {
4231 BTRMGRLOG_ERROR (
"btrMgr_StopCastingAudio = %d\n", lenBtrMgrRet);
4234 if (btrMgr_IsDevConnected(ahBTRMgrDevHdl) == 1) {
4238 ghBTRMgrDevHdlCurStreaming = 0;
4240 if (gstBtrCoreDevMediaInfo.pstBtrCoreDevMCodecInfo) {
4241 free (gstBtrCoreDevMediaInfo.pstBtrCoreDevMCodecInfo);
4242 gstBtrCoreDevMediaInfo.pstBtrCoreDevMCodecInfo = NULL;
4248 return lenBtrMgrResult;
4253 unsigned char aui8AdapterIdx,
4254 unsigned char* pStreamingStatus
4259 if (!ghBTRCoreHdl) {
4260 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
4261 return BTRMGR_RESULT_INIT_FAILED;
4264 if (aui8AdapterIdx > btrMgr_GetAdapterCnt()) {
4265 BTRMGRLOG_ERROR (
"Input is invalid\n");
4266 return BTRMGR_RESULT_INVALID_INPUT;
4270 if(!pStreamingStatus) {
4271 lenBtrMgrResult = BTRMGR_RESULT_INVALID_INPUT;
4272 BTRMGRLOG_ERROR (
"Input is invalid\n");
4275 if (ghBTRMgrDevHdlCurStreaming)
4276 *pStreamingStatus = 1;
4278 *pStreamingStatus = 0;
4280 BTRMGRLOG_INFO (
"BTRMGR_IsAudioStreamingOut: Returned status Successfully\n");
4283 return lenBtrMgrResult;
4288 unsigned char aui8AdapterIdx,
4293 if (!ghBTRCoreHdl) {
4294 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
4295 return BTRMGR_RESULT_INIT_FAILED;
4298 if (aui8AdapterIdx > btrMgr_GetAdapterCnt()) {
4299 BTRMGRLOG_ERROR (
"Input is invalid\n");
4300 return BTRMGR_RESULT_INVALID_INPUT;
4303 BTRMGRLOG_INFO (
"Audio output - Stored %d - Switching to %d\n", gstBTRMgrStreamingInfo.tBTRMgrSoType, aenCurrentSoType);
4304 if (gstBTRMgrStreamingInfo.tBTRMgrSoType != aenCurrentSoType) {
4305 unsigned char ui8StreamingStatus = 0;
4308 gstBTRMgrStreamingInfo.tBTRMgrSoType = aenCurrentSoType;
4310 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
4311 enBTRCoreDeviceType lenBTRCoreDevTy = enBTRCoreUnknown;
4312 enBTRCoreDeviceClass lenBTRCoreDevCl = enBTRCore_DC_Unknown;
4314 BTRMGRLOG_WARN (
"Its already streaming. lets Switch\n");
4317 BTRMGRLOG_DEBUG (
"Status = %d\t Device Type = %d\t Device Class = %x\n", lenBtrCoreRet, lenBTRCoreDevTy, lenBTRCoreDevCl);
4319 if ((lenBTRCoreDevTy == enBTRCoreSpeakers) || (lenBTRCoreDevTy == enBTRCoreHeadSet)) {
4321 if (btrMgr_SwitchCastingAudio_AC(aenCurrentSoType) != eBTRMgrSuccess) {
4322 gstBTRMgrStreamingInfo.tBTRMgrSoType = lenCurrentSoType;
4323 BTRMGRLOG_ERROR (
"This device is being Connected n Playing. Failed to switch to %d\n", aenCurrentSoType);
4324 BTRMGRLOG_ERROR (
"Failed to switch streaming on the current device. Streaming %d\n", gstBTRMgrStreamingInfo.tBTRMgrSoType);
4325 if (btrMgr_SwitchCastingAudio_AC(gstBTRMgrStreamingInfo.tBTRMgrSoType) == eBTRMgrSuccess) {
4326 BTRMGRLOG_WARN (
"Streaming on the current device. Streaming %d\n", gstBTRMgrStreamingInfo.tBTRMgrSoType);
4329 return BTRMGR_RESULT_GENERIC_FAILURE;
4335 return lenBtrMgrResult;
4340 unsigned char aui8AdapterIdx,
4341 BTRMgrDeviceHandle ahBTRMgrDevHdl,
4347 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
4348 enBTRCoreDeviceType lenBtrCoreDevType = enBTRCoreUnknown;
4352 int i32DeviceFD = 0;
4353 int i32DeviceReadMTU = 0;
4354 int i32DeviceWriteMTU = 0;
4355 unsigned int ui32deviceDelay = 0xFFFFu;
4356 eBTRCoreDevMediaType lenBtrCoreDevInMType = eBTRCoreDevMediaTypeUnknown;
4357 void* lpstBtrCoreDevInMCodecInfo = NULL;
4359 if (!ghBTRCoreHdl) {
4360 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
4361 return BTRMGR_RESULT_INIT_FAILED;
4364 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!ahBTRMgrDevHdl)) {
4365 BTRMGRLOG_ERROR (
"Input is invalid\n");
4366 return BTRMGR_RESULT_INVALID_INPUT;
4369 if (ghBTRMgrDevHdlCurStreaming == ahBTRMgrDevHdl) {
4371 if (gMediaPlaybackStPrev == BTRMGR_EVENT_MEDIA_TRACK_STOPPED) {
4372 BTRMGRLOG_DEBUG (
"Starting Media Playback.\n");
4373 lenBtrMgrResult =
BTRMGR_MediaControl (aui8AdapterIdx, ahBTRMgrDevHdl, BTRMGR_MEDIA_CTRL_PLAY);
4375 else if (gMediaPlaybackStPrev == BTRMGR_EVENT_MEDIA_TRACK_PAUSED) {
4376 BTRMGRLOG_DEBUG (
"Resuming Media Playback.\n");
4377 lenBtrMgrResult =
BTRMGR_MediaControl (aui8AdapterIdx, ahBTRMgrDevHdl, BTRMGR_MEDIA_CTRL_PLAY);
4380 BTRMGRLOG_WARN (
"Its already streaming-in in this device.. Check the volume :)\n");
4383 if (lenBtrMgrResult != BTRMGR_RESULT_SUCCESS) {
4384 BTRMGRLOG_ERROR (
"Failed to perform Media Control!\n");
4387 return lenBtrMgrResult;
4391 if ((ghBTRMgrDevHdlCurStreaming != 0) && (ghBTRMgrDevHdlCurStreaming != ahBTRMgrDevHdl)) {
4392 enBTRCoreDeviceType lenBTRCoreDevTy = enBTRCoreUnknown;
4393 enBTRCoreDeviceClass lenBTRCoreDevCl = enBTRCore_DC_Unknown;
4395 BTRMGRLOG_WARN (
"Its already streaming in. lets stop this and start on other device \n");
4398 BTRMGRLOG_DEBUG (
"Status = %d\t Device Type = %d\t Device Class = %x\n", lenBtrCoreRet, lenBTRCoreDevTy, lenBTRCoreDevCl);
4400 if ((lenBTRCoreDevTy == enBTRCoreSpeakers) || (lenBTRCoreDevTy == enBTRCoreHeadSet)) {
4403 BTRMGRLOG_ERROR (
"This device is being Connected n Playing. Failed to stop Playback.-Out\n");
4404 BTRMGRLOG_ERROR (
"Failed to stop streaming at the current device..\n");
4405 return lenBtrMgrResult;
4408 else if ((lenBTRCoreDevTy == enBTRCoreMobileAudioIn) || (lenBTRCoreDevTy == enBTRCorePCAudioIn)) {
4411 BTRMGRLOG_ERROR (
"This device is being Connected n Playing. Failed to stop Playback.-In\n");
4412 BTRMGRLOG_ERROR (
"Failed to stop streaming at the current device..\n");
4413 return lenBtrMgrResult;
4419 memset(&listOfPDevices, 0,
sizeof(listOfPDevices));
4421 BTRMGRLOG_ERROR (
"Failed to get the paired devices list\n");
4422 return BTRMGR_RESULT_GENERIC_FAILURE;
4425 if (!listOfPDevices.numberOfDevices) {
4426 BTRMGRLOG_ERROR (
"No device is paired yet; Will not be able to play at this moment\n");
4427 return BTRMGR_RESULT_GENERIC_FAILURE;
4431 for (i = 0; i < listOfPDevices.numberOfDevices; i++) {
4432 if (ahBTRMgrDevHdl == listOfPDevices.devices[i].tDeviceId) {
4439 BTRMGRLOG_ERROR (
"Failed to find this device in the paired devices list\n");
4440 return BTRMGR_RESULT_GENERIC_FAILURE;
4444 lenBtrMgrDevType = btrMgr_MapDeviceTypeFromCore(listOfPDevices.devices[i].enDeviceType);
4445 if (lenBtrMgrDevType == BTRMGR_DEVICE_TYPE_SMARTPHONE) {
4446 lenBtrCoreDevType = enBTRCoreMobileAudioIn;
4448 else if (lenBtrMgrDevType == BTRMGR_DEVICE_TYPE_TABLET) {
4449 lenBtrCoreDevType = enBTRCorePCAudioIn;
4451 if (!gIsAudioInEnabled && ((lenBtrCoreDevType == enBTRCoreMobileAudioIn) || (lenBtrCoreDevType == enBTRCorePCAudioIn))) {
4452 BTRMGRLOG_WARN (
"StreamingIn Rejected - BTR AudioIn is currently Disabled!\n");
4453 return BTRMGR_RESULT_GENERIC_FAILURE;
4457 if (!listOfPDevices.devices[i].bDeviceConnected || (ghBTRMgrDevHdlCurStreaming != listOfPDevices.devices[i].tDeviceId)) {
4458 if ((lenBtrMgrRet = btrMgr_ConnectToDevice(aui8AdapterIdx, listOfPDevices.devices[i].tDeviceId, connectAs, 0, 1)) == eBTRMgrSuccess) {
4459 gMediaPlaybackStPrev = BTRMGR_EVENT_MEDIA_TRACK_STOPPED;
4462 BTRMGRLOG_ERROR (
"Failure\n");
4463 return BTRMGR_RESULT_GENERIC_FAILURE;
4468 if (gstBtrCoreDevMediaInfo.pstBtrCoreDevMCodecInfo) {
4469 free (gstBtrCoreDevMediaInfo.pstBtrCoreDevMCodecInfo);
4470 gstBtrCoreDevMediaInfo.pstBtrCoreDevMCodecInfo = NULL;
4477 lenBtrCoreRet =
BTRCore_GetDeviceMediaInfo(ghBTRCoreHdl, listOfPDevices.devices[i].tDeviceId, lenBtrCoreDevType, &gstBtrCoreDevMediaInfo);
4478 if (lenBtrCoreRet == enBTRCoreSuccess) {
4479 lenBtrCoreDevInMType = gstBtrCoreDevMediaInfo.eBtrCoreDevMType;
4480 lpstBtrCoreDevInMCodecInfo= gstBtrCoreDevMediaInfo.pstBtrCoreDevMCodecInfo;
4482 if (lenBtrCoreDevInMType == eBTRCoreDevMediaTypeSBC) {
4485 BTRMGRLOG_INFO (
"DevMedInfo SFreq = %d\n", lpstBtrCoreDevMSbcInfo->ui32DevMSFreq);
4486 BTRMGRLOG_INFO (
"DevMedInfo AChan = %d\n", lpstBtrCoreDevMSbcInfo->eDevMAChan);
4487 BTRMGRLOG_INFO (
"DevMedInfo SbcAllocMethod = %d\n", lpstBtrCoreDevMSbcInfo->ui8DevMSbcAllocMethod);
4488 BTRMGRLOG_INFO (
"DevMedInfo SbcSubbands = %d\n", lpstBtrCoreDevMSbcInfo->ui8DevMSbcSubbands);
4489 BTRMGRLOG_INFO (
"DevMedInfo SbcBlockLength = %d\n", lpstBtrCoreDevMSbcInfo->ui8DevMSbcBlockLength);
4490 BTRMGRLOG_INFO (
"DevMedInfo SbcMinBitpool = %d\n", lpstBtrCoreDevMSbcInfo->ui8DevMSbcMinBitpool);
4491 BTRMGRLOG_INFO (
"DevMedInfo SbcMaxBitpool = %d\n", lpstBtrCoreDevMSbcInfo->ui8DevMSbcMaxBitpool);
4492 BTRMGRLOG_INFO (
"DevMedInfo SbcFrameLen = %d\n", lpstBtrCoreDevMSbcInfo->ui16DevMSbcFrameLen);
4493 BTRMGRLOG_DEBUG(
"DevMedInfo SbcBitrate = %d\n", lpstBtrCoreDevMSbcInfo->ui16DevMSbcBitrate);
4495 else if (lenBtrCoreDevInMType == eBTRCoreDevMediaTypeAAC) {
4498 BTRMGRLOG_INFO (
"DevMedInfo SFreq = %d\n", lpstBtrCoreDevMAacInfo->ui32DevMSFreq);
4499 BTRMGRLOG_INFO (
"DevMedInfo AChan = %d\n", lpstBtrCoreDevMAacInfo->eDevMAChan);
4500 BTRMGRLOG_INFO (
"DevMedInfo AacMpegCrc = %d\n", lpstBtrCoreDevMAacInfo->ui8DevMMpegCrc);
4501 BTRMGRLOG_INFO (
"DevMedInfo AacMpegLayer = %d\n", lpstBtrCoreDevMAacInfo->ui8DevMMpegLayer);
4502 BTRMGRLOG_INFO (
"DevMedInfo AacMpegMpf = %d\n", lpstBtrCoreDevMAacInfo->ui8DevMMpegMpf);
4503 BTRMGRLOG_INFO (
"DevMedInfo AacMpegRfa = %d\n", lpstBtrCoreDevMAacInfo->ui8DevMMpegRfa);
4504 BTRMGRLOG_INFO (
"DevMedInfo AacMpegFrmLen = %d\n", lpstBtrCoreDevMAacInfo->ui16DevMMpegFrameLen);
4505 BTRMGRLOG_INFO (
"DevMedInfo AacMpegBitrate = %d\n", lpstBtrCoreDevMAacInfo->ui16DevMMpegBitrate);
4510 lenBtrCoreRet =
BTRCore_AcquireDeviceDataPath (ghBTRCoreHdl, listOfPDevices.devices[i].tDeviceId, lenBtrCoreDevType, &i32DeviceFD, &i32DeviceReadMTU, &i32DeviceWriteMTU, &ui32deviceDelay);
4511 if (lenBtrCoreRet == enBTRCoreSuccess) {
4512 if ((lenBtrMgrRet = btrMgr_StartReceivingAudio(i32DeviceFD, i32DeviceReadMTU, ui32deviceDelay, lenBtrCoreDevInMType, lpstBtrCoreDevInMCodecInfo)) == eBTRMgrSuccess) {
4513 ghBTRMgrDevHdlCurStreaming = listOfPDevices.devices[i].tDeviceId;
4514 BTRMGRLOG_INFO(
"Audio Reception Started.. Enjoy the show..! :)\n");
4517 BTRMGRLOG_ERROR (
"Failed to read audio now\n");
4518 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
4522 BTRMGRLOG_ERROR (
"Failed to get Device Data Path. So Will not be able to stream now\n");
4523 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
4526 return lenBtrMgrResult;
4531 unsigned char aui8AdapterIdx,
4532 BTRMgrDeviceHandle ahBTRMgrDevHdl
4537 if (!ghBTRCoreHdl) {
4538 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
4539 return BTRMGR_RESULT_INIT_FAILED;
4542 if (aui8AdapterIdx > btrMgr_GetAdapterCnt()) {
4543 BTRMGRLOG_ERROR (
"Input is invalid\n");
4544 return BTRMGR_RESULT_INVALID_INPUT;
4548 if ((ghBTRMgrDevHdlCurStreaming != ahBTRMgrDevHdl) && (ghBTRMgrDevHdlLastConnected != ahBTRMgrDevHdl)) {
4549 return BTRMGR_RESULT_INVALID_INPUT;
4553 if ((lenBtrMgrRet = btrMgr_StopReceivingAudio()) != eBTRMgrSuccess) {
4554 BTRMGRLOG_ERROR (
"btrMgr_StopReceivingAudio = %d\n", lenBtrMgrRet);
4560 ghBTRMgrDevHdlCurStreaming = 0;
4562 if (gstBtrCoreDevMediaInfo.pstBtrCoreDevMCodecInfo) {
4563 free (gstBtrCoreDevMediaInfo.pstBtrCoreDevMCodecInfo);
4564 gstBtrCoreDevMediaInfo.pstBtrCoreDevMCodecInfo = NULL;
4570 return lenBtrMgrResult;
4575 unsigned char aui8AdapterIdx,
4576 unsigned char* pStreamingStatus
4580 if (!ghBTRCoreHdl) {
4581 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
4582 return BTRMGR_RESULT_INIT_FAILED;
4585 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!pStreamingStatus)) {
4586 BTRMGRLOG_ERROR (
"Input is invalid\n");
4587 return BTRMGR_RESULT_INVALID_INPUT;
4591 if (ghBTRMgrDevHdlCurStreaming)
4592 *pStreamingStatus = 1;
4594 *pStreamingStatus = 0;
4596 BTRMGRLOG_INFO (
"BTRMGR_IsAudioStreamingIn: Returned status Successfully\n");
4598 return lenBtrMgrRet;
4603 unsigned char aui8AdapterIdx,
4608 if (!ghBTRCoreHdl) {
4609 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
4610 return BTRMGR_RESULT_INIT_FAILED;
4613 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || (!apstBTRMgrEvtRsp)) {
4614 BTRMGRLOG_ERROR (
"Input is invalid\n");
4615 return BTRMGR_RESULT_INVALID_INPUT;
4619 switch (apstBTRMgrEvtRsp->m_eventType) {
4620 case BTRMGR_EVENT_DEVICE_OUT_OF_RANGE:
4622 case BTRMGR_EVENT_DEVICE_DISCOVERY_UPDATE:
4624 case BTRMGR_EVENT_DEVICE_DISCOVERY_COMPLETE:
4626 case BTRMGR_EVENT_DEVICE_PAIRING_COMPLETE:
4628 case BTRMGR_EVENT_DEVICE_UNPAIRING_COMPLETE:
4630 case BTRMGR_EVENT_DEVICE_CONNECTION_COMPLETE:
4632 case BTRMGR_EVENT_DEVICE_DISCONNECT_COMPLETE:
4634 case BTRMGR_EVENT_DEVICE_PAIRING_FAILED:
4636 case BTRMGR_EVENT_DEVICE_UNPAIRING_FAILED:
4638 case BTRMGR_EVENT_DEVICE_CONNECTION_FAILED:
4640 case BTRMGR_EVENT_DEVICE_DISCONNECT_FAILED:
4642 case BTRMGR_EVENT_RECEIVED_EXTERNAL_PAIR_REQUEST:
4643 gEventRespReceived = 1;
4644 if (apstBTRMgrEvtRsp->m_eventResp) {
4645 gAcceptConnection = 1;
4648 case BTRMGR_EVENT_RECEIVED_EXTERNAL_CONNECT_REQUEST:
4649 gEventRespReceived = 1;
4650 gAcceptConnection = 0;
4651 if (apstBTRMgrEvtRsp->m_eventResp) {
4652 gAcceptConnection = 1;
4655 case BTRMGR_EVENT_RECEIVED_EXTERNAL_PLAYBACK_REQUEST:
4656 if (apstBTRMgrEvtRsp->m_eventResp && apstBTRMgrEvtRsp->m_deviceHandle) {
4661 case BTRMGR_EVENT_DEVICE_FOUND:
4663 case BTRMGR_EVENT_DEVICE_OP_INFORMATION:
4664 if (apstBTRMgrEvtRsp->m_eventResp) {
4665 strncpy(gLeReadOpResponse, apstBTRMgrEvtRsp->m_writeData, BTRMGR_MAX_DEV_OP_DATA_LEN - 1);
4666 gEventRespReceived = 1;
4669 case BTRMGR_EVENT_MAX:
4675 return lenBtrMgrResult;
4681 unsigned char aui8AdapterIdx,
4682 BTRMgrDeviceHandle ahBTRMgrDevHdl,
4686 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
4687 enBTRCoreDeviceType lenBtrCoreDevTy = enBTRCoreUnknown;
4688 enBTRCoreDeviceClass lenBtrCoreDevCl = enBTRCore_DC_Unknown;
4692 if (!ghBTRCoreHdl) {
4693 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
4694 return BTRMGR_RESULT_INIT_FAILED;
4697 if (aui8AdapterIdx > btrMgr_GetAdapterCnt()) {
4698 BTRMGRLOG_ERROR (
"Input is invalid\n");
4699 return BTRMGR_RESULT_INVALID_INPUT;
4702 if (!btrMgr_IsDevConnected(ahBTRMgrDevHdl)) {
4703 BTRMGRLOG_ERROR (
"Device Handle(%lld) not connected\n", ahBTRMgrDevHdl);
4704 return BTRMGR_RESULT_INVALID_INPUT;
4708 BTRMGRLOG_DEBUG (
"Status = %d\t Device Type = %d\t Device Class = %x\n", lenBtrCoreRet, lenBtrCoreDevTy, lenBtrCoreDevCl);
4711 lstMediaDeviceStatus.m_ui8mediaDevVolume= BTRMGR_SO_MAX_VOLUME;
4712 lstMediaDeviceStatus.m_enmediaCtrlCmd = mediaCtrlCmd;
4713 if (mediaCtrlCmd == BTRMGR_MEDIA_CTRL_MUTE)
4714 lstMediaDeviceStatus.m_ui8mediaDevMute = 1;
4715 else if (mediaCtrlCmd == BTRMGR_MEDIA_CTRL_UNMUTE)
4716 lstMediaDeviceStatus.m_ui8mediaDevMute = 0;
4718 lstMediaDeviceStatus.m_ui8mediaDevMute = BTRMGR_SO_MAX_VOLUME;
4721 if (btrMgr_MediaControl(aui8AdapterIdx, ahBTRMgrDevHdl, &lstMediaDeviceStatus, lenBtrCoreDevTy, lenBtrCoreDevCl, NULL) != eBTRMgrSuccess)
4722 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
4724 return lenBtrMgrResult;
4728 btrMgr_MediaControl (
4729 unsigned char aui8AdapterIdx,
4730 BTRMgrDeviceHandle ahBTRMgrDevHdl,
4732 enBTRCoreDeviceType aenBtrCoreDevTy,
4733 enBTRCoreDeviceClass aenBtrCoreDevCl,
4736 enBTRCoreMediaCtrl lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlUnknown;
4739 switch (apstMediaDeviceStatus->m_enmediaCtrlCmd) {
4740 case BTRMGR_MEDIA_CTRL_PLAY:
4741 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlPlay;
4743 case BTRMGR_MEDIA_CTRL_PAUSE:
4744 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlPause;
4746 case BTRMGR_MEDIA_CTRL_STOP:
4747 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlStop;
4749 case BTRMGR_MEDIA_CTRL_NEXT:
4750 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlNext;
4752 case BTRMGR_MEDIA_CTRL_PREVIOUS:
4753 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlPrevious;
4755 case BTRMGR_MEDIA_CTRL_FASTFORWARD:
4756 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlFastForward;
4758 case BTRMGR_MEDIA_CTRL_REWIND:
4759 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlRewind;
4761 case BTRMGR_MEDIA_CTRL_VOLUMEUP:
4762 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlVolumeUp;
4764 case BTRMGR_MEDIA_CTRL_VOLUMEDOWN:
4765 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlVolumeDown;
4767 case BTRMGR_MEDIA_CTRL_EQUALIZER_OFF:
4768 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlEqlzrOff;
4770 case BTRMGR_MEDIA_CTRL_EQUALIZER_ON:
4771 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlEqlzrOn;
4773 case BTRMGR_MEDIA_CTRL_SHUFFLE_OFF:
4774 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlShflOff;
4776 case BTRMGR_MEDIA_CTRL_SHUFFLE_ALLTRACKS:
4777 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlShflAllTracks;
4779 case BTRMGR_MEDIA_CTRL_SHUFFLE_GROUP:
4780 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlShflGroup;
4782 case BTRMGR_MEDIA_CTRL_REPEAT_OFF:
4783 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlRptOff;
4785 case BTRMGR_MEDIA_CTRL_REPEAT_SINGLETRACK:
4786 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlRptSingleTrack;
4788 case BTRMGR_MEDIA_CTRL_REPEAT_ALLTRACKS:
4789 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlRptAllTracks;
4791 case BTRMGR_MEDIA_CTRL_REPEAT_GROUP:
4792 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlRptGroup;
4794 case BTRMGR_MEDIA_CTRL_MUTE:
4795 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlMute;
4797 case BTRMGR_MEDIA_CTRL_UNMUTE:
4798 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlUnMute;
4800 case BTRMGR_MEDIA_CTRL_UNKNOWN:
4802 lenBTRCoreMediaCtrl = enBTRCoreMediaCtrlUnknown;
4806 if (lenBTRCoreMediaCtrl != enBTRCoreMediaCtrlUnknown) {
4808 if ((aenBtrCoreDevTy == enBTRCoreSpeakers) || (aenBtrCoreDevTy == enBTRCoreHeadSet)) {
4809 if ((ghBTRMgrDevHdlCurStreaming == ahBTRMgrDevHdl) ) {
4812 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
4814 switch (apstMediaDeviceStatus->m_enmediaCtrlCmd) {
4815 case BTRMGR_MEDIA_CTRL_VOLUMEUP:
4816 if (enBTRCoreSuccess ==
BTRCore_MediaControl(ghBTRCoreHdl, ahBTRMgrDevHdl, aenBtrCoreDevTy, lenBTRCoreMediaCtrl, apstBtrCoreMediaCData)) {
4817 BTRMGRLOG_INFO (
"Media Control Command BTRMGR_MEDIA_CTRL_VOLUMEUP for %llu Success for streamout!!!\n", ahBTRMgrDevHdl);
4818 lenBtrMgrRet = eBTRMgrSuccess;
4820 else if (apstMediaDeviceStatus->m_ui8mediaDevMute == BTRMGR_SO_MAX_VOLUME) {
4821 unsigned char ui8CurVolume = 0;
4824 BTRMGRLOG_DEBUG (
"ui8CurVolume %d \n ",ui8CurVolume);
4826 if (apstBtrCoreMediaCData != NULL) {
4827 ui8CurVolume = apstBtrCoreMediaCData->m_mediaAbsoluteVolume;
4830 if(ui8CurVolume < 5)
4832 else if (ui8CurVolume <= 245 && ui8CurVolume >= 5)
4833 ui8CurVolume = ui8CurVolume + 10;
4835 ui8CurVolume = BTRMGR_SO_MAX_VOLUME;
4838 if ((lenBtrMgrRet =
BTRMgr_SO_SetVolume(gstBTRMgrStreamingInfo.hBTRMgrSoHdl, ui8CurVolume)) == eBTRMgrSuccess) {
4839 lstEventMessage.m_eventType = BTRMGR_EVENT_DEVICE_MEDIA_STATUS;
4840 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_ui8mediaDevVolume = ui8CurVolume;
4841 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_ui8mediaDevMute = (ui8CurVolume) ? FALSE :
TRUE;
4842 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_enmediaCtrlCmd = BTRMGR_MEDIA_CTRL_VOLUMEUP;
4843 BTRMGRLOG_DEBUG (
" Volume Up %d \n", ui8CurVolume);
4844 #ifdef RDKTV_PERSIST_VOLUME_SKY
4845 btrMgr_SetLastVolume(0, ui8CurVolume);
4851 case BTRMGR_MEDIA_CTRL_VOLUMEDOWN:
4852 if (enBTRCoreSuccess ==
BTRCore_MediaControl(ghBTRCoreHdl, ahBTRMgrDevHdl, aenBtrCoreDevTy, lenBTRCoreMediaCtrl, apstBtrCoreMediaCData)) {
4853 BTRMGRLOG_INFO (
"Media Control Command BTRMGR_MEDIA_CTRL_VOLUMEDOWN for %llu Success for streamout!!!\n", ahBTRMgrDevHdl);
4854 lenBtrMgrRet = eBTRMgrSuccess;
4856 else if (apstMediaDeviceStatus->m_ui8mediaDevMute == BTRMGR_SO_MAX_VOLUME) {
4857 unsigned char ui8CurVolume = 0;
4860 BTRMGRLOG_DEBUG (
"ui8CurVolume %d \n ",ui8CurVolume);
4862 if (apstBtrCoreMediaCData != NULL) {
4863 ui8CurVolume = apstBtrCoreMediaCData->m_mediaAbsoluteVolume;
4866 if (ui8CurVolume > 250)
4868 else if (ui8CurVolume <= 250 && ui8CurVolume >= 10)
4869 ui8CurVolume = ui8CurVolume - 10;
4876 if (lenBtrMgrRet == eBTRMgrSuccess) {
4877 lstEventMessage.m_eventType = BTRMGR_EVENT_DEVICE_MEDIA_STATUS;
4878 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_ui8mediaDevVolume= ui8CurVolume;
4879 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_ui8mediaDevMute = (ui8CurVolume) ? FALSE :
TRUE;
4880 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_enmediaCtrlCmd = BTRMGR_MEDIA_CTRL_VOLUMEDOWN;
4881 BTRMGRLOG_DEBUG (
" Volume Down %d \n", ui8CurVolume);
4882 #ifdef RDKTV_PERSIST_VOLUME_SKY
4883 btrMgr_SetLastVolume(0, ui8CurVolume);
4889 case BTRMGR_MEDIA_CTRL_MUTE:
4890 if ((lenBtrMgrRet =
BTRMgr_SO_SetMute(gstBTRMgrStreamingInfo.hBTRMgrSoHdl,
TRUE)) == eBTRMgrSuccess) {
4891 unsigned char ui8CurVolume = 0;
4894 lstEventMessage.m_eventType = BTRMGR_EVENT_DEVICE_MEDIA_STATUS;
4895 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_ui8mediaDevVolume= ui8CurVolume;
4896 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_ui8mediaDevMute =
TRUE;
4897 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_enmediaCtrlCmd = BTRMGR_MEDIA_CTRL_MUTE;
4898 BTRMGRLOG_DEBUG (
" Mute set success \n");
4899 #ifdef RDKTV_PERSIST_VOLUME_SKY
4900 btrMgr_SetLastMuteState(0,
TRUE);
4905 case BTRMGR_MEDIA_CTRL_UNMUTE:
4906 if ((lenBtrMgrRet =
BTRMgr_SO_SetMute(gstBTRMgrStreamingInfo.hBTRMgrSoHdl, FALSE)) == eBTRMgrSuccess) {
4907 unsigned char ui8CurVolume = 0;
4910 lstEventMessage.m_eventType = BTRMGR_EVENT_DEVICE_MEDIA_STATUS;
4911 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_ui8mediaDevVolume= ui8CurVolume;
4912 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_ui8mediaDevMute = FALSE;
4913 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_enmediaCtrlCmd = BTRMGR_MEDIA_CTRL_UNMUTE;
4914 BTRMGRLOG_DEBUG (
" UnMute set success \n");
4915 #ifdef RDKTV_PERSIST_VOLUME_SKY
4916 btrMgr_SetLastMuteState(0, FALSE);
4922 if (enBTRCoreSuccess ==
BTRCore_MediaControl(ghBTRCoreHdl, ahBTRMgrDevHdl, aenBtrCoreDevTy, lenBTRCoreMediaCtrl, apstBtrCoreMediaCData)) {
4923 lenBtrMgrRet = eBTRMgrSuccess;
4926 BTRMGRLOG_ERROR (
"Media Control Command for %llu Failed for streamout!!!\n", ahBTRMgrDevHdl);
4927 lenBtrMgrRet = eBTRMgrFailure;
4931 if ((lenBtrMgrRet == eBTRMgrSuccess) && (gfpcBBTRMgrEventOut)) {
4932 lstEventMessage.m_mediaInfo.m_deviceHandle = ahBTRMgrDevHdl;
4933 lstEventMessage.m_mediaInfo.m_deviceType = btrMgr_MapDeviceTypeFromCore(aenBtrCoreDevCl);
4934 for (
int j = 0; j <= gListOfPairedDevices.m_numOfDevices; j++) {
4935 if (ahBTRMgrDevHdl == gListOfPairedDevices.m_deviceProperty[j].m_deviceHandle) {
4936 strncpy(lstEventMessage.m_mediaInfo.m_name, gListOfPairedDevices.m_deviceProperty[j].m_name, BTRMGR_NAME_LEN_MAX -1);
4941 gfpcBBTRMgrEventOut(lstEventMessage);
4945 BTRMGRLOG_ERROR (
"pstBtrMgrSoHdl Null or streaming out not started \n");
4946 lenBtrMgrRet = eBTRMgrFailure;
4950 if (enBTRCoreSuccess !=
BTRCore_MediaControl(ghBTRCoreHdl, ahBTRMgrDevHdl, aenBtrCoreDevTy, lenBTRCoreMediaCtrl, apstBtrCoreMediaCData)) {
4951 BTRMGRLOG_ERROR (
"Media Control Command for %llu Failed!!!\n", ahBTRMgrDevHdl);
4952 lenBtrMgrRet = eBTRMgrFailure;
4957 BTRMGRLOG_ERROR (
"Media Control Command for %llu Unknown!!!\n", ahBTRMgrDevHdl);
4958 lenBtrMgrRet = eBTRMgrFailure;
4961 return lenBtrMgrRet;
4967 unsigned char aui8AdapterIdx,
4968 BTRMgrDeviceHandle ahBTRMgrDevHdl,
4970 unsigned char* pui8Volume,
4971 unsigned char* pui8Mute
4975 eBTRMgrRet lenBtrMgrPersistRet = eBTRMgrFailure;
4976 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
4977 enBTRCoreDeviceType lenBtrCoreDevTy = enBTRCoreUnknown;
4978 enBTRCoreDeviceClass lenBtrCoreDevCl = enBTRCore_DC_Unknown;
4979 unsigned char lui8CurVolume = 0;
4980 gboolean lbCurMute = FALSE;
4982 #ifdef RDKTV_PERSIST_VOLUME_SKY
4983 unsigned char lui8PersistedVolume = 0;
4984 gboolean lbPersistedMute = FALSE;
4987 if (!ghBTRCoreHdl) {
4988 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
4989 return BTRMGR_RESULT_INIT_FAILED;
4992 if (aui8AdapterIdx > btrMgr_GetAdapterCnt()) {
4993 BTRMGRLOG_ERROR (
"Input is invalid\n");
4994 return BTRMGR_RESULT_INVALID_INPUT;
4997 if (!btrMgr_IsDevConnected(ahBTRMgrDevHdl) || (gstBTRMgrStreamingInfo.hBTRMgrSoHdl == NULL)) {
4998 BTRMGRLOG_ERROR (
"Device Handle(%lld) not connected/streaming\n", ahBTRMgrDevHdl);
4999 return BTRMGR_RESULT_INVALID_INPUT;
5003 if (deviceOpType != BTRMGR_DEVICE_OP_TYPE_AUDIO_OUTPUT) {
5004 BTRMGRLOG_ERROR (
"Device Handle(%lld) not audio out\n", ahBTRMgrDevHdl);
5005 return BTRMGR_RESULT_INVALID_INPUT;
5009 BTRMGRLOG_DEBUG (
"Status = %d\t Device Type = %d\t Device Class = %x\n", lenBtrCoreRet, lenBtrCoreDevTy, lenBtrCoreDevCl);
5011 #ifdef RDKTV_PERSIST_VOLUME_SKY
5012 if ((lenBtrMgrPersistRet = btrMgr_GetLastVolume(0, &lui8PersistedVolume)) == eBTRMgrSuccess) {
5013 lui8CurVolume = lui8PersistedVolume;
5016 BTRMGRLOG_WARN (
"Device Handle(%lld) Persist audio out volume get fail\n", ahBTRMgrDevHdl);
5020 if ((lenBtrMgrPersistRet == eBTRMgrFailure) &&
5021 ((lenBtrMgrRet =
BTRMgr_SO_GetVolume(gstBTRMgrStreamingInfo.hBTRMgrSoHdl,&lui8CurVolume)) != eBTRMgrSuccess)) {
5022 BTRMGRLOG_ERROR (
"Device Handle(%lld) audio out volume get fail\n", ahBTRMgrDevHdl);
5023 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
5026 #ifdef RDKTV_PERSIST_VOLUME_SKY
5027 if ((lenBtrMgrPersistRet = btrMgr_GetLastMuteState(0, &lbPersistedMute)) == eBTRMgrSuccess) {
5028 lbCurMute = lbPersistedMute;
5031 BTRMGRLOG_ERROR (
"Device Handle(%lld) Persist audio out mute get fail\n", ahBTRMgrDevHdl);
5035 if ((lenBtrMgrPersistRet == eBTRMgrFailure) &&
5036 ((lenBtrMgrRet =
BTRMgr_SO_GetMute(gstBTRMgrStreamingInfo.hBTRMgrSoHdl,&lbCurMute)) != eBTRMgrSuccess)) {
5037 BTRMGRLOG_ERROR (
"Device Handle(%lld) audio out mute get fail\n", ahBTRMgrDevHdl);
5038 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
5041 if (lenBtrMgrRet == eBTRMgrSuccess) {
5042 *pui8Volume = lui8CurVolume;
5043 *pui8Mute = (
unsigned char)lbCurMute;
5046 return lenBtrMgrResult;
5052 unsigned char aui8AdapterIdx,
5053 BTRMgrDeviceHandle ahBTRMgrDevHdl,
5055 unsigned char aui8Volume,
5056 unsigned char aui8Mute
5060 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
5061 enBTRCoreDeviceType lenBtrCoreDevTy = enBTRCoreUnknown;
5062 enBTRCoreDeviceClass lenBtrCoreDevCl = enBTRCore_DC_Unknown;
5063 unsigned char lui8Volume = BTRMGR_SO_MAX_VOLUME - 1;
5064 gboolean lbMuted = FALSE;
5065 gboolean abMuted = FALSE;
5071 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
5072 if (!ghBTRCoreHdl) {
5073 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
5074 return BTRMGR_RESULT_INIT_FAILED;
5077 if (aui8AdapterIdx > btrMgr_GetAdapterCnt() || aui8Mute > 1) {
5078 BTRMGRLOG_ERROR (
"Input is invalid\n");
5079 return BTRMGR_RESULT_INVALID_INPUT;
5082 if (!btrMgr_IsDevConnected(ahBTRMgrDevHdl) || (gstBTRMgrStreamingInfo.hBTRMgrSoHdl == NULL)) {
5083 BTRMGRLOG_ERROR (
"Device Handle(%lld) not connected/streaming\n", ahBTRMgrDevHdl);
5084 return BTRMGR_RESULT_INVALID_INPUT;
5088 if (deviceOpType != BTRMGR_DEVICE_OP_TYPE_AUDIO_OUTPUT) {
5089 BTRMGRLOG_ERROR (
"Device Handle(%lld) not audio out\n", ahBTRMgrDevHdl);
5090 return BTRMGR_RESULT_INVALID_INPUT;
5094 BTRMGRLOG_DEBUG (
"Status = %d\t Device Type = %d\t Device Class = %x\n", lenBtrCoreRet, lenBtrCoreDevTy, lenBtrCoreDevCl);
5096 #ifdef RDKTV_PERSIST_VOLUME_SKY
5097 btrMgr_GetLastVolume(0, &lui8Volume);
5098 btrMgr_GetLastMuteState(0, &lbMuted);
5101 lstMediaDeviceStatus.m_enmediaCtrlCmd = BTRMGR_MEDIA_CTRL_UNKNOWN;
5102 lstMediaDeviceStatus.m_ui8mediaDevVolume= aui8Volume;
5103 lstMediaDeviceStatus.m_ui8mediaDevMute = aui8Mute;
5105 lstBTRCoreMediaCData.m_mediaAbsoluteVolume = aui8Volume;
5107 if (aui8Volume > lui8Volume)
5108 lstMediaDeviceStatus.m_enmediaCtrlCmd = BTRMGR_MEDIA_CTRL_VOLUMEUP;
5109 else if (aui8Volume < lui8Volume)
5110 lstMediaDeviceStatus.m_enmediaCtrlCmd = BTRMGR_MEDIA_CTRL_VOLUMEDOWN;
5113 if ((lenBtrMgrRet = btrMgr_MediaControl(aui8AdapterIdx, ahBTRMgrDevHdl, &lstMediaDeviceStatus, lenBtrCoreDevTy, lenBtrCoreDevCl, &lstBTRCoreMediaCData)) == eBTRMgrSuccess) {
5114 BTRMGRLOG_INFO (
"Device Handle(%lld) AVRCP audio out volume Set Success\n", ahBTRMgrDevHdl);
5115 if (
BTRMgr_SO_SetVolume(gstBTRMgrStreamingInfo.hBTRMgrSoHdl, BTRMGR_SO_MAX_VOLUME) != eBTRMgrSuccess) {
5116 BTRMGRLOG_ERROR (
"Device Handle(%lld) AVRCP audio-out SO volume Set fail\n", ahBTRMgrDevHdl);
5119 else if ((aui8Volume != lui8Volume) && ((lenBtrMgrRet =
BTRMgr_SO_SetVolume(gstBTRMgrStreamingInfo.hBTRMgrSoHdl, aui8Volume)) != eBTRMgrSuccess)) {
5120 BTRMGRLOG_ERROR (
"Device Handle(%lld) audio out volume Set fail\n", ahBTRMgrDevHdl);
5121 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
5124 #ifdef RDKTV_PERSIST_VOLUME_SKY
5125 if (lenBtrMgrRet == eBTRMgrSuccess)
5126 btrMgr_SetLastVolume(0, aui8Volume);
5129 abMuted = aui8Mute ?
TRUE : FALSE;
5130 if ((lenBtrMgrRet =
BTRMgr_SO_SetMute(gstBTRMgrStreamingInfo.hBTRMgrSoHdl, abMuted)) != eBTRMgrSuccess) {
5131 BTRMGRLOG_ERROR (
"Device Handle(%lld) not audio out mute set fail\n", ahBTRMgrDevHdl);
5132 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
5135 #ifdef RDKTV_PERSIST_VOLUME_SKY
5136 btrMgr_SetLastMuteState(0, abMuted);
5140 if ((lenBtrMgrResult == BTRMGR_RESULT_SUCCESS) && gfpcBBTRMgrEventOut) {
5141 lstEventMessage.m_eventType = BTRMGR_EVENT_DEVICE_MEDIA_STATUS;
5142 lstEventMessage.m_mediaInfo.m_deviceType = btrMgr_MapDeviceTypeFromCore(lenBtrCoreDevCl);
5143 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_ui8mediaDevVolume = aui8Volume;
5144 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_ui8mediaDevMute = aui8Mute;
5146 if ((abMuted != lbMuted) && abMuted)
5147 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_enmediaCtrlCmd = BTRMGR_MEDIA_CTRL_MUTE;
5148 else if ((abMuted != lbMuted) && !abMuted)
5149 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_enmediaCtrlCmd = BTRMGR_MEDIA_CTRL_UNMUTE;
5150 else if (aui8Volume > lui8Volume)
5151 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_enmediaCtrlCmd = BTRMGR_MEDIA_CTRL_VOLUMEUP;
5152 else if (aui8Volume < lui8Volume)
5153 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_enmediaCtrlCmd = BTRMGR_MEDIA_CTRL_VOLUMEDOWN;
5155 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_enmediaCtrlCmd = BTRMGR_MEDIA_CTRL_UNKNOWN;
5157 for (
int j = 0; j <= gListOfPairedDevices.m_numOfDevices; j++) {
5158 if (ahBTRMgrDevHdl == gListOfPairedDevices.m_deviceProperty[j].m_deviceHandle) {
5159 lstEventMessage.m_mediaInfo.m_deviceHandle = ahBTRMgrDevHdl;
5160 strncpy(lstEventMessage.m_mediaInfo.m_name, gListOfPairedDevices.m_deviceProperty[j].m_name, BTRMGR_NAME_LEN_MAX -1);
5165 gfpcBBTRMgrEventOut(lstEventMessage);
5168 return lenBtrMgrResult;
5173 unsigned char aui8AdapterIdx,
5174 BTRMgrDeviceHandle ahBTRMgrDevHdl,
5178 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
5179 enBTRCoreDeviceType lenBtrCoreDevTy = enBTRCoreUnknown;
5180 enBTRCoreDeviceClass lenBtrCoreDevCl = enBTRCore_DC_Unknown;
5183 if (!ghBTRCoreHdl) {
5184 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
5185 return BTRMGR_RESULT_INIT_FAILED;
5188 if (aui8AdapterIdx > btrMgr_GetAdapterCnt()) {
5189 BTRMGRLOG_ERROR (
"Input is invalid\n");
5190 return BTRMGR_RESULT_INVALID_INPUT;
5193 if (!btrMgr_IsDevConnected(ahBTRMgrDevHdl)) {
5194 BTRMGRLOG_ERROR (
"Device Handle(%lld) not connected\n", ahBTRMgrDevHdl);
5195 return BTRMGR_RESULT_INVALID_INPUT;
5199 BTRMGRLOG_DEBUG (
"Status = %d\t Device Type = %d\t Device Class = %x\n", lenBtrCoreRet, lenBtrCoreDevTy, lenBtrCoreDevCl);
5202 BTRMGRLOG_ERROR (
"Get Media Track Information for %llu Failed!!!\n", ahBTRMgrDevHdl);
5203 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
5206 return lenBtrMgrResult;
5211 unsigned char aui8AdapterIdx,
5212 BTRMgrDeviceHandle ahBTRMgrDevHdl,
5213 BTRMgrMediaElementHandle ahBTRMgrMedElementHdl,
5217 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
5218 enBTRCoreDeviceType lenBtrCoreDevTy = enBTRCoreUnknown;
5219 enBTRCoreDeviceClass lenBtrCoreDevCl = enBTRCore_DC_Unknown;
5222 if (!ghBTRCoreHdl) {
5223 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
5224 return BTRMGR_RESULT_INIT_FAILED;
5227 if (aui8AdapterIdx > btrMgr_GetAdapterCnt()) {
5228 BTRMGRLOG_ERROR (
"Input is invalid\n");
5229 return BTRMGR_RESULT_INVALID_INPUT;
5232 if (!btrMgr_IsDevConnected(ahBTRMgrDevHdl)) {
5233 BTRMGRLOG_ERROR (
"Device Handle(%lld) not connected\n", ahBTRMgrDevHdl);
5234 return BTRMGR_RESULT_INVALID_INPUT;
5238 BTRMGRLOG_DEBUG (
"Status = %d\t Device Type = %d\t Device Class = %x\n", lenBtrCoreRet, lenBtrCoreDevTy, lenBtrCoreDevCl);
5242 BTRMGRLOG_ERROR (
"Get Media Track Information for %llu Failed!!!\n", ahBTRMgrDevHdl);
5243 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
5246 return lenBtrMgrResult;
5252 unsigned char aui8AdapterIdx,
5253 BTRMgrDeviceHandle ahBTRMgrDevHdl,
5257 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
5258 enBTRCoreDeviceType lenBtrCoreDevTy = enBTRCoreUnknown;
5259 enBTRCoreDeviceClass lenBtrCoreDevCl = enBTRCore_DC_Unknown;
5262 if (!ghBTRCoreHdl) {
5263 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
5264 return BTRMGR_RESULT_INIT_FAILED;
5267 if (aui8AdapterIdx > btrMgr_GetAdapterCnt()) {
5268 BTRMGRLOG_ERROR (
"Input is invalid\n");
5269 return BTRMGR_RESULT_INVALID_INPUT;
5272 if (!btrMgr_IsDevConnected(ahBTRMgrDevHdl)) {
5273 BTRMGRLOG_ERROR (
"Device Handle(%lld) not connected\n", ahBTRMgrDevHdl);
5274 return BTRMGR_RESULT_INVALID_INPUT;
5278 BTRMGRLOG_DEBUG (
"Status = %d\t Device Type = %d\t Device Class = %x\n", lenBtrCoreRet, lenBtrCoreDevTy, lenBtrCoreDevCl);
5281 BTRMGRLOG_ERROR (
"Get Media Current Position for %llu Failed!!!\n", ahBTRMgrDevHdl);
5282 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
5285 return lenBtrMgrResult;
5291 unsigned char aui8AdapterIdx,
5292 BTRMgrDeviceHandle ahBTRMgrDevHdl,
5293 BTRMgrMediaElementHandle ahBTRMgrMedElementHdl,
5297 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
5298 enBTRCoreDeviceType lenBtrCoreDevTy = enBTRCoreUnknown;
5299 enBTRCoreDeviceClass lenBtrCoreDevCl = enBTRCore_DC_Unknown;
5300 eBTRCoreMedElementType lenMediaElementType = enBTRCoreMedETypeUnknown;
5302 if (!ghBTRCoreHdl) {
5303 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
5304 return BTRMGR_RESULT_INIT_FAILED;
5307 if (aui8AdapterIdx > btrMgr_GetAdapterCnt()) {
5308 BTRMGRLOG_ERROR (
"Input is invalid\n");
5309 return BTRMGR_RESULT_INVALID_INPUT;
5312 if (!btrMgr_IsDevConnected(ahBTRMgrDevHdl)) {
5313 BTRMGRLOG_ERROR (
"Device Handle(%lld) not connected\n", ahBTRMgrDevHdl);
5314 return BTRMGR_RESULT_INVALID_INPUT;
5318 BTRMGRLOG_DEBUG (
"Status = %d\t Device Type = %d\t Device Class = %x\n", lenBtrCoreRet, lenBtrCoreDevTy, lenBtrCoreDevCl);
5320 switch (aMediaElementType) {
5321 case BTRMGR_MEDIA_ELEMENT_TYPE_ALBUM:
5322 lenMediaElementType = enBTRCoreMedETypeAlbum;
5324 case BTRMGR_MEDIA_ELEMENT_TYPE_ARTIST:
5325 lenMediaElementType = enBTRCoreMedETypeArtist;
5327 case BTRMGR_MEDIA_ELEMENT_TYPE_GENRE:
5328 lenMediaElementType = enBTRCoreMedETypeGenre;
5330 case BTRMGR_MEDIA_ELEMENT_TYPE_COMPILATIONS:
5331 lenMediaElementType = enBTRCoreMedETypeCompilation;
5333 case BTRMGR_MEDIA_ELEMENT_TYPE_PLAYLIST:
5334 lenMediaElementType = enBTRCoreMedETypePlayList;
5336 case BTRMGR_MEDIA_ELEMENT_TYPE_TRACKLIST:
5337 lenMediaElementType = enBTRCoreMedETypeTrackList;
5339 case BTRMGR_MEDIA_ELEMENT_TYPE_TRACK:
5340 lenMediaElementType = enBTRCoreMedETypeTrack;
5350 ahBTRMgrMedElementHdl,
5352 lenMediaElementType)) {
5353 BTRMGRLOG_ERROR (
"Set Active Media Element(%llu) List for Dev %llu Failed!!!\n", ahBTRMgrMedElementHdl, ahBTRMgrDevHdl);
5354 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
5357 return lenBtrMgrResult;
5363 unsigned char aui8AdapterIdx,
5364 BTRMgrDeviceHandle ahBTRMgrDevHdl,
5365 BTRMgrMediaElementHandle ahBTRMgrMedElementHdl,
5366 unsigned short aui16MediaElementStartIdx,
5367 unsigned short aui16MediaElementEndIdx,
5368 unsigned char abMediaElementListDepth,
5373 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
5374 enBTRCoreDeviceType lenBtrCoreDevTy = enBTRCoreUnknown;
5375 enBTRCoreDeviceClass lenBtrCoreDevCl = enBTRCore_DC_Unknown;
5378 if (!ghBTRCoreHdl) {
5379 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
5380 return BTRMGR_RESULT_INIT_FAILED;
5383 if (aui8AdapterIdx > btrMgr_GetAdapterCnt() || !aMediaElementListInfo ||
5384 aui16MediaElementStartIdx > aui16MediaElementEndIdx) {
5385 BTRMGRLOG_ERROR (
"Input is invalid\n");
5386 return BTRMGR_RESULT_INVALID_INPUT;
5389 if (aui16MediaElementEndIdx - aui16MediaElementStartIdx > BTRMGR_MEDIA_ELEMENT_COUNT_MAX -1) {
5390 aui16MediaElementEndIdx = aui16MediaElementStartIdx + BTRMGR_MEDIA_ELEMENT_COUNT_MAX -1;
5393 if (!btrMgr_IsDevConnected(ahBTRMgrDevHdl)) {
5394 BTRMGRLOG_ERROR (
"Device Handle(%lld) not connected\n", ahBTRMgrDevHdl);
5395 return BTRMGR_RESULT_INVALID_INPUT;
5399 BTRMGRLOG_DEBUG (
"Status = %d\t Device Type = %d\t Device Class = %x\n", lenBtrCoreRet, lenBtrCoreDevTy, lenBtrCoreDevCl);
5409 ahBTRMgrMedElementHdl,
5410 aui16MediaElementStartIdx,
5411 aui16MediaElementEndIdx,
5414 &lpstBTRCoreMediaElementInfoList)) {
5415 BTRMGRLOG_ERROR (
"Get Media Element(%llu) List for Dev %llu Failed!!!\n", ahBTRMgrMedElementHdl, ahBTRMgrDevHdl);
5416 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
5419 unsigned short ui16LoopIdx = 0;
5423 if (lpstBTRCoreMediaElementInfoList.m_numOfElements > BTRMGR_MEDIA_ELEMENT_COUNT_MAX) {
5424 lpstBTRCoreMediaElementInfoList.m_numOfElements = BTRMGR_MEDIA_ELEMENT_COUNT_MAX;
5427 while (ui16LoopIdx < lpstBTRCoreMediaElementInfoList.m_numOfElements) {
5428 srcElement = &lpstBTRCoreMediaElementInfoList.m_mediaElementInfo[ui16LoopIdx];
5429 desElement = &aMediaElementListInfo->m_mediaElementInfo[ui16LoopIdx++];
5431 desElement->m_mediaElementHdl = srcElement->ui32MediaElementId;
5432 desElement->m_IsPlayable = srcElement->bIsPlayable;
5433 strncpy (desElement->m_mediaElementName, srcElement->m_mediaElementName, BTRMGR_MAX_STR_LEN -1);
5436 aMediaElementListInfo->m_numberOfElements = lpstBTRCoreMediaElementInfoList.m_numOfElements;
5439 return lenBtrMgrResult;
5445 unsigned char aui8AdapterIdx,
5446 BTRMgrDeviceHandle ahBTRMgrDevHdl,
5447 BTRMgrMediaElementHandle ahBTRMgrMedElementHdl,
5451 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
5452 enBTRCoreDeviceType lenBtrCoreDevTy = enBTRCoreUnknown;
5453 enBTRCoreDeviceClass lenBtrCoreDevCl = enBTRCore_DC_Unknown;
5454 eBTRCoreMedElementType lenMediaElementType = enBTRCoreMedETypeUnknown;
5456 if (!ghBTRCoreHdl) {
5457 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
5458 return BTRMGR_RESULT_INIT_FAILED;
5461 if (aui8AdapterIdx > btrMgr_GetAdapterCnt()) {
5462 BTRMGRLOG_ERROR (
"Input is invalid\n");
5463 return BTRMGR_RESULT_INVALID_INPUT;
5466 if (!btrMgr_IsDevConnected(ahBTRMgrDevHdl)) {
5467 BTRMGRLOG_ERROR (
"Device Handle(%lld) not connected\n", ahBTRMgrDevHdl);
5468 return BTRMGR_RESULT_INVALID_INPUT;
5472 BTRMGRLOG_DEBUG (
"Status = %d\t Device Type = %d\t Device Class = %x\n", lenBtrCoreRet, lenBtrCoreDevTy, lenBtrCoreDevCl);
5475 switch (aMediaElementType) {
5476 case BTRMGR_MEDIA_ELEMENT_TYPE_ALBUM:
5477 lenMediaElementType = enBTRCoreMedETypeAlbum;
5479 case BTRMGR_MEDIA_ELEMENT_TYPE_ARTIST:
5480 lenMediaElementType = enBTRCoreMedETypeArtist;
5482 case BTRMGR_MEDIA_ELEMENT_TYPE_GENRE:
5483 lenMediaElementType = enBTRCoreMedETypeGenre;
5485 case BTRMGR_MEDIA_ELEMENT_TYPE_COMPILATIONS:
5486 lenMediaElementType = enBTRCoreMedETypeCompilation;
5488 case BTRMGR_MEDIA_ELEMENT_TYPE_PLAYLIST:
5489 lenMediaElementType = enBTRCoreMedETypePlayList;
5491 case BTRMGR_MEDIA_ELEMENT_TYPE_TRACKLIST:
5492 lenMediaElementType = enBTRCoreMedETypeTrackList;
5494 case BTRMGR_MEDIA_ELEMENT_TYPE_TRACK:
5495 lenMediaElementType = enBTRCoreMedETypeTrack;
5503 ahBTRMgrMedElementHdl,
5505 lenMediaElementType)) {
5506 BTRMGRLOG_ERROR (
"Select Media Element(%llu) on Dev %llu Failed!!!\n", ahBTRMgrMedElementHdl, ahBTRMgrDevHdl);
5507 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
5510 return lenBtrMgrResult;
5518 if (type == BTRMGR_DEVICE_TYPE_WEARABLE_HEADSET)
5519 return "WEARABLE HEADSET";
5520 else if (type == BTRMGR_DEVICE_TYPE_HANDSFREE)
5522 else if (type == BTRMGR_DEVICE_TYPE_MICROPHONE)
5523 return "MICROPHONE";
5524 else if (type == BTRMGR_DEVICE_TYPE_LOUDSPEAKER)
5525 return "LOUDSPEAKER";
5526 else if (type == BTRMGR_DEVICE_TYPE_HEADPHONES)
5527 return "HEADPHONES";
5528 else if (type == BTRMGR_DEVICE_TYPE_PORTABLE_AUDIO)
5529 return "PORTABLE AUDIO DEVICE";
5530 else if (type == BTRMGR_DEVICE_TYPE_CAR_AUDIO)
5532 else if (type == BTRMGR_DEVICE_TYPE_STB)
5534 else if (type == BTRMGR_DEVICE_TYPE_HIFI_AUDIO_DEVICE)
5535 return "HIFI AUDIO DEVICE";
5536 else if (type == BTRMGR_DEVICE_TYPE_VCR)
5538 else if (type == BTRMGR_DEVICE_TYPE_VIDEO_CAMERA)
5539 return "VIDEO CAMERA";
5540 else if (type == BTRMGR_DEVICE_TYPE_CAMCODER)
5542 else if (type == BTRMGR_DEVICE_TYPE_VIDEO_MONITOR)
5543 return "VIDEO MONITOR";
5544 else if (type == BTRMGR_DEVICE_TYPE_TV)
5546 else if (type == BTRMGR_DEVICE_TYPE_VIDEO_CONFERENCE)
5547 return "VIDEO CONFERENCING";
5548 else if (type == BTRMGR_DEVICE_TYPE_SMARTPHONE)
5549 return "SMARTPHONE";
5550 else if (type == BTRMGR_DEVICE_TYPE_TABLET)
5552 else if (type == BTRMGR_DEVICE_TYPE_TILE)
5554 else if ((type == BTRMGR_DEVICE_TYPE_HID) || (type == BTRMGR_DEVICE_TYPE_HID_GAMEPAD))
5555 return "HUMAN INTERFACE DEVICE";
5557 return "UNKNOWN DEVICE";
5563 unsigned char aui8AdapterIdx,
5564 unsigned char aui8State
5566 if ((gIsAudioInEnabled = aui8State)) {
5567 BTRMGRLOG_INFO (
"AudioIn Service is Enabled.\n");
5570 BTRMGRLOG_INFO (
"AudioIn Service is Disabled.\n");
5572 return BTRMGR_RESULT_SUCCESS;
5577 unsigned char aui8AdapterIdx,
5578 unsigned char aui8State
5580 if ((gIsHidGamePadEnabled = aui8State)) {
5581 BTRMGRLOG_INFO (
"HID GamePad Service is Enabled.\n");
5584 BTRMGRLOG_INFO (
"HID GamePad Service is Disabled.\n");
5586 return BTRMGR_RESULT_SUCCESS;
5591 unsigned char aui8AdapterIdx,
5592 unsigned char *pLimited
5595 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt())) {
5596 BTRMGRLOG_ERROR (
"Input is invalid\n");
5597 return BTRMGR_RESULT_INVALID_INPUT;
5601 if (BTRMgr_PI_GetLEBeaconLimitingStatus(&BeaconPersistentData) == eBTRMgrFailure) {
5602 BTRMGRLOG_INFO (
"Failed to get limit for beacon detection from json.\n");
5603 return BTRMGR_RESULT_GENERIC_FAILURE;
5606 if (pLimited != NULL) {
5607 *pLimited = (
unsigned char)((!strncasecmp(BeaconPersistentData.limitBeaconDetection,
"true", 4)) ? 1 : 0 );
5608 BTRMGRLOG_INFO (
"the beacon detection detection : %s\n", *pLimited?
"true":
"false");
5611 BTRMGRLOG_INFO (
"Failed to get limit for beacon detection.\n");
5612 return BTRMGR_RESULT_GENERIC_FAILURE;
5615 return BTRMGR_RESULT_SUCCESS;
5620 unsigned char aui8AdapterIdx,
5621 unsigned char limited
5624 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt())) {
5625 BTRMGRLOG_ERROR (
"Input is invalid\n");
5626 return BTRMGR_RESULT_INVALID_INPUT;
5630 sprintf(BeaconPersistentData.limitBeaconDetection,
"%s", limited ?
"true" :
"false");
5631 if (BTRMgr_PI_SetLEBeaconLimitingStatus(&BeaconPersistentData) == eBTRMgrFailure) {
5632 BTRMGRLOG_ERROR (
"Failed to set limit for beacon detection from json.\n");
5633 return BTRMGR_RESULT_GENERIC_FAILURE;
5637 BTRMGRLOG_INFO (
"Limiting the beacon detection.\n");
5640 BTRMGRLOG_INFO (
"Removing the limit for beacon detection\n");
5642 return BTRMGR_RESULT_SUCCESS;
5645 #ifdef RDKTV_PERSIST_VOLUME_SKY
5647 btrMgr_SetLastVolume (
5648 unsigned char aui8AdapterIdx,
5649 unsigned char volume
5652 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt())) {
5653 BTRMGRLOG_ERROR (
"Input is invalid\n");
5654 return eBTRMgrFailInArg;
5657 BTRMGR_Volume_PersistentData_t VolumePersistentData;
5658 VolumePersistentData.Volume = volume;
5659 if (BTRMgr_PI_SetVolume(&VolumePersistentData) == eBTRMgrFailure) {
5660 BTRMGRLOG_ERROR (
"Failed to set volume from json.\n");
5661 return eBTRMgrFailure;
5664 BTRMGRLOG_INFO (
"set volume %d.\n",volume);
5665 return eBTRMgrSuccess;
5669 btrMgr_GetLastVolume (
5670 unsigned char aui8AdapterIdx,
5671 unsigned char *pVolume
5674 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || !(pVolume)) {
5675 BTRMGRLOG_ERROR (
"Input is invalid\n");
5676 return eBTRMgrFailInArg;
5679 BTRMGR_Volume_PersistentData_t VolumePersistentData;
5680 if (BTRMgr_PI_GetVolume(&VolumePersistentData) == eBTRMgrFailure) {
5681 BTRMGRLOG_INFO (
"Failed to get volume detection from json.\n");
5682 return eBTRMgrFailure;
5685 *pVolume = VolumePersistentData.Volume;
5686 BTRMGRLOG_INFO (
"get volume %d \n",*pVolume);
5687 return eBTRMgrSuccess;
5691 btrMgr_SetLastMuteState (
5692 unsigned char aui8AdapterIdx,
5696 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt())) {
5697 BTRMGRLOG_ERROR (
"Input is invalid\n");
5698 return eBTRMgrFailInArg;
5701 BTRMGR_Mute_PersistentData_t MutePersistentData;
5702 sprintf(MutePersistentData.Mute,
"%s", muted ?
"true" :
"false");
5703 if (BTRMgr_PI_SetMute(&MutePersistentData) == eBTRMgrFailure) {
5704 BTRMGRLOG_ERROR (
"Failed to set mute from json.\n");
5705 return eBTRMgrFailure;
5708 BTRMGRLOG_INFO (
" set mute %s.\n", muted ?
"true":
"false");
5709 return eBTRMgrSuccess;
5713 btrMgr_GetLastMuteState (
5714 unsigned char aui8AdapterIdx,
5718 if ((aui8AdapterIdx > btrMgr_GetAdapterCnt()) || !(pMute)) {
5719 BTRMGRLOG_ERROR (
"Input is invalid\n");
5720 return eBTRMgrFailInArg;
5723 BTRMGR_Mute_PersistentData_t MutePersistentData;
5724 if (BTRMgr_PI_GetMute(&MutePersistentData) == eBTRMgrFailure) {
5725 BTRMGRLOG_INFO (
"Failed to get mute detection from json.\n");
5726 return eBTRMgrFailure;
5729 *pMute = (
unsigned char)((!strncasecmp(MutePersistentData.Mute,
"true", 4)) ? 1 : 0 );
5730 BTRMGRLOG_INFO (
" get mute %s.\n", *pMute ?
"true":
"false");
5731 return eBTRMgrSuccess;
5736 BTRMGR_GetLeProperty (
5737 unsigned char aui8AdapterIdx,
5738 BTRMgrDeviceHandle ahBTRMgrDevHdl,
5739 const char* apBtrPropUuid,
5745 if (!ghBTRCoreHdl) {
5746 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
5747 return BTRMGR_RESULT_INIT_FAILED;
5750 if (aui8AdapterIdx > btrMgr_GetAdapterCnt() || !apBtrPropUuid) {
5751 BTRMGRLOG_ERROR (
"Input is invalid\n");
5752 return BTRMGR_RESULT_INVALID_INPUT;
5755 if (eBTRMgrSuccess != btrMgr_PreCheckDiscoveryStatus(aui8AdapterIdx, BTRMGR_DEVICE_OP_TYPE_LE)) {
5756 BTRMGRLOG_ERROR (
"Pre Check Discovery State Rejected !!!\n");
5757 return BTRMGR_RESULT_GENERIC_FAILURE;
5760 enBTRCoreLeProp lenBTRCoreLeProp = enBTRCoreLePropUnknown;
5762 switch(aenLeProperty) {
5763 case BTRMGR_LE_PROP_UUID:
5764 lenBTRCoreLeProp = enBTRCoreLePropGUUID;
5766 case BTRMGR_LE_PROP_PRIMARY:
5767 lenBTRCoreLeProp = enBTRCoreLePropGPrimary;
5769 case BTRMGR_LE_PROP_DEVICE:
5770 lenBTRCoreLeProp = enBTRCoreLePropGDevice;
5772 case BTRMGR_LE_PROP_SERVICE:
5773 lenBTRCoreLeProp = enBTRCoreLePropGService;
5775 case BTRMGR_LE_PROP_VALUE:
5776 lenBTRCoreLeProp = enBTRCoreLePropGValue;
5778 case BTRMGR_LE_PROP_NOTIFY:
5779 lenBTRCoreLeProp = enBTRCoreLePropGNotifying;
5781 case BTRMGR_LE_PROP_FLAGS:
5782 lenBTRCoreLeProp = enBTRCoreLePropGFlags;
5784 case BTRMGR_LE_PROP_CHAR:
5785 lenBTRCoreLeProp = enBTRCoreLePropGChar;
5791 if (enBTRCoreSuccess !=
BTRCore_GetLEProperty(ghBTRCoreHdl, ahBTRMgrDevHdl, apBtrPropUuid, lenBTRCoreLeProp, vpPropValue)) {
5792 BTRMGRLOG_ERROR (
"Get LE Property %d for Device/UUID %llu/%s Failed!!!\n", lenBTRCoreLeProp, ahBTRMgrDevHdl, apBtrPropUuid);
5793 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
5796 return lenBtrMgrResult;
5802 unsigned char aui8AdapterIdx,
5803 BTRMgrDeviceHandle ahBTRMgrDevHdl,
5804 const char* aBtrLeUuid,
5811 unsigned char isConnected = 0;
5812 unsigned short ui16LoopIdx = 0;
5813 enBTRCoreLeOp aenBTRCoreLeOp = enBTRCoreLeOpUnknown;
5816 if (!ghBTRCoreHdl) {
5817 BTRMGRLOG_ERROR (
"BTRCore is not Inited\n");
5818 return BTRMGR_RESULT_INIT_FAILED;
5821 if (aui8AdapterIdx > btrMgr_GetAdapterCnt() || !aBtrLeUuid) {
5822 BTRMGRLOG_ERROR (
"Input is invalid\n");
5823 return BTRMGR_RESULT_INVALID_INPUT;
5826 if (eBTRMgrSuccess != btrMgr_PreCheckDiscoveryStatus(aui8AdapterIdx, BTRMGR_DEVICE_OP_TYPE_LE)) {
5827 BTRMGRLOG_ERROR (
"Pre Check Discovery State Rejected !!!\n");
5828 return BTRMGR_RESULT_GENERIC_FAILURE;
5833 BTRMGRLOG_TRACE (
"BTRMGR_GetConnectedDevices is error !!!\n");
5836 for ( ;ui16LoopIdx < listOfCDevices.m_numOfDevices; ui16LoopIdx++) {
5837 if (listOfCDevices.m_deviceProperty[ui16LoopIdx].m_deviceHandle == ahBTRMgrDevHdl) {
5838 isConnected = listOfCDevices.m_deviceProperty[ui16LoopIdx].m_isConnected;
5846 BTRMGRLOG_ERROR (
"LE Device %lld is not connected to perform LE Op!!!\n", ahBTRMgrDevHdl);
5847 return BTRMGR_RESULT_GENERIC_FAILURE;
5852 switch (aLeOpType) {
5853 case BTRMGR_LE_OP_READY:
5854 aenBTRCoreLeOp = enBTRCoreLeOpGReady;
5856 case BTRMGR_LE_OP_READ_VALUE:
5857 aenBTRCoreLeOp = enBTRCoreLeOpGReadValue;
5859 case BTRMGR_LE_OP_WRITE_VALUE:
5860 aenBTRCoreLeOp = enBTRCoreLeOpGWriteValue;
5862 case BTRMGR_LE_OP_START_NOTIFY:
5863 aenBTRCoreLeOp = enBTRCoreLeOpGStartNotify;
5865 case BTRMGR_LE_OP_STOP_NOTIFY:
5866 aenBTRCoreLeOp = enBTRCoreLeOpGStopNotify;
5868 case BTRMGR_LE_OP_UNKNOWN:
5870 aenBTRCoreLeOp = enBTRCoreLeOpGReady;
5874 if (enBTRCoreSuccess !=
BTRCore_PerformLEOp (ghBTRCoreHdl, ahBTRMgrDevHdl, aBtrLeUuid, aenBTRCoreLeOp, aLeOpArg, rOpResult)) {
5875 BTRMGRLOG_ERROR (
"Perform LE Op %d for device %llu Failed!!!\n", aLeOpType, ahBTRMgrDevHdl);
5876 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
5879 return lenBtrMgrResult;
5884 BTRMGR_LE_StartAdvertisement (
5885 unsigned char aui8AdapterIdx,
5890 char *lAdvtType =
"peripheral";
5891 int lLenServiceUUID = 0;
5892 int lComcastFlagType = 0;
5893 int lLenManfData = 0;
5894 unsigned short lManfId = 0;
5895 unsigned char laDeviceDetails[BTRMGR_DEVICE_COUNT_MAX] = {
'\0'};
5896 unsigned char lManfType;
5904 lLenServiceUUID = (int)pstBTMGR_LeCustomAdvt->len_comcastflags;
5906 lComcastFlagType = (
int)pstBTMGR_LeCustomAdvt->type_comcastflags;
5907 lLenServiceUUID -= 1;
5909 if ((2 == lComcastFlagType) || (3 == lComcastFlagType)) {
5911 unsigned short lu16UUID = ((
unsigned short)pstBTMGR_LeCustomAdvt->deviceInfo_UUID_HI << 8) | (
unsigned short)pstBTMGR_LeCustomAdvt->deviceInfo_UUID_LO;
5912 snprintf(lUUID,
sizeof(lUUID),
"%x", lu16UUID);
5914 lenBtrMgrResult = BTRMGR_RESULT_INVALID_INPUT;
5917 lu16UUID = ((
unsigned short)pstBTMGR_LeCustomAdvt->rdk_diag_UUID_HI << 8) | (
unsigned short)pstBTMGR_LeCustomAdvt->rdk_diag_UUID_LO;
5918 snprintf(lUUID,
sizeof(lUUID),
"%x", lu16UUID);
5920 lenBtrMgrResult = BTRMGR_RESULT_INVALID_INPUT;
5925 lLenManfData = (int)pstBTMGR_LeCustomAdvt->len_manuf;
5926 BTRMGRLOG_INFO(
"Length of manf data is %d \n", lLenManfData);
5928 lManfType = pstBTMGR_LeCustomAdvt->type_manuf;
5929 lLenManfData -=
sizeof(lManfType);
5931 lManfId = ((
unsigned short)pstBTMGR_LeCustomAdvt->company_HI << 8) | ((
unsigned short)pstBTMGR_LeCustomAdvt->company_LO);
5932 lLenManfData -=
sizeof(lManfId);
5933 BTRMGRLOG_INFO(
"manf id is %d \n", lManfId);
5936 laDeviceDetails[index + 1] = pstBTMGR_LeCustomAdvt->device_model & 0xF;
5937 laDeviceDetails[index] = (pstBTMGR_LeCustomAdvt->device_model >> 8) & 0xF;
5938 index +=
sizeof(pstBTMGR_LeCustomAdvt->device_model);
5940 for (
int count = 0; count < BTRMGR_DEVICE_MAC_LEN; count++) {
5941 laDeviceDetails[index] = pstBTMGR_LeCustomAdvt->device_mac[count];
5950 gIsAdvertisementSet =
TRUE;
5956 if (!ghBTRCoreHdl) {
5957 BTRMGRLOG_ERROR(
"BTRCore is not Inited\n");
5958 lenBtrMgrResult = BTRMGR_RESULT_INIT_FAILED;
5960 else if (FALSE == gIsAdvertisementSet) {
5961 BTRMGRLOG_ERROR(
"Advertisement data has not been set\n");
5962 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
5964 else if (
TRUE == gIsDeviceAdvertising) {
5965 BTRMGRLOG_ERROR(
"Device is already advertising\n");
5966 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
5971 BTRMGRLOG_ERROR(
"Starting advertisement has failed\n");
5972 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
5975 BTRMGRLOG_INFO(
"Device is advertising\n");
5976 gIsDeviceAdvertising =
TRUE;
5980 return lenBtrMgrResult;
5984 BTRMGR_LE_StopAdvertisement (
5985 unsigned char aui8AdapterIdx
5989 if (!ghBTRCoreHdl) {
5990 BTRMGRLOG_ERROR(
"BTRCore is not Inited\n");
5991 lenBtrMgrResult = BTRMGR_RESULT_INIT_FAILED;
5993 else if (FALSE == gIsDeviceAdvertising) {
5994 BTRMGRLOG_ERROR(
"Device is not advertising yet\n");
5995 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
5999 BTRMGRLOG_INFO(
"Stopping advertisement\n");
6001 BTRMGRLOG_ERROR(
"Stopping advertisement has failed\n");
6002 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
6004 gIsDeviceAdvertising = FALSE;
6007 return lenBtrMgrResult;
6011 BTRMGR_LE_GetPropertyValue (
6012 unsigned char aui8AdapterIdx,
6018 char lPropValue[BTRMGR_MAX_STR_LEN] =
"";
6020 if (!ghBTRCoreHdl) {
6021 BTRMGRLOG_ERROR(
"BTRCore is not Inited\n");
6022 lenBtrMgrResult = BTRMGR_RESULT_INIT_FAILED;
6024 else if (FALSE == gIsDeviceAdvertising) {
6025 BTRMGRLOG_ERROR(
"Device is not advertising yet\n");
6026 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
6030 BTRMGRLOG_ERROR(
"Getting property value has failed\n");
6031 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
6034 strncpy(aValue, lPropValue, (BTRMGR_MAX_STR_LEN - 1));
6038 return lenBtrMgrResult;
6042 BTRMGR_LE_SetServiceUUIDs (
6043 unsigned char aui8AdapterIdx,
6050 lenBtrMgrResult = BTRMGR_RESULT_INVALID_INPUT;
6053 return lenBtrMgrResult;
6057 BTRMGR_LE_SetServiceInfo (
6058 unsigned char aui8AdapterIdx,
6060 unsigned char aServiceType
6065 BTRMGRLOG_ERROR(
"Could not add service info\n");
6066 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
6069 return lenBtrMgrResult;
6073 BTRMGR_LE_SetGattInfo (
6074 unsigned char aui8AdapterIdx,
6077 unsigned short aFlags,
6083 if (enBTRCoreSuccess !=
BTRCore_SetGattInfo(ghBTRCoreHdl, aParentUUID, aCharUUID, aFlags, aValue, aElement)) {
6084 BTRMGRLOG_ERROR(
"Could not add gatt info\n");
6085 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
6088 return lenBtrMgrResult;
6092 BTRMGR_LE_SetGattPropertyValue (
6093 unsigned char aui8AdapterIdx,
6100 if (!ghBTRCoreHdl) {
6101 BTRMGRLOG_ERROR(
"BTRCore is not Inited\n");
6102 lenBtrMgrResult = BTRMGR_RESULT_INIT_FAILED;
6104 else if (FALSE == gIsDeviceAdvertising) {
6105 BTRMGRLOG_ERROR(
"Device is not advertising yet\n");
6106 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
6109 BTRMGRLOG_DEBUG(
"Value is %s\n", aValue);
6113 BTRMGRLOG_ERROR(
"Setting property value has failed\n");
6114 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
6121 return lenBtrMgrResult;
6127 unsigned char aui8AdapterIdx,
6128 char *apDiagElement,
6133 int lenDiagElement = 0;
6134 char lPropValue[BTRMGR_LE_STR_LEN_MAX] = {
'\0'};
6136 if (!ghBTRCoreHdl) {
6137 BTRMGRLOG_ERROR(
"BTRCore is not Inited\n");
6138 return BTRMGR_RESULT_INIT_FAILED;
6141 if (aui8AdapterIdx > btrMgr_GetAdapterCnt() || !apDiagElement) {
6142 BTRMGRLOG_ERROR(
"Input is invalid\n");
6143 return BTRMGR_RESULT_INVALID_INPUT;
6146 lenDiagElement = btrMgr_MapUUIDtoDiagElement(apDiagElement);
6148 if ((BTRMGR_SYS_DIAG_BEGIN < (BTRMGR_SysDiagChar_t)lenDiagElement) && (BTRMGR_SYS_DIAG_END > (BTRMGR_SysDiagChar_t)lenDiagElement)) {
6149 if (BTRMGR_LE_OP_READ_VALUE == aOpType) {
6150 if (eBTRMgrSuccess != BTRMGR_SysDiag_GetData(ghBTRMgrSdHdl, lenDiagElement, lPropValue)) {
6151 BTRMGRLOG_ERROR(
"Could not get diagnostic data\n");
6152 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
6155 strncpy(apValue, lPropValue, BTRMGR_MAX_STR_LEN - 1);
6159 else if ((BTRMGR_SYSDIAG_COLUMBO_BEGIN < (BTRMGR_ColumboChar_t)lenDiagElement) && (BTRMGR_SYSDIAG_COLUMBO_END > (BTRMGR_ColumboChar_t)lenDiagElement)) {
6160 if (BTRMGR_LE_OP_READ_VALUE == aOpType) {
6161 if (eBTRMgrSuccess != BTRMGR_Columbo_GetData(lenDiagElement, lPropValue)) {
6162 BTRMGRLOG_ERROR(
"Could not get diagnostic data\n");
6163 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
6166 strncpy(apValue, lPropValue, BTRMGR_MAX_STR_LEN - 1);
6169 else if (BTRMGR_LE_OP_WRITE_VALUE == aOpType) {
6170 if (eBTRMgrSuccess != BTRMGR_Columbo_SetData(lenDiagElement, lPropValue)) {
6171 BTRMGRLOG_ERROR(
"Could not get diagnostic data\n");
6172 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
6176 else if ((BTRMGR_LE_ONBRDG_BEGIN < (BTRMGR_LeOnboardingChar_t)lenDiagElement) && (BTRMGR_LE_ONBRDG_END > (BTRMGR_LeOnboardingChar_t)lenDiagElement)) {
6177 if (BTRMGR_LE_OP_READ_VALUE == aOpType) {
6178 if (eBTRMgrSuccess != BTRMGR_LeOnboarding_GetData(lenDiagElement, lPropValue)) {
6179 BTRMGRLOG_ERROR(
"Could not get diagnostic data\n");
6180 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
6183 strncpy(apValue, lPropValue, BTRMGR_MAX_STR_LEN - 1);
6186 else if (BTRMGR_LE_OP_WRITE_VALUE == aOpType) {
6187 if (eBTRMgrSuccess != BTRMGR_LeOnboarding_SetData(lenDiagElement, apValue)) {
6188 BTRMGRLOG_ERROR(
"Could not set diagnostic data\n");
6189 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
6197 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
6201 return lenBtrMgrResult;
6205 BTRMGR_ConnectToWifi(
6206 unsigned char aui8AdapterIdx,
6213 if (!ghBTRCoreHdl || !ghBTRMgrSdHdl) {
6214 BTRMGRLOG_ERROR(
"BTRCore is not Inited\n");
6215 return BTRMGR_RESULT_INIT_FAILED;
6218 if (aui8AdapterIdx > btrMgr_GetAdapterCnt()) {
6219 BTRMGRLOG_ERROR(
"Input is invalid\n");
6220 return BTRMGR_RESULT_INVALID_INPUT;
6223 lenBtrMgrResult = BTRMGR_SysDiag_ConnectToWifi(ghBTRMgrSdHdl, apSSID, apPassword, aSecMode);
6225 return lenBtrMgrResult;
6230 BTRMGR_RegisterEventCallback (
6231 BTRMGR_EventCallback afpcBBTRMgrEventOut
6235 if (!afpcBBTRMgrEventOut) {
6236 BTRMGRLOG_ERROR (
"Input is invalid\n");
6237 return BTRMGR_RESULT_INVALID_INPUT;
6240 gfpcBBTRMgrEventOut = afpcBBTRMgrEventOut;
6241 BTRMGRLOG_INFO (
"BTRMGR_RegisterEventCallback : Success\n");
6243 return lenBtrMgrResult;
6249 btrMgr_g_main_loop_Task (
6250 gpointer appvMainLoop
6252 GMainLoop* pMainLoop = (GMainLoop*)appvMainLoop;
6254 BTRMGRLOG_INFO (
"GMainLoop Error - In arguments Exiting\n");
6258 BTRMGRLOG_INFO (
"GMainLoop Running - %p - %p\n", pMainLoop, appvMainLoop);
6259 g_main_loop_run (pMainLoop);
6261 return appvMainLoop;
6267 btrMgr_DiscoveryHoldOffTimerCb (
6270 unsigned char lui8AdapterIdx = 0;
6272 BTRMGRLOG_DEBUG (
"CB context Invoked for btrMgr_DiscoveryHoldOffTimerCb || TimeOutReference - %u\n", gTimeOutRef);
6275 lui8AdapterIdx = *(
unsigned char*)gptr;
6277 BTRMGRLOG_WARN (
"CB context received NULL arg!\n");
6282 if (btrMgr_PostCheckDiscoveryStatus (lui8AdapterIdx, BTRMGR_DEVICE_OP_TYPE_UNKNOWN) != eBTRMgrSuccess) {
6283 BTRMGRLOG_ERROR (
"Post Check Disc Status Failed!\n");
6291 btrMgr_ConnPwrStChangeTimerCb (
6294 unsigned char lui8AdapterIdx = 0;
6296 BTRMGRLOG_DEBUG (
"CB context Invoked for btrMgr_ConnPwrStChangeTimerCb || TimeOutReference - %u\n", gConnPwrStChangeTimeOutRef);
6299 lui8AdapterIdx = *(
unsigned char*)gptr;
6301 BTRMGRLOG_WARN (
"CB context received NULL arg!\n");
6304 gConnPwrStChangeTimeOutRef = 0;
6307 BTRMGRLOG_ERROR (
"ConnPwrStChange - BTRMGR_StartAudioStreamingOut_StartUp Failed!\n");
6315 btrMgr_ACDataReadyCb (
6317 unsigned int aui32AcDataLen,
6323 if (lstBTRMgrStrmInfo) {
6324 if ((leBtrMgrAcRet =
BTRMgr_SO_SendBuffer(lstBTRMgrStrmInfo->hBTRMgrSoHdl, apvAcDataBuf, aui32AcDataLen)) != eBTRMgrSuccess) {
6325 BTRMGRLOG_ERROR (
"cbBufferReady: BTRMgr_SO_SendBuffer FAILED\n");
6327 lstBTRMgrStrmInfo->bytesWritten += aui32AcDataLen;
6330 return leBtrMgrAcRet;
6342 if (lpstBTRMgrStrmInfo && apstBtrMgrAcStatus) {
6346 BTRMGRLOG_WARN (
"STATUS CHANGED\n");
6348 if ((leBtrMgrAcRet =
BTRMgr_SO_SetStatus(lpstBTRMgrStrmInfo->hBTRMgrSoHdl, &lstBtrMgrSoStatus)) != eBTRMgrSuccess) {
6349 BTRMGRLOG_ERROR (
"BTRMgr_SO_SetStatus FAILED = %d\n", leBtrMgrAcRet);
6353 return leBtrMgrAcRet;
6365 if (lpstBTRMgrStrmInfo && apstBtrMgrSoStatus) {
6366 BTRMGRLOG_DEBUG (
"Entering\n");
6371 if (apstBtrMgrSoStatus->eBtrMgrState == eBTRMgrStateError) {
6372 if (ghBTRMgrDevHdlCurStreaming && lpstBTRMgrStrmInfo->hBTRMgrSoHdl) {
6373 BTRMGRLOG_ERROR (
"Error - ghBTRMgrDevHdlCurStreaming = %lld\n", ghBTRMgrDevHdlCurStreaming);
6374 if (ghBTRMgrDevHdlCurStreaming) {
6378 BTRMGRLOG_ERROR (
"Streamout is failed to stop\n");
6379 leBtrMgrSoRet = eBTRMgrFailure;
6387 return leBtrMgrSoRet;
6399 if (lpstBTRMgrStrmInfo && apstBtrMgrSiStatus) {
6400 BTRMGRLOG_DEBUG (
"Entering\n");
6405 if (apstBtrMgrSiStatus->eBtrMgrState == eBTRMgrStateError) {
6406 if (ghBTRMgrDevHdlCurStreaming && lpstBTRMgrStrmInfo->hBTRMgrSiHdl) {
6407 BTRMGRLOG_ERROR (
"Error - ghBTRMgrDevHdlCurStreaming = %lld\n", ghBTRMgrDevHdlCurStreaming);
6408 if (ghBTRMgrDevHdlCurStreaming) {
6412 BTRMGRLOG_ERROR (
"Streamin is failed to stop\n");
6413 leBtrMgrSiRet = eBTRMgrFailure;
6421 return leBtrMgrSiRet;
6432 if ((apstBtrMgrSdStatus != NULL) &&
6433 (gIsAudOutStartupInProgress != BTRMGR_STARTUP_AUD_INPROGRESS) &&
6434 (apstBtrMgrSdStatus->enSysDiagChar == BTRMGR_SYS_DIAG_POWERSTATE) &&
6435 !strncmp(apstBtrMgrSdStatus->pcSysDiagRes, BTRMGR_SYS_DIAG_PWRST_ON, strlen(BTRMGR_SYS_DIAG_PWRST_ON))) {
6437 gConnPwrStChTimeOutCbData = 0;
6438 if ((gConnPwrStChangeTimeOutRef = g_timeout_add_seconds (BTRMGR_DEVCONN_PWRST_CHANGE_TIME, btrMgr_ConnPwrStChangeTimerCb, (gpointer)&gConnPwrStChTimeOutCbData)) != 0)
6439 leBtrMgrSdRet = eBTRMgrSuccess;
6442 return leBtrMgrSdRet;
6447 btrMgr_DeviceStatusCb (
6451 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
6456 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
6458 BTRMGRLOG_INFO (
"Received status callback\n");
6462 lBtrMgrDevType = btrMgr_MapDeviceTypeFromCore(p_StatusCB->eDeviceClass);
6463 BTRMGRLOG_INFO (
" Received status callback device type %d PrevState %d State %d\n",lBtrMgrDevType, p_StatusCB->eDevicePrevState, p_StatusCB->eDeviceCurrState);
6465 if (!gIsHidGamePadEnabled &&
6466 (lBtrMgrDevType == BTRMGR_DEVICE_TYPE_HID_GAMEPAD)) {
6467 BTRMGRLOG_WARN (
"Rejecting status callback - BTR HID Gamepad is currently Disabled!\n");
6468 return lenBtrCoreRet;
6471 switch (p_StatusCB->eDeviceCurrState) {
6472 case enBTRCoreDevStPaired:
6474 if ((p_StatusCB->eDeviceType == enBTRCoreHID) ||
6475 (p_StatusCB->eDeviceType == enBTRCoreMobileAudioIn) ||
6476 (p_StatusCB->eDeviceType == enBTRCorePCAudioIn)) {
6478 btrMgr_GetDiscoveredDevInfo (p_StatusCB->deviceId, &lstEventMessage.m_discoveredDevice);
6480 lstEventMessage.m_discoveredDevice.m_deviceHandle = p_StatusCB->deviceId;
6481 lstEventMessage.m_discoveredDevice.m_deviceType = (p_StatusCB->eDeviceType == enBTRCoreHID) ? BTRMGR_DEVICE_TYPE_HID : lBtrMgrDevType;
6482 lstEventMessage.m_discoveredDevice.m_isPairedDevice = p_StatusCB->isPaired;
6483 lstEventMessage.m_discoveredDevice.m_ui32DevClassBtSpec = p_StatusCB->ui32DevClassBtSpec;
6484 strncpy(lstEventMessage.m_discoveredDevice.m_name, p_StatusCB->deviceName,
6485 strlen(p_StatusCB->deviceName) < BTRMGR_NAME_LEN_MAX ? strlen (p_StatusCB->deviceName) : BTRMGR_NAME_LEN_MAX - 1);
6486 strncpy(lstEventMessage.m_discoveredDevice.m_deviceAddress, p_StatusCB->deviceAddress,
6487 strlen(p_StatusCB->deviceAddress) < BTRMGR_NAME_LEN_MAX ? strlen (p_StatusCB->deviceAddress) : BTRMGR_NAME_LEN_MAX - 1);
6490 lstEventMessage.m_eventType = BTRMGR_EVENT_DEVICE_PAIRING_COMPLETE;
6491 if (gfpcBBTRMgrEventOut) {
6492 gfpcBBTRMgrEventOut(lstEventMessage);
6495 if (p_StatusCB->eDeviceType == enBTRCoreHID) {
6500 case enBTRCoreDevStInitialized:
6502 case enBTRCoreDevStConnecting:
6504 case enBTRCoreDevStConnected:
6505 if (enBTRCoreDevStLost == p_StatusCB->eDevicePrevState || enBTRCoreDevStPaired == p_StatusCB->eDevicePrevState) {
6506 if (gIsAudOutStartupInProgress != BTRMGR_STARTUP_AUD_INPROGRESS) {
6507 unsigned char doPostCheck = 0;
6508 btrMgr_MapDevstatusInfoToEventInfo ((
void*)p_StatusCB, &lstEventMessage, BTRMGR_EVENT_DEVICE_FOUND);
6510 if ((lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_WEARABLE_HEADSET) ||
6511 (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_HANDSFREE) ||
6512 (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_LOUDSPEAKER) ||
6513 (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_HEADPHONES) ||
6514 (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_PORTABLE_AUDIO) ||
6515 (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_CAR_AUDIO) ||
6516 (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_HIFI_AUDIO_DEVICE) ){
6518 if (lstEventMessage.m_pairedDevice.m_isLastConnectedDevice) {
6519 btrMgr_PreCheckDiscoveryStatus (0, BTRMGR_DEVICE_OP_TYPE_AUDIO_OUTPUT);
6523 else if ((lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_HID) ||
6524 (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_HID_GAMEPAD)) {
6525 lstEventMessage.m_pairedDevice.m_deviceType = BTRMGR_DEVICE_TYPE_HID ;
6526 btrMgr_SetDevConnected(lstEventMessage.m_pairedDevice.m_deviceHandle, 1);
6529 if (gfpcBBTRMgrEventOut) {
6530 gfpcBBTRMgrEventOut(lstEventMessage);
6534 btrMgr_PostCheckDiscoveryStatus (0, BTRMGR_DEVICE_OP_TYPE_AUDIO_OUTPUT);
6538 else if (enBTRCoreDevStInitialized != p_StatusCB->eDevicePrevState) {
6539 btrMgr_MapDevstatusInfoToEventInfo ((
void*)p_StatusCB, &lstEventMessage, BTRMGR_EVENT_DEVICE_CONNECTION_COMPLETE);
6540 lstEventMessage.m_pairedDevice.m_isConnected = 1;
6542 if ((lstEventMessage.m_pairedDevice.m_deviceType != BTRMGR_DEVICE_TYPE_WEARABLE_HEADSET) &&
6543 (lstEventMessage.m_pairedDevice.m_deviceType != BTRMGR_DEVICE_TYPE_HANDSFREE) &&
6544 (lstEventMessage.m_pairedDevice.m_deviceType != BTRMGR_DEVICE_TYPE_LOUDSPEAKER) &&
6545 (lstEventMessage.m_pairedDevice.m_deviceType != BTRMGR_DEVICE_TYPE_HEADPHONES) &&
6546 (lstEventMessage.m_pairedDevice.m_deviceType != BTRMGR_DEVICE_TYPE_PORTABLE_AUDIO) &&
6547 (lstEventMessage.m_pairedDevice.m_deviceType != BTRMGR_DEVICE_TYPE_CAR_AUDIO) &&
6548 (lstEventMessage.m_pairedDevice.m_deviceType != BTRMGR_DEVICE_TYPE_HIFI_AUDIO_DEVICE)) {
6551 if ((lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_HID) ||
6552 (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_HID_GAMEPAD)) {
6553 lstEventMessage.m_pairedDevice.m_deviceType = BTRMGR_DEVICE_TYPE_HID;
6554 BTRMGRLOG_WARN (
"\n Sending Event for HID ");
6555 btrMgr_SetDevConnected(lstEventMessage.m_pairedDevice.m_deviceHandle, 1);
6557 else if (lstEventMessage.m_pairedDevice.m_deviceType != BTRMGR_DEVICE_TYPE_TILE) {
6558 btrMgr_SetDevConnected(lstEventMessage.m_pairedDevice.m_deviceHandle, 1);
6559 ghBTRMgrDevHdlLastConnected = lstEventMessage.m_pairedDevice.m_deviceHandle;
6563 if (gfpcBBTRMgrEventOut) {
6564 gfpcBBTRMgrEventOut(lstEventMessage);
6569 case enBTRCoreDevStDisconnected:
6570 if (enBTRCoreDevStConnecting != p_StatusCB->eDevicePrevState) {
6571 btrMgr_MapDevstatusInfoToEventInfo ((
void*)p_StatusCB, &lstEventMessage, BTRMGR_EVENT_DEVICE_DISCONNECT_COMPLETE);
6575 if (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_HID_GAMEPAD)
6576 lstEventMessage.m_pairedDevice.m_deviceType = BTRMGR_DEVICE_TYPE_HID;
6578 if (gfpcBBTRMgrEventOut) {
6579 gfpcBBTRMgrEventOut(lstEventMessage);
6582 BTRMGRLOG_INFO (
"lstEventMessage.m_pairedDevice.m_deviceType = %d\n", lstEventMessage.m_pairedDevice.m_deviceType);
6583 if (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_TILE) {
6585 gIsLeDeviceConnected = 0;
6587 else if ((lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_HID) ||
6588 (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_HID_GAMEPAD)) {
6589 btrMgr_SetDevConnected(lstEventMessage.m_pairedDevice.m_deviceHandle, 0);
6591 else if ((ghBTRMgrDevHdlCurStreaming != 0) && (ghBTRMgrDevHdlCurStreaming == p_StatusCB->deviceId)) {
6593 btrMgr_SetDevConnected(lstEventMessage.m_pairedDevice.m_deviceHandle, 0);
6595 if (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_SMARTPHONE ||
6596 lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_TABLET) {
6600 BTRMGRLOG_ERROR (
"BTRMGR_StopAudioStreamingIn error \n ");
6602 ghBTRMgrDevHdlLastConnected = 0;
6607 BTRMGRLOG_ERROR (
"BTRMGR_StopAudioStreamingOut error \n ");
6611 else if ((btrMgr_IsDevConnected(lstEventMessage.m_pairedDevice.m_deviceHandle) == 1) &&
6612 (ghBTRMgrDevHdlLastConnected == lstEventMessage.m_pairedDevice.m_deviceHandle)) {
6614 if (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_SMARTPHONE ||
6615 lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_TABLET) {
6616 ghBTRMgrDevHdlLastConnected = 0;
6624 case enBTRCoreDevStLost:
6625 if( !gIsUserInitiated ) {
6627 btrMgr_MapDevstatusInfoToEventInfo ((
void*)p_StatusCB, &lstEventMessage, BTRMGR_EVENT_DEVICE_OUT_OF_RANGE);
6628 if ((lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_WEARABLE_HEADSET) ||
6629 (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_HANDSFREE) ||
6630 (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_LOUDSPEAKER) ||
6631 (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_HEADPHONES) ||
6632 (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_PORTABLE_AUDIO) ||
6633 (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_CAR_AUDIO) ||
6634 (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_HIFI_AUDIO_DEVICE)) {
6636 btrMgr_PreCheckDiscoveryStatus (0, BTRMGR_DEVICE_OP_TYPE_AUDIO_OUTPUT);
6638 if (gfpcBBTRMgrEventOut) {
6639 gfpcBBTRMgrEventOut(lstEventMessage);
6642 if ((ghBTRMgrDevHdlCurStreaming != 0) && (ghBTRMgrDevHdlCurStreaming == p_StatusCB->deviceId)) {
6644 btrMgr_SetDevConnected(lstEventMessage.m_pairedDevice.m_deviceHandle, 0);
6646 BTRMGRLOG_INFO (
"lstEventMessage.m_pairedDevice.m_deviceType = %d\n", lstEventMessage.m_pairedDevice.m_deviceType);
6647 if (lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_SMARTPHONE ||
6648 lstEventMessage.m_pairedDevice.m_deviceType == BTRMGR_DEVICE_TYPE_TABLET) {
6651 ghBTRMgrDevHdlLastConnected = 0;
6656 BTRMGRLOG_ERROR (
"BTRMGR_StopAudioStreamingOut error \n ");
6660 btrMgr_PostCheckDiscoveryStatus (0, BTRMGR_DEVICE_OP_TYPE_AUDIO_OUTPUT);
6663 gIsUserInitiated = 0;
6665 case enBTRCoreDevStPlaying:
6666 if (btrMgr_MapDeviceTypeFromCore(p_StatusCB->eDeviceClass) == BTRMGR_DEVICE_TYPE_SMARTPHONE ||
6667 btrMgr_MapDeviceTypeFromCore(p_StatusCB->eDeviceClass) == BTRMGR_DEVICE_TYPE_TABLET) {
6668 btrMgr_MapDevstatusInfoToEventInfo ((
void*)p_StatusCB, &lstEventMessage, BTRMGR_EVENT_RECEIVED_EXTERNAL_PLAYBACK_REQUEST);
6670 if (gfpcBBTRMgrEventOut) {
6671 gfpcBBTRMgrEventOut(lstEventMessage);
6675 case enBTRCoreDevStOpReady:
6676 if (btrMgr_MapDeviceTypeFromCore(p_StatusCB->eDeviceClass) == BTRMGR_DEVICE_TYPE_TILE) {
6677 memset(lstEventMessage.m_deviceOpInfo.m_deviceAddress,
'\0', BTRMGR_NAME_LEN_MAX);
6678 memset(lstEventMessage.m_deviceOpInfo.m_name,
'\0', BTRMGR_NAME_LEN_MAX);
6679 memset(lstEventMessage.m_deviceOpInfo.m_uuid,
'\0', BTRMGR_MAX_STR_LEN);
6680 btrMgr_MapDevstatusInfoToEventInfo ((
void*)p_StatusCB, &lstEventMessage, BTRMGR_EVENT_DEVICE_OP_READY);
6682 memset(lstEventMessage.m_deviceOpInfo.m_notifyData,
'\0', BTRMGR_MAX_DEV_OP_DATA_LEN);
6683 strncpy(lstEventMessage.m_deviceOpInfo.m_notifyData, p_StatusCB->devOpResponse,
6684 strlen(p_StatusCB->devOpResponse) < BTRMGR_MAX_DEV_OP_DATA_LEN ? strlen(p_StatusCB->devOpResponse) : BTRMGR_MAX_DEV_OP_DATA_LEN - 1);
6687 if (gfpcBBTRMgrEventOut) {
6688 gfpcBBTRMgrEventOut(lstEventMessage);
6692 case enBTRCoreDevStOpInfo:
6693 if (btrMgr_MapDeviceTypeFromCore(p_StatusCB->eDeviceClass) == BTRMGR_DEVICE_TYPE_TILE) {
6694 memset(lstEventMessage.m_deviceOpInfo.m_deviceAddress,
'\0', BTRMGR_NAME_LEN_MAX);
6695 memset(lstEventMessage.m_deviceOpInfo.m_name,
'\0', BTRMGR_NAME_LEN_MAX);
6696 memset(lstEventMessage.m_deviceOpInfo.m_uuid,
'\0', BTRMGR_MAX_STR_LEN);
6697 btrMgr_MapDevstatusInfoToEventInfo ((
void*)p_StatusCB, &lstEventMessage, BTRMGR_EVENT_DEVICE_OP_INFORMATION);
6699 memset(lstEventMessage.m_deviceOpInfo.m_notifyData,
'\0', BTRMGR_MAX_DEV_OP_DATA_LEN);
6700 strncpy(lstEventMessage.m_deviceOpInfo.m_notifyData, p_StatusCB->devOpResponse,
6701 strlen(p_StatusCB->devOpResponse) < BTRMGR_MAX_DEV_OP_DATA_LEN ? strlen(p_StatusCB->devOpResponse) : BTRMGR_MAX_DEV_OP_DATA_LEN - 1);
6704 if (gfpcBBTRMgrEventOut) {
6705 gfpcBBTRMgrEventOut(lstEventMessage);
6708 else if (BTRMGR_LE_OP_READ_VALUE == (
BTRMGR_LeOp_t)p_StatusCB->eCoreLeOper) {
6709 btrMgr_MapDevstatusInfoToEventInfo((
void*)p_StatusCB, &lstEventMessage, BTRMGR_EVENT_DEVICE_OP_INFORMATION);
6711 if (gfpcBBTRMgrEventOut) {
6712 gfpcBBTRMgrEventOut(lstEventMessage);
6717 unsigned int ui32sleepIdx = 100;
6721 }
while ((gEventRespReceived == 0) && (--ui32sleepIdx));
6725 strncpy(p_StatusCB->devOpResponse, gLeReadOpResponse, BTRMGR_MAX_STR_LEN - 1);
6727 else if(BTRMGR_LE_OP_WRITE_VALUE == (
BTRMGR_LeOp_t)p_StatusCB->eCoreLeOper) {
6728 btrMgr_MapDevstatusInfoToEventInfo((
void*)p_StatusCB, &lstEventMessage, BTRMGR_EVENT_DEVICE_OP_INFORMATION);
6729 memset(lstEventMessage.m_deviceOpInfo.m_writeData,
'\0', BTRMGR_MAX_DEV_OP_DATA_LEN);
6730 strncpy(lstEventMessage.m_deviceOpInfo.m_writeData, p_StatusCB->devOpResponse,
6731 strlen(p_StatusCB->devOpResponse) < BTRMGR_MAX_DEV_OP_DATA_LEN ? strlen(p_StatusCB->devOpResponse) : BTRMGR_MAX_DEV_OP_DATA_LEN - 1);
6734 if (gfpcBBTRMgrEventOut) {
6735 gfpcBBTRMgrEventOut(lstEventMessage);
6746 return lenBtrCoreRet;
6751 btrMgr_DeviceDiscoveryCb (
6755 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
6757 BTRMGRLOG_TRACE (
"callback type = %d\n", astBTRCoreDiscoveryCbInfo->type);
6759 if (astBTRCoreDiscoveryCbInfo->type == enBTRCoreOpTypeDevice) {
6762 if ((ldiscoveryHdl = btrMgr_GetDiscoveryInProgress()) || (astBTRCoreDiscoveryCbInfo->device.bFound == FALSE)) {
6763 if (ldiscoveryHdl &&
6764 (btrMgr_GetDiscoveryDeviceType(ldiscoveryHdl) == BTRMGR_DEVICE_OP_TYPE_AUDIO_OUTPUT)) {
6773 if (((astBTRCoreDiscoveryCbInfo->device.enDeviceType == enBTRCore_DC_WearableHeadset) ||
6774 (astBTRCoreDiscoveryCbInfo->device.enDeviceType == enBTRCore_DC_Loudspeaker) ||
6775 (astBTRCoreDiscoveryCbInfo->device.enDeviceType == enBTRCore_DC_PortableAudio) ||
6776 (astBTRCoreDiscoveryCbInfo->device.enDeviceType == enBTRCore_DC_CarAudio) ||
6777 (astBTRCoreDiscoveryCbInfo->device.enDeviceType == enBTRCore_DC_HIFIAudioDevice) ||
6778 (astBTRCoreDiscoveryCbInfo->device.enDeviceType == enBTRCore_DC_Headphones)) &&
6779 (strlen(astBTRCoreDiscoveryCbInfo->device.pcDeviceName) == strlen(astBTRCoreDiscoveryCbInfo->device.pcDeviceAddress)) &&
6780 btrMgr_IsDevNameSameAsAddress(astBTRCoreDiscoveryCbInfo->device.pcDeviceName, astBTRCoreDiscoveryCbInfo->device.pcDeviceAddress, strlen(astBTRCoreDiscoveryCbInfo->device.pcDeviceName)) &&
6781 !btrMgr_CheckIfDevicePrevDetected(astBTRCoreDiscoveryCbInfo->device.tDeviceId)) {
6787 gIsDiscoveryOpInternal =
TRUE;
6788 lenBtrMgrRet = btrMgr_PauseDeviceDiscovery(0, ldiscoveryHdl);
6789 BTRMGRLOG_WARN (
"Called btrMgr_PauseDeviceDiscovery = %d\n", lenBtrMgrRet);
6791 lenBtrMgrResult = BTRMGR_GetDiscoveredDevices_Internal(0, &lstDiscDevices);
6792 BTRMGRLOG_WARN (
"Stored BTRMGR_GetDiscoveredDevices_Internal = %d\n", lenBtrMgrResult);
6794 lenBtrMgrRet = btrMgr_ResumeDeviceDiscovery(0, ldiscoveryHdl);
6795 BTRMGRLOG_WARN (
"Called btrMgr_ResumeDeviceDiscovery = %d\n", lenBtrMgrRet);
6799 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
6801 gIsDiscoveryOpInternal = FALSE;
6802 btrMgr_MapDevstatusInfoToEventInfo ((
void*)&astBTRCoreDiscoveryCbInfo->device, &lstEventMessage, BTRMGR_EVENT_DEVICE_DISCOVERY_UPDATE);
6804 if (gfpcBBTRMgrEventOut) {
6805 gfpcBBTRMgrEventOut(lstEventMessage);
6811 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
6813 if (!gIsHidGamePadEnabled &&
6814 (astBTRCoreDiscoveryCbInfo->device.enDeviceType == enBTRCore_DC_HID_GamePad)) {
6815 BTRMGRLOG_WARN (
"BTR HID Gamepad is currently Disabled!\n");
6816 return lenBtrCoreRet;
6819 btrMgr_MapDevstatusInfoToEventInfo ((
void*)&astBTRCoreDiscoveryCbInfo->device, &lstEventMessage, BTRMGR_EVENT_DEVICE_DISCOVERY_UPDATE);
6821 if (gfpcBBTRMgrEventOut) {
6822 gfpcBBTRMgrEventOut(lstEventMessage);
6827 else if (astBTRCoreDiscoveryCbInfo->type == enBTRCoreOpTypeAdapter) {
6828 BTRMGRLOG_INFO (
"adapter number = %d, discoverable = %d, discovering = %d\n",
6829 astBTRCoreDiscoveryCbInfo->adapter.adapter_number,
6830 astBTRCoreDiscoveryCbInfo->adapter.discoverable,
6831 astBTRCoreDiscoveryCbInfo->adapter.bDiscovering);
6833 gIsAdapterDiscovering = astBTRCoreDiscoveryCbInfo->adapter.bDiscovering;
6836 if (gfpcBBTRMgrEventOut && (gIsDiscoveryOpInternal == FALSE)) {
6838 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
6840 lstEventMessage.m_adapterIndex = astBTRCoreDiscoveryCbInfo->adapter.adapter_number;
6841 if (astBTRCoreDiscoveryCbInfo->adapter.bDiscovering) {
6842 lstEventMessage.m_eventType = BTRMGR_EVENT_DEVICE_DISCOVERY_STARTED;
6845 lstEventMessage.m_eventType = BTRMGR_EVENT_DEVICE_DISCOVERY_COMPLETE;
6848 gfpcBBTRMgrEventOut(lstEventMessage);
6854 return lenBtrCoreRet;
6859 btrMgr_ConnectionInIntimationCb (
6861 int* api32ConnInIntimResp,
6864 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
6869 unsigned char lui8AdapterIdx = 0;
6872 if (!apstConnCbInfo) {
6873 BTRMGRLOG_ERROR (
"Invaliid argument\n");
6874 return enBTRCoreInvalidArg;
6877 lBtrMgrDevType = btrMgr_MapDeviceTypeFromCore(apstConnCbInfo->stFoundDevice.enDeviceType);
6878 if(! ((BTRMGR_DEVICE_TYPE_HID == lBtrMgrDevType) || (BTRMGR_DEVICE_TYPE_HID_GAMEPAD == lBtrMgrDevType ))) {
6879 if (!gIsAudioInEnabled) {
6880 BTRMGRLOG_WARN (
"Incoming Connection Rejected - BTR AudioIn is currently Disabled!\n");
6881 *api32ConnInIntimResp = 0;
6882 return lenBtrCoreRet;
6886 lenBtrMgrRet = btrMgr_PreCheckDiscoveryStatus(lui8AdapterIdx, lBtrMgrDevType);
6888 if (eBTRMgrSuccess != lenBtrMgrRet) {
6889 BTRMGRLOG_ERROR (
"Pre Check Discovery State Rejected !!!\n");
6890 return enBTRCoreFailure;
6893 if (apstConnCbInfo->ui32devPassKey) {
6894 BTRMGRLOG_WARN (
"Incoming Connection passkey = %06d\n", apstConnCbInfo->ui32devPassKey);
6897 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
6898 btrMgr_MapDevstatusInfoToEventInfo ((
void*)apstConnCbInfo, &lstEventMessage, BTRMGR_EVENT_RECEIVED_EXTERNAL_PAIR_REQUEST);
6901 if ((BTRMGR_DEVICE_TYPE_HID == lBtrMgrDevType) || (BTRMGR_DEVICE_TYPE_HID_GAMEPAD == lBtrMgrDevType)) {
6902 gEventRespReceived = 0;
6903 gAcceptConnection = 0;
6906 if (gfpcBBTRMgrEventOut) {
6907 gfpcBBTRMgrEventOut(lstEventMessage);
6911 if (!apstConnCbInfo->ucIsReqConfirmation) {
6912 BTRMGRLOG_WARN (
"This paring request does not require a confirmation BUT it might need you to enter the PIN at the specified device\n");
6914 *api32ConnInIntimResp = 1;
6915 btrMgr_PostCheckDiscoveryStatus (lui8AdapterIdx, lBtrMgrDevType);
6916 return lenBtrCoreRet;
6921 unsigned int ui32sleepIdx = 50;
6925 }
while ((gEventRespReceived == 0) && (--ui32sleepIdx));
6929 BTRMGRLOG_ERROR (
"you picked %d\n", gAcceptConnection);
6930 if (gEventRespReceived && gAcceptConnection == 1) {
6931 BTRMGRLOG_ERROR (
"Pin-Passkey accepted\n");
6932 gAcceptConnection = 0;
6933 *api32ConnInIntimResp = 1;
6936 BTRMGRLOG_ERROR (
"Pin-Passkey Rejected\n");
6937 gAcceptConnection = 0;
6938 *api32ConnInIntimResp = 0;
6941 gEventRespReceived = 0;
6943 if (*api32ConnInIntimResp == 1) {
6944 BTRMGRLOG_INFO (
"Paired Successfully\n");
6945 lenBtrMgrResult = BTRMGR_RESULT_SUCCESS;
6946 lBtMgrOutEvent = BTRMGR_EVENT_DEVICE_PAIRING_COMPLETE;
6949 BTRMGRLOG_ERROR (
"Failed to pair a device\n");
6950 lenBtrMgrResult = BTRMGR_RESULT_GENERIC_FAILURE;
6951 lBtMgrOutEvent = BTRMGR_EVENT_DEVICE_PAIRING_FAILED;
6955 lstEventMessage.m_adapterIndex = lui8AdapterIdx;
6956 lstEventMessage.m_eventType = lBtMgrOutEvent;
6958 if (gfpcBBTRMgrEventOut) {
6959 gfpcBBTRMgrEventOut(lstEventMessage);
6962 btrMgr_PostCheckDiscoveryStatus (lui8AdapterIdx, lBtrMgrDevType);
6964 (void)lenBtrMgrResult;
6966 return lenBtrCoreRet;
6971 btrMgr_ConnectionInAuthenticationCb (
6973 int* api32ConnInAuthResp,
6976 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
6979 unsigned char lui8AdapterIdx = 0;
6982 if (!apstConnCbInfo) {
6983 BTRMGRLOG_ERROR (
"Invaliid argument\n");
6984 return enBTRCoreInvalidArg;
6987 lBtrMgrDevType = btrMgr_MapDeviceTypeFromCore(apstConnCbInfo->stKnownDevice.enDeviceType);
6989 lenBtrMgrRet = btrMgr_PreCheckDiscoveryStatus(lui8AdapterIdx, lBtrMgrDevType);
6991 if (eBTRMgrSuccess != lenBtrMgrRet) {
6992 BTRMGRLOG_ERROR (
"Pre Check Discovery State Rejected !!!\n");
6993 return enBTRCoreFailure;
6997 if (apstConnCbInfo->stKnownDevice.enDeviceType == enBTRCore_DC_SmartPhone ||
6998 apstConnCbInfo->stKnownDevice.enDeviceType == enBTRCore_DC_Tablet) {
7000 if (!gIsAudioInEnabled) {
7001 BTRMGRLOG_WARN (
"Incoming Connection Rejected - BTR AudioIn is currently Disabled!\n");
7002 *api32ConnInAuthResp = 0;
7003 btrMgr_PostCheckDiscoveryStatus (lui8AdapterIdx, lBtrMgrDevType);
7004 return lenBtrCoreRet;
7007 BTRMGRLOG_WARN (
"Incoming Connection from BT SmartPhone/Tablet\n");
7009 if (apstConnCbInfo->stKnownDevice.tDeviceId != ghBTRMgrDevHdlLastConnected) {
7012 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
7013 btrMgr_MapDevstatusInfoToEventInfo ((
void*)apstConnCbInfo, &lstEventMessage, BTRMGR_EVENT_RECEIVED_EXTERNAL_CONNECT_REQUEST);
7015 if (gfpcBBTRMgrEventOut) {
7016 gfpcBBTRMgrEventOut(lstEventMessage);
7024 unsigned int ui32sleepIdx = 50;
7028 }
while ((gEventRespReceived == 0) && (--ui32sleepIdx));
7032 if (gEventRespReceived == 1) {
7033 BTRMGRLOG_ERROR (
"you picked %d\n", gAcceptConnection);
7034 if (gAcceptConnection == 1) {
7035 BTRMGRLOG_WARN (
"Incoming Connection accepted\n");
7037 if (ghBTRMgrDevHdlLastConnected) {
7038 BTRMGRLOG_DEBUG (
"Disconnecting from previous AudioIn connection(%llu)!\n", ghBTRMgrDevHdlLastConnected);
7041 BTRMGRLOG_ERROR (
"Failed to Disconnect from previous AudioIn connection(%llu)!\n", ghBTRMgrDevHdlLastConnected);
7046 ghBTRMgrDevHdlLastConnected = lstEventMessage.m_externalDevice.m_deviceHandle;
7049 BTRMGRLOG_ERROR (
"Incoming Connection denied\n");
7052 *api32ConnInAuthResp = gAcceptConnection;
7055 BTRMGRLOG_ERROR (
"Incoming Connection Rejected\n");
7056 *api32ConnInAuthResp = 0;
7059 gEventRespReceived = 0;
7062 BTRMGRLOG_ERROR (
"Incoming Connection From Dev = %lld Status %d LastConnectedDev = %lld\n", apstConnCbInfo->stKnownDevice.tDeviceId, gAcceptConnection, ghBTRMgrDevHdlLastConnected);
7063 *api32ConnInAuthResp = gAcceptConnection;
7066 else if ((apstConnCbInfo->stKnownDevice.enDeviceType == enBTRCore_DC_WearableHeadset) ||
7067 (apstConnCbInfo->stKnownDevice.enDeviceType == enBTRCore_DC_Loudspeaker) ||
7068 (apstConnCbInfo->stKnownDevice.enDeviceType == enBTRCore_DC_PortableAudio) ||
7069 (apstConnCbInfo->stKnownDevice.enDeviceType == enBTRCore_DC_CarAudio) ||
7070 (apstConnCbInfo->stKnownDevice.enDeviceType == enBTRCore_DC_HIFIAudioDevice) ||
7071 (apstConnCbInfo->stKnownDevice.enDeviceType == enBTRCore_DC_Headphones)) {
7073 BTRMGRLOG_WARN (
"Incoming Connection from BT Speaker/Headset\n");
7074 if (btrMgr_GetDevPaired(apstConnCbInfo->stKnownDevice.tDeviceId) && (apstConnCbInfo->stKnownDevice.tDeviceId == ghBTRMgrDevHdlLastConnected)) {
7076 BTRMGRLOG_DEBUG (
"Paired - Last Connected device...\n");
7078 if (gIsAudOutStartupInProgress != BTRMGR_STARTUP_AUD_INPROGRESS) {
7081 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
7082 btrMgr_MapDevstatusInfoToEventInfo ((
void*)apstConnCbInfo, &lstEventMessage, BTRMGR_EVENT_RECEIVED_EXTERNAL_CONNECT_REQUEST);
7085 if (gfpcBBTRMgrEventOut) {
7086 gfpcBBTRMgrEventOut(lstEventMessage);
7091 unsigned int ui32sleepIdx = 4;
7095 }
while ((gEventRespReceived == 0) && (--ui32sleepIdx));
7097 gEventRespReceived = 0;
7101 BTRMGRLOG_WARN (
"Incoming Connection accepted\n");
7102 *api32ConnInAuthResp = 1;
7105 BTRMGRLOG_ERROR (
"Incoming Connection denied\n");
7106 *api32ConnInAuthResp = 0;
7109 else if ((apstConnCbInfo->stKnownDevice.enDeviceType == enBTRCore_DC_HID_Keyboard) ||
7110 (apstConnCbInfo->stKnownDevice.enDeviceType == enBTRCore_DC_HID_Mouse) ||
7111 (apstConnCbInfo->stKnownDevice.enDeviceType == enBTRCore_DC_HID_MouseKeyBoard) ||
7112 (apstConnCbInfo->stKnownDevice.enDeviceType == enBTRCore_DC_HID_AudioRemote) ||
7113 (apstConnCbInfo->stKnownDevice.enDeviceType == enBTRCore_DC_HID_Joystick) ||
7114 (apstConnCbInfo->stKnownDevice.enDeviceType == enBTRCore_DC_HID_GamePad)) {
7117 if ((!gIsHidGamePadEnabled) && (apstConnCbInfo->stKnownDevice.enDeviceType == enBTRCore_DC_HID_GamePad)) {
7118 BTRMGRLOG_WARN (
"Incoming Connection Rejected - BTR GamePad is currently Disabled!\n");
7119 *api32ConnInAuthResp = 0;
7120 btrMgr_PostCheckDiscoveryStatus (lui8AdapterIdx, lBtrMgrDevType);
7121 return lenBtrCoreRet;
7124 BTRMGRLOG_WARN (
"Incoming Connection from BT HID device\n");
7128 if (btrMgr_GetDevPaired(apstConnCbInfo->stKnownDevice.tDeviceId)) {
7131 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
7132 btrMgr_MapDevstatusInfoToEventInfo ((
void*)apstConnCbInfo, &lstEventMessage, BTRMGR_EVENT_RECEIVED_EXTERNAL_CONNECT_REQUEST);
7135 if (gfpcBBTRMgrEventOut) {
7136 gfpcBBTRMgrEventOut(lstEventMessage);
7141 unsigned int ui32sleepIdx = 40;
7145 }
while ((gEventRespReceived == 0) && (--ui32sleepIdx));
7148 if (gEventRespReceived == 0)
7149 *api32ConnInAuthResp = 1;
7151 *api32ConnInAuthResp = gAcceptConnection;
7154 gEventRespReceived = 0;
7157 BTRMGRLOG_WARN (
"Incoming Connection accepted - %d\n", *api32ConnInAuthResp);
7160 BTRMGRLOG_ERROR (
"Incoming Connection denied\n");
7161 *api32ConnInAuthResp = 0;
7166 BTRMGRLOG_ERROR (
"Incoming Connection Auth Callback\n");
7169 btrMgr_PostCheckDiscoveryStatus (lui8AdapterIdx, lBtrMgrDevType);
7171 return lenBtrCoreRet;
7176 btrMgr_MediaStatusCb (
7180 enBTRCoreRet lenBtrCoreRet = enBTRCoreSuccess;
7183 memset (&lstEventMessage, 0,
sizeof(lstEventMessage));
7185 BTRMGRLOG_INFO (
"Received media status callback\n");
7187 if (mediaStatusCB) {
7190 lstEventMessage.m_mediaInfo.m_deviceHandle = mediaStatusCB->deviceId;
7191 lstEventMessage.m_mediaInfo.m_deviceType = btrMgr_MapDeviceTypeFromCore(mediaStatusCB->eDeviceClass);
7192 strncpy (lstEventMessage.m_mediaInfo.m_name, mediaStatusCB->deviceName, BTRMGR_NAME_LEN_MAX -1);
7193 lstEventMessage.m_mediaInfo.m_name[BTRMGR_NAME_LEN_MAX -1] =
'\0';
7195 switch (mediaStatus->eBTMediaStUpdate) {
7196 case eBTRCoreMediaTrkStStarted:
7197 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_TRACK_STARTED;
7198 gMediaPlaybackStPrev = lstEventMessage.m_eventType;
7199 memcpy(&lstEventMessage.m_mediaInfo.m_mediaPositionInfo, &mediaStatus->m_mediaPositionInfo,
sizeof(
BTRMGR_MediaPositionInfo_t));
7201 case eBTRCoreMediaTrkStPlaying:
7202 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_TRACK_PLAYING;
7203 gMediaPlaybackStPrev = lstEventMessage.m_eventType;
7204 memcpy(&lstEventMessage.m_mediaInfo.m_mediaPositionInfo, &mediaStatus->m_mediaPositionInfo,
sizeof(
BTRMGR_MediaPositionInfo_t));
7206 case eBTRCoreMediaTrkStPaused:
7207 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_TRACK_PAUSED;
7208 gMediaPlaybackStPrev = lstEventMessage.m_eventType;
7209 memcpy(&lstEventMessage.m_mediaInfo.m_mediaPositionInfo, &mediaStatus->m_mediaPositionInfo,
sizeof(
BTRMGR_MediaPositionInfo_t));
7211 case eBTRCoreMediaTrkStStopped:
7212 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_TRACK_STOPPED;
7213 gMediaPlaybackStPrev = lstEventMessage.m_eventType;
7214 memcpy(&lstEventMessage.m_mediaInfo.m_mediaPositionInfo, &mediaStatus->m_mediaPositionInfo,
sizeof(
BTRMGR_MediaPositionInfo_t));
7216 case eBTRCoreMediaTrkPosition:
7217 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_TRACK_POSITION;
7218 gMediaPlaybackStPrev = lstEventMessage.m_eventType;
7219 memcpy(&lstEventMessage.m_mediaInfo.m_mediaPositionInfo, &mediaStatus->m_mediaPositionInfo,
sizeof(
BTRMGR_MediaPositionInfo_t));
7221 case eBTRCoreMediaTrkStChanged:
7222 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_TRACK_CHANGED;
7223 gMediaPlaybackStPrev = lstEventMessage.m_eventType;
7224 memcpy(&lstEventMessage.m_mediaInfo.m_mediaTrackInfo, &mediaStatus->m_mediaTrackInfo,
sizeof(
BTRMGR_MediaTrackInfo_t));
7226 case eBTRCoreMediaPlaybackEnded:
7227 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_PLAYBACK_ENDED;
7228 gMediaPlaybackStPrev = lstEventMessage.m_eventType;
7230 case eBTRCoreMediaPlyrName:
7231 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_PLAYER_NAME;
7232 strncpy (lstEventMessage.m_mediaInfo.m_mediaPlayerName, mediaStatus->m_mediaPlayerName, BTRMGR_MAX_STR_LEN -1);
7234 case eBTRCoreMediaPlyrEqlzrStOff:
7235 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_PLAYER_EQUALIZER_OFF;
7237 case eBTRCoreMediaPlyrEqlzrStOn:
7238 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_PLAYER_EQUALIZER_ON;
7240 case eBTRCoreMediaPlyrShflStOff:
7241 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_PLAYER_SHUFFLE_OFF;
7243 case eBTRCoreMediaPlyrShflStAllTracks:
7244 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_PLAYER_SHUFFLE_ALLTRACKS;
7246 case eBTRCoreMediaPlyrShflStGroup:
7247 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_PLAYER_SHUFFLE_GROUP;
7249 case eBTRCoreMediaPlyrRptStOff:
7250 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_PLAYER_REPEAT_OFF;
7252 case eBTRCoreMediaPlyrRptStSingleTrack:
7253 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_PLAYER_REPEAT_SINGLETRACK;
7255 case eBTRCoreMediaPlyrRptStAllTracks:
7256 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_PLAYER_REPEAT_ALLTRACKS;
7258 case eBTRCoreMediaPlyrRptStGroup:
7259 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_PLAYER_REPEAT_GROUP;
7261 case eBTRCoreMediaPlyrVolume:
7262 if ((lstEventMessage.m_mediaInfo.m_deviceType == BTRMGR_DEVICE_TYPE_WEARABLE_HEADSET) ||
7263 (lstEventMessage.m_mediaInfo.m_deviceType == BTRMGR_DEVICE_TYPE_HANDSFREE) ||
7264 (lstEventMessage.m_mediaInfo.m_deviceType == BTRMGR_DEVICE_TYPE_LOUDSPEAKER) ||
7265 (lstEventMessage.m_mediaInfo.m_deviceType == BTRMGR_DEVICE_TYPE_HEADPHONES) ||
7266 (lstEventMessage.m_mediaInfo.m_deviceType == BTRMGR_DEVICE_TYPE_PORTABLE_AUDIO) ||
7267 (lstEventMessage.m_mediaInfo.m_deviceType == BTRMGR_DEVICE_TYPE_CAR_AUDIO) ||
7268 (lstEventMessage.m_mediaInfo.m_deviceType == BTRMGR_DEVICE_TYPE_HIFI_AUDIO_DEVICE)) {
7270 gboolean lbMuted = FALSE;
7271 unsigned char lui8Volume = BTRMGR_SO_MAX_VOLUME - 1;
7273 #ifdef RDKTV_PERSIST_VOLUME_SKY
7274 if (btrMgr_GetLastVolume(0, &lui8Volume) == eBTRMgrSuccess) {
7277 if (btrMgr_GetLastMuteState(0, &lbMuted) == eBTRMgrSuccess) {
7280 if (btrMgr_SetLastVolume(0, mediaStatus->m_mediaPlayerVolume) == eBTRMgrSuccess) {
7283 lstEventMessage.m_eventType = BTRMGR_EVENT_DEVICE_MEDIA_STATUS;
7284 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_ui8mediaDevVolume = mediaStatus->m_mediaPlayerVolume;
7285 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_ui8mediaDevMute = (
unsigned char)lbMuted;
7286 gui8IsSoDevAvrcpSupported = 1;
7288 if (mediaStatus->m_mediaPlayerVolume > lui8Volume)
7289 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_enmediaCtrlCmd = BTRMGR_MEDIA_CTRL_VOLUMEUP;
7290 else if (mediaStatus->m_mediaPlayerVolume < lui8Volume)
7291 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_enmediaCtrlCmd = BTRMGR_MEDIA_CTRL_VOLUMEDOWN;
7293 lstEventMessage.m_mediaInfo.m_mediaDevStatus.m_enmediaCtrlCmd = BTRMGR_MEDIA_CTRL_UNKNOWN;
7297 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_PLAYER_VOLUME;
7298 lstEventMessage.m_mediaInfo.m_mediaPlayerVolume = mediaStatus->m_mediaPlayerVolume;
7302 case eBTRCoreMediaElementInScope:
7303 switch (mediaStatus->m_mediaElementInfo.eAVMedElementType) {
7304 case enBTRCoreMedETypeAlbum:
7305 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_ALBUM_INFO;
7307 case enBTRCoreMedETypeArtist:
7308 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_ARTIST_INFO;
7310 case enBTRCoreMedETypeGenre:
7311 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_GENRE_INFO;
7313 case enBTRCoreMedETypeCompilation:
7314 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_COMPILATION_INFO;
7316 case enBTRCoreMedETypePlayList:
7317 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_PLAYLIST_INFO;
7319 case enBTRCoreMedETypeTrackList:
7320 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_TRACKLIST_INFO;
7322 case enBTRCoreMedETypeTrack:
7323 lstEventMessage.m_eventType = BTRMGR_EVENT_MEDIA_TRACK_INFO;
7329 lstEventMessage.m_mediaInfo.m_mediaTrackListInfo.m_numberOfElements = 1;
7330 lstEventMessage.m_mediaInfo.m_mediaTrackListInfo.m_mediaElementInfo[0].m_mediaElementHdl = mediaStatus->m_mediaElementInfo.ui32MediaElementId;
7332 if ((lstEventMessage.m_mediaInfo.m_mediaTrackListInfo.m_mediaElementInfo[0].m_IsPlayable = mediaStatus->m_mediaElementInfo.bIsPlayable)) {
7333 memcpy (&lstEventMessage.m_mediaInfo.m_mediaTrackListInfo.m_mediaElementInfo[0].m_mediaTrackInfo, &mediaStatus->m_mediaElementInfo.m_mediaTrackInfo,
sizeof(
BTRMGR_MediaTrackInfo_t));
7336 strncpy (lstEventMessage.m_mediaInfo.m_mediaTrackListInfo.m_mediaElementInfo[0].m_mediaElementName, mediaStatus->m_mediaElementInfo.m_mediaElementName, BTRMGR_MAX_STR_LEN -1);
7339 case eBTRCoreMediaElementOofScope:
7340 lstEventMessage.m_eventType = BTRMGR_EVENT_MAX;
7348 if (gfpcBBTRMgrEventOut) {
7349 gfpcBBTRMgrEventOut(lstEventMessage);
7353 switch (mediaStatus->eBTMediaStUpdate) {
7354 case eBTRCoreMediaTrkStStarted:
7356 case eBTRCoreMediaTrkStPlaying:
7358 case eBTRCoreMediaTrkStPaused:
7360 case eBTRCoreMediaTrkStStopped:
7362 case eBTRCoreMediaTrkPosition:
7364 case eBTRCoreMediaTrkStChanged:
7366 case eBTRCoreMediaPlaybackEnded:
7368 case eBTRCoreMediaPlyrName:
7370 case eBTRCoreMediaPlyrEqlzrStOff:
7372 case eBTRCoreMediaPlyrEqlzrStOn:
7374 case eBTRCoreMediaPlyrShflStOff:
7376 case eBTRCoreMediaPlyrShflStAllTracks:
7378 case eBTRCoreMediaPlyrShflStGroup:
7380 case eBTRCoreMediaPlyrRptStOff:
7382 case eBTRCoreMediaPlyrRptStSingleTrack:
7384 case eBTRCoreMediaPlyrRptStAllTracks:
7386 case eBTRCoreMediaPlyrRptStGroup:
7388 case eBTRCoreMediaPlyrVolume:
7392 lstBtrMgrSiStatus.eBtrMgrState = eBTRMgrStateUnknown;
7393 lstBtrMgrSiStatus.eBtrMgrSFreq = eBTRMgrSFreqUnknown;
7394 lstBtrMgrSiStatus.eBtrMgrSFmt = eBTRMgrSFmtUnknown;
7395 lstBtrMgrSiStatus.eBtrMgrAChan = eBTRMgrAChanUnknown;
7396 lstBtrMgrSiStatus.ui8Volume = mediaStatus->m_mediaPlayerVolume;
7398 if (gstBTRMgrStreamingInfo.hBTRMgrSiHdl &&
7399 ((lstEventMessage.m_mediaInfo.m_deviceType == BTRMGR_DEVICE_TYPE_SMARTPHONE) ||
7400 (lstEventMessage.m_mediaInfo.m_deviceType == BTRMGR_DEVICE_TYPE_TABLET))) {
7401 if (
BTRMgr_SI_SetStatus(gstBTRMgrStreamingInfo.hBTRMgrSiHdl, &lstBtrMgrSiStatus) != eBTRMgrSuccess) {
7402 BTRMGRLOG_WARN (
"BTRMgr_SI_SetStatus FAILED - eBTRCoreMediaPlyrVolume\n");
7407 case eBTRCoreMediaElementInScope:
7409 case eBTRCoreMediaElementOofScope:
7417 return lenBtrCoreRet;