Pebble Foundation Classes  0.2.0
C++ for Pebble
pebble_process_info.h
1 #pragma once
2 
3 #include <stdint.h>
4 
9 
13 typedef enum {
31 
36  PROCESS_INFO_PLATFORM_APLITE = 0x1 << 6,
39  PROCESS_INFO_PLATFORM_CHALK = 0x3 << 6,
40  PROCESS_INFO_PLATFORM_DIORITE = 0x4 << 6,
41  PROCESS_INFO_PLATFORM_EMERY = 0x5 << 6,
43 
46 
47 // struct PebbleProcessInfo change log
48 // ================================
49 // struct_version (little endian):
50 // 0x0800 -- sdk_version and process_version uint16_t fields added (Grand Slam / 1.7)
51 // .major:0x08 .minor:0x01 -- all version fields split up into minor/major; uuid field appended (Junior Whopper / 2.0?)
52 // .major:0x08 .minor:0x02 -- 2.0, added resource crc and resource timestamp
53 // .major:0x09 .minor:0x00 -- 2.0, no more reloc_list_start
54 // .major:0x10 .minor:0x00 -- 2.0, added virtual_size
55 #define PROCESS_INFO_CURRENT_STRUCT_VERSION_MAJOR 0x10
56 #define PROCESS_INFO_CURRENT_STRUCT_VERSION_MINOR 0x0
57 
58 // process info version for last know 1.x
59 // let this be a warning to engineers everywhere
60 // who want to design a system with fancy versioning and
61 // support
62 #define PROCESS_INFO_LEGACY_STRUCT_VERSION_MAJOR 0x08
63 
64 // SDK change log
65 // ================================
66 // sdk.major:0x4 .minor:0x0 -- Bump the SDK version to make 1.x and 2.x apps distinguishable
67 // sdk.major:0x5 .minor:0x0 -- Bump the SDK version for breaking AppMessage changes b/t 2.x alpha and beta releases
68 // sdk.major:0x5 .minor:0x1 -- Added additional API functions (MenuLayer callbacks)
69 // sdk.major:0x5 .minor:0x2 -- Changed app heap double free behaviour.
70 // sdk.major:0x5 .minor:0x3 -- Added number_window_get_window (API v2.0 revision 12)
71 // sdk.major:0x5 .minor:0x4 -- Added gbitmap_create_blank (API v2.0 revision 13) and click_recognizer_is_repeating (rev 14)
72 // sdk.major:0x5 .minor:0x5 -- Added accel_raw_data_service_subscribe and related types (rev 15)
73 // sdk.major:0x5 .minor:0x6 -- Added background worker APIs (rev 16)
74 // sdk.major:0x5 .minor:0x7 -- Added heap_bytes_free / heap_bytes_used (rev 17)
75 // sdk.major:0x5 .minor:0x8 -- Added compass APIs (rev 18)
76 // sdk.major:0x5 .minor:0x9 -- Added Uuid utility APIs (rev 19)
77 // sdk.major:0x5 .minor:0xa -- Fixed gpath behaviour, added gpath_draw_filled_legacy. (rev 20)
78 // sdk.major:0x5 .minor:0xb -- Added custom animation curves (rev 21)
79 // sdk.major:0x5 .minor:0xc -- Added API for model, color and firmware version of watch (rev 22)
80 // sdk.major:0x5 .minor:0xd -- Added direct access to frame buffer (rev 23)
81 // sdk.major:0x5 .minor:0xe -- Added wakeup API, app_launch_reason (rev 24)
82 // sdk.major:0x5 .minor:0xf -- Added clock_is_timezone_set in preparation for timezone support (rev 25)
83 // sdk.major:0x5 .minor:0x10 -- Added the first i18n API: get_locale (rev 26)
84 // sdk.major:0x5 .minor:0x11 -- Added second i18n API: setlocale (rev 27)
85 // sdk.major:0x5 .minor:0x13 -- Export mktime (rev 29)
86 // sdk.major:0x5 .minor:0x14 -- Rev 30 was a move of several color APIs as to not conflict with release 2.9 sdk. Several of these functions were removed after rev 55 for 3.0-beta10
87 // sdk.major:0x5 .minor:0x15 -- Added timezone APIs (rev 31)
88 // sdk.major:0x5 .minor:0x16 -- Added 3.0 animation API (rev 32)
89 // sdk.major:0x5 .minor:0x17 -- Export new gbitmap accessors (rev 33)
90 // sdk.major:0x5 .minor:0x18 -- Export gbitmap_sequence API (rev 34)
91 // sdk.major:0x5 .minor:0x19 -- Export gbitmap_create_from_png_data API (rev 35)
92 // sdk.major:0x5 .minor:0x20 -- Export new complex animations API (rev 36)
93 // sdk.major:0x5 .minor:0x21 -- Export missing accessors animations APIs (rev 37)
94 // sdk.major:0x5 .minor:0x22 -- Export launch_get_args() API (rev 38)
95 // sdk.major:0x5 .minor:0x23 -- Export 3.0 menu_layer_create() and menu_layer_shadow_enable() (rev 39)
96 // sdk.major:0x5 .minor:0x24 -- Added additional calls to gbitmap_sequence (rev 40)
97 // sdk.major:0x5 .minor:0x25 -- Export antialiased flag and stroke width in GContext (rev 41)
98 // sdk.major:0x5 .minor:0x26 -- Added 3.0 ActionBar (rev 42)
99 // sdk.major:0x5 .minor:0x27 -- Added gbitmap_sequence_update_bitmap_by_elapsed (rev 43)
100 // sdk.major:0x5 .minor:0x28 -- Export menu_layer_cell_is_highlighted() and gbitmap_create_palettized_from_1bit() (rev 44)
101 // sdk.major:0x5 .minor:0x29 -- Export graphics_draw_rotated_bitmap() API (rev 45)
102 // sdk.major:0x5 .minor:0x2a -- Added action_bar_layer_set_icon_press_animation (rev 46)
103 // sdk.major:0x5 .minor:0x2b -- Created TextLayerLegacy2 (rev 47)
104 // sdk.major:0x5 .minor:0x2c -- Added GDrawCommand (rev 48)
105 // sdk.major:0x5 .minor:0x2d -- Added property_animation_update_uint32 (rev 49)
106 // sdk.major:0x5 .minor:0x2e -- Added gpath_draw_outline_open (rev 50)
107 // sdk.major:0x5 .minor:0x2f -- Fixed legacy time() support (rev 51)
108 // sdk.major:0x5 .minor:0x30 -- Deprecate inverter layer (rev 52)
109 // sdk.major:0x5 .minor:0x31 -- Added default menu layer colors (rev 53)
110 // sdk.major:0x5 .minor:0x32 -- Added menu_layer_set_callbacks (rev 54)
111 // sdk.major:0x5 .minor:0x33 -- API cleanup, loop_count --> play_count (rev 55)
112 // sdk.major:0x5 .minor:0x34 -- Added menu_layer_pad_bottom_enable (rev 56)
113 // sdk.major:0x5 .minor:0x35 -- Export initial version of StatusBarLayer (rev 57)
114 // sdk.major:0x5 .minor:0x36 -- Export difftime (rev 58)
115 // sdk.major:0x5 .minor:0x37 -- Fixed legacy time_ms() support (rev 59)
116 // sdk.major:0x5 .minor:0x38 -- Export gcolor_legible_over (rev 60)
117 // sdk.major:0x5 .minor:0x39 -- Export property_animation_update_gcolor8 (rev 61)
118 // sdk.major:0x5 .minor:0x3a -- Export app_focus_service_subscribe_handlers (rev 62)
119 // sdk.major:0x5 .minor:0x3b -- Export ActionMenu APIs (rev 63)
120 // sdk.major:0x5 .minor:0x3c -- Export Smartstrap APIs (rev 64)
121 // sdk.major:0x5 .minor:0x3d -- Added support for timeline resources in PBWs (rev 65)
122 // sdk.major:0x5 .minor:0x3e -- Update Connection Service APIs (rev 66)
123 // sdk.major:0x5 .minor:0x3f -- Enabled support for 8K App Messages (rev 67)
124 // sdk.major:0x5 .minor:0x40 -- Allow disabling of error dialogs for the voice API (rev 68)
125 // sdk.major:0x5 .minor:0x41 -- DEG_TO_TRIGANGLE (rev 69)
126 // sdk.major:0x5 .minor:0x42 -- Export gbitmap_get_data_row_info (rev 70)
127 // sdk.major:0x5 .minor:0x43 -- Export ContentIndicator (rev 71)
128 // sdk.major:0x5 .minor:0x45 -- Export grect_inset (rev 73)
129 // sdk.major:0x5 .minor:0x46 -- Export fill_radial, draw_arc, etc. (rev 74)
130 // sdk.major:0x5 .minor:0x47 -- Text flow and scroll layer pagination (rev 75)
131 // sdk.major:0x5 .minor:0x48 -- Export menu_layer_is_index_selected and round menu layer cell heights (rev 76)
132 // sdk.major:0x5 .minor:0x49 -- Added font v3 (no API changes) (rev 76)
133 // sdk.major:0x5 .minor:0x4a -- HealthAPI (rev 77)
134 // sdk.major:0x5 .minor:0x4b -- More time utility functions (rev 78)
135 // sdk.major:0x5 .minor:0x4c -- More Health service API calls (rev 79)
136 // sdk.major:0x5 .minor:0x4d -- Add health_service_get_measurement_system_for_display() (rev 80)
137 // sdk.major:0x5 .minor:0x4e -- Export gdraw_command_frame_get_command_list() (rev 81)
138 // sdk.major:0x5 .minor:0x4f -- Add new version of gcolor_equal() and deprecate old version (rev 82)
139 // sdk.major:0x5 .minor:0x50 -- 4.0: Add health service expansion, UnobstructedArea, AppGlance, AppExitReason, result duration (rev 83)
140 // sdk.major:0x5 .minor:0x51 -- Add memory_cache_flush() (rev 84)
141 // sdk.major:0x5 .minor:0x52 -- rocky_event_loop_with_resource (rev. 85)
142 // sdk.major:0x5 .minor:0x53 -- Add health_service heart rate sampling period support (rev 86)
143 // sdk.major:0x5 .minor:0x54 -- Add PlatformType enum and defines (rev 87)
144 // sdk.major:0x5 .minor:0x55 -- Preferred Content Size (rev 88)
145 // sdk.major:0x5 .minor:0x56 -- Add PlatformType enum and defines (rev 89)
146 
147 #define PROCESS_INFO_CURRENT_SDK_VERSION_MAJOR 0x5
148 #define PROCESS_INFO_CURRENT_SDK_VERSION_MINOR 0x56
149 
150 // The first SDK to ship with 2.x APIs
151 #define PROCESS_INFO_FIRST_2X_SDK_VERSION_MAJOR 0x4
152 #define PROCESS_INFO_FIRST_2X_SDK_VERSION_MINOR 0x0
153 
154 // The first SDK to ship with 3.x APIs
155 #define PROCESS_INFO_FIRST_3X_SDK_VERSION_MAJOR 0x5
156 #define PROCESS_INFO_FIRST_3X_SDK_VERSION_MINOR 0x16
157 
158 // The first SDK to ship with 4.x APIs
159 #define PROCESS_INFO_FIRST_4X_SDK_VERSION_MAJOR 0x5
160 #define PROCESS_INFO_FIRST_4X_SDK_VERSION_MINOR 0x50
161 
162 // The first SDK that has a stable Rocky.js contract + stores platforms in binary
163 #define PROCESS_INFO_FIRST_4_2_X_SDK_VERSION_MAJOR 0x5
164 #define PROCESS_INFO_FIRST_4_2_X_SDK_VERSION_MINOR 0x54
165 
166 #define PROCESS_NAME_BYTES 32
167 #define COMPANY_NAME_BYTES 32
168 
173 typedef struct __attribute__((__packed__)) {
174  uint8_t major;
175  uint8_t minor;
176 } Version;
177 
179 int version_compare(Version a, Version b);
180 
182 // WARNING: changes in this struct must be reflected in:
183 // - tintin/waftools/inject_metadata.py
184 // - iOS/PebblePrivateKit/PebblePrivateKit/PBBundle.m
185 typedef struct __attribute__((__packed__)) {
186  char header[8];
187  Version struct_version;
188  Version sdk_version;
189  Version process_version;
190  uint16_t load_size;
191  uint32_t offset;
192  uint32_t crc;
193  char name[PROCESS_NAME_BYTES];
194  char company[COMPANY_NAME_BYTES];
195  uint32_t icon_resource_id;
196  uint32_t sym_table_addr;
197  uint32_t flags;
198  uint32_t num_reloc_entries;
199  struct __attribute__((__packed__)) {
200  uint8_t byte0;
201  uint8_t byte1;
202  uint8_t byte2;
203  uint8_t byte3;
204  uint8_t byte4;
205  uint8_t byte5;
206  uint8_t byte6;
207  uint8_t byte7;
208  uint8_t byte8;
209  uint8_t byte9;
210  uint8_t byte10;
211  uint8_t byte11;
212  uint8_t byte12;
213  uint8_t byte13;
214  uint8_t byte14;
215  uint8_t byte15;
216  } uuid;
217  uint32_t resource_crc;
218  uint32_t resource_timestamp;
219  uint16_t virtual_size;
220 } PebbleProcessInfo;
221 
223 typedef struct __attribute__((__packed__)) {
224  char header[8];
225  Version struct_version;
226  Version sdk_version;
227  Version process_version;
228  uint16_t load_size;
229  uint32_t offset;
230  uint32_t crc;
231  char name[PROCESS_NAME_BYTES];
232  char company[COMPANY_NAME_BYTES];
233  uint32_t icon_resource_id;
234  uint32_t sym_table_addr;
235  uint32_t flags;
236  uint32_t reloc_list_start;
237  uint32_t num_reloc_entries;
238  struct __attribute__((__packed__)) {
239  uint8_t byte0;
240  uint8_t byte1;
241  uint8_t byte2;
242  uint8_t byte3;
243  uint8_t byte4;
244  uint8_t byte5;
245  uint8_t byte6;
246  uint8_t byte7;
247  uint8_t byte8;
248  uint8_t byte9;
249  uint8_t byte10;
250  uint8_t byte11;
251  uint8_t byte12;
252  uint8_t byte13;
253  uint8_t byte14;
254  uint8_t byte15;
255  } uuid;
256 } LegacyPebbleAppInfo;
257 
258 
PROCESS_INFO_STANDARD_APP
@ PROCESS_INFO_STANDARD_APP
Definition: pebble_process_info.h:16
PROCESS_INFO_WATCH_FACE
@ PROCESS_INFO_WATCH_FACE
Definition: pebble_process_info.h:19
__attribute__
struct __attribute__((__packed__)) AccelData
A single accelerometer sample for all three axes.
Definition: pebble.h:605
PROCESS_INFO_ROCKY_APP
@ PROCESS_INFO_ROCKY_APP
True, if process uses RockyJS APIs.
Definition: pebble_process_info.h:30
PROCESS_INFO_PLATFORM_UNKNOWN
@ PROCESS_INFO_PLATFORM_UNKNOWN
SDK older than 4.2 doesn't store any value.
Definition: pebble_process_info.h:35
PROCESS_INFO_ALLOW_JS
@ PROCESS_INFO_ALLOW_JS
Use to indicate the process allows Javascript API access.
Definition: pebble_process_info.h:26
PROCESS_INFO_VISIBILITY_HIDDEN
@ PROCESS_INFO_VISIBILITY_HIDDEN
Use to hide the process.
Definition: pebble_process_info.h:21
PROCESS_INFO_PLATFORM_MASK
@ PROCESS_INFO_PLATFORM_MASK
Bitmask, to store compile time platform.
Definition: pebble_process_info.h:33
PebbleProcessInfoFlags
PebbleProcessInfoFlags
Definition: pebble_process_info.h:13
PROCESS_INFO_VISIBILITY_SHOWN_ON_COMMUNICATION
@ PROCESS_INFO_VISIBILITY_SHOWN_ON_COMMUNICATION
Definition: pebble_process_info.h:24
PROCESS_INFO_PLATFORM_BASALT
@ PROCESS_INFO_PLATFORM_BASALT
Values that are actually added by SDK 4.2+.
Definition: pebble_process_info.h:38
PROCESS_INFO_HAS_WORKER
@ PROCESS_INFO_HAS_WORKER
Use to indicate the process should have a worker.bin installed as well.
Definition: pebble_process_info.h:28