123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- #ifndef __BLE_ANCS_HD_
- #define __BLE_ANCS_HD_
- #include "stdint.h"
- #define ANCS_ATTR_DATA_MAX 32
- #define ANCS_NB_OF_CATEGORY_ID 12
- #define ANCS_NB_OF_NOTIF_ATTR 8
- #define ANCS_NB_OF_APP_ATTR 1
- #define ANCS_NB_OF_EVT_ID 3
- #define ANCS_APP_ATTR_TX_SIZE (32+16)
- #define ANCSAPP_ANCS_SVC_UUID 0xD0, 0x00, 0x2D, 0x12, 0x1E, 0x4B, 0x0F, 0xA4, 0x99, 0x4E, 0xCE, 0xB5, 0x31, 0xF4, 0x05, 0x79
- #define ANCSAPP_NOTIF_SRC_CHAR_UUID 0x1DBD
- #define ANCSAPP_CTRL_PT_CHAR_UUID 0xD9D9
- #define ANCSAPP_DATA_SRC_CHAR_UUID 0x7BFB
- #define CHAR_DESC_HDL_UUID128_LEN 21
- #define NUMBER_OF_ANCS_CHARS 3
- #define ANCS_NOTIF_UID_LENGTH 4
- typedef enum
- {
- BLE_ANCS_CATEGORY_ID_OTHER,
- BLE_ANCS_CATEGORY_ID_INCOMING_CALL,
- BLE_ANCS_CATEGORY_ID_MISSED_CALL,
- BLE_ANCS_CATEGORY_ID_VOICE_MAIL,
- BLE_ANCS_CATEGORY_ID_SOCIAL,
- BLE_ANCS_CATEGORY_ID_SCHEDULE,
- BLE_ANCS_CATEGORY_ID_EMAIL,
- BLE_ANCS_CATEGORY_ID_NEWS,
- BLE_ANCS_CATEGORY_ID_HEALTH_AND_FITNESS,
- BLE_ANCS_CATEGORY_ID_BUSINESS_AND_FINANCE,
- BLE_ANCS_CATEGORY_ID_LOCATION,
- BLE_ANCS_CATEGORY_ID_ENTERTAINMENT
- }ancs_notif_category_id;
- typedef enum
- {
- BLE_ANCS_EVENT_ID_NOTIFICATION_ADDED,
- BLE_ANCS_EVENT_ID_NOTIFICATION_MODIFIED,
- BLE_ANCS_EVENT_ID_NOTIFICATION_REMOVED
- } ancs_notif_evt_id;
- #define EVENT_FLAG_silent (1<<0)
- #define EVENT_FLAG_important (1<<1)
- #define EVENT_FLAG_pre_existing (1<<2)
- #define EVENT_FLAG_positive_action (1<<3)
- #define EVENT_FLAG_negative_action (1<<4)
- #define BLE_ANCS_APP_ATTR_ID_DISPLAY_NAME 0
- typedef enum
- {
- BLE_ANCS_NOTIF_ATTR_ID_APP_IDENTIFIER = 0,
- BLE_ANCS_NOTIF_ATTR_ID_TITLE,
- BLE_ANCS_NOTIF_ATTR_ID_SUBTITLE,
- BLE_ANCS_NOTIF_ATTR_ID_MESSAGE,
- BLE_ANCS_NOTIF_ATTR_ID_MESSAGE_SIZE,
- BLE_ANCS_NOTIF_ATTR_ID_DATE,
- BLE_ANCS_NOTIF_ATTR_ID_POSITIVE_ACTION_LABEL,
- BLE_ANCS_NOTIF_ATTR_ID_NEGATIVE_ACTION_LABEL,
- } ancs_notif_attr_id;
- typedef enum
- {
- BLE_ANCS_EVT_DISCOVERY_COMPLETE,
- BLE_ANCS_EVT_DISCOVERY_FAILED,
- BLE_ANCS_EVT_NOTIF,
- BLE_ANCS_EVT_NOTIF_ATTRIBUTE,
- BLE_ANCS_EVT_APP_ATTRIBUTE,
- BLE_ANCS_EVT_NP_ERROR,
- } ancs_evt_type_t;
- typedef struct {
- bool en;
- uint32_t attr_id;
- uint16_t attr_len;
- uint8_t *p_attr_data;
- }ancs_attr_list_t;
- enum
- {
- ANCS_NOTIF_SCR_HDL_START,
- ANCS_NOTIF_SCR_HDL_END,
- ANCS_NOTIF_SCR_HDL_CCCD,
- ANCS_CTRL_POINT_HDL_START,
- ANCS_CTRL_POINT_HDL_END,
- ANCS_DATA_SRC_HDL_START,
- ANCS_DATA_SRC_HDL_END,
- ANCS_DATA_SRC_HDL_CCCD,
- };
- #define HDL_CACHE_LEN 8
- enum
- {
- ANCS_UNINIT,
- ANCS_DISC_SERVICE,
- ANCS_STORE_SERVICE_HANDLES,
- ANCS_DISC_CHARS,
- ANCS_STORE_CHARS_HANDLES,
- ANCS_DISC_NS_DESCS,
- ANCS_STORE_NS_DESCS_HANDLES,
- ANCS_DISC_DS_DESCS,
- ANCS_STORE_DS_DESCS_HANDLES,
- ANCS_ENABLE_NS_CCCD,
- ANCS_ENABLE_DS_CCCD,
- ANCS_WAIT_CCCD_READY,
- ANCS_DISC_FINISH,
- ANCS_DISC_FAILED = 0xFF
- };
- enum
- {
- ANCS_STATE_IDLE = 0,
- ANCS_STATE_DISCOVERY,
- ANCS_STATE_READY,
- };
- typedef struct{
- uint16_t conn_hdl;
- uint8_t expect_type_value_num;
- uint16_t service_hdl[2];
- uint8_t chars_disc_num;
- uint16_t chars_hdl[HDL_CACHE_LEN];
- }ancs_service_t;
- typedef enum
- {
- COMMAND_ID,
- NOTIF_UID,
- APP_ID,
- ATTR_ID,
- ATTR_LEN1,
- ATTR_LEN2,
- ATTR_DATA,
- ATTR_SKIP,
- DONE,
- } ancs_parse_state_t;
- typedef enum
- {
- ANCS_COMMAND_ID_GET_NOTIF_ATTRIBUTES,
- ANCS_COMMAND_ID_GET_APP_ATTRIBUTES,
- ANCS_COMMAND_ID_GET_PERFORM_NOTIF_ACTION,
- } ancs_cmd_id_val_t;
- typedef struct
- {
- ancs_attr_list_t * p_attr_list;
- uint32_t nb_of_attr;
- uint32_t expected_number_of_attrs;
- ancs_parse_state_t parse_state;
- ancs_cmd_id_val_t command_id;
- uint8_t * p_data_dest;
- uint16_t current_attr_index;
- uint32_t current_app_id_index;
- } ble_ancs_parse_fsm_t;
- typedef struct{
- uint32_t notif_uid;
- uint8_t app_id[ANCS_ATTR_DATA_MAX];
- uint16_t attr_len;
- uint32_t attr_id;
- uint8_t *p_attr_data;
- }ancs_attr_evt_t;
- typedef struct{
- uint8_t type;
- uint8_t len;
- void* msg;
- }ancs_evt_t;
- typedef void (*ancs_evt_hdl_t) (ancs_evt_t * p_evt);
- typedef struct{
- uint8_t app_task_ID;
- uint8_t disc_state;
- uint8_t app_state;
- ancs_attr_list_t notif_attr_list[ANCS_NB_OF_NOTIF_ATTR];
- ancs_attr_list_t app_attr_list[ANCS_NB_OF_APP_ATTR];
- ble_ancs_parse_fsm_t parse_info;
- ancs_service_t ancs_service;
- ancs_attr_evt_t attr_evt_msg;
- ancs_evt_t attr_rsp_evt;
- uint8_t app_attr_tx_buf[ANCS_APP_ATTR_TX_SIZE];
- ancs_evt_hdl_t callback;
- }ancs_ctx_t;
- typedef struct{
- uint8_t eventID;
-
- uint8_t eventFlag;
-
- uint8_t categoryID;
- uint8_t categoryCount;
- uint8_t notifUID[4];
- }ancs_notify_evt_t;
- bStatus_t ble_ancs_attr_add(const ancs_notif_attr_id id, uint8_t * p_data, const uint16_t len);
- bStatus_t ble_ancs_get_notif_attrs(const uint8_t * pNotificationUID);
- bStatus_t ble_ancs_get_app_attrs(const uint8_t * p_app_id, uint8_t app_id_len);
- bStatus_t ble_ancs_start_descovery(uint16_t conn_handle);
- bStatus_t ble_ancs_handle_gatt_event(gattMsgEvent_t* pMsg);
- bStatus_t ble_ancs_init(ancs_evt_hdl_t evt_hdl, uint8_t task_ID);
- #endif
|