Loading system/bta/gatt/bta_gattc_act.c +6 −6 Original line number Diff line number Diff line Loading @@ -1667,12 +1667,11 @@ void bta_gattc_ci_load(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) APPL_TRACE_DEBUG("bta_gattc_ci_load conn_id=%d load status=%d" , p_clcb->bta_conn_id, p_data->ci_load.status ); bta_gattc_co_cache_close(p_clcb->p_srcb->server_bda, 0); if ((p_data->ci_load.status == BTA_GATT_OK || p_data->ci_load.status == BTA_GATT_MORE) && p_data->ci_load.num_attr > 0) if (p_data->ci_load.status == BTA_GATT_OK || p_data->ci_load.status == BTA_GATT_MORE) { if (p_data->ci_load.num_attr != 0) bta_gattc_rebuild_cache(p_clcb->p_srcb, p_data->ci_load.num_attr, p_data->ci_load.attr, p_clcb->p_srcb->attr_index); Loading @@ -1680,7 +1679,7 @@ void bta_gattc_ci_load(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) { p_clcb->p_srcb->attr_index = 0; bta_gattc_reset_discover_st(p_clcb->p_srcb, BTA_GATT_OK); bta_gattc_co_cache_close(p_clcb->p_srcb->server_bda, 0); } else /* load more */ { Loading @@ -1694,6 +1693,7 @@ void bta_gattc_ci_load(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) } else { bta_gattc_co_cache_close(p_clcb->p_srcb->server_bda, 0); p_clcb->p_srcb->state = BTA_GATTC_SERV_DISC; p_clcb->p_srcb->attr_index = 0; /* cache load failure, start discovery */ Loading system/btif/co/bta_gattc_co.c +64 −7 Original line number Diff line number Diff line Loading @@ -25,6 +25,43 @@ #if( defined BLE_INCLUDED ) && (BLE_INCLUDED == TRUE) #if( defined BTA_GATT_INCLUDED ) && (BTA_GATT_INCLUDED == TRUE) #define GATT_CACHE_PREFIX "/data/misc/bluedroid/gatt_cache_" static FILE* sCacheFD = 0; static void getFilename(char *buffer, BD_ADDR bda) { sprintf(buffer, "%s%02x%02x%02x%02x%02x%02x", GATT_CACHE_PREFIX , bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]); } static void cacheClose() { if (sCacheFD != 0) { fclose(sCacheFD); sCacheFD = 0; } } static bool cacheOpen(BD_ADDR bda, bool to_save) { char fname[255] = {0}; getFilename(fname, bda); cacheClose(); sCacheFD = fopen(fname, to_save ? "w" : "r"); return (sCacheFD != 0); } static void cacheReset(BD_ADDR bda) { char fname[255] = {0}; getFilename(fname, bda); unlink(fname); } /***************************************************************************** ** Function Declarations Loading @@ -47,10 +84,12 @@ *******************************************************************************/ void bta_gattc_co_cache_open(BD_ADDR server_bda, UINT16 evt, UINT16 conn_id, BOOLEAN to_save) { /* open NV cache and send call in */ tBTA_GATT_STATUS status = BTA_GATT_OK; UNUSED(to_save); if (!cacheOpen(server_bda, to_save)) status = BTA_GATT_ERROR; /* open NV cache and send call in */ BTIF_TRACE_DEBUG("%s() - status=%d", __FUNCTION__, status); bta_gattc_ci_cache_open(server_bda, evt, status, conn_id); } Loading @@ -73,11 +112,19 @@ void bta_gattc_co_cache_load(BD_ADDR server_bda, UINT16 evt, UINT16 start_index, { UINT16 num_attr = 0; tBTA_GATTC_NV_ATTR attr[BTA_GATTC_NV_LOAD_MAX]; tBTA_GATT_STATUS status = BTA_GATT_MORE; UNUSED(start_index); tBTA_GATT_STATUS status = BTA_GATT_ERROR; if (sCacheFD && (0 == fseek(sCacheFD, start_index * sizeof(tBTA_GATTC_NV_ATTR), SEEK_SET))) { num_attr = fread(attr, sizeof(tBTA_GATTC_NV_ATTR), BTA_GATTC_NV_LOAD_MAX, sCacheFD); status = (num_attr < BTA_GATTC_NV_LOAD_MAX ? BTA_GATT_OK : BTA_GATT_MORE); } BTIF_TRACE_DEBUG("%s() - sCacheFD=%p, start_index=%d, read=%d, status=%d", __FUNCTION__, sCacheFD, start_index, num_attr, status); bta_gattc_ci_cache_load(server_bda, evt, num_attr, attr, status, conn_id); } /******************************************************************************* ** ** Function bta_gattc_co_cache_save Loading @@ -98,10 +145,14 @@ void bta_gattc_co_cache_save (BD_ADDR server_bda, UINT16 evt, UINT16 num_attr, tBTA_GATTC_NV_ATTR *p_attr_list, UINT16 attr_index, UINT16 conn_id) { tBTA_GATT_STATUS status = BTA_GATT_OK; UNUSED(num_attr); UNUSED(p_attr_list); UNUSED(attr_index); if (sCacheFD != 0) { int num = fwrite(p_attr_list, sizeof(tBTA_GATTC_NV_ATTR), num_attr, sCacheFD); BTIF_TRACE_DEBUG("%s() wrote %d", __FUNCTION__, num); } bta_gattc_ci_cache_save(server_bda, evt, status, conn_id); } Loading @@ -122,8 +173,13 @@ void bta_gattc_co_cache_close(BD_ADDR server_bda, UINT16 conn_id) { UNUSED(server_bda); UNUSED(conn_id); cacheClose(); /* close NV when server cache is done saving or loading, does not need to do anything for now on Insight */ BTIF_TRACE_DEBUG("%s()", __FUNCTION__); } /******************************************************************************* Loading @@ -140,7 +196,8 @@ void bta_gattc_co_cache_close(BD_ADDR server_bda, UINT16 conn_id) *******************************************************************************/ void bta_gattc_co_cache_reset(BD_ADDR server_bda) { UNUSED(server_bda); BTIF_TRACE_DEBUG("%s()", __FUNCTION__); cacheReset(server_bda); } #endif Loading Loading
system/bta/gatt/bta_gattc_act.c +6 −6 Original line number Diff line number Diff line Loading @@ -1667,12 +1667,11 @@ void bta_gattc_ci_load(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) APPL_TRACE_DEBUG("bta_gattc_ci_load conn_id=%d load status=%d" , p_clcb->bta_conn_id, p_data->ci_load.status ); bta_gattc_co_cache_close(p_clcb->p_srcb->server_bda, 0); if ((p_data->ci_load.status == BTA_GATT_OK || p_data->ci_load.status == BTA_GATT_MORE) && p_data->ci_load.num_attr > 0) if (p_data->ci_load.status == BTA_GATT_OK || p_data->ci_load.status == BTA_GATT_MORE) { if (p_data->ci_load.num_attr != 0) bta_gattc_rebuild_cache(p_clcb->p_srcb, p_data->ci_load.num_attr, p_data->ci_load.attr, p_clcb->p_srcb->attr_index); Loading @@ -1680,7 +1679,7 @@ void bta_gattc_ci_load(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) { p_clcb->p_srcb->attr_index = 0; bta_gattc_reset_discover_st(p_clcb->p_srcb, BTA_GATT_OK); bta_gattc_co_cache_close(p_clcb->p_srcb->server_bda, 0); } else /* load more */ { Loading @@ -1694,6 +1693,7 @@ void bta_gattc_ci_load(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data) } else { bta_gattc_co_cache_close(p_clcb->p_srcb->server_bda, 0); p_clcb->p_srcb->state = BTA_GATTC_SERV_DISC; p_clcb->p_srcb->attr_index = 0; /* cache load failure, start discovery */ Loading
system/btif/co/bta_gattc_co.c +64 −7 Original line number Diff line number Diff line Loading @@ -25,6 +25,43 @@ #if( defined BLE_INCLUDED ) && (BLE_INCLUDED == TRUE) #if( defined BTA_GATT_INCLUDED ) && (BTA_GATT_INCLUDED == TRUE) #define GATT_CACHE_PREFIX "/data/misc/bluedroid/gatt_cache_" static FILE* sCacheFD = 0; static void getFilename(char *buffer, BD_ADDR bda) { sprintf(buffer, "%s%02x%02x%02x%02x%02x%02x", GATT_CACHE_PREFIX , bda[0], bda[1], bda[2], bda[3], bda[4], bda[5]); } static void cacheClose() { if (sCacheFD != 0) { fclose(sCacheFD); sCacheFD = 0; } } static bool cacheOpen(BD_ADDR bda, bool to_save) { char fname[255] = {0}; getFilename(fname, bda); cacheClose(); sCacheFD = fopen(fname, to_save ? "w" : "r"); return (sCacheFD != 0); } static void cacheReset(BD_ADDR bda) { char fname[255] = {0}; getFilename(fname, bda); unlink(fname); } /***************************************************************************** ** Function Declarations Loading @@ -47,10 +84,12 @@ *******************************************************************************/ void bta_gattc_co_cache_open(BD_ADDR server_bda, UINT16 evt, UINT16 conn_id, BOOLEAN to_save) { /* open NV cache and send call in */ tBTA_GATT_STATUS status = BTA_GATT_OK; UNUSED(to_save); if (!cacheOpen(server_bda, to_save)) status = BTA_GATT_ERROR; /* open NV cache and send call in */ BTIF_TRACE_DEBUG("%s() - status=%d", __FUNCTION__, status); bta_gattc_ci_cache_open(server_bda, evt, status, conn_id); } Loading @@ -73,11 +112,19 @@ void bta_gattc_co_cache_load(BD_ADDR server_bda, UINT16 evt, UINT16 start_index, { UINT16 num_attr = 0; tBTA_GATTC_NV_ATTR attr[BTA_GATTC_NV_LOAD_MAX]; tBTA_GATT_STATUS status = BTA_GATT_MORE; UNUSED(start_index); tBTA_GATT_STATUS status = BTA_GATT_ERROR; if (sCacheFD && (0 == fseek(sCacheFD, start_index * sizeof(tBTA_GATTC_NV_ATTR), SEEK_SET))) { num_attr = fread(attr, sizeof(tBTA_GATTC_NV_ATTR), BTA_GATTC_NV_LOAD_MAX, sCacheFD); status = (num_attr < BTA_GATTC_NV_LOAD_MAX ? BTA_GATT_OK : BTA_GATT_MORE); } BTIF_TRACE_DEBUG("%s() - sCacheFD=%p, start_index=%d, read=%d, status=%d", __FUNCTION__, sCacheFD, start_index, num_attr, status); bta_gattc_ci_cache_load(server_bda, evt, num_attr, attr, status, conn_id); } /******************************************************************************* ** ** Function bta_gattc_co_cache_save Loading @@ -98,10 +145,14 @@ void bta_gattc_co_cache_save (BD_ADDR server_bda, UINT16 evt, UINT16 num_attr, tBTA_GATTC_NV_ATTR *p_attr_list, UINT16 attr_index, UINT16 conn_id) { tBTA_GATT_STATUS status = BTA_GATT_OK; UNUSED(num_attr); UNUSED(p_attr_list); UNUSED(attr_index); if (sCacheFD != 0) { int num = fwrite(p_attr_list, sizeof(tBTA_GATTC_NV_ATTR), num_attr, sCacheFD); BTIF_TRACE_DEBUG("%s() wrote %d", __FUNCTION__, num); } bta_gattc_ci_cache_save(server_bda, evt, status, conn_id); } Loading @@ -122,8 +173,13 @@ void bta_gattc_co_cache_close(BD_ADDR server_bda, UINT16 conn_id) { UNUSED(server_bda); UNUSED(conn_id); cacheClose(); /* close NV when server cache is done saving or loading, does not need to do anything for now on Insight */ BTIF_TRACE_DEBUG("%s()", __FUNCTION__); } /******************************************************************************* Loading @@ -140,7 +196,8 @@ void bta_gattc_co_cache_close(BD_ADDR server_bda, UINT16 conn_id) *******************************************************************************/ void bta_gattc_co_cache_reset(BD_ADDR server_bda) { UNUSED(server_bda); BTIF_TRACE_DEBUG("%s()", __FUNCTION__); cacheReset(server_bda); } #endif Loading