Is there any one tried to get CC254x (even CC26xx) working with the latest Android 6.x Marshmallow? We heard there are issues from multiple sources. We are still looking for any Android 6 device to confirm. Will get back here and let everyone know once we have a device to test it.
Ed (TI): ** Update Dec 9, 2015: See Dec 9 post confirming Android 6.0.1 (Nexus 5) update is now compatible with BLE 1.4.0 and earlier BLE-Stack releases. Peripherals that are Pairing with Android devices that do not yet incorporate this change will need BLE 1.4.1 to remain compatible with smart devices that implement LE Secure Connections (BT4.2) Pairing.
Ed (TI): ** Update October 2016: Reports of compatibility issues with Android N and BLE-Stack 1.4.2/1.4.2 are not related to Pairing. An update to improve the performance of the SNV read operations can be made by replacing the findItem() function in osal_snv.c with the version in the the attached findItem.txt.
/**************************************************************************************************
Filename: osal_snv.c (patched)
Revised: $Date: 2013-02-15 10:12:26 -0800 (Fri, 15 Feb 2013) $
Revision: $Revision: 33143 $
Description: This module contains the OSAL simple non-volatile memory functions.
Copyright 2009-2013 Texas Instruments Incorporated. All rights reserved.
IMPORTANT: Your use of this Software is limited to those specific rights
granted under the terms of a software license agreement between the user
who downloaded the software, his/her employer (which must be your employer)
and Texas Instruments Incorporated (the "License"). You may not use this
Software unless you agree to abide by the terms of the License. The License
limits your use, and you acknowledge, that the Software may not be modified,
copied or distributed unless embedded on a Texas Instruments microcontroller
or used solely and exclusively in conjunction with a Texas Instruments radio
frequency transceiver, which is integrated into your product. Other than for
the foregoing purpose, you may not use, reproduce, copy, prepare derivative
works of, modify, distribute, perform, display or sell this Software and/or
its documentation for any purpose.
YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE
PROVIDED �AS IS� WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED,
INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE,
NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL
TEXAS INSTRUMENTS OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT,
NEGLIGENCE, STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER
LEGAL EQUITABLE THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES
INCLUDING BUT NOT LIMITED TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE
OR CONSEQUENTIAL DAMAGES, LOST PROFITS OR LOST DATA, COST OF PROCUREMENT
OF SUBSTITUTE GOODS, TECHNOLOGY, SERVICES, OR ANY CLAIMS BY THIRD PARTIES
(INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF), OR OTHER SIMILAR COSTS.
Should you have any questions regarding your right to use this Software,
contact Texas Instruments Incorporated at www.TI.com.
**************************************************************************************************/
/*********************************************************************
* @fn findItem
*
* @brief find a valid item from a designated page and offset
*
* @param pg - NV page
* @param offset - offset in the NV page from where to start
* search up.
* Usually this paramter is set to the empty space
* offset.
* @param id - NV item ID to search for
*
* @return offset of the item, 0 when not found
*/
static uint16 findItem(uint8 pg, uint16 offset, osalSnvId_t id)
{
halIntState_t is;
offset -= OSAL_NV_WORD_SIZE;
// Calculate the offset into the containing flash bank as it gets mapped into XDATA.
uint8 *ptrBase = (uint8 *)(HAL_FLASH_PAGE_MAP) +
((pg % HAL_FLASH_PAGE_PER_BANK) * HAL_FLASH_PAGE_SIZE);
uint8 memctr = MEMCTR; // Save to restore.
pg /= HAL_FLASH_PAGE_PER_BANK;
while (offset >= OSAL_NV_PAGE_HDR_SIZE)
{
osalNvItemHdr_t hdr;
HAL_ENTER_CRITICAL_SECTION(is);
//HalFlashRead(pg, offset, (uint8 *) &hdr, OSAL_NV_WORD_SIZE);
MEMCTR = (MEMCTR & 0xF8) | pg;
for (uint8 i = 0; i < OSAL_NV_WORD_SIZE; ++i)
((uint8*)&hdr)[i] = ptrBase[offset + i];
MEMCTR = memctr;
HAL_EXIT_CRITICAL_SECTION(is);
if (hdr.id == id)
{
// item found
// length field could be corrupt. Mask invalid length mark.
uint8 len = hdr.len & ~OSAL_NV_INVALID_LEN_MARK;
return offset - len;
}
else if (hdr.len & OSAL_NV_INVALID_LEN_MARK)
{
offset -= OSAL_NV_WORD_SIZE;
}
else
{
// valid length field
if (hdr.len + OSAL_NV_WORD_SIZE <= offset)
{
// valid length
offset -= hdr.len + OSAL_NV_WORD_SIZE;
}
else
{
// active page is corrupt
// This could happen if NV initialization failed upon failure to erase
// page and active page is set to uncleanly erased page.
HAL_ASSERT_FORCED();
return 0;
}
}
}
return 0;
}
Ed (TI): ** Update May 2018: TI has fielded inquires about peripheral devices not detected after upgrading to Android 8. Previously, these devices were detected with the same handset running Android 7 (or earlier). The issue has been traced to improperly formatted data within the peripheral's ADV or scan response (SCAN_RSP) PDU. Specifically, if the length byte in the ADV or scan response does not match the actual payload of the proceeding AD data type (e.g., Manufacture Specific Data), Android 8 will not present the peripheral device to the application. Please ensure that your advertData[] and scanRspData[] arrays properly set the "// length of this data" for the given AD data type.
Ed (TI): ** Update Apr 2019:TI has released BLE-Stack 1.5.0 for CC254x which is qualified to Bluetooth 5.0. This release addresses the "findItem" SNV limitation described above. Please see the release notes and porting guide which are included with the 1.5.0 SDK for details on upgrading and using this release.