aboutsummaryrefslogtreecommitdiff
path: root/src/sample/ble_broadcaster/broadcaster_app.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/sample/ble_broadcaster/broadcaster_app.c')
-rw-r--r--src/sample/ble_broadcaster/broadcaster_app.c138
1 files changed, 138 insertions, 0 deletions
diff --git a/src/sample/ble_broadcaster/broadcaster_app.c b/src/sample/ble_broadcaster/broadcaster_app.c
new file mode 100644
index 0000000..ffed7bd
--- /dev/null
+++ b/src/sample/ble_broadcaster/broadcaster_app.c
@@ -0,0 +1,138 @@
+/**
+*****************************************************************************************
+* Copyright(c) 2017, Realtek Semiconductor Corporation. All rights reserved.
+*****************************************************************************************
+ * @file broadcaster_app.c
+ * @brief This file handles BLE broadcaster application routines.
+ * @author jane
+ * @date 2017-06-06
+ * @version v1.0
+ **************************************************************************************
+ * @attention
+ * <h2><center>&copy; COPYRIGHT 2017 Realtek Semiconductor Corporation</center></h2>
+ **************************************************************************************
+ */
+
+/*============================================================================*
+ * Header Files
+ *============================================================================*/
+#include <trace.h>
+#include <string.h>
+#include <gap.h>
+#include <gap_adv.h>
+#include <gap_msg.h>
+#include <app_msg.h>
+#include <broadcaster_app.h>
+
+
+
+/** @defgroup BROADCASTER_APP Broadcaster Application
+ * @brief This file handles BLE broadcaster application routines.
+ * @{
+ */
+/** @defgroup BROADCASTER_GAP_MSG GAP Message Handler
+ * @brief Handle GAP Message
+ * @{
+ */
+/*============================================================================*
+ * Variables
+ *============================================================================*/
+T_GAP_DEV_STATE gap_dev_state = {0, 0, 0, 0}; /**< GAP device state */
+
+
+/*============================================================================*
+ * Functions
+ *============================================================================*/
+void app_handle_gap_msg(T_IO_MSG *p_gap_msg);
+
+/**
+ * @brief All the application messages are pre-handled in this function
+ * @note All the IO MSGs are sent to this function, then the event handling
+ * function shall be called according to the MSG type.
+ * @param[in] io_msg IO message data
+ * @return void
+ */
+void app_handle_io_msg(T_IO_MSG io_msg)
+{
+ uint16_t msg_type = io_msg.type;
+
+ switch (msg_type)
+ {
+ case IO_MSG_TYPE_BT_STATUS:
+ {
+ app_handle_gap_msg(&io_msg);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+ * @brief Handle msg GAP_MSG_LE_DEV_STATE_CHANGE
+ * @note All the gap device state events are pre-handled in this function.
+ * Then the event handling function shall be called according to the new_state
+ * @param[in] new_state New gap device state
+ * @param[in] cause GAP device state change cause
+ * @return void
+ */
+void app_handle_dev_state_evt(T_GAP_DEV_STATE new_state, uint16_t cause)
+{
+ APP_PRINT_INFO3("app_handle_dev_state_evt: init state %d, adv state %d, cause 0x%x",
+ new_state.gap_init_state, new_state.gap_adv_state, cause);
+ if (gap_dev_state.gap_init_state != new_state.gap_init_state)
+ {
+ if (new_state.gap_init_state == GAP_INIT_STATE_STACK_READY)
+ {
+ APP_PRINT_INFO0("GAP stack ready");
+ /*stack ready*/
+ le_adv_start();
+ }
+ }
+
+ if (gap_dev_state.gap_adv_state != new_state.gap_adv_state)
+ {
+ if (new_state.gap_adv_state == GAP_ADV_STATE_IDLE)
+ {
+ APP_PRINT_INFO0("GAP adv stoped");
+ }
+ else if (new_state.gap_adv_state == GAP_ADV_STATE_ADVERTISING)
+ {
+ APP_PRINT_INFO0("GAP adv start");
+ }
+ }
+
+ gap_dev_state = new_state;
+}
+
+/**
+ * @brief All the BT GAP MSG are pre-handled in this function.
+ * @note Then the event handling function shall be called according to the
+ * subtype of T_IO_MSG
+ * @param[in] p_gap_msg Pointer to GAP msg
+ * @return void
+ */
+void app_handle_gap_msg(T_IO_MSG *p_gap_msg)
+{
+ T_LE_GAP_MSG gap_msg;
+ memcpy(&gap_msg, &p_gap_msg->u.param, sizeof(p_gap_msg->u.param));
+
+ APP_PRINT_TRACE1("app_handle_gap_msg: subtype %d", p_gap_msg->subtype);
+ switch (p_gap_msg->subtype)
+ {
+ case GAP_MSG_LE_DEV_STATE_CHANGE:
+ {
+ app_handle_dev_state_evt(gap_msg.msg_data.gap_dev_state_change.new_state,
+ gap_msg.msg_data.gap_dev_state_change.cause);
+ }
+ break;
+
+ default:
+ APP_PRINT_ERROR1("app_handle_gap_msg: unknown subtype %d", p_gap_msg->subtype);
+ break;
+ }
+}
+/** @} */ /* End of group BROADCASTER_GAP_MSG */
+
+/** @} */ /* End of group BROADCASTER_APP */
+