Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/fw/process_management/pebble_process_info.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,9 +149,10 @@ typedef enum {
// sdk.major:0x5 .minor:0x54 -- Add PlatformType enum and defines (rev 87)
// sdk.major:0x5 .minor:0x55 -- Preferred Content Size (rev 88)
// sdk.major:0x5 .minor:0x56 -- Add PlatformType enum and defines (rev 89)
// sdk.major:0x5 .minor:0x57 -- Add MediaService API for volume control (rev 90)

#define PROCESS_INFO_CURRENT_SDK_VERSION_MAJOR 0x5
#define PROCESS_INFO_CURRENT_SDK_VERSION_MINOR 0x56
#define PROCESS_INFO_CURRENT_SDK_VERSION_MINOR 0x57

// The first SDK to ship with 2.x APIs
#define PROCESS_INFO_FIRST_2X_SDK_VERSION_MAJOR 0x4
Expand Down
85 changes: 85 additions & 0 deletions src/fw/syscall/music_syscalls.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/* SPDX-FileCopyrightText: 2024 Google LLC */
/* SPDX-License-Identifier: Apache-2.0 */

#include "services/normal/music.h"
#include "syscall/syscall_internal.h"

DEFINE_SYSCALL(void, sys_music_get_now_playing, char *title, char *artist, char *album) {
if (PRIVILEGE_WAS_ELEVATED) {
if (title) syscall_assert_userspace_buffer(title, MUSIC_BUFFER_LENGTH);
if (artist) syscall_assert_userspace_buffer(artist, MUSIC_BUFFER_LENGTH);
if (album) syscall_assert_userspace_buffer(album, MUSIC_BUFFER_LENGTH);
}
music_get_now_playing(title, artist, album);
}

DEFINE_SYSCALL(bool, sys_music_has_now_playing, void) {
return music_has_now_playing();
}

DEFINE_SYSCALL(bool, sys_music_get_player_name, char *player_name_out) {
if (PRIVILEGE_WAS_ELEVATED) {
if (player_name_out) syscall_assert_userspace_buffer(player_name_out, MUSIC_BUFFER_LENGTH);
}
return music_get_player_name(player_name_out);
}

DEFINE_SYSCALL(uint32_t, sys_music_get_ms_since_pos_last_updated, void) {
return music_get_ms_since_pos_last_updated();
}

DEFINE_SYSCALL(void, sys_music_get_pos, uint32_t *track_pos_ms, uint32_t *track_length_ms) {
if (PRIVILEGE_WAS_ELEVATED) {
syscall_assert_userspace_buffer(track_pos_ms, sizeof(*track_pos_ms));
syscall_assert_userspace_buffer(track_length_ms, sizeof(*track_length_ms));
}
music_get_pos(track_pos_ms, track_length_ms);
}

DEFINE_SYSCALL(int32_t, sys_music_get_playback_rate_percent, void) {
return music_get_playback_rate_percent();
}

DEFINE_SYSCALL(uint8_t, sys_music_get_volume_percent, void) {
return music_get_volume_percent();
}

DEFINE_SYSCALL(MusicPlayState, sys_music_get_playback_state, void) {
return music_get_playback_state();
}

DEFINE_SYSCALL(bool, sys_music_is_playback_state_reporting_supported, void) {
return music_is_playback_state_reporting_supported();
}

DEFINE_SYSCALL(bool, sys_music_is_progress_reporting_supported, void) {
return music_is_progress_reporting_supported();
}

DEFINE_SYSCALL(bool, sys_music_is_volume_reporting_supported, void) {
return music_is_volume_reporting_supported();
}

DEFINE_SYSCALL(void, sys_music_command_send, MusicCommand command) {
music_command_send(command);
}

DEFINE_SYSCALL(bool, sys_music_is_command_supported, MusicCommand command) {
return music_is_command_supported(command);
}

DEFINE_SYSCALL(bool, sys_music_needs_user_to_start_playback_on_phone, void) {
return music_needs_user_to_start_playback_on_phone();
}

DEFINE_SYSCALL(void, sys_music_request_reduced_latency, bool reduced_latency) {
music_request_reduced_latency(reduced_latency);
}

DEFINE_SYSCALL(void, sys_music_request_low_latency_for_period, uint32_t period_seconds) {
music_request_low_latency_for_period(period_seconds);
}

DEFINE_SYSCALL(const char *, sys_music_get_connected_server_debug_name, void) {
return music_get_connected_server_debug_name();
}
19 changes: 19 additions & 0 deletions src/fw/syscall/syscall.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include "kernel/events.h"
#include "kernel/logging_private.h"
#include "services/normal/wakeup.h"
#include "services/normal/music.h"
#include "services/common/analytics/analytics.h"
#include "services/common/analytics/analytics_event.h"
#include "services/common/comm_session/session.h"
Expand Down Expand Up @@ -180,6 +181,24 @@ int sys_strftime(char* s, size_t maxsize, const char* format, const struct tm* t

BatteryChargeState sys_battery_get_charge_state(void);

void sys_music_get_now_playing(char *title, char *artist, char *album);
bool sys_music_has_now_playing(void);
bool sys_music_get_player_name(char *player_name_out);
uint32_t sys_music_get_ms_since_pos_last_updated(void);
void sys_music_get_pos(uint32_t *track_pos_ms, uint32_t *track_length_ms);
int32_t sys_music_get_playback_rate_percent(void);
uint8_t sys_music_get_volume_percent(void);
MusicPlayState sys_music_get_playback_state(void);
bool sys_music_is_playback_state_reporting_supported(void);
bool sys_music_is_progress_reporting_supported(void);
bool sys_music_is_volume_reporting_supported(void);
void sys_music_command_send(MusicCommand command);
bool sys_music_is_command_supported(MusicCommand command);
bool sys_music_needs_user_to_start_playback_on_phone(void);
void sys_music_request_reduced_latency(bool reduced_latency);
void sys_music_request_low_latency_for_period(uint32_t period_seconds);
const char * sys_music_get_connected_server_debug_name(void);

bool sys_activity_get_metric(ActivityMetric metric, uint32_t history_len, int32_t *history);
bool sys_activity_get_minute_history(HealthMinuteData *minute_data, uint32_t *num_records,
time_t *utc_start);
Expand Down
152 changes: 150 additions & 2 deletions tools/generate_native_sdk/exported_symbols.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"You should also make sure you are obeying our API design guidelines:",
"https://pebbletechnology.atlassian.net/wiki/display/DEV/SDK+API+Design+Guidelines"
],
"revision" : "89",
"revision" : "90",
"version" : "2.0",
"files": [
"fw/drivers/ambient_light.h",
Expand Down Expand Up @@ -50,6 +50,7 @@
"fw/applib/app_exit_reason.h",
"fw/applib/app_launch_reason.h",
"fw/applib/cpu_cache.h",
"fw/applib/event_service_client.h",
"fw/applib/health_service.h",
"fw/applib/platform.h",
"fw/applib/tick_timer_service.h",
Expand Down Expand Up @@ -84,6 +85,7 @@
"fw/services/common/ecompass.h",
"fw/services/common/new_timer/new_timer.h",
"fw/services/normal/wakeup.h",
"fw/services/normal/music.h",
"fw/syscall/syscall.h",
"fw/kernel/events.h",
"fw/applib/preferred_content_size.h",
Expand Down Expand Up @@ -685,7 +687,153 @@
"name": "health_service_get_measurement_system_for_display",
"addedRevision": "80"
}
]}]
]}, {
"type": "group",
"name": "MediaService",
"exports": [
{
"type": "type",
"name": "MusicPlayState",
"addedRevision": "90"
}, {
"type": "type",
"name": "MusicCommand",
"addedRevision": "90"
}, {
"type": "type",
"name": "PebbleMediaEventType",
"addedRevision": "90"
}, {
"type": "type",
"name": "PebbleMediaEvent",
"addedRevision": "90"
}, {
"type": "define",
"name": "MUSIC_BUFFER_LENGTH",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_get_now_playing",
"implName": "sys_music_get_now_playing",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_has_now_playing",
"implName": "sys_music_has_now_playing",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_get_player_name",
"implName": "sys_music_get_player_name",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_get_ms_since_pos_last_updated",
"implName": "sys_music_get_ms_since_pos_last_updated",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_get_pos",
"implName": "sys_music_get_pos",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_get_playback_rate_percent",
"implName": "sys_music_get_playback_rate_percent",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_get_volume_percent",
"implName": "sys_music_get_volume_percent",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_get_playback_state",
"implName": "sys_music_get_playback_state",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_is_playback_state_reporting_supported",
"implName": "sys_music_is_playback_state_reporting_supported",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_is_progress_reporting_supported",
"implName": "sys_music_is_progress_reporting_supported",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_is_volume_reporting_supported",
"implName": "sys_music_is_volume_reporting_supported",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_command_send",
"implName": "sys_music_command_send",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_is_command_supported",
"implName": "sys_music_is_command_supported",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_needs_user_to_start_playback_on_phone",
"implName": "sys_music_needs_user_to_start_playback_on_phone",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_request_reduced_latency",
"implName": "sys_music_request_reduced_latency",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_request_low_latency_for_period",
"implName": "sys_music_request_low_latency_for_period",
"addedRevision": "90"
}, {
"type": "function",
"name": "music_get_connected_server_debug_name",
"implName": "sys_music_get_connected_server_debug_name",
"addedRevision": "90"
}
]
}, {
"type": "group",
"name": "EventServiceClient",
"appOnly": true,
"exports": [
{
"type": "forward_struct",
"name": "PebbleEvent",
"addedRevision": "90"
}, {
"type": "type",
"name": "PebbleEventType",
"addedRevision": "90"
}, {
"type": "type",
"name": "ListNode",
"addedRevision": "90"
}, {
"type": "type",
"name": "EventServiceEventHandler",
"addedRevision": "90"
}, {
"type": "type",
"name": "EventServiceInfo",
"addedRevision": "90"
}, {
"type": "function",
"name": "event_service_client_subscribe",
"addedRevision": "90"
}, {
"type": "function",
"name": "event_service_client_unsubscribe",
"addedRevision": "90"
}
]
}]
}, {
"type": "group",
"name": "DataLogging",
Expand Down