diff --git a/epicardium/ble/app/common/app_db.c b/epicardium/ble/app/common/app_db.c index e4428f50751fd4407b3397c7111381314fd5ff45..285570f74739c49b92c0b95d450167f7fae15773 100644 --- a/epicardium/ble/app/common/app_db.c +++ b/epicardium/ble/app/common/app_db.c @@ -24,7 +24,6 @@ */ /* clang-format off */ /* clang-formet turned off for easier diffing against orginal file */ -#include <string.h> #include "wsf_types.h" #include "wsf_assert.h" #include "util/bda.h" @@ -33,6 +32,10 @@ #include "app_db.h" #include "app_cfg.h" +#include "epicardium.h" +#include <string.h> +#include <stdio.h> + /************************************************************************************************** Data Types **************************************************************************************************/ @@ -96,7 +99,24 @@ static appDbRec_t *pAppDbNewRec = appDb.rec; /*************************************************************************************************/ void AppDbInit(void) { - return; + int fd = epic_file_open("pairings.bin", "r"); + + if(fd >= 0) { + if(epic_file_read(fd, &appDb, sizeof(appDb)) != sizeof(appDb)) { + memset(&appDb, 0, sizeof(appDb)); + } + epic_file_close(fd); + } +} + +static void store(void) +{ + int fd = epic_file_open("pairings.bin", "w"); + if(fd >= 0) { + if(epic_file_write(fd, &appDb, sizeof(appDb)) != sizeof(appDb)) { + } + epic_file_close(fd); + } } /*************************************************************************************************/ @@ -145,6 +165,7 @@ appDbHdl_t AppDbNewRecord(uint8_t addrType, uint8_t *pAddr) pRec->peerAddedToRl = FALSE; pRec->peerRpao = FALSE; + store(); return (appDbHdl_t) pRec; } @@ -209,6 +230,7 @@ appDbHdl_t AppDbGetNextRecord(appDbHdl_t hdl) void AppDbDeleteRecord(appDbHdl_t hdl) { ((appDbRec_t *) hdl)->inUse = FALSE; + store(); } /*************************************************************************************************/ @@ -226,6 +248,7 @@ void AppDbValidateRecord(appDbHdl_t hdl, uint8_t keyMask) { ((appDbRec_t *) hdl)->valid = TRUE; ((appDbRec_t *) hdl)->keyValidMask = keyMask; + store(); } /*************************************************************************************************/ @@ -315,6 +338,7 @@ void AppDbDeleteAllRecords(void) { pRec->inUse = FALSE; } + store(); } /*************************************************************************************************/ @@ -461,6 +485,7 @@ void AppDbSetKey(appDbHdl_t hdl, dmSecKeyIndEvt_t *pKey) default: break; } + store(); } /*************************************************************************************************/ @@ -493,6 +518,7 @@ void AppDbSetCccTblValue(appDbHdl_t hdl, uint16_t idx, uint16_t value) WSF_ASSERT(idx < APP_DB_NUM_CCCD); ((appDbRec_t *) hdl)->cccTbl[idx] = value; + store(); } /*************************************************************************************************/ @@ -522,6 +548,7 @@ uint8_t AppDbGetDiscStatus(appDbHdl_t hdl) void AppDbSetDiscStatus(appDbHdl_t hdl, uint8_t status) { ((appDbRec_t *) hdl)->discStatus = status; + store(); } /*************************************************************************************************/ @@ -551,6 +578,7 @@ uint16_t *AppDbGetHdlList(appDbHdl_t hdl) void AppDbSetHdlList(appDbHdl_t hdl, uint16_t *pHdlList) { memcpy(((appDbRec_t *) hdl)->hdlList, pHdlList, sizeof(((appDbRec_t *) hdl)->hdlList)); + store(); } /*************************************************************************************************/ @@ -593,6 +621,7 @@ void AppDbSetDevName(uint8_t len, char *pStr) len = (len <= sizeof(appDb.devName)) ? len : sizeof(appDb.devName); memcpy(appDb.devName, pStr, len); + store(); } /*************************************************************************************************/ @@ -622,6 +651,7 @@ bool_t AppDbGetPeerAddrRes(appDbHdl_t hdl) void AppDbSetPeerAddrRes(appDbHdl_t hdl, uint8_t addrRes) { ((appDbRec_t *)hdl)->peerAddrRes = addrRes; + store(); } /*************************************************************************************************/ @@ -651,6 +681,7 @@ uint32_t AppDbGetPeerSignCounter(appDbHdl_t hdl) void AppDbSetPeerSignCounter(appDbHdl_t hdl, uint32_t signCounter) { ((appDbRec_t *)hdl)->peerSignCounter = signCounter; + store(); } /*************************************************************************************************/ @@ -680,6 +711,7 @@ bool_t AppDbGetPeerAddedToRl(appDbHdl_t hdl) void AppDbSetPeerAddedToRl(appDbHdl_t hdl, bool_t peerAddedToRl) { ((appDbRec_t *)hdl)->peerAddedToRl = peerAddedToRl; + store(); } /*************************************************************************************************/ @@ -709,5 +741,6 @@ bool_t AppDbGetPeerRpao(appDbHdl_t hdl) void AppDbSetPeerRpao(appDbHdl_t hdl, bool_t peerRpao) { ((appDbRec_t *)hdl)->peerRpao = peerRpao; + store(); } /* clang-format on */