aboutsummaryrefslogtreecommitdiff
path: root/src/sample/ble_scatternet/link_mgr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sample/ble_scatternet/link_mgr.c')
-rw-r--r--src/sample/ble_scatternet/link_mgr.c137
1 files changed, 137 insertions, 0 deletions
diff --git a/src/sample/ble_scatternet/link_mgr.c b/src/sample/ble_scatternet/link_mgr.c
new file mode 100644
index 0000000..ee57041
--- /dev/null
+++ b/src/sample/ble_scatternet/link_mgr.c
@@ -0,0 +1,137 @@
+/**
+*****************************************************************************************
+* Copyright(c) 2017, Realtek Semiconductor Corporation. All rights reserved.
+*****************************************************************************************
+ * @file link_mgr.c
+ * @brief Multilink manager functions.
+ * @author jane
+ * @date 2017-06-06
+ * @version v1.0
+ **************************************************************************************
+ * @attention
+ * <h2><center>&copy; COPYRIGHT 2017 Realtek Semiconductor Corporation</center></h2>
+ **************************************************************************************
+ */
+/*============================================================================*
+ * Header Files
+ *============================================================================*/
+#include <link_mgr.h>
+#include <trace.h>
+#include <string.h>
+#include <ftl.h>
+
+/*============================================================================*
+ * Constants
+ *============================================================================*/
+#if F_BT_LE_USE_STATIC_RANDOM_ADDR
+/** @brief Define start offset of the flash to save static random address. */
+#define APP_STATIC_RANDOM_ADDR_OFFSET 0
+#endif
+
+/*============================================================================*
+ * Variables
+ *============================================================================*/
+/** @addtogroup SCATTERNET_GAP_MSG
+ * @{
+ */
+T_APP_LINK app_link_table[APP_MAX_LINKS];
+/** @} */
+/** @addtogroup SCATTERNET_SCAN_MGR
+ * @{
+ */
+T_DEV_INFO dev_list[APP_MAX_DEVICE_INFO];
+uint8_t dev_list_count = 0;
+/** @} */
+
+/*============================================================================*
+ * Functions
+ *============================================================================*/
+/** @addtogroup CENTRAL_SCAN_MGR
+ * @{
+ */
+/**
+ * @brief Add device information to device list.
+ *
+ * @param[in] bd_addr Peer device address.
+ * @param[in] bd_type Peer device address type.
+ * @retval true Success.
+ * @retval false Failed, device list is full.
+ */
+bool link_mgr_add_device(uint8_t *bd_addr, uint8_t bd_type)
+{
+ /* If result count not at max */
+ if (dev_list_count < APP_MAX_DEVICE_INFO)
+ {
+ uint8_t i;
+ /* Check if device is already in device list*/
+ for (i = 0; i < dev_list_count; i++)
+ {
+ if (memcmp(bd_addr, dev_list[i].bd_addr, GAP_BD_ADDR_LEN) == 0)
+ {
+ return true;
+ }
+ }
+
+ /*Add addr to device list list*/
+ memcpy(dev_list[dev_list_count].bd_addr, bd_addr, GAP_BD_ADDR_LEN);
+ dev_list[dev_list_count].bd_type = bd_type;
+
+ /*Increment device list count*/
+ dev_list_count++;
+ }
+ else
+ {
+ return false;
+ }
+ return true;
+}
+
+/**
+ * @brief Clear device list.
+ * @retval None.
+ */
+void link_mgr_clear_device_list(void)
+{
+ dev_list_count = 0;
+}
+/** @} */
+/** @addtogroup SCATTERNET_APP
+ * @{
+ */
+/** @defgroup SCATTERNET_RANDOM Static Random Address Storage
+ * @brief Use @ref F_BT_LE_USE_STATIC_RANDOM_ADDR to open
+ * @{
+ */
+#if F_BT_LE_USE_STATIC_RANDOM_ADDR
+/**
+ * @brief Save static random address information into flash.
+ * @param[in] p_addr Pointer to the buffer for saving data.
+ * @retval 0 Save success.
+ * @retval other Failed.
+ */
+uint32_t app_save_static_random_address(T_APP_STATIC_RANDOM_ADDR *p_addr)
+{
+ APP_PRINT_INFO0("app_save_static_random_address");
+ return ftl_save(p_addr, APP_STATIC_RANDOM_ADDR_OFFSET, sizeof(T_APP_STATIC_RANDOM_ADDR));
+}
+/**
+ * @brief Load static random address information from storage.
+ * @param[out] p_addr Pointer to the buffer for loading data.
+ * @retval 0 Load success.
+ * @retval other Failed.
+ */
+uint32_t app_load_static_random_address(T_APP_STATIC_RANDOM_ADDR *p_addr)
+{
+ uint32_t result;
+ result = ftl_load(p_addr, APP_STATIC_RANDOM_ADDR_OFFSET,
+ sizeof(T_APP_STATIC_RANDOM_ADDR));
+ APP_PRINT_INFO1("app_load_static_random_address: result 0x%x", result);
+ if (result)
+ {
+ memset(p_addr, 0, sizeof(T_APP_STATIC_RANDOM_ADDR));
+ }
+ return result;
+}
+#endif
+/** @} */
+/** @} */