Updated the GadgetBridge parser api to be able to interact with received notifications (DISMISS, OPEN, REPLY etc)

This commit is contained in:
anschrammh 2023-12-18 21:16:48 +01:00
parent c0a6b2c93f
commit 83b1571067
2 changed files with 96 additions and 31 deletions

View File

@ -93,6 +93,7 @@ static time_t _unix_timestamp = 0;
/* Internal function definition */ /* Internal function definition */
static const char *_gadget_bridge_toast_type_2_str(gadget_bridge_toast_type_e toast_type); static const char *_gadget_bridge_toast_type_2_str(gadget_bridge_toast_type_e toast_type);
static const char *_gadget_bridge_music_control_2_str(gadget_bridge_music_control_e music_control); static const char *_gadget_bridge_music_control_2_str(gadget_bridge_music_control_e music_control);
static const char *_gadget_bridge_notification_action_2_str(gadget_bridge_notification_action_e notification_action);
static const char *_gadget_bridge_http_request_method_2_str(gadget_bridge_http_request_method_e http_request_method); static const char *_gadget_bridge_http_request_method_2_str(gadget_bridge_http_request_method_e http_request_method);
static void _parser_free_buffer(uint16_t length); static void _parser_free_buffer(uint16_t length);
static void _free_event_data(void); static void _free_event_data(void);
@ -138,8 +139,8 @@ bool gadget_bridge_send_battery_status(uint8_t battery_level_in_percent, float b
bool to_return = true; bool to_return = true;
char num_2_str[30] = ""; char num_2_str[30] = "";
to_return &= ble_service_send_nus_data((const uint8_t *)"{\"t\":\"status\",\"bat\":", 20); to_return &= ble_service_send_nus_data((const uint8_t *)"{\"t\":\"status\",\"bat\":", 20);
sprintf(num_2_str, "%u,\"chg\":%u,\"volt\":%.3f} \n", battery_level_in_percent, is_charging, battery_level_in_V); int length = sprintf(num_2_str, "%u,\"chg\":%u,\"volt\":%.3f} \n", battery_level_in_percent, is_charging, battery_level_in_V);
to_return &= ble_service_send_nus_data((const uint8_t *)num_2_str, strlen(num_2_str)); to_return &= ble_service_send_nus_data((const uint8_t *)num_2_str, length);
return to_return; return to_return;
} }
@ -166,6 +167,41 @@ bool gadget_bridge_send_music_control(gadget_bridge_music_control_e music_contro
return to_return; return to_return;
} }
bool gadget_bridge_send_notification_action(gadget_bridge_notification_action_e notification_action, uint32_t handle, const char *phone_number, const char *message)
{
bool to_return = true;
char num_2_str[11] = "";
// There is no point sending a reply without an actual message
if(notification_action == GADGET_BRIDGE_NOTIFICATION_ACTION_REPLY && !message)
return false;
to_return &= ble_service_send_nus_data((const uint8_t *)"{\"t\":\"notify\",\"n\":\"", 19);
to_return &= ble_service_send_nus_data((const uint8_t *)_gadget_bridge_notification_action_2_str(notification_action), strlen(_gadget_bridge_notification_action_2_str(notification_action)));
to_return &= ble_service_send_nus_data((const uint8_t *)"\",\"id\":", 7);
int length = sprintf(num_2_str, "%u", handle);
to_return &= ble_service_send_nus_data((const uint8_t *)num_2_str, length);
if(notification_action == GADGET_BRIDGE_NOTIFICATION_ACTION_REPLY)
{
if(phone_number)
{
to_return &= ble_service_send_nus_data((const uint8_t *)",\"tel\":\"", 8);
to_return &= ble_service_send_nus_data((const uint8_t *)phone_number, strlen(phone_number));
to_return &= ble_service_send_nus_data((const uint8_t *)"\"", 1);
}
to_return &= ble_service_send_nus_data((const uint8_t *)",\"msg\":\"", 8);
to_return &= ble_service_send_nus_data((const uint8_t *)message, strlen(message));
to_return &= ble_service_send_nus_data((const uint8_t *)"\"", 1);
}
to_return &= ble_service_send_nus_data((const uint8_t *)"} \n", 3);
return to_return;
}
bool gadget_bridge_send_activity_data(uint16_t heart_rate_in_bpm, uint32_t step_count) bool gadget_bridge_send_activity_data(uint16_t heart_rate_in_bpm, uint32_t step_count)
{ {
bool to_return = true; bool to_return = true;
@ -173,13 +209,13 @@ bool gadget_bridge_send_activity_data(uint16_t heart_rate_in_bpm, uint32_t step_
//{\"t\":\"act\",\"hrm\":%s,\"stp\":%s} \n //{\"t\":\"act\",\"hrm\":%s,\"stp\":%s} \n
to_return &= ble_service_send_nus_data((const uint8_t *)"{\"t\":\"act\",\"hrm\":", 17); to_return &= ble_service_send_nus_data((const uint8_t *)"{\"t\":\"act\",\"hrm\":", 17);
sprintf(num_2_str, "%u", heart_rate_in_bpm); int length = sprintf(num_2_str, "%u", heart_rate_in_bpm);
to_return &= ble_service_send_nus_data((const uint8_t *)num_2_str, strlen(num_2_str)); to_return &= ble_service_send_nus_data((const uint8_t *)num_2_str, length);
to_return &= ble_service_send_nus_data((const uint8_t *)",\"stp\":", 7); to_return &= ble_service_send_nus_data((const uint8_t *)",\"stp\":", 7);
sprintf(num_2_str, "%u", step_count); length = sprintf(num_2_str, "%u", step_count);
to_return &= ble_service_send_nus_data((const uint8_t *)num_2_str, strlen(num_2_str)); to_return &= ble_service_send_nus_data((const uint8_t *)num_2_str, length);
to_return &= ble_service_send_nus_data((const uint8_t *)"} \n", 3); to_return &= ble_service_send_nus_data((const uint8_t *)"} \n", 3);
@ -190,10 +226,10 @@ bool gadget_bridge_send_http_request(uint32_t id, const char *url, gadget_bridge
{ {
bool to_return = true; bool to_return = true;
char num_2_str[11] = ""; char num_2_str[11] = "";
sprintf(num_2_str, "%u", id); int length = sprintf(num_2_str, "%u", id);
to_return &= ble_service_send_nus_data((const uint8_t *)"{\"t\":\"http\",\"id\":\"", 18); to_return &= ble_service_send_nus_data((const uint8_t *)"{\"t\":\"http\",\"id\":\"", 18);
to_return &= ble_service_send_nus_data((const uint8_t *)num_2_str, strlen(num_2_str)); to_return &= ble_service_send_nus_data((const uint8_t *)num_2_str, length);
to_return &= ble_service_send_nus_data((const uint8_t *)"\",\"url\":\"", 9); to_return &= ble_service_send_nus_data((const uint8_t *)"\",\"url\":\"", 9);
to_return &= ble_service_send_nus_data((const uint8_t *)url, strlen(url)); to_return &= ble_service_send_nus_data((const uint8_t *)url, strlen(url));
to_return &= ble_service_send_nus_data((const uint8_t *)"\",\"method\":\"", 12); to_return &= ble_service_send_nus_data((const uint8_t *)"\",\"method\":\"", 12);
@ -1318,6 +1354,24 @@ static const char *_gadget_bridge_music_control_2_str(gadget_bridge_music_contro
} }
} }
static const char *_gadget_bridge_notification_action_2_str(gadget_bridge_notification_action_e notification_action)
{
switch(notification_action)
{
case GADGET_BRIDGE_NOTIFICATION_ACTION_DISMISS_ALL:
return "dismiss_all";
case GADGET_BRIDGE_NOTIFICATION_ACTION_OPEN:
return "open";
case GADGET_BRIDGE_NOTIFICATION_ACTION_MUTE:
return "mute";
case GADGET_BRIDGE_NOTIFICATION_ACTION_REPLY:
return "reply";
case GADGET_BRIDGE_NOTIFICATION_ACTION_DISMISS:
default :
return "dismiss";
}
}
static const char *_gadget_bridge_http_request_method_2_str(gadget_bridge_http_request_method_e http_request_method) static const char *_gadget_bridge_http_request_method_2_str(gadget_bridge_http_request_method_e http_request_method)
{ {
switch(http_request_method) switch(http_request_method)

View File

@ -255,9 +255,20 @@ bool gadget_bridge_send_find_phone(bool find_phone);
*/ */
bool gadget_bridge_send_music_control(gadget_bridge_music_control_e music_control); bool gadget_bridge_send_music_control(gadget_bridge_music_control_e music_control);
bool gadget_bridge_handle_call(gadget_bridge_call_action_e call_action); /**
* @brief Sends a command to perform an action to the specified received notification.
*
* @param notification_action an enumeration value indicating the action to perform on the notification :
* DISMISS, DISMISS_ALL, OPEN, MUTE and REPLY.
* @param handle the notification's handle.
* @param phone_number a string containing a phone number to send the REPLY to or NULL to use the same number as the notification.
* @param message a string containing the message to send to a REPLY action, can be NULL if the action is different.
* @return true if the command was successfully sent.
* @return false otherwise.
*/
bool gadget_bridge_send_notification_action(gadget_bridge_notification_action_e notification_action, uint32_t handle, const char *phone_number, const char *message);
bool gadget_bridge_handle_notification(gadget_bridge_call_action_e notification_action, uint32_t handle, const char *phone_number, const char *message); bool gadget_bridge_handle_call(gadget_bridge_call_action_e call_action);
/** /**
* @brief Sends the provided activity data to GadgetBridge. This will then be displayed * @brief Sends the provided activity data to GadgetBridge. This will then be displayed