diff options
Diffstat (limited to 'src/ble/sample/ams.c')
-rw-r--r-- | src/ble/sample/ams.c | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/src/ble/sample/ams.c b/src/ble/sample/ams.c new file mode 100644 index 0000000..6aa4c9c --- /dev/null +++ b/src/ble/sample/ams.c @@ -0,0 +1,142 @@ +/** +***************************************************************************************** +* Copyright(c) 2018, Realtek Semiconductor Corporation. All rights reserved. +***************************************************************************************** + * @file ams.c + * @brief This file handles AMS Client routines. + * @author + * @date + * @version + ************************************************************************************** +*/ +#include "app_flags.h" +#if F_BT_AMS_CLIENT_SUPPORT +#include <trace.h> +#include <os_msg.h> +#include <os_mem.h> +#include <ams.h> +#include <ams_client.h> + +T_CLIENT_ID ams_client; + +/** + * @brief ams client callback handle message from upperstack + */ +T_APP_RESULT ams_client_cb(T_CLIENT_ID client_id, uint8_t conn_id, void *p_data) +{ + T_APP_RESULT result = APP_RESULT_SUCCESS; + T_AMS_CB_DATA *p_cb_data = (T_AMS_CB_DATA *)p_data; + + switch (p_cb_data->cb_type) + { + case AMS_CLIENT_CB_TYPE_DISC_STATE: + switch (p_cb_data->cb_content.disc_state) + { + case AMS_DISC_DONE: + APP_PRINT_INFO0("ams_client_cb: discover procedure done."); + ams_subscribe_remote_cmd(conn_id, true); + break; + case AMS_DISC_FAILED: + APP_PRINT_ERROR0("ams_client_cb: discover request failed."); + break; + default: + break; + } + break; + + case AMS_CLIENT_CB_TYPE_NOTIF_IND_RESULT: + switch (p_cb_data->cb_content.notify_data.type) + { + case AMS_NOTIFY_FROM_REMOTE_CMD: + APP_PRINT_INFO2("AMS_NOTIFY_FROM_REMOTE_CMD: data[%d]: %b", + p_cb_data->cb_content.notify_data.value_size, + TRACE_BINARY(p_cb_data->cb_content.notify_data.value_size, + p_cb_data->cb_content.notify_data.p_value)); + break; + case AMS_NOTIFY_FROM_ENTITY_UPD: + APP_PRINT_INFO2("AMS_NOTIFY_FROM_ENTITY_UPD: data[%d]: %b", + p_cb_data->cb_content.notify_data.value_size, + TRACE_BINARY(p_cb_data->cb_content.notify_data.value_size, + p_cb_data->cb_content.notify_data.p_value)); + break; + default: + break; + } + break; + + case AMS_CLIENT_CB_TYPE_READ_RESULT: + switch (p_cb_data->cb_content.read_data.type) + { + case AMS_READ_FROM_ENTITY_UPD: + APP_PRINT_INFO3("AMS_READ_FROM_ENTITY_UPD: cause 0x%x, data[%d]: %b", + p_cb_data->cb_content.read_data.cause, + p_cb_data->cb_content.read_data.value_size, + TRACE_BINARY(p_cb_data->cb_content.read_data.value_size, p_cb_data->cb_content.read_data.p_value)); + break; + default: + break; + } + break; + + case AMS_CLIENT_CB_TYPE_WRITE_RESULT: + { + if (p_cb_data->cb_content.write_result.cause != ATT_SUCCESS) + { + APP_PRINT_ERROR1("AMS_CLIENT_CB_TYPE_WRITE_RESULT: Failed, cause 0x%x", + p_cb_data->cb_content.write_result.cause); + } + switch (p_cb_data->cb_content.write_result.type) + { + case AMS_WRITE_REMOTE_CMD_NOTIFY_ENABLE: + APP_PRINT_INFO0("AMS_WRITE_REMOTE_CMD_NOTIFY_ENABLE"); + ams_subscribe_entity_upd(conn_id, true); + break; + + case AMS_WRITE_REMOTE_CMD_NOTIFY_DISABLE: + APP_PRINT_INFO0("AMS_WRITE_REMOTE_CMD_NOTIFY_DISABLE"); + break; + + case AMS_WRITE_ENTITY_UPD_NOTIFY_ENABLE: + APP_PRINT_INFO0("AMS_WRITE_ENTITY_UPD_NOTIFY_ENABLE"); + + break; + case AMS_WRITE_ENTITY_UPD_NOTIFY_DISABLE: + APP_PRINT_INFO0("AMS_WRITE_ENTITY_UPD_NOTIFY_DISABLE"); + break; + + case AMS_WRITE_ENTITY_ATTR_VALUE: + APP_PRINT_INFO0("AMS_WRITE_ENTITY_ATTR_VALUE"); + break; + + case AMS_WRITE_REMOTE_CMD_VALUE: + APP_PRINT_INFO0("AMS_WRITE_REMOTE_CMD_VALUE"); + break; + + default: + break; + } + } + break; + + case AMS_CLIENT_CB_TYPE_DISCONNECT_INFO: + { + APP_PRINT_INFO1("AMS_CLIENT_CB_TYPE_DISCONNECT_INFO: conn_id = 0x%x", conn_id); + } + break; + + default: + break; + } + return result; +} + +/** + * @brief App register ams client to upperstack. + */ +void ams_init(uint8_t link_num) +{ + ams_client = ams_add_client(ams_client_cb, link_num); +} + +#endif + |