| /* |
| * Copyright 2018 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| #ifndef _PERSIST_H_ |
| #define _PERSIST_H_ |
| |
| #include "newblue-macros.h" |
| #include "bt.h" |
| #include "types.h" |
| |
| |
| //key types are also bits in "haveKeys" for enumeration |
| #define KEY_TYPE_MITM_PROTECTED 0 /* EDR key generated with MITM protection */ |
| #define KEY_TYPE_MITM_UNPROTECTED 1 /* EDR key generated without MITM protection */ |
| #define KEY_TYPE_CSRK 2 /* LE connection signature resolving key */ |
| #define KEY_TYPE_IRK 3 /* LE identity resolving key */ |
| #define KEY_TYPE_DHK 4 /* LE diversifier hiding key */ |
| #define KEY_TYPE_LTK 5 /* LE long term key generated and given by peer device*/ |
| #define KEY_TYPE_MY_LTK 6 /* LE long term key generated by us */ |
| |
| //number types are also bits in "haveNums" for enumeration |
| #define PERSIST_NUM_TYPE_SM_RANDOM 0 /* random number generated and given by peer device */ |
| #define PERSIST_NUM_TYPE_SM_MY_RANDOM 1 /* random number generated by us */ |
| #define PERSIST_NUM_TYPE_SM_EDIV 2 /* encrypted diversifier value generated by peer device */ |
| #define PERSIST_NUM_TYPE_SM_MY_DIV 3 /* diversifier value generated by us */ |
| #define PERSIST_NUM_TYPE_SM_MITM_PROTECT 4 /* MITM protection provided by the stored LTKs */ |
| #define PERSIST_NUM_TYPE_SM_BOND 5 /* bonding relationship with the peer device */ |
| |
| /* callbacks are called with internal mutex held - do not call back into persist funcs or wait too |
| * long! Return true go on enumerating. False to stop. */ |
| typedef bool (*persistKnownDevEnumeratorF)(void *cbkData, const struct bt_addr *addr, |
| const void *name, uint32_t nameLen, uint32_t devCls, uint32_t haveKeys, |
| const uint8_t *wantedKey, uint32_t haveNums, const uint64_t *wantedNum); |
| |
| |
| |
| void persistLoad(void); //load prefs |
| void persistStore(void); //store prefs |
| void persistDump(void) NEWBLUE_EXPORT; //print prefs |
| |
| uint32_t persistGetDeviceName(void* buf); //should be at least HCI_DEV_NAME_LEN bytes long. actual length returned |
| bool persistSetDeviceName(const void *buf, uint32_t len); //should be at most HCI_DEV_NAME_LEN bytes long |
| |
| uint8_t persistGetDiscoveryLength(void); |
| bool persistSetDiscoveryLength(uint8_t len); |
| |
| //return false if callback terminated enumeration. wantedKeyType can be null if we don't care about |
| //keys. wantedNumType can be null if we don't care about numbers. |
| bool persistEnumKnownDevs(persistKnownDevEnumeratorF enumF, void *cbkData, |
| const uint8_t *wantedKeyType, const uint8_t *wantedNumType); |
| |
| bool persistGetKnownDev(const struct bt_addr *addr, void *name, uint32_t *nameLen, uint32_t *devCls); |
| void persistAddKnownDev(const struct bt_addr *addr, const void *name, const uint32_t *nameLen, bool nameIsFull, const uint32_t *devCls); |
| void persistDelKnownDev(const struct bt_addr *addr); |
| |
| bool persistAddDevKey(const struct bt_addr *addr, uint8_t keyType, const uint8_t *key); //addr = NULL for our own keys, all keys are HCI_LINK_KEY_LEN bytes long |
| bool persistGetDevKey(const struct bt_addr *addr, uint8_t keyType, uint8_t *key); //addr = NULL for our own keys, all keys are HCI_LINK_KEY_LEN bytes long |
| bool persistDelDevKeys(const struct bt_addr *addr); //addr = NULL for our own keys, all keys are HCI_LINK_KEY_LEN bytes long |
| |
| bool persistAddDevNumber(const struct bt_addr *addr, uint8_t numType, uint64_t num); //addr = NULL for our own numbers |
| bool persistGetDevNumber(const struct bt_addr *addr, uint8_t numType, uint64_t *num); //addr = NULL for our own numbers |
| bool persistDelDevNumbers(const struct bt_addr *addr); //addr = NULL for our own numbers |
| |
| |
| #endif |
| |