/********************************************************************* * @fn oadManagerCharDiscovery * * @brief OAD Characteristics service discovery. * * @return none */ static void oadManagerCharDiscovery(void) { attReadByTypeReq_t req; req.startHandle = oadSvcStartHdl; req.endHandle = oadSvcEndHdl; req.type.len = ATT_UUID_SIZE; if ( oadManagerDiscIdx == 0 ) { uint8 oadCharUUID[ATT_UUID_SIZE] = { TI_BASE_UUID_128( OAD_IMG_IDENTIFY_UUID ) }; (void)osal_memcpy(req.type.uuid, oadCharUUID, ATT_UUID_SIZE); } else { uint8 oadCharUUID[ATT_UUID_SIZE] = { TI_BASE_UUID_128( OAD_IMG_BLOCK_UUID ) }; (void)osal_memcpy(req.type.uuid, oadCharUUID, ATT_UUID_SIZE); } if (GATT_DiscCharsByUUID(oadManagerConnHandle, &req, oadManagerTaskId) != SUCCESS) { (void)osal_set_event(oadManagerTaskId, CHAR_DISCOVERY_EVT); } }
/********************************************************************* * @fn oadManagerSvcDiscovery * * @brief OAD Service discovery. * * @return none */ static void oadManagerSvcDiscovery(void) { uint8 oadServUUID[ATT_UUID_SIZE] = { TI_BASE_UUID_128( OAD_SERVICE_UUID ) }; // Initialize service discovery variables oadSvcStartHdl = oadSvcEndHdl = 0; if (GATT_DiscPrimaryServiceByUUID(oadManagerConnHandle, oadServUUID, ATT_UUID_SIZE, oadManagerTaskId) != SUCCESS) { (void)osal_set_event(oadManagerTaskId, SVC_DISCOVERY_EVT); } }
/********************************************************************* * @fn oadManagerFindServUUID * * @brief Find the OAD Service UUID in an advertiser's service UUID list. * * @return TRUE if service UUID found */ static bool oadManagerFindServUUID( uint8 *pData, uint8 dataLen ) { uint8 adLen; uint8 adType; uint8 *pEnd; pEnd = pData + dataLen - 1; // While end of data not reached while ( pData < pEnd ) { // Get length of next AD item adLen = *pData++; if ( adLen > 0 ) { adType = *pData; if ( adType == GAP_ADTYPE_128BIT_MORE || adType == GAP_ADTYPE_128BIT_COMPLETE ) { pData++; adLen--; while ((adLen >= ATT_UUID_SIZE) && (pData < pEnd)) // For each UUID in list. { uint8 oadServUUID[ATT_UUID_SIZE] = { TI_BASE_UUID_128( OAD_SERVICE_UUID ) }; if (osal_memcmp(pData, oadServUUID, ATT_UUID_SIZE)) // Check for match. { return TRUE; // Match found } // Go to next pData += ATT_UUID_SIZE; adLen -= ATT_UUID_SIZE; } // Handle possible erroneous extra byte in UUID list if ( adLen == 1 ) { pData++; } } else // Go to next item { pData += adLen; } } } return FALSE; // Match not found }
/********************************************************************* * CONSTANTS */ /********************************************************************* * TYPEDEFS */ /********************************************************************* * GLOBAL VARIABLES */ // OAD Reset GATT Profile Service UUID static const uint8_t resetServUUID[ATT_UUID_SIZE] = { TI_BASE_UUID_128(OAD_RESET_SERVICE_UUID) }; static const uint8_t resetCharUUID[ATT_UUID_SIZE] = { TI_BASE_UUID_128(OAD_RESET_CHAR_UUID) }; /********************************************************************* * EXTERNAL VARIABLES */ /********************************************************************* * EXTERNAL FUNCTIONS */
#if !defined (OAD_IMAGE_A_USER_ID) #define OAD_IMAGE_A_USER_ID {'E', 'E', 'E', 'E'} #endif /********************************************************************* * MACROS */ /********************************************************************* * GLOBAL VARIABLES */ // OAD Service UUID static CONST uint8_t oadServUUID[ATT_UUID_SIZE] = { TI_BASE_UUID_128(OAD_SERVICE_UUID) }; static CONST uint8_t oadCharUUID[OAD_CHAR_CNT][ATT_UUID_SIZE] = { // OAD Image Identify UUID TI_BASE_UUID_128(OAD_IMG_IDENTIFY_UUID), // OAD Image Block Request/Response UUID TI_BASE_UUID_128(OAD_IMG_BLOCK_UUID) }; /********************************************************************* * Profile Attributes - variables */
/********************************************************************* * CONSTANTS */ /********************************************************************* * TYPEDEFS */ /********************************************************************* * GLOBAL VARIABLES */ // audio GATT Profile Service UUID: 0xB000 static CONST uint8 audioProfileServUUID[ATT_UUID_SIZE] = { TI_BASE_UUID_128(AUDIO_SERV_UUID) }; // Start/Stop Characteristic UUID: 0xB001 static CONST uint8 audioProfileStartUUID[ATT_UUID_SIZE] = { TI_BASE_UUID_128(AUDIOPROFILE_START_UUID) }; // Audio Stream Characteristic UUID: 0xB002 static CONST uint8 audioProfileAudioUUID[ATT_UUID_SIZE] = { TI_BASE_UUID_128(AUDIOPROFILE_AUDIO_UUID) };