commit 0fd8d7c5c37c6242687a5d344c79a72f42efbad9 Author: Zahkc Date: Sun Aug 6 23:46:16 2023 +1000 1.0 diff --git a/build/appinfo.json b/build/appinfo.json new file mode 100644 index 0000000..27eb74c --- /dev/null +++ b/build/appinfo.json @@ -0,0 +1,35 @@ +{ + "versionLabel": "1.0", + "projectType": "rocky", + "name": "Geiger Counter", + "messageKeys": { + "ControlKeyResetRequest": 1, + "ControlKeyUnsupportedError": 4, + "ControlKeyChunk": 3, + "ControlKeyResetComplete": 2 + }, + "companyName": "Zahkc", + "enableMultiJS": true, + "sdkVersion": "3", + "capabilities": [], + "appKeys": { + "ControlKeyResetRequest": 1, + "ControlKeyUnsupportedError": 4, + "ControlKeyChunk": 3, + "ControlKeyResetComplete": 2 + }, + "watchapp": { + "watchface": true + }, + "longName": "geiger", + "displayName": "geiger", + "shortName": "geiger", + "main": { + "rockyjs": "src/rocky/index.js", + "pkjs": "src/pkjs/index.js" + }, + "resources": { + "media": [] + }, + "uuid": "a426b361-f97e-4934-8581-4e1cb299b74a" +} \ No newline at end of file diff --git a/build/basalt/app_resources.pbpack b/build/basalt/app_resources.pbpack new file mode 100644 index 0000000..03dbe57 Binary files /dev/null and b/build/basalt/app_resources.pbpack differ diff --git a/build/basalt/appinfo.auto.c b/build/basalt/appinfo.auto.c new file mode 100644 index 0000000..16c8452 --- /dev/null +++ b/build/basalt/appinfo.auto.c @@ -0,0 +1,20 @@ +#include "pebble_process_info.h" +#include "src/resource_ids.auto.h" + +const PebbleProcessInfo __pbl_app_info __attribute__ ((section (".pbl_header"))) = { + .header = "PBLAPP", + .struct_version = { PROCESS_INFO_CURRENT_STRUCT_VERSION_MAJOR, PROCESS_INFO_CURRENT_STRUCT_VERSION_MINOR }, + .sdk_version = { PROCESS_INFO_CURRENT_SDK_VERSION_MAJOR, PROCESS_INFO_CURRENT_SDK_VERSION_MINOR }, + .process_version = { 1, 0 }, + .load_size = 0xb6b6, + .offset = 0xb6b6b6b6, + .crc = 0xb6b6b6b6, + .name = "geiger", + .company = "Zahkc", + .icon_resource_id = DEFAULT_MENU_ICON, + .sym_table_addr = 0xA7A7A7A7, + .flags = PROCESS_INFO_WATCH_FACE | PROCESS_INFO_ROCKY_APP | PROCESS_INFO_PLATFORM_BASALT, + .num_reloc_entries = 0xdeadcafe, + .uuid = { 0xA4, 0x26, 0xB3, 0x61, 0xF9, 0x7E, 0x49, 0x34, 0x85, 0x81, 0x4E, 0x1C, 0xB2, 0x99, 0xB7, 0x4A }, + .virtual_size = 0xb6b6 +}; diff --git a/build/basalt/appinfo.auto.c.41.o b/build/basalt/appinfo.auto.c.41.o new file mode 100644 index 0000000..2e5183b Binary files /dev/null and b/build/basalt/appinfo.auto.c.41.o differ diff --git a/build/basalt/pebble-app.bin b/build/basalt/pebble-app.bin new file mode 100644 index 0000000..75b77d1 Binary files /dev/null and b/build/basalt/pebble-app.bin differ diff --git a/build/basalt/pebble-app.elf b/build/basalt/pebble-app.elf new file mode 100644 index 0000000..3a70f49 Binary files /dev/null and b/build/basalt/pebble-app.elf differ diff --git a/build/basalt/pebble-app.raw.bin b/build/basalt/pebble-app.raw.bin new file mode 100644 index 0000000..13e6a73 Binary files /dev/null and b/build/basalt/pebble-app.raw.bin differ diff --git a/build/basalt/pebble_app.ld.auto b/build/basalt/pebble_app.ld.auto new file mode 100644 index 0000000..f36f597 --- /dev/null +++ b/build/basalt/pebble_app.ld.auto @@ -0,0 +1,53 @@ + +ENTRY(main) + +MEMORY +{ + APP (rwx) : ORIGIN = 0, LENGTH = 65536 +} + +SECTIONS +{ + .header : + { + KEEP(*(.pbl_header)) + + } > APP + + /* -- DO NOT ADD ANY NEW SECTIONS HERE AND DO NOT CHANGE THE ALIGNMENT -- */ + /* The GNU build ID is tacked to the end of the PebbleProcessInfo struct: */ + .note.gnu.build-id ALIGN(1) : { + PROVIDE(BUILD_ID = .); + KEEP(*(.note.gnu.build-id)) + } > APP + + .text : + { + *(.text) + *(.text.*) + *(.rodata) + *(.rodata*) + } > APP + + .data : + { + KEEP(*(.data)) + *(.data.*) + } > APP + + .bss : + { + *(.bss) + *(.bss.*) + } > APP + + DISCARD : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + *(.eh_frame) + } +} + +/* vim:filetype=ld */ diff --git a/build/basalt/resources/rocky-app.js.JS_SNAPSHOT.bytecode b/build/basalt/resources/rocky-app.js.JS_SNAPSHOT.bytecode new file mode 100644 index 0000000..e0d530a Binary files /dev/null and b/build/basalt/resources/rocky-app.js.JS_SNAPSHOT.bytecode differ diff --git a/build/basalt/resources/rocky-app.js.JS_SNAPSHOT.reso b/build/basalt/resources/rocky-app.js.JS_SNAPSHOT.reso new file mode 100644 index 0000000..60bd8d4 Binary files /dev/null and b/build/basalt/resources/rocky-app.js.JS_SNAPSHOT.reso differ diff --git a/build/basalt/src/resource_ids.auto.c b/build/basalt/src/resource_ids.auto.c new file mode 100644 index 0000000..33e4e48 --- /dev/null +++ b/build/basalt/src/resource_ids.auto.c @@ -0,0 +1,8 @@ +#include + +// +// AUTOGENERATED BY BUILD +// DO NOT MODIFY - CHANGES WILL BE OVERWRITTEN +// + +uint32_t RESOURCE_ID_JS_SNAPSHOT = 1; diff --git a/build/basalt/src/resource_ids.auto.c.41.o b/build/basalt/src/resource_ids.auto.c.41.o new file mode 100644 index 0000000..0590359 Binary files /dev/null and b/build/basalt/src/resource_ids.auto.c.41.o differ diff --git a/build/basalt/src/resource_ids.auto.h b/build/basalt/src/resource_ids.auto.h new file mode 100644 index 0000000..bf38521 --- /dev/null +++ b/build/basalt/src/resource_ids.auto.h @@ -0,0 +1,13 @@ +#pragma once + +// +// AUTOGENERATED BY BUILD +// DO NOT MODIFY - CHANGES WILL BE OVERWRITTEN +// + +typedef enum { + INVALID_RESOURCE = 0, + RESOURCE_ID_INVALID = 0, + DEFAULT_MENU_ICON = 0, + RESOURCE_ID_JS_SNAPSHOT = 1, +} ResourceId; \ No newline at end of file diff --git a/build/basalt/src/rocky.c b/build/basalt/src/rocky.c new file mode 100644 index 0000000..56ca996 --- /dev/null +++ b/build/basalt/src/rocky.c @@ -0,0 +1,9 @@ +#include + +extern bool rocky_event_loop_with_resource(uint32_t resource_id); + +int main(void) { + Window *window = window_create(); + window_stack_push(window, false); + rocky_event_loop_with_resource(RESOURCE_ID_JS_SNAPSHOT); +} diff --git a/build/basalt/src/rocky.c.41.o b/build/basalt/src/rocky.c.41.o new file mode 100644 index 0000000..f78c7b0 Binary files /dev/null and b/build/basalt/src/rocky.c.41.o differ diff --git a/build/basalt/system_resources.resball b/build/basalt/system_resources.resball new file mode 100644 index 0000000..271679b Binary files /dev/null and b/build/basalt/system_resources.resball differ diff --git a/build/basalt_snapshot_size.json b/build/basalt_snapshot_size.json new file mode 100644 index 0000000..13e70d0 --- /dev/null +++ b/build/basalt_snapshot_size.json @@ -0,0 +1 @@ +{"size":3452,"max":24576} \ No newline at end of file diff --git a/build/c4che/_cache.py b/build/c4che/_cache.py new file mode 100644 index 0000000..b550eb0 --- /dev/null +++ b/build/c4che/_cache.py @@ -0,0 +1,27 @@ +BINDIR = '/usr/local/bin' +BLOCK_MESSAGE_KEYS = [] +BUILD_TYPE = 'rocky' +BUNDLE_NAME = 'geiger.pbw' +DEFINES = ['RELEASE'] +LIBDIR = '/usr/local/lib' +LIB_DIR = 'node_modules' +LIB_JSON = [] +MESSAGE_KEYS = {'ControlKeyResetRequest': 1, 'ControlKeyUnsupportedError': 4, 'ControlKeyChunk': 3, 'ControlKeyResetComplete': 2} +MESSAGE_KEYS_DEFINITION = '/home/zahkc/Documents/Projects/Pebble/geiger/build/src/message_keys.auto.c' +MESSAGE_KEYS_HEADER = '/home/zahkc/Documents/Projects/Pebble/geiger/build/include/message_keys.auto.h' +MESSAGE_KEYS_JSON = '/home/zahkc/Documents/Projects/Pebble/geiger/build/js/message_keys.json' +NODE = '/usr/bin/node' +NODE_PATH = '/home/zahkc/.pebble-sdk/SDKs/current/node_modules' +PEBBLE_SDK_COMMON = '/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/common' +PEBBLE_SDK_ROOT = '/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble' +PREFIX = '/usr/local' +PROJECT_INFO = {'appKeys': {'ControlKeyResetRequest': 1, 'ControlKeyUnsupportedError': 4, 'ControlKeyChunk': 3, 'ControlKeyResetComplete': 2}, u'sdkVersion': u'3', u'projectType': u'rocky', u'uuid': u'a426b361-f97e-4934-8581-4e1cb299b74a', 'messageKeys': {'ControlKeyResetRequest': 1, 'ControlKeyUnsupportedError': 4, 'ControlKeyChunk': 3, 'ControlKeyResetComplete': 2}, 'companyName': u'Zahkc', u'enableMultiJS': True, u'watchapp': {u'watchface': True}, 'versionLabel': u'1.0', 'longName': u'geiger', u'displayName': u'geiger', 'shortName': u'geiger', u'main': {u'rockyjs': u'src/rocky/index.js', u'pkjs': u'src/pkjs/index.js'}, u'resources': {u'media': []}, 'name': u'Geiger Counter'} +REQUESTED_PLATFORMS = [] +RESOURCES_JSON = [] +SANDBOX = False +SUPPORTED_PLATFORMS = ['emery', 'diorite', 'chalk', 'basalt'] +TARGET_PLATFORMS = ['emery', 'diorite', 'chalk', 'basalt'] +TIMESTAMP = 1691328646 +USE_GROUPS = True +VERBOSE = 0 +WEBPACK = '/home/zahkc/.pebble-sdk/SDKs/current/node_modules/.bin/webpack' diff --git a/build/c4che/basalt_cache.py b/build/c4che/basalt_cache.py new file mode 100644 index 0000000..aa8d8ad --- /dev/null +++ b/build/c4che/basalt_cache.py @@ -0,0 +1,72 @@ +AR = 'arm-none-eabi-ar' +ARFLAGS = 'rcs' +AS = 'arm-none-eabi-gcc' +BINDIR = '/usr/local/bin' +BLOCK_MESSAGE_KEYS = [] +BUILD_DIR = 'basalt' +BUILD_TYPE = 'rocky' +BUNDLE_BIN_DIR = 'basalt' +BUNDLE_NAME = 'geiger.pbw' +CC = ['arm-none-eabi-gcc'] +CCLNK_SRC_F = [] +CCLNK_TGT_F = ['-o'] +CC_NAME = 'gcc' +CC_SRC_F = [] +CC_TGT_F = ['-c', '-o'] +CC_VERSION = ('4', '7', '2') +CFLAGS = ['-std=c99', '-mcpu=cortex-m3', '-mthumb', '-ffunction-sections', '-fdata-sections', '-g', '-fPIE', '-Os', '-D_TIME_H_', '-Wall', '-Wextra', '-Werror', '-Wno-unused-parameter', '-Wno-error=unused-function', '-Wno-error=unused-variable'] +CFLAGS_MACBUNDLE = ['-fPIC'] +CFLAGS_cshlib = ['-fPIC'] +CPPPATH_ST = '-I%s' +DEFINES = ['RELEASE', 'PBL_PLATFORM_BASALT', 'PBL_COLOR', 'PBL_RECT', 'PBL_MICROPHONE', 'PBL_SMARTSTRAP', 'PBL_HEALTH', 'PBL_COMPASS', 'PBL_SMARTSTRAP_POWER', 'PBL_DISPLAY_WIDTH=144', 'PBL_DISPLAY_HEIGHT=168', 'PBL_SDK_3'] +DEFINES_ST = '-D%s' +DEST_BINFMT = 'elf' +DEST_CPU = 'arm' +DEST_OS = 'linux' +INCLUDES = ['basalt'] +LD = 'arm-none-eabi-ld' +LIBDIR = '/usr/local/lib' +LIBPATH_ST = '-L%s' +LIB_DIR = 'node_modules' +LIB_JSON = [] +LIB_ST = '-l%s' +LINKFLAGS = ['-mcpu=cortex-m3', '-mthumb', '-Wl,--gc-sections', '-Wl,--warn-common', '-fPIE', '-Os'] +LINKFLAGS_MACBUNDLE = ['-bundle', '-undefined', 'dynamic_lookup'] +LINKFLAGS_cshlib = ['-shared'] +LINKFLAGS_cstlib = ['-Wl,-Bstatic'] +LINK_CC = ['arm-none-eabi-gcc'] +MESSAGE_KEYS = {'ControlKeyResetRequest': 1, 'ControlKeyUnsupportedError': 4, 'ControlKeyChunk': 3, 'ControlKeyResetComplete': 2} +MESSAGE_KEYS_DEFINITION = '/home/zahkc/Documents/Projects/Pebble/geiger/build/src/message_keys.auto.c' +MESSAGE_KEYS_HEADER = '/home/zahkc/Documents/Projects/Pebble/geiger/build/include/message_keys.auto.h' +MESSAGE_KEYS_JSON = '/home/zahkc/Documents/Projects/Pebble/geiger/build/js/message_keys.json' +NODE = '/usr/bin/node' +NODE_PATH = '/home/zahkc/.pebble-sdk/SDKs/current/node_modules' +PEBBLE_SDK_COMMON = '/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/common' +PEBBLE_SDK_PLATFORM = '/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt' +PEBBLE_SDK_ROOT = '/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble' +PLATFORM = {'TAGS': ['basalt', 'color', 'rect', 'mic', 'strap', 'strappower', 'compass', 'health', '144w', '168h'], 'MAX_FONT_GLYPH_SIZE': 256, 'ADDITIONAL_TEXT_LINES_FOR_PEBBLE_H': [], 'MAX_APP_BINARY_SIZE': 65536, 'MAX_RESOURCES_SIZE': 1048576, 'MAX_APP_MEMORY_SIZE': 65536, 'MAX_WORKER_MEMORY_SIZE': 10240, 'NAME': 'basalt', 'BUNDLE_BIN_DIR': 'basalt', 'BUILD_DIR': 'basalt', 'MAX_RESOURCES_SIZE_APPSTORE': 262144, 'DEFINES': ['PBL_PLATFORM_BASALT', 'PBL_COLOR', 'PBL_RECT', 'PBL_MICROPHONE', 'PBL_SMARTSTRAP', 'PBL_HEALTH', 'PBL_COMPASS', 'PBL_SMARTSTRAP_POWER', 'PBL_DISPLAY_WIDTH=144', 'PBL_DISPLAY_HEIGHT=168']} +PLATFORM_NAME = 'basalt' +PREFIX = '/usr/local' +PROJECT_INFO = {'appKeys': {'ControlKeyResetRequest': 1, 'ControlKeyUnsupportedError': 4, 'ControlKeyChunk': 3, 'ControlKeyResetComplete': 2}, u'sdkVersion': u'3', u'projectType': u'rocky', u'uuid': u'a426b361-f97e-4934-8581-4e1cb299b74a', 'messageKeys': {'ControlKeyResetRequest': 1, 'ControlKeyUnsupportedError': 4, 'ControlKeyChunk': 3, 'ControlKeyResetComplete': 2}, 'companyName': u'Zahkc', u'enableMultiJS': True, u'watchapp': {u'watchface': True}, 'versionLabel': u'1.0', 'longName': u'geiger', u'displayName': u'geiger', 'shortName': u'geiger', u'main': {u'rockyjs': u'src/rocky/index.js', u'pkjs': u'src/pkjs/index.js'}, u'resources': {u'media': []}, 'name': u'Geiger Counter'} +REQUESTED_PLATFORMS = [] +RESOURCES_JSON = [] +RPATH_ST = '-Wl,-rpath,%s' +SANDBOX = False +SDK_VERSION_MAJOR = 5 +SDK_VERSION_MINOR = 86 +SHLIB_MARKER = None +SIZE = 'arm-none-eabi-size' +SONAME_ST = '-Wl,-h,%s' +STLIBPATH_ST = '-L%s' +STLIB_MARKER = None +STLIB_ST = '-l%s' +SUPPORTED_PLATFORMS = ['emery', 'diorite', 'chalk', 'basalt'] +TARGET_PLATFORMS = ['emery', 'diorite', 'chalk', 'basalt'] +TIMESTAMP = 1691328646 +USE_GROUPS = True +VERBOSE = 0 +WEBPACK = '/home/zahkc/.pebble-sdk/SDKs/current/node_modules/.bin/webpack' +cprogram_PATTERN = '%s' +cshlib_PATTERN = 'lib%s.so' +cstlib_PATTERN = 'lib%s.a' +macbundle_PATTERN = '%s.bundle' diff --git a/build/c4che/build.config.py b/build/c4che/build.config.py new file mode 100644 index 0000000..e52eb1e --- /dev/null +++ b/build/c4che/build.config.py @@ -0,0 +1,2 @@ +version = 0x1070b00 +tools = [{'tool': 'pebble_sdk_common', 'tooldir': None, 'funs': None}, {'tool': 'process_message_keys', 'tooldir': None, 'funs': None}, {'tool': 'ar', 'tooldir': None, 'funs': None}, {'tool': 'c', 'tooldir': None, 'funs': None}, {'tool': 'gcc', 'tooldir': None, 'funs': None}, {'tool': 'pebble_sdk_gcc', 'tooldir': None, 'funs': None}, {'tool': 'ar', 'tooldir': None, 'funs': None}, {'tool': 'c', 'tooldir': None, 'funs': None}, {'tool': 'gcc', 'tooldir': None, 'funs': None}, {'tool': 'pebble_sdk_gcc', 'tooldir': None, 'funs': None}, {'tool': 'ar', 'tooldir': None, 'funs': None}, {'tool': 'c', 'tooldir': None, 'funs': None}, {'tool': 'gcc', 'tooldir': None, 'funs': None}, {'tool': 'pebble_sdk_gcc', 'tooldir': None, 'funs': None}, {'tool': 'ar', 'tooldir': None, 'funs': None}, {'tool': 'c', 'tooldir': None, 'funs': None}, {'tool': 'gcc', 'tooldir': None, 'funs': None}, {'tool': 'pebble_sdk_gcc', 'tooldir': None, 'funs': None}, {'tool': 'pebble_sdk', 'tooldir': None, 'funs': None}] diff --git a/build/c4che/chalk_cache.py b/build/c4che/chalk_cache.py new file mode 100644 index 0000000..2d018ff --- /dev/null +++ b/build/c4che/chalk_cache.py @@ -0,0 +1,72 @@ +AR = 'arm-none-eabi-ar' +ARFLAGS = 'rcs' +AS = 'arm-none-eabi-gcc' +BINDIR = '/usr/local/bin' +BLOCK_MESSAGE_KEYS = [] +BUILD_DIR = 'chalk' +BUILD_TYPE = 'rocky' +BUNDLE_BIN_DIR = 'chalk' +BUNDLE_NAME = 'geiger.pbw' +CC = ['arm-none-eabi-gcc'] +CCLNK_SRC_F = [] +CCLNK_TGT_F = ['-o'] +CC_NAME = 'gcc' +CC_SRC_F = [] +CC_TGT_F = ['-c', '-o'] +CC_VERSION = ('4', '7', '2') +CFLAGS = ['-std=c99', '-mcpu=cortex-m3', '-mthumb', '-ffunction-sections', '-fdata-sections', '-g', '-fPIE', '-Os', '-D_TIME_H_', '-Wall', '-Wextra', '-Werror', '-Wno-unused-parameter', '-Wno-error=unused-function', '-Wno-error=unused-variable'] +CFLAGS_MACBUNDLE = ['-fPIC'] +CFLAGS_cshlib = ['-fPIC'] +CPPPATH_ST = '-I%s' +DEFINES = ['RELEASE', 'PBL_PLATFORM_CHALK', 'PBL_COLOR', 'PBL_ROUND', 'PBL_MICROPHONE', 'PBL_SMARTSTRAP', 'PBL_HEALTH', 'PBL_COMPASS', 'PBL_SMARTSTRAP_POWER', 'PBL_DISPLAY_WIDTH=180', 'PBL_DISPLAY_HEIGHT=180', 'PBL_SDK_3'] +DEFINES_ST = '-D%s' +DEST_BINFMT = 'elf' +DEST_CPU = 'arm' +DEST_OS = 'linux' +INCLUDES = ['chalk'] +LD = 'arm-none-eabi-ld' +LIBDIR = '/usr/local/lib' +LIBPATH_ST = '-L%s' +LIB_DIR = 'node_modules' +LIB_JSON = [] +LIB_ST = '-l%s' +LINKFLAGS = ['-mcpu=cortex-m3', '-mthumb', '-Wl,--gc-sections', '-Wl,--warn-common', '-fPIE', '-Os'] +LINKFLAGS_MACBUNDLE = ['-bundle', '-undefined', 'dynamic_lookup'] +LINKFLAGS_cshlib = ['-shared'] +LINKFLAGS_cstlib = ['-Wl,-Bstatic'] +LINK_CC = ['arm-none-eabi-gcc'] +MESSAGE_KEYS = {'ControlKeyResetRequest': 1, 'ControlKeyUnsupportedError': 4, 'ControlKeyChunk': 3, 'ControlKeyResetComplete': 2} +MESSAGE_KEYS_DEFINITION = '/home/zahkc/Documents/Projects/Pebble/geiger/build/src/message_keys.auto.c' +MESSAGE_KEYS_HEADER = '/home/zahkc/Documents/Projects/Pebble/geiger/build/include/message_keys.auto.h' +MESSAGE_KEYS_JSON = '/home/zahkc/Documents/Projects/Pebble/geiger/build/js/message_keys.json' +NODE = '/usr/bin/node' +NODE_PATH = '/home/zahkc/.pebble-sdk/SDKs/current/node_modules' +PEBBLE_SDK_COMMON = '/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/common' +PEBBLE_SDK_PLATFORM = '/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/chalk' +PEBBLE_SDK_ROOT = '/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble' +PLATFORM = {'TAGS': ['chalk', 'color', 'round', 'mic', 'strap', 'strappower', 'compass', 'health', '180w', '180h'], 'MAX_FONT_GLYPH_SIZE': 256, 'ADDITIONAL_TEXT_LINES_FOR_PEBBLE_H': [], 'MAX_APP_BINARY_SIZE': 65536, 'MAX_RESOURCES_SIZE': 1048576, 'MAX_APP_MEMORY_SIZE': 65536, 'MAX_WORKER_MEMORY_SIZE': 10240, 'NAME': 'chalk', 'BUNDLE_BIN_DIR': 'chalk', 'BUILD_DIR': 'chalk', 'MAX_RESOURCES_SIZE_APPSTORE': 262144, 'DEFINES': ['PBL_PLATFORM_CHALK', 'PBL_COLOR', 'PBL_ROUND', 'PBL_MICROPHONE', 'PBL_SMARTSTRAP', 'PBL_HEALTH', 'PBL_COMPASS', 'PBL_SMARTSTRAP_POWER', 'PBL_DISPLAY_WIDTH=180', 'PBL_DISPLAY_HEIGHT=180']} +PLATFORM_NAME = 'chalk' +PREFIX = '/usr/local' +PROJECT_INFO = {'appKeys': {'ControlKeyResetRequest': 1, 'ControlKeyUnsupportedError': 4, 'ControlKeyChunk': 3, 'ControlKeyResetComplete': 2}, u'sdkVersion': u'3', u'projectType': u'rocky', u'uuid': u'a426b361-f97e-4934-8581-4e1cb299b74a', 'messageKeys': {'ControlKeyResetRequest': 1, 'ControlKeyUnsupportedError': 4, 'ControlKeyChunk': 3, 'ControlKeyResetComplete': 2}, 'companyName': u'Zahkc', u'enableMultiJS': True, u'watchapp': {u'watchface': True}, 'versionLabel': u'1.0', 'longName': u'geiger', u'displayName': u'geiger', 'shortName': u'geiger', u'main': {u'rockyjs': u'src/rocky/index.js', u'pkjs': u'src/pkjs/index.js'}, u'resources': {u'media': []}, 'name': u'Geiger Counter'} +REQUESTED_PLATFORMS = [] +RESOURCES_JSON = [] +RPATH_ST = '-Wl,-rpath,%s' +SANDBOX = False +SDK_VERSION_MAJOR = 5 +SDK_VERSION_MINOR = 86 +SHLIB_MARKER = None +SIZE = 'arm-none-eabi-size' +SONAME_ST = '-Wl,-h,%s' +STLIBPATH_ST = '-L%s' +STLIB_MARKER = None +STLIB_ST = '-l%s' +SUPPORTED_PLATFORMS = ['emery', 'diorite', 'chalk', 'basalt'] +TARGET_PLATFORMS = ['emery', 'diorite', 'chalk', 'basalt'] +TIMESTAMP = 1691328646 +USE_GROUPS = True +VERBOSE = 0 +WEBPACK = '/home/zahkc/.pebble-sdk/SDKs/current/node_modules/.bin/webpack' +cprogram_PATTERN = '%s' +cshlib_PATTERN = 'lib%s.so' +cstlib_PATTERN = 'lib%s.a' +macbundle_PATTERN = '%s.bundle' diff --git a/build/c4che/diorite_cache.py b/build/c4che/diorite_cache.py new file mode 100644 index 0000000..144b89d --- /dev/null +++ b/build/c4che/diorite_cache.py @@ -0,0 +1,72 @@ +AR = 'arm-none-eabi-ar' +ARFLAGS = 'rcs' +AS = 'arm-none-eabi-gcc' +BINDIR = '/usr/local/bin' +BLOCK_MESSAGE_KEYS = [] +BUILD_DIR = 'diorite' +BUILD_TYPE = 'rocky' +BUNDLE_BIN_DIR = 'diorite' +BUNDLE_NAME = 'geiger.pbw' +CC = ['arm-none-eabi-gcc'] +CCLNK_SRC_F = [] +CCLNK_TGT_F = ['-o'] +CC_NAME = 'gcc' +CC_SRC_F = [] +CC_TGT_F = ['-c', '-o'] +CC_VERSION = ('4', '7', '2') +CFLAGS = ['-std=c99', '-mcpu=cortex-m3', '-mthumb', '-ffunction-sections', '-fdata-sections', '-g', '-fPIE', '-Os', '-D_TIME_H_', '-Wall', '-Wextra', '-Werror', '-Wno-unused-parameter', '-Wno-error=unused-function', '-Wno-error=unused-variable'] +CFLAGS_MACBUNDLE = ['-fPIC'] +CFLAGS_cshlib = ['-fPIC'] +CPPPATH_ST = '-I%s' +DEFINES = ['RELEASE', 'PBL_PLATFORM_DIORITE', 'PBL_BW', 'PBL_RECT', 'PBL_MICROPHONE', 'PBL_HEALTH', 'PBL_SMARTSTRAP', 'PBL_DISPLAY_WIDTH=144', 'PBL_DISPLAY_HEIGHT=168', 'PBL_SDK_3'] +DEFINES_ST = '-D%s' +DEST_BINFMT = 'elf' +DEST_CPU = 'arm' +DEST_OS = 'linux' +INCLUDES = ['diorite'] +LD = 'arm-none-eabi-ld' +LIBDIR = '/usr/local/lib' +LIBPATH_ST = '-L%s' +LIB_DIR = 'node_modules' +LIB_JSON = [] +LIB_ST = '-l%s' +LINKFLAGS = ['-mcpu=cortex-m3', '-mthumb', '-Wl,--gc-sections', '-Wl,--warn-common', '-fPIE', '-Os'] +LINKFLAGS_MACBUNDLE = ['-bundle', '-undefined', 'dynamic_lookup'] +LINKFLAGS_cshlib = ['-shared'] +LINKFLAGS_cstlib = ['-Wl,-Bstatic'] +LINK_CC = ['arm-none-eabi-gcc'] +MESSAGE_KEYS = {'ControlKeyResetRequest': 1, 'ControlKeyUnsupportedError': 4, 'ControlKeyChunk': 3, 'ControlKeyResetComplete': 2} +MESSAGE_KEYS_DEFINITION = '/home/zahkc/Documents/Projects/Pebble/geiger/build/src/message_keys.auto.c' +MESSAGE_KEYS_HEADER = '/home/zahkc/Documents/Projects/Pebble/geiger/build/include/message_keys.auto.h' +MESSAGE_KEYS_JSON = '/home/zahkc/Documents/Projects/Pebble/geiger/build/js/message_keys.json' +NODE = '/usr/bin/node' +NODE_PATH = '/home/zahkc/.pebble-sdk/SDKs/current/node_modules' +PEBBLE_SDK_COMMON = '/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/common' +PEBBLE_SDK_PLATFORM = '/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/diorite' +PEBBLE_SDK_ROOT = '/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble' +PLATFORM = {'TAGS': ['diorite', 'bw', 'rect', 'mic', 'strap', 'health', '144w', '168h'], 'MAX_FONT_GLYPH_SIZE': 256, 'ADDITIONAL_TEXT_LINES_FOR_PEBBLE_H': [], 'MAX_APP_BINARY_SIZE': 65536, 'MAX_RESOURCES_SIZE': 1048576, 'MAX_APP_MEMORY_SIZE': 65536, 'MAX_WORKER_MEMORY_SIZE': 10240, 'NAME': 'diorite', 'BUNDLE_BIN_DIR': 'diorite', 'BUILD_DIR': 'diorite', 'MAX_RESOURCES_SIZE_APPSTORE': 262144, 'DEFINES': ['PBL_PLATFORM_DIORITE', 'PBL_BW', 'PBL_RECT', 'PBL_MICROPHONE', 'PBL_HEALTH', 'PBL_SMARTSTRAP', 'PBL_DISPLAY_WIDTH=144', 'PBL_DISPLAY_HEIGHT=168']} +PLATFORM_NAME = 'diorite' +PREFIX = '/usr/local' +PROJECT_INFO = {'appKeys': {'ControlKeyResetRequest': 1, 'ControlKeyUnsupportedError': 4, 'ControlKeyChunk': 3, 'ControlKeyResetComplete': 2}, u'sdkVersion': u'3', u'projectType': u'rocky', u'uuid': u'a426b361-f97e-4934-8581-4e1cb299b74a', 'messageKeys': {'ControlKeyResetRequest': 1, 'ControlKeyUnsupportedError': 4, 'ControlKeyChunk': 3, 'ControlKeyResetComplete': 2}, 'companyName': u'Zahkc', u'enableMultiJS': True, u'watchapp': {u'watchface': True}, 'versionLabel': u'1.0', 'longName': u'geiger', u'displayName': u'geiger', 'shortName': u'geiger', u'main': {u'rockyjs': u'src/rocky/index.js', u'pkjs': u'src/pkjs/index.js'}, u'resources': {u'media': []}, 'name': u'Geiger Counter'} +REQUESTED_PLATFORMS = [] +RESOURCES_JSON = [] +RPATH_ST = '-Wl,-rpath,%s' +SANDBOX = False +SDK_VERSION_MAJOR = 5 +SDK_VERSION_MINOR = 86 +SHLIB_MARKER = None +SIZE = 'arm-none-eabi-size' +SONAME_ST = '-Wl,-h,%s' +STLIBPATH_ST = '-L%s' +STLIB_MARKER = None +STLIB_ST = '-l%s' +SUPPORTED_PLATFORMS = ['emery', 'diorite', 'chalk', 'basalt'] +TARGET_PLATFORMS = ['emery', 'diorite', 'chalk', 'basalt'] +TIMESTAMP = 1691328646 +USE_GROUPS = True +VERBOSE = 0 +WEBPACK = '/home/zahkc/.pebble-sdk/SDKs/current/node_modules/.bin/webpack' +cprogram_PATTERN = '%s' +cshlib_PATTERN = 'lib%s.so' +cstlib_PATTERN = 'lib%s.a' +macbundle_PATTERN = '%s.bundle' diff --git a/build/c4che/emery_cache.py b/build/c4che/emery_cache.py new file mode 100644 index 0000000..2d1619d --- /dev/null +++ b/build/c4che/emery_cache.py @@ -0,0 +1,72 @@ +AR = 'arm-none-eabi-ar' +ARFLAGS = 'rcs' +AS = 'arm-none-eabi-gcc' +BINDIR = '/usr/local/bin' +BLOCK_MESSAGE_KEYS = [] +BUILD_DIR = 'emery' +BUILD_TYPE = 'rocky' +BUNDLE_BIN_DIR = 'emery' +BUNDLE_NAME = 'geiger.pbw' +CC = ['arm-none-eabi-gcc'] +CCLNK_SRC_F = [] +CCLNK_TGT_F = ['-o'] +CC_NAME = 'gcc' +CC_SRC_F = [] +CC_TGT_F = ['-c', '-o'] +CC_VERSION = ('4', '7', '2') +CFLAGS = ['-std=c99', '-mcpu=cortex-m3', '-mthumb', '-ffunction-sections', '-fdata-sections', '-g', '-fPIE', '-Os', '-D_TIME_H_', '-Wall', '-Wextra', '-Werror', '-Wno-unused-parameter', '-Wno-error=unused-function', '-Wno-error=unused-variable'] +CFLAGS_MACBUNDLE = ['-fPIC'] +CFLAGS_cshlib = ['-fPIC'] +CPPPATH_ST = '-I%s' +DEFINES = ['RELEASE', 'PBL_PLATFORM_EMERY', 'PBL_COLOR', 'PBL_RECT', 'PBL_MICROPHONE', 'PBL_SMARTSTRAP', 'PBL_HEALTH', 'PBL_SMARTSTRAP_POWER', 'PBL_COMPASS', 'PBL_DISPLAY_WIDTH=200', 'PBL_DISPLAY_HEIGHT=228', 'PBL_SDK_3'] +DEFINES_ST = '-D%s' +DEST_BINFMT = 'elf' +DEST_CPU = 'arm' +DEST_OS = 'linux' +INCLUDES = ['emery'] +LD = 'arm-none-eabi-ld' +LIBDIR = '/usr/local/lib' +LIBPATH_ST = '-L%s' +LIB_DIR = 'node_modules' +LIB_JSON = [] +LIB_ST = '-l%s' +LINKFLAGS = ['-mcpu=cortex-m3', '-mthumb', '-Wl,--gc-sections', '-Wl,--warn-common', '-fPIE', '-Os'] +LINKFLAGS_MACBUNDLE = ['-bundle', '-undefined', 'dynamic_lookup'] +LINKFLAGS_cshlib = ['-shared'] +LINKFLAGS_cstlib = ['-Wl,-Bstatic'] +LINK_CC = ['arm-none-eabi-gcc'] +MESSAGE_KEYS = {'ControlKeyResetRequest': 1, 'ControlKeyUnsupportedError': 4, 'ControlKeyChunk': 3, 'ControlKeyResetComplete': 2} +MESSAGE_KEYS_DEFINITION = '/home/zahkc/Documents/Projects/Pebble/geiger/build/src/message_keys.auto.c' +MESSAGE_KEYS_HEADER = '/home/zahkc/Documents/Projects/Pebble/geiger/build/include/message_keys.auto.h' +MESSAGE_KEYS_JSON = '/home/zahkc/Documents/Projects/Pebble/geiger/build/js/message_keys.json' +NODE = '/usr/bin/node' +NODE_PATH = '/home/zahkc/.pebble-sdk/SDKs/current/node_modules' +PEBBLE_SDK_COMMON = '/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/common' +PEBBLE_SDK_PLATFORM = '/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/emery' +PEBBLE_SDK_ROOT = '/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble' +PLATFORM = {'TAGS': ['emery', 'color', 'rect', 'mic', 'strap', 'health', 'strappower', 'compass', '200w', '228h'], 'MAX_FONT_GLYPH_SIZE': 320, 'ADDITIONAL_TEXT_LINES_FOR_PEBBLE_H': [], 'MAX_APP_BINARY_SIZE': 131072, 'MAX_RESOURCES_SIZE': 1048576, 'MAX_APP_MEMORY_SIZE': 131072, 'MAX_WORKER_MEMORY_SIZE': 10240, 'NAME': 'emery', 'BUNDLE_BIN_DIR': 'emery', 'BUILD_DIR': 'emery', 'MAX_RESOURCES_SIZE_APPSTORE': 262144, 'DEFINES': ['PBL_PLATFORM_EMERY', 'PBL_COLOR', 'PBL_RECT', 'PBL_MICROPHONE', 'PBL_SMARTSTRAP', 'PBL_HEALTH', 'PBL_SMARTSTRAP_POWER', 'PBL_COMPASS', 'PBL_DISPLAY_WIDTH=200', 'PBL_DISPLAY_HEIGHT=228']} +PLATFORM_NAME = 'emery' +PREFIX = '/usr/local' +PROJECT_INFO = {'appKeys': {'ControlKeyResetRequest': 1, 'ControlKeyUnsupportedError': 4, 'ControlKeyChunk': 3, 'ControlKeyResetComplete': 2}, u'sdkVersion': u'3', u'projectType': u'rocky', u'uuid': u'a426b361-f97e-4934-8581-4e1cb299b74a', 'messageKeys': {'ControlKeyResetRequest': 1, 'ControlKeyUnsupportedError': 4, 'ControlKeyChunk': 3, 'ControlKeyResetComplete': 2}, 'companyName': u'Zahkc', u'enableMultiJS': True, u'watchapp': {u'watchface': True}, 'versionLabel': u'1.0', 'longName': u'geiger', u'displayName': u'geiger', 'shortName': u'geiger', u'main': {u'rockyjs': u'src/rocky/index.js', u'pkjs': u'src/pkjs/index.js'}, u'resources': {u'media': []}, 'name': u'Geiger Counter'} +REQUESTED_PLATFORMS = [] +RESOURCES_JSON = [] +RPATH_ST = '-Wl,-rpath,%s' +SANDBOX = False +SDK_VERSION_MAJOR = 5 +SDK_VERSION_MINOR = 86 +SHLIB_MARKER = None +SIZE = 'arm-none-eabi-size' +SONAME_ST = '-Wl,-h,%s' +STLIBPATH_ST = '-L%s' +STLIB_MARKER = None +STLIB_ST = '-l%s' +SUPPORTED_PLATFORMS = ['emery', 'diorite', 'chalk', 'basalt'] +TARGET_PLATFORMS = ['emery', 'diorite', 'chalk', 'basalt'] +TIMESTAMP = 1691328646 +USE_GROUPS = True +VERBOSE = 0 +WEBPACK = '/home/zahkc/.pebble-sdk/SDKs/current/node_modules/.bin/webpack' +cprogram_PATTERN = '%s' +cshlib_PATTERN = 'lib%s.so' +cstlib_PATTERN = 'lib%s.a' +macbundle_PATTERN = '%s.bundle' diff --git a/build/chalk/app_resources.pbpack b/build/chalk/app_resources.pbpack new file mode 100644 index 0000000..03dbe57 Binary files /dev/null and b/build/chalk/app_resources.pbpack differ diff --git a/build/chalk/appinfo.auto.c b/build/chalk/appinfo.auto.c new file mode 100644 index 0000000..8bc86e4 --- /dev/null +++ b/build/chalk/appinfo.auto.c @@ -0,0 +1,20 @@ +#include "pebble_process_info.h" +#include "src/resource_ids.auto.h" + +const PebbleProcessInfo __pbl_app_info __attribute__ ((section (".pbl_header"))) = { + .header = "PBLAPP", + .struct_version = { PROCESS_INFO_CURRENT_STRUCT_VERSION_MAJOR, PROCESS_INFO_CURRENT_STRUCT_VERSION_MINOR }, + .sdk_version = { PROCESS_INFO_CURRENT_SDK_VERSION_MAJOR, PROCESS_INFO_CURRENT_SDK_VERSION_MINOR }, + .process_version = { 1, 0 }, + .load_size = 0xb6b6, + .offset = 0xb6b6b6b6, + .crc = 0xb6b6b6b6, + .name = "geiger", + .company = "Zahkc", + .icon_resource_id = DEFAULT_MENU_ICON, + .sym_table_addr = 0xA7A7A7A7, + .flags = PROCESS_INFO_WATCH_FACE | PROCESS_INFO_ROCKY_APP | PROCESS_INFO_PLATFORM_CHALK, + .num_reloc_entries = 0xdeadcafe, + .uuid = { 0xA4, 0x26, 0xB3, 0x61, 0xF9, 0x7E, 0x49, 0x34, 0x85, 0x81, 0x4E, 0x1C, 0xB2, 0x99, 0xB7, 0x4A }, + .virtual_size = 0xb6b6 +}; diff --git a/build/chalk/appinfo.auto.c.32.o b/build/chalk/appinfo.auto.c.32.o new file mode 100644 index 0000000..9dfb646 Binary files /dev/null and b/build/chalk/appinfo.auto.c.32.o differ diff --git a/build/chalk/pebble-app.bin b/build/chalk/pebble-app.bin new file mode 100644 index 0000000..6f7f73a Binary files /dev/null and b/build/chalk/pebble-app.bin differ diff --git a/build/chalk/pebble-app.elf b/build/chalk/pebble-app.elf new file mode 100644 index 0000000..8f99f09 Binary files /dev/null and b/build/chalk/pebble-app.elf differ diff --git a/build/chalk/pebble-app.raw.bin b/build/chalk/pebble-app.raw.bin new file mode 100644 index 0000000..c1a8573 Binary files /dev/null and b/build/chalk/pebble-app.raw.bin differ diff --git a/build/chalk/pebble_app.ld.auto b/build/chalk/pebble_app.ld.auto new file mode 100644 index 0000000..f36f597 --- /dev/null +++ b/build/chalk/pebble_app.ld.auto @@ -0,0 +1,53 @@ + +ENTRY(main) + +MEMORY +{ + APP (rwx) : ORIGIN = 0, LENGTH = 65536 +} + +SECTIONS +{ + .header : + { + KEEP(*(.pbl_header)) + + } > APP + + /* -- DO NOT ADD ANY NEW SECTIONS HERE AND DO NOT CHANGE THE ALIGNMENT -- */ + /* The GNU build ID is tacked to the end of the PebbleProcessInfo struct: */ + .note.gnu.build-id ALIGN(1) : { + PROVIDE(BUILD_ID = .); + KEEP(*(.note.gnu.build-id)) + } > APP + + .text : + { + *(.text) + *(.text.*) + *(.rodata) + *(.rodata*) + } > APP + + .data : + { + KEEP(*(.data)) + *(.data.*) + } > APP + + .bss : + { + *(.bss) + *(.bss.*) + } > APP + + DISCARD : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + *(.eh_frame) + } +} + +/* vim:filetype=ld */ diff --git a/build/chalk/resources/rocky-app.js.JS_SNAPSHOT.bytecode b/build/chalk/resources/rocky-app.js.JS_SNAPSHOT.bytecode new file mode 100644 index 0000000..e0d530a Binary files /dev/null and b/build/chalk/resources/rocky-app.js.JS_SNAPSHOT.bytecode differ diff --git a/build/chalk/resources/rocky-app.js.JS_SNAPSHOT.reso b/build/chalk/resources/rocky-app.js.JS_SNAPSHOT.reso new file mode 100644 index 0000000..60bd8d4 Binary files /dev/null and b/build/chalk/resources/rocky-app.js.JS_SNAPSHOT.reso differ diff --git a/build/chalk/src/resource_ids.auto.c b/build/chalk/src/resource_ids.auto.c new file mode 100644 index 0000000..33e4e48 --- /dev/null +++ b/build/chalk/src/resource_ids.auto.c @@ -0,0 +1,8 @@ +#include + +// +// AUTOGENERATED BY BUILD +// DO NOT MODIFY - CHANGES WILL BE OVERWRITTEN +// + +uint32_t RESOURCE_ID_JS_SNAPSHOT = 1; diff --git a/build/chalk/src/resource_ids.auto.c.32.o b/build/chalk/src/resource_ids.auto.c.32.o new file mode 100644 index 0000000..17ccfdd Binary files /dev/null and b/build/chalk/src/resource_ids.auto.c.32.o differ diff --git a/build/chalk/src/resource_ids.auto.h b/build/chalk/src/resource_ids.auto.h new file mode 100644 index 0000000..bf38521 --- /dev/null +++ b/build/chalk/src/resource_ids.auto.h @@ -0,0 +1,13 @@ +#pragma once + +// +// AUTOGENERATED BY BUILD +// DO NOT MODIFY - CHANGES WILL BE OVERWRITTEN +// + +typedef enum { + INVALID_RESOURCE = 0, + RESOURCE_ID_INVALID = 0, + DEFAULT_MENU_ICON = 0, + RESOURCE_ID_JS_SNAPSHOT = 1, +} ResourceId; \ No newline at end of file diff --git a/build/chalk/src/rocky.c b/build/chalk/src/rocky.c new file mode 100644 index 0000000..56ca996 --- /dev/null +++ b/build/chalk/src/rocky.c @@ -0,0 +1,9 @@ +#include + +extern bool rocky_event_loop_with_resource(uint32_t resource_id); + +int main(void) { + Window *window = window_create(); + window_stack_push(window, false); + rocky_event_loop_with_resource(RESOURCE_ID_JS_SNAPSHOT); +} diff --git a/build/chalk/src/rocky.c.32.o b/build/chalk/src/rocky.c.32.o new file mode 100644 index 0000000..6aceab6 Binary files /dev/null and b/build/chalk/src/rocky.c.32.o differ diff --git a/build/chalk/system_resources.resball b/build/chalk/system_resources.resball new file mode 100644 index 0000000..271679b Binary files /dev/null and b/build/chalk/system_resources.resball differ diff --git a/build/chalk_snapshot_size.json b/build/chalk_snapshot_size.json new file mode 100644 index 0000000..13e70d0 --- /dev/null +++ b/build/chalk_snapshot_size.json @@ -0,0 +1 @@ +{"size":3452,"max":24576} \ No newline at end of file diff --git a/build/config.log b/build/config.log new file mode 100644 index 0000000..1beeb05 --- /dev/null +++ b/build/config.log @@ -0,0 +1,62 @@ +# project configured on Sun Aug 6 23:30:46 2023 by +# waf 1.7.11 (abi 98, python 20712f0 on linux2) +# using /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/waf configure +# +---------------------------------------- +Setting top to +/home/zahkc/Documents/Projects/Pebble/geiger +---------------------------------------- +Setting out to +/home/zahkc/Documents/Projects/Pebble/geiger/build +---------------------------------------- +Checking for program webpack +/home/zahkc/.pebble-sdk/SDKs/current/node_modules/.bin/webpack +find program=['webpack'] paths=['/home/zahkc/.pebble-sdk/SDKs/current/node_modules/.bin'] var='WEBPACK' -> '/home/zahkc/.pebble-sdk/SDKs/current/node_modules/.bin/webpack' +---------------------------------------- +Checking for program node,nodejs +/usr/bin/node +find program=['node', 'nodejs'] paths=['/home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin', '/home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/bin', '/home/zahkc/.local/bin', '/home/zahkc/.local/bin/lvim', '/home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/bin', '/home/zahkc/gems/bin', '/home/zahkc/gems/bin', '/usr/local/bin', '/usr/bin', '/bin', '/usr/local/games', '/usr/games', '/snap/bin', '/home/zahkc/.dotnet', '/home/zahkc/.dotnet/tools'] var='NODE' -> '/usr/bin/node' +---------------------------------------- +Found Pebble SDK for emery in: +/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/emery +---------------------------------------- +Checking for program gcc,cc +arm-none-eabi-gcc +find program=['gcc', 'cc'] paths='' var='CC' -> 'arm-none-eabi-gcc' +---------------------------------------- +Checking for program ar +arm-none-eabi-ar +find program=['ar'] paths='' var='AR' -> 'arm-none-eabi-ar' +---------------------------------------- +Found Pebble SDK for diorite in: +/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/diorite +---------------------------------------- +Checking for program gcc,cc +arm-none-eabi-gcc +find program=['gcc', 'cc'] paths='' var='CC' -> 'arm-none-eabi-gcc' +---------------------------------------- +Checking for program ar +arm-none-eabi-ar +find program=['ar'] paths='' var='AR' -> 'arm-none-eabi-ar' +---------------------------------------- +Found Pebble SDK for chalk in: +/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/chalk +---------------------------------------- +Checking for program gcc,cc +arm-none-eabi-gcc +find program=['gcc', 'cc'] paths='' var='CC' -> 'arm-none-eabi-gcc' +---------------------------------------- +Checking for program ar +arm-none-eabi-ar +find program=['ar'] paths='' var='AR' -> 'arm-none-eabi-ar' +---------------------------------------- +Found Pebble SDK for basalt in: +/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt +---------------------------------------- +Checking for program gcc,cc +arm-none-eabi-gcc +find program=['gcc', 'cc'] paths='' var='CC' -> 'arm-none-eabi-gcc' +---------------------------------------- +Checking for program ar +arm-none-eabi-ar +find program=['ar'] paths='' var='AR' -> 'arm-none-eabi-ar' diff --git a/build/diorite/app_resources.pbpack b/build/diorite/app_resources.pbpack new file mode 100644 index 0000000..03dbe57 Binary files /dev/null and b/build/diorite/app_resources.pbpack differ diff --git a/build/diorite/appinfo.auto.c b/build/diorite/appinfo.auto.c new file mode 100644 index 0000000..cb6bb31 --- /dev/null +++ b/build/diorite/appinfo.auto.c @@ -0,0 +1,20 @@ +#include "pebble_process_info.h" +#include "src/resource_ids.auto.h" + +const PebbleProcessInfo __pbl_app_info __attribute__ ((section (".pbl_header"))) = { + .header = "PBLAPP", + .struct_version = { PROCESS_INFO_CURRENT_STRUCT_VERSION_MAJOR, PROCESS_INFO_CURRENT_STRUCT_VERSION_MINOR }, + .sdk_version = { PROCESS_INFO_CURRENT_SDK_VERSION_MAJOR, PROCESS_INFO_CURRENT_SDK_VERSION_MINOR }, + .process_version = { 1, 0 }, + .load_size = 0xb6b6, + .offset = 0xb6b6b6b6, + .crc = 0xb6b6b6b6, + .name = "geiger", + .company = "Zahkc", + .icon_resource_id = DEFAULT_MENU_ICON, + .sym_table_addr = 0xA7A7A7A7, + .flags = PROCESS_INFO_WATCH_FACE | PROCESS_INFO_ROCKY_APP | PROCESS_INFO_PLATFORM_DIORITE, + .num_reloc_entries = 0xdeadcafe, + .uuid = { 0xA4, 0x26, 0xB3, 0x61, 0xF9, 0x7E, 0x49, 0x34, 0x85, 0x81, 0x4E, 0x1C, 0xB2, 0x99, 0xB7, 0x4A }, + .virtual_size = 0xb6b6 +}; diff --git a/build/diorite/appinfo.auto.c.23.o b/build/diorite/appinfo.auto.c.23.o new file mode 100644 index 0000000..fea8ef8 Binary files /dev/null and b/build/diorite/appinfo.auto.c.23.o differ diff --git a/build/diorite/pebble-app.bin b/build/diorite/pebble-app.bin new file mode 100644 index 0000000..f1ac9c5 Binary files /dev/null and b/build/diorite/pebble-app.bin differ diff --git a/build/diorite/pebble-app.elf b/build/diorite/pebble-app.elf new file mode 100644 index 0000000..86cdd19 Binary files /dev/null and b/build/diorite/pebble-app.elf differ diff --git a/build/diorite/pebble-app.raw.bin b/build/diorite/pebble-app.raw.bin new file mode 100644 index 0000000..55ec333 Binary files /dev/null and b/build/diorite/pebble-app.raw.bin differ diff --git a/build/diorite/pebble_app.ld.auto b/build/diorite/pebble_app.ld.auto new file mode 100644 index 0000000..f36f597 --- /dev/null +++ b/build/diorite/pebble_app.ld.auto @@ -0,0 +1,53 @@ + +ENTRY(main) + +MEMORY +{ + APP (rwx) : ORIGIN = 0, LENGTH = 65536 +} + +SECTIONS +{ + .header : + { + KEEP(*(.pbl_header)) + + } > APP + + /* -- DO NOT ADD ANY NEW SECTIONS HERE AND DO NOT CHANGE THE ALIGNMENT -- */ + /* The GNU build ID is tacked to the end of the PebbleProcessInfo struct: */ + .note.gnu.build-id ALIGN(1) : { + PROVIDE(BUILD_ID = .); + KEEP(*(.note.gnu.build-id)) + } > APP + + .text : + { + *(.text) + *(.text.*) + *(.rodata) + *(.rodata*) + } > APP + + .data : + { + KEEP(*(.data)) + *(.data.*) + } > APP + + .bss : + { + *(.bss) + *(.bss.*) + } > APP + + DISCARD : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + *(.eh_frame) + } +} + +/* vim:filetype=ld */ diff --git a/build/diorite/resources/rocky-app.js.JS_SNAPSHOT.bytecode b/build/diorite/resources/rocky-app.js.JS_SNAPSHOT.bytecode new file mode 100644 index 0000000..e0d530a Binary files /dev/null and b/build/diorite/resources/rocky-app.js.JS_SNAPSHOT.bytecode differ diff --git a/build/diorite/resources/rocky-app.js.JS_SNAPSHOT.reso b/build/diorite/resources/rocky-app.js.JS_SNAPSHOT.reso new file mode 100644 index 0000000..60bd8d4 Binary files /dev/null and b/build/diorite/resources/rocky-app.js.JS_SNAPSHOT.reso differ diff --git a/build/diorite/src/resource_ids.auto.c b/build/diorite/src/resource_ids.auto.c new file mode 100644 index 0000000..33e4e48 --- /dev/null +++ b/build/diorite/src/resource_ids.auto.c @@ -0,0 +1,8 @@ +#include + +// +// AUTOGENERATED BY BUILD +// DO NOT MODIFY - CHANGES WILL BE OVERWRITTEN +// + +uint32_t RESOURCE_ID_JS_SNAPSHOT = 1; diff --git a/build/diorite/src/resource_ids.auto.c.23.o b/build/diorite/src/resource_ids.auto.c.23.o new file mode 100644 index 0000000..85f28e6 Binary files /dev/null and b/build/diorite/src/resource_ids.auto.c.23.o differ diff --git a/build/diorite/src/resource_ids.auto.h b/build/diorite/src/resource_ids.auto.h new file mode 100644 index 0000000..bf38521 --- /dev/null +++ b/build/diorite/src/resource_ids.auto.h @@ -0,0 +1,13 @@ +#pragma once + +// +// AUTOGENERATED BY BUILD +// DO NOT MODIFY - CHANGES WILL BE OVERWRITTEN +// + +typedef enum { + INVALID_RESOURCE = 0, + RESOURCE_ID_INVALID = 0, + DEFAULT_MENU_ICON = 0, + RESOURCE_ID_JS_SNAPSHOT = 1, +} ResourceId; \ No newline at end of file diff --git a/build/diorite/src/rocky.c b/build/diorite/src/rocky.c new file mode 100644 index 0000000..56ca996 --- /dev/null +++ b/build/diorite/src/rocky.c @@ -0,0 +1,9 @@ +#include + +extern bool rocky_event_loop_with_resource(uint32_t resource_id); + +int main(void) { + Window *window = window_create(); + window_stack_push(window, false); + rocky_event_loop_with_resource(RESOURCE_ID_JS_SNAPSHOT); +} diff --git a/build/diorite/src/rocky.c.23.o b/build/diorite/src/rocky.c.23.o new file mode 100644 index 0000000..9752a75 Binary files /dev/null and b/build/diorite/src/rocky.c.23.o differ diff --git a/build/diorite/system_resources.resball b/build/diorite/system_resources.resball new file mode 100644 index 0000000..271679b Binary files /dev/null and b/build/diorite/system_resources.resball differ diff --git a/build/diorite_snapshot_size.json b/build/diorite_snapshot_size.json new file mode 100644 index 0000000..13e70d0 --- /dev/null +++ b/build/diorite_snapshot_size.json @@ -0,0 +1 @@ +{"size":3452,"max":24576} \ No newline at end of file diff --git a/build/emery/app_resources.pbpack b/build/emery/app_resources.pbpack new file mode 100644 index 0000000..03dbe57 Binary files /dev/null and b/build/emery/app_resources.pbpack differ diff --git a/build/emery/appinfo.auto.c b/build/emery/appinfo.auto.c new file mode 100644 index 0000000..614a43d --- /dev/null +++ b/build/emery/appinfo.auto.c @@ -0,0 +1,20 @@ +#include "pebble_process_info.h" +#include "src/resource_ids.auto.h" + +const PebbleProcessInfo __pbl_app_info __attribute__ ((section (".pbl_header"))) = { + .header = "PBLAPP", + .struct_version = { PROCESS_INFO_CURRENT_STRUCT_VERSION_MAJOR, PROCESS_INFO_CURRENT_STRUCT_VERSION_MINOR }, + .sdk_version = { PROCESS_INFO_CURRENT_SDK_VERSION_MAJOR, PROCESS_INFO_CURRENT_SDK_VERSION_MINOR }, + .process_version = { 1, 0 }, + .load_size = 0xb6b6, + .offset = 0xb6b6b6b6, + .crc = 0xb6b6b6b6, + .name = "geiger", + .company = "Zahkc", + .icon_resource_id = DEFAULT_MENU_ICON, + .sym_table_addr = 0xA7A7A7A7, + .flags = PROCESS_INFO_WATCH_FACE | PROCESS_INFO_ROCKY_APP | PROCESS_INFO_PLATFORM_EMERY, + .num_reloc_entries = 0xdeadcafe, + .uuid = { 0xA4, 0x26, 0xB3, 0x61, 0xF9, 0x7E, 0x49, 0x34, 0x85, 0x81, 0x4E, 0x1C, 0xB2, 0x99, 0xB7, 0x4A }, + .virtual_size = 0xb6b6 +}; diff --git a/build/emery/appinfo.auto.c.14.o b/build/emery/appinfo.auto.c.14.o new file mode 100644 index 0000000..1552693 Binary files /dev/null and b/build/emery/appinfo.auto.c.14.o differ diff --git a/build/emery/pebble-app.bin b/build/emery/pebble-app.bin new file mode 100644 index 0000000..86dc572 Binary files /dev/null and b/build/emery/pebble-app.bin differ diff --git a/build/emery/pebble-app.elf b/build/emery/pebble-app.elf new file mode 100644 index 0000000..3f5ce7d Binary files /dev/null and b/build/emery/pebble-app.elf differ diff --git a/build/emery/pebble-app.raw.bin b/build/emery/pebble-app.raw.bin new file mode 100644 index 0000000..b3ee240 Binary files /dev/null and b/build/emery/pebble-app.raw.bin differ diff --git a/build/emery/pebble_app.ld.auto b/build/emery/pebble_app.ld.auto new file mode 100644 index 0000000..d211b6a --- /dev/null +++ b/build/emery/pebble_app.ld.auto @@ -0,0 +1,53 @@ + +ENTRY(main) + +MEMORY +{ + APP (rwx) : ORIGIN = 0, LENGTH = 131072 +} + +SECTIONS +{ + .header : + { + KEEP(*(.pbl_header)) + + } > APP + + /* -- DO NOT ADD ANY NEW SECTIONS HERE AND DO NOT CHANGE THE ALIGNMENT -- */ + /* The GNU build ID is tacked to the end of the PebbleProcessInfo struct: */ + .note.gnu.build-id ALIGN(1) : { + PROVIDE(BUILD_ID = .); + KEEP(*(.note.gnu.build-id)) + } > APP + + .text : + { + *(.text) + *(.text.*) + *(.rodata) + *(.rodata*) + } > APP + + .data : + { + KEEP(*(.data)) + *(.data.*) + } > APP + + .bss : + { + *(.bss) + *(.bss.*) + } > APP + + DISCARD : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + *(.eh_frame) + } +} + +/* vim:filetype=ld */ diff --git a/build/emery/resources/rocky-app.js.JS_SNAPSHOT.bytecode b/build/emery/resources/rocky-app.js.JS_SNAPSHOT.bytecode new file mode 100644 index 0000000..e0d530a Binary files /dev/null and b/build/emery/resources/rocky-app.js.JS_SNAPSHOT.bytecode differ diff --git a/build/emery/resources/rocky-app.js.JS_SNAPSHOT.reso b/build/emery/resources/rocky-app.js.JS_SNAPSHOT.reso new file mode 100644 index 0000000..60bd8d4 Binary files /dev/null and b/build/emery/resources/rocky-app.js.JS_SNAPSHOT.reso differ diff --git a/build/emery/src/resource_ids.auto.c b/build/emery/src/resource_ids.auto.c new file mode 100644 index 0000000..33e4e48 --- /dev/null +++ b/build/emery/src/resource_ids.auto.c @@ -0,0 +1,8 @@ +#include + +// +// AUTOGENERATED BY BUILD +// DO NOT MODIFY - CHANGES WILL BE OVERWRITTEN +// + +uint32_t RESOURCE_ID_JS_SNAPSHOT = 1; diff --git a/build/emery/src/resource_ids.auto.c.14.o b/build/emery/src/resource_ids.auto.c.14.o new file mode 100644 index 0000000..7dca951 Binary files /dev/null and b/build/emery/src/resource_ids.auto.c.14.o differ diff --git a/build/emery/src/resource_ids.auto.h b/build/emery/src/resource_ids.auto.h new file mode 100644 index 0000000..bf38521 --- /dev/null +++ b/build/emery/src/resource_ids.auto.h @@ -0,0 +1,13 @@ +#pragma once + +// +// AUTOGENERATED BY BUILD +// DO NOT MODIFY - CHANGES WILL BE OVERWRITTEN +// + +typedef enum { + INVALID_RESOURCE = 0, + RESOURCE_ID_INVALID = 0, + DEFAULT_MENU_ICON = 0, + RESOURCE_ID_JS_SNAPSHOT = 1, +} ResourceId; \ No newline at end of file diff --git a/build/emery/src/rocky.c b/build/emery/src/rocky.c new file mode 100644 index 0000000..56ca996 --- /dev/null +++ b/build/emery/src/rocky.c @@ -0,0 +1,9 @@ +#include + +extern bool rocky_event_loop_with_resource(uint32_t resource_id); + +int main(void) { + Window *window = window_create(); + window_stack_push(window, false); + rocky_event_loop_with_resource(RESOURCE_ID_JS_SNAPSHOT); +} diff --git a/build/emery/src/rocky.c.14.o b/build/emery/src/rocky.c.14.o new file mode 100644 index 0000000..84d0bad Binary files /dev/null and b/build/emery/src/rocky.c.14.o differ diff --git a/build/emery/system_resources.resball b/build/emery/system_resources.resball new file mode 100644 index 0000000..271679b Binary files /dev/null and b/build/emery/system_resources.resball differ diff --git a/build/emery_snapshot_size.json b/build/emery_snapshot_size.json new file mode 100644 index 0000000..13e70d0 --- /dev/null +++ b/build/emery_snapshot_size.json @@ -0,0 +1 @@ +{"size":3452,"max":24576} \ No newline at end of file diff --git a/build/geiger.pbw b/build/geiger.pbw new file mode 100644 index 0000000..5de5a04 Binary files /dev/null and b/build/geiger.pbw differ diff --git a/build/include/message_keys.auto.h b/build/include/message_keys.auto.h new file mode 100644 index 0000000..dbda39c --- /dev/null +++ b/build/include/message_keys.auto.h @@ -0,0 +1,12 @@ +#pragma once +#include + +// +// AUTOGENERATED BY BUILD +// DO NOT MODIFY - CHANGES WILL BE OVERWRITTEN +// + +extern uint32_t MESSAGE_KEY_ControlKeyChunk; +extern uint32_t MESSAGE_KEY_ControlKeyResetComplete; +extern uint32_t MESSAGE_KEY_ControlKeyResetRequest; +extern uint32_t MESSAGE_KEY_ControlKeyUnsupportedError; diff --git a/build/js/message_keys.json b/build/js/message_keys.json new file mode 100644 index 0000000..4e24c8d --- /dev/null +++ b/build/js/message_keys.json @@ -0,0 +1,6 @@ +{ + "ControlKeyChunk": 3, + "ControlKeyResetComplete": 2, + "ControlKeyResetRequest": 1, + "ControlKeyUnsupportedError": 4 +} \ No newline at end of file diff --git a/build/pebble-js-app.js b/build/pebble-js-app.js new file mode 100644 index 0000000..9cbe8f5 --- /dev/null +++ b/build/pebble-js-app.js @@ -0,0 +1,1050 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; +/******/ +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; +/******/ +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); +/******/ +/******/ // Flag the module as loaded +/******/ module.loaded = true; +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/******/ +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; +/******/ +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; +/******/ +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; +/******/ +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(1); + __webpack_require__(2); + module.exports = __webpack_require__(5); + + +/***/ }), +/* 1 */ +/***/ (function(module, exports) { + + (function(p) { + if (!p === undefined) { + console.error('Pebble object not found!?'); + return; + } + + // Aliases: + p.on = p.addEventListener; + p.off = p.removeEventListener; + + // For Android (WebView-based) pkjs, print stacktrace for uncaught errors: + if (typeof window !== 'undefined' && window.addEventListener) { + window.addEventListener('error', function(event) { + if (event.error && event.error.stack) { + console.error('' + event.error + '\n' + event.error.stack); + } + }); + } + + })(Pebble); + + +/***/ }), +/* 2 */ +/***/ (function(module, exports, __webpack_require__) { + + (function() { + var utf8 = __webpack_require__(3); + var POSTMESSAGE_DEBUG = false; + + // Super simple polyfill for Array.from() that only deals with a Uint8Array: + var arrayFromUint8Array = Array.from ? Array.from : function(uint8Array) { + return [].slice.call(uint8Array); + }; + + function debugLog() { + if (POSTMESSAGE_DEBUG) { + console.log.apply(console, arguments); + } + } + + function createHandlersList() { + var pos = 0; + var handlers = []; + + return { + add : function(handler) { + handlers.push(handler); + }, + clear : function() { + handlers = []; + pos = 0; + }, + isEmpty : function() { + return (handlers.length == 0); + }, + remove : function(handler) { + var idx = handlers.indexOf(handler); + if (idx < 0) { return; } // Not registered + if (idx < pos) { pos = Math.max(pos - 1, 0); } // We've iterated past it, and it's been removed + handlers.splice(idx, 1); + }, + newIterator : function() { + pos = 0; // new iterator, reset position + return { + next : function() { + if (pos < handlers.length) { + return handlers[pos++]; + } else { + return undefined; + } + } + } + } + } + } + + var EVENTS = {}; + + var _callHandler = function(handler, event_name, callback_data) { + var msg = { type: event_name }; + if (callback_data !== undefined) { + msg.data = callback_data; + } + handler(msg); + }; + + var _callHandlersForEvent = function(event_name, callback_data) { + var handler; + if (!(event_name in EVENTS)) { + return; + } + + var it = EVENTS[event_name].newIterator(); + while ((handler = it.next())) { + _callHandler(handler, event_name, callback_data); + } + } + + var _isPostMessageEvent = function(event_name) { + return (['message', 'postmessageerror', + 'postmessageconnected', 'postmessagedisconnected'].indexOf(event_name)) > -1; + } + + var __Pebble = Pebble; + + // Create a new object with its prototype pointing to the original, using + // Object.create(). This way, we can rely on JavaScript's prototype chain + // traversal to make all properties on the original object "just work". + // Note however, that these won't be "own properties", so when using + // `for .. in`, Pebble.keys(), Object.getOwnPropertyNames(), etc. these + // "delegated properties" will not be found. + Pebble = Object.create(Pebble); + + for (var attr in __Pebble) { + if (!__Pebble.hasOwnProperty(attr)) { + continue; + } + // Attributes of Pebble which can be bound, should be bound to the original object + if (__Pebble[attr].bind) { + Pebble[attr] = __Pebble[attr].bind(__Pebble); + } else { + Pebble[attr] = __Pebble[attr]; + } + } + + // Ensure that all exported functions exist. + ["addEventListener", "removeEventListener", "showSimpleNotificationOnPebble", + "sendAppMessage", "getTimelineToken", "timelineSubscribe", + "timelineUnsubscribe", "timelineSubscriptions", "getActiveWatchInfo", + "getAccountToken", "getWatchToken", "appGlanceReload"].forEach( + function(elem, idx, arr) { + if ((elem in Pebble) || ((typeof __Pebble[elem]) !== 'function')) { + // This function has already been copied over or doesn't actually exist. + return; + } + Pebble[elem] = __Pebble[elem].bind(__Pebble); + } + ); + + // sendAppMessage is not supported, make it undefined so a user will get a + // "not a function" error, and can check `typeof Pebble.sendAppMessage === 'function'` + // to test for support. + Pebble["sendAppMessage"] = undefined; + + // The rocky implementation! + + function _scheduleAsyncPostMessageError(jsonString, reason) { + _callHandlersForEvent('postmessageerror', JSON.parse(jsonString)); + console.error("postMessage() failed. Reason: " + reason); + } + + Pebble.postMessage = function(obj) { + _out.sendObject(obj); + }; + + var on = function(event_name, handler) { + if (typeof(handler) !== 'function') { + throw TypeError("Handler for event expected, received " + typeof(handler)); + } + if (!(event_name in EVENTS)) { + EVENTS[event_name] = createHandlersList(); + } + EVENTS[event_name].add(handler); + + if ((event_name == "postmessageconnected" && _control.state == ControlStateSessionOpen) || + (event_name == "postmessagedisconnected" && _control.state != ControlStateSessionOpen)) { + _callHandler(handler, event_name); + } + }; + + Pebble.addEventListener = function(event_name, handler) { + if (_isPostMessageEvent(event_name)) { + return on(event_name, handler); + } else if (event_name == 'appmessage') { + throw Error("App Message not supported with Rocky.js apps. See Pebble.postMessage()"); + } else { + return __Pebble.addEventListener(event_name, handler); + } + }; + + // Alias to the overridden implementation: + Pebble.on = Pebble.addEventListener; + + var off = function(event_name, handler) { + if (handler === undefined) { + throw TypeError('Not enough arguments (missing handler)'); + } + if (event_name in EVENTS) { + EVENTS[event_name].remove(handler); + } + } + + Pebble.removeEventListener = function(event_name, handler) { + if (_isPostMessageEvent(event_name)) { + off(event_name, handler); + } else { + return __Pebble.removeEventListener(event_name, handler); + } + } + + // Alias to the overridden implementation: + Pebble.off = Pebble.removeEventListener; + + /********************************************************************************* + * postMessage(): Outbound object and control message queuing, sending & chunking. + ********************************************************************************/ + + var _out = new Sender(); + + function Sender() { + this.controlQueue = []; + this.objectQueue = []; + + this._currentMessageType = undefined; + this._failureCount = 0; + this._offsetBytes = 0; + this._chunkPayloadSize = 0; + + this._resetCurrent = function() { + this._currentMessageType = undefined; + this._failureCount = 0; + this._offsetBytes = 0; + this._chunkPayloadSize = 0; + }; + + this._getNextMessageType = function() { + if (this.controlQueue.length > 0) { + return "control"; + } else if (this.objectQueue.length > 0) { + return "object"; + } + // No messages remaining + return undefined; + }; + + // Begin sending the next prioritized message + this._sendNext = function() { + if (this._currentMessageType !== undefined) { + return; // Already something in flight + } + + var type = this._getNextMessageType(); + if (type === undefined) { + return; // No message to send + } + + if (type === "control") { + this._currentMessageType = type; + this._trySendNextControl(); + } else if (type === "object") { + this._currentMessageType = type; + this._trySendNextChunk(); + } + }; + + + ////////////////////////////////////////////////////////////////////////////// + // Sender: Control Message Handling + ////////////////////////////////////////////////////////////////////////////// + + this._controlSuccess = function() { + this.controlQueue.shift(); + this._resetCurrent(); + this._sendNext(); + }; + + this._controlFailure = function(e) { + this._failureCount++; + var willRetry = (this._failureCount <= 3); + if (willRetry) { + setTimeout(this._trySendNextControl.bind(this), 1000); // 1s retry + } else { + debugLog("Failed to send control message: " + e + + ", entering disconnected state."); + this.controlQueue.shift(); + this._resetCurrent(); + + _control.enter(ControlStateDisconnected); + this._sendNext(); + } + }; + + this._trySendNextControl = function() { + var msg = this.controlQueue[0]; + __Pebble.sendAppMessage(msg, + this._controlSuccess.bind(this), + this._controlFailure.bind(this)); + }; + + + ////////////////////////////////////////////////////////////////////////////// + // Sender: Object Message Handling + ////////////////////////////////////////////////////////////////////////////// + + this._createDataObject = function(obj) { + // Store obj as UTF-8 encoded JSON string into .data: + var native_str_msg; + try { + native_str_msg = JSON.stringify(obj); + } catch(e) { + throw Error("First argument must be JSON-serializable."); + } + // ECMA v5.1, 15.12.3, Note 5: Values that do not have a JSON + // representation (such as undefined and functions) do not produce a + // String. Instead they produce the undefined value. + if (native_str_msg === undefined) { + throw TypeError( + "Argument at index 0 is not a JSON.stringify()-able object"); + } + var utf8_str_msg = utf8.encode(native_str_msg); + var data = []; + for (var i = 0; i < utf8_str_msg.length; i++) { + data.push(utf8_str_msg.charCodeAt(i)); + } + data.push(0); // zero-terminate + + return { + obj: obj, + data: data, + json: native_str_msg, + }; + }; + + this._completeObject = function(failureReasonOrUndefined) { + var completeObject = this.objectQueue.shift(); + this._resetCurrent(); + + if (failureReasonOrUndefined === undefined) { + debugLog("Complete!"); + } else { + _scheduleAsyncPostMessageError(completeObject.json, failureReasonOrUndefined); + } + }; + + this._chunkSuccess = function(e) { + var data = this.objectQueue[0].data; + debugLog("Sent " + this._chunkPayloadSize + " of " + data.length + " bytes"); + this._offsetBytes += this._chunkPayloadSize; + if (this._offsetBytes === data.length) { + this._completeObject(); + this._sendNext(); + } else { + this._trySendNextChunk(); + } + }; + + this._chunkFailure = function(e) { + this._failureCount++; + var willRetry = (this._failureCount <= 3); + console.error("Chunk failed to send (willRetry=" + willRetry + "): " + e); + if (willRetry) { + setTimeout(this._trySendNextChunk.bind(this), 1000); // 1s retry + } else { + this._completeObject("Too many failed transfer attempts"); + this._sendNext(); + } + }; + + this._trySendNextChunk = function() { + if (this._getNextMessageType() !== "object") { + // This is no longer our highest priority outgoing message. + // Send that message instead, and this message will be left in the queue + // andrestarted when appropriate. + this._resetCurrent(); + this._sendNext(); + return; + } + + if (!_control.isSessionOpen()) { + // Make sure to start over if session is closed while chunks have been + // sent for the head object: + this._offsetBytes = 0; + this._chunkFailure("Session not open. Hint: check out the \"postmessageconnected\" event."); + return; + } + + var data = this.objectQueue[0].data; + var sizeRemaining = data.length - this._offsetBytes; + debugLog("Sending next chunk, sizeRemaining: " + sizeRemaining); + this._chunkPayloadSize = + Math.min(_control.protocol.tx_chunk_size, sizeRemaining); + var n; + var isFirst = (this._offsetBytes === 0); + var isFirstBit; + if (isFirst) { + isFirstBit = (1 << 7); + n = data.length; + } else { + isFirstBit = 0; + n = this._offsetBytes; + } + var chunk = [ + n & 255, + (n >> 8) & 255, + (n >> 16) & 255, + ((n >> 24) & ~(1 << 7)) | isFirstBit + ]; + var chunkPayload = data.slice( + this._offsetBytes, this._offsetBytes + this._chunkPayloadSize); + Array.prototype.push.apply(chunk, chunkPayload); + debugLog("Sending Chunk Size: " + this._chunkPayloadSize); + __Pebble.sendAppMessage({ControlKeyChunk: chunk}, + this._chunkSuccess.bind(this), + this._chunkFailure.bind(this)); + }; + + ////////////////////////////////////////////////////////////////////////////// + // Sender: Public Interface + ////////////////////////////////////////////////////////////////////////////// + + this.sendObject = function(obj) { + debugLog("Queuing up object message: " + JSON.stringify(obj)); + var dataObj = this._createDataObject(obj); + this.objectQueue.push(dataObj) + this._sendNext(); + }; + + this.sendControl = function(obj) { + debugLog("Sending control message: " + JSON.stringify(obj)); + this.controlQueue.push(obj); + this._sendNext(); + } + }; + + /***************************************************************************** + * postMessage(): Receiving chunks of inbound objects and reassembly + ****************************************************************************/ + + var _in = new ChunkReceiver(); + + function ChunkReceiver() { + this.utf8_json_string = ""; + this.total_size_bytes = 0; + this.received_size_bytes = 0; + + this.handleChunkReceived = function handleChunkReceived(chunk) { + if (!chunk) { + return false; + } + var isExpectingFirst = (this.utf8_json_string.length === 0); + if (chunk.is_first != isExpectingFirst) { + console.error( + "Protocol out of sync! chunk.is_first=" + chunk.is_first + + " isExpectingFirst=" + isExpectingFirst); + return false; + } + if (chunk.is_first) { + this.total_size_bytes = chunk.total_size_bytes; + this.received_size_bytes = 0; + } else { + if (this.received_size_bytes != chunk.offset_bytes) { + console.error( + "Protocol out of sync! received_size_bytes=" + + this.received_size_bytes + " chunk.offset_bytes=" + chunk.offset_bytes); + return false; + } + if (this.received_size_bytes + chunk.data.length > this.total_size_bytes) { + console.error( + "Protocol out of sync! received_size_bytes=" + this.received_size_bytes + + " chunk.data.length=" + chunk.data.length + + " total_size_bytes=" + this.total_size_bytes); + return false; + } + } + + debugLog("Received (" + this.received_size_bytes + " / " + + this.total_size_bytes + " bytes)"); + debugLog("Payload size: " + chunk.data.length); + + this.received_size_bytes += chunk.data.length; + var isLastChunk = (this.received_size_bytes == this.total_size_bytes); + var isLastChunkZeroTerminated = undefined; + if (isLastChunk) { + isLastChunkZeroTerminated = (chunk.data[chunk.data.length - 1] === 0); + } + + // Copy the received data over: + var end = isLastChunk ? chunk.data.length - 1 : chunk.data.length; + for (var i = 0; i < end; i++) { + this.utf8_json_string += String.fromCharCode(chunk.data[i]); + } + + if (isLastChunk) { + if (isLastChunkZeroTerminated) { + var json_string = utf8.decode(this.utf8_json_string); + var data; + try { + data = JSON.parse(json_string); + } catch (e) { + console.error( + "Dropping message, failed to parse JSON with error: " + e + + " (json_string=" + json_string + ")"); + } + if (data !== undefined) { + _callHandlersForEvent('message', data); + } + } else { + console.error("Last Chunk wasn't zero terminated! Dropping message."); + } + + this.utf8_json_string = ""; + } + + return true; + } + } + + /***************************************************************************** + * postMessage() Session Control Protocol + ****************************************************************************/ + + var ControlStateDisconnected = "ControlStateDisconnected"; + var ControlStateAwaitingResetCompleteRemoteInitiated = "ControlStateAwaitingResetCompleteRemoteInitiated"; + var ControlStateAwaitingResetCompleteLocalInitiated = "ControlStateAwaitingResetCompleteLocalInitiated"; + var ControlStateSessionOpen = "ControlStateSessionOpen"; + + var ControlKeyResetRequest = "ControlKeyResetRequest"; + var ControlKeyResetComplete = "ControlKeyResetComplete"; + var ControlKeyChunk = "ControlKeyChunk"; + var ControlKeyUnsupportedError = "ControlKeyUnsupportedError"; + + function _unpackResetCompleteMessage(data) { + debugLog("Got ResetComplete: " + data); + return { + min_version : data[0], + max_version : data[1], + max_tx_chunk_size : (data[2] << 8) | (data[3]), + max_rx_chunk_size : (data[4] << 8) | (data[5]), + }; + }; + + function _unpackChunk(data) { + //debugLog("Got Chunk: " + data); + if (data.length <= 4) { + console.error("Chunk data too short to be valid!"); + return; + } + var is_first_bit = (1 << 7); + var is_first = (is_first_bit === (data[3] & is_first_bit)); + var chunk = { + is_first : is_first + }; + var msbyte = (~is_first_bit) & data[3]; + var num31bits = (msbyte << 24) | (data[2] << 16) | (data[1] << 8) | data[0]; + if (is_first) { + chunk.total_size_bytes = num31bits; + } else { + chunk.offset_bytes = num31bits; + } + chunk.data = data.slice(4); + return chunk; + } + + function _remoteProtocolValidateAndSet(remote) { + debugLog("Remote min: " + remote.min_version); + debugLog("Remote max: " + remote.max_version); + if (remote.min_version == undefined || remote.max_version == undefined || + remote.min_version > PROTOCOL.max_version || remote.max_version < PROTOCOL.min_version) { + return false; + } + + _control.protocol = { + version : Math.min(remote.max_version, PROTOCOL.max_version), + tx_chunk_size : Math.min(remote.max_rx_chunk_size, PROTOCOL.max_tx_chunk_size), + rx_chunk_size : Math.min(remote.max_tx_chunk_size, PROTOCOL.max_rx_chunk_size), + }; + + return true; + }; + + function _sendControlMessage(msg) { + _out.sendControl(msg); + } + + function _controlSendResetComplete() { + var data = new Uint8Array(6); + data[0] = PROTOCOL.min_version; + data[1] = PROTOCOL.max_version; + data[2] = PROTOCOL.max_tx_chunk_size >> 8; + data[3] = PROTOCOL.max_tx_chunk_size; + data[4] = PROTOCOL.max_rx_chunk_size >> 8; + data[5] = PROTOCOL.max_rx_chunk_size; + _sendControlMessage({ ControlKeyResetComplete : arrayFromUint8Array(data) }); + } + + function _controlSendResetRequest() { + _sendControlMessage({ ControlKeyResetRequest : 0 }); + } + + function _controlSendUnsupportedError() { + _sendControlMessage({ ControlKeyUnsupportedError : 0 }); + } + + var ControlHandlers = { + ControlStateDisconnected : function(payload) { + }, + ControlStateAwaitingResetCompleteRemoteInitiated : function(payload) { + if (ControlKeyResetComplete in payload) { + var remote_protocol = _unpackResetCompleteMessage(payload[ControlKeyResetComplete]); + // NOTE: This should *always* be true, we should never receive a + // ResetComplete response from the Remote in this state since it already + // knows it is unsupported + if (_remoteProtocolValidateAndSet(remote_protocol)) { + _control.enter(ControlStateSessionOpen); + } + } else if (ControlKeyResetRequest in payload) { + _control.enter(ControlStateAwaitingResetCompleteRemoteInitiated); // Re-enter this state + } else if (ControlKeyChunk in payload) { + _control.enter(ControlStateAwaitingResetCompleteLocalInitiated); + } else if (ControlKeyUnsupportedError in payload) { + throw Error("Unsupported protocol error: " + payload[ControlKeyUnsupportedError]); + } + }, + ControlStateAwaitingResetCompleteLocalInitiated : function(payload) { + if (ControlKeyResetComplete in payload) { + var remote_protocol = _unpackResetCompleteMessage(payload[ControlKeyResetComplete]); + debugLog("Remote Protocol: " + remote_protocol); + if (_remoteProtocolValidateAndSet(remote_protocol)) { + debugLog("OK Remote protocol..."); + _controlSendResetComplete(); + _control.enter(ControlStateSessionOpen); + } else { + _controlSendUnsupportedError(); + } + } else { + ; // Ignore, we're in this state because we already sent a ResetRequest + } + }, + ControlStateSessionOpen : function(payload) { + if (ControlKeyChunk in payload) { + var chunk = _unpackChunk(payload[ControlKeyChunk]); + if (false === _in.handleChunkReceived(chunk)) { + _control.enter(ControlStateAwaitingResetCompleteLocalInitiated); + } + } else if (ControlKeyResetRequest in payload) { + _control.enter(ControlStateAwaitingResetCompleteRemoteInitiated); + } else { + // FIXME: This could be an UnsupportedError, we probably don't want to + // keep on trying to negotiate protocol + _control.enter(ControlStateAwaitingResetCompleteLocalInitiated); + } + }, + }; + + var ControlTransitions = { + ControlStateDisconnected : function(from_state) { + _control.resetProtocol(); + _control.state = ControlStateAwaitingResetCompleteRemoteInitiated; + }, + ControlStateAwaitingResetCompleteRemoteInitiated : function(from_state) { + _control.resetProtocol(); + _control.state = ControlStateAwaitingResetCompleteRemoteInitiated; + _controlSendResetComplete(); + }, + ControlStateAwaitingResetCompleteLocalInitiated : function(from_state) { + if (from_state != ControlStateAwaitingResetCompleteLocalInitiated) { + // Coming from elsewhere, send the ResetRequest + _controlSendResetRequest(); + } + _control.resetProtocol(); + _control.state = ControlStateAwaitingResetCompleteLocalInitiated; + }, + ControlStateSessionOpen : function(from_state) { + _control.state = ControlStateSessionOpen; + _callHandlersForEvent('postmessageconnected'); + }, + }; + + var PROTOCOL = { + min_version : 1, + max_version : 1, + max_tx_chunk_size : 1000, + max_rx_chunk_size : 1000, + }; + + var _control = { + state : ControlStateDisconnected, + handle : function(msg) { + debugLog("Handle " + this.state + "(" + JSON.stringify(msg.payload) + "}"); + ControlHandlers[this.state](msg.payload); + }, + enter : function(to_state) { + debugLog("Enter " + this.state + " ===> " + to_state); + var prev_state = this.state; + ControlTransitions[to_state](this.state); + if (prev_state == ControlStateSessionOpen && to_state != ControlStateSessionOpen) { + _callHandlersForEvent('postmessagedisconnected'); + } + }, + isSessionOpen: function() { + return (this.state === ControlStateSessionOpen); + }, + resetProtocol: function() { + this.protocol = { + version : 0, + tx_chunk_size : 0, + rx_chunk_size : 0, + }; + }, + protocol : { + version : 0, + tx_chunk_size : 0, + rx_chunk_size : 0, + }, + }; + + __Pebble.addEventListener('appmessage', function(msg) { + _control.handle(msg); + }); + + __Pebble.addEventListener('ready', function(e) { + _control.enter(ControlStateAwaitingResetCompleteLocalInitiated); + }); + })(); + + +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { + + var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module) {/*! https://mths.be/utf8js v2.1.2 by @mathias */ + ;(function(root) { + + // Detect free variables `exports` + var freeExports = typeof exports == 'object' && exports; + + // Detect free variable `module` + var freeModule = typeof module == 'object' && module && + module.exports == freeExports && module; + + // Detect free variable `global`, from Node.js or Browserified code, + // and use it as `root` + var freeGlobal = typeof global == 'object' && global; + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + var stringFromCharCode = String.fromCharCode; + + // Taken from https://mths.be/punycode + function ucs2decode(string) { + var output = []; + var counter = 0; + var length = string.length; + var value; + var extra; + while (counter < length) { + value = string.charCodeAt(counter++); + if (value >= 0xD800 && value <= 0xDBFF && counter < length) { + // high surrogate, and there is a next character + extra = string.charCodeAt(counter++); + if ((extra & 0xFC00) == 0xDC00) { // low surrogate + output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); + } else { + // unmatched surrogate; only append this code unit, in case the next + // code unit is the high surrogate of a surrogate pair + output.push(value); + counter--; + } + } else { + output.push(value); + } + } + return output; + } + + // Taken from https://mths.be/punycode + function ucs2encode(array) { + var length = array.length; + var index = -1; + var value; + var output = ''; + while (++index < length) { + value = array[index]; + if (value > 0xFFFF) { + value -= 0x10000; + output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); + value = 0xDC00 | value & 0x3FF; + } + output += stringFromCharCode(value); + } + return output; + } + + function checkScalarValue(codePoint) { + if (codePoint >= 0xD800 && codePoint <= 0xDFFF) { + throw Error( + 'Lone surrogate U+' + codePoint.toString(16).toUpperCase() + + ' is not a scalar value' + ); + } + } + /*--------------------------------------------------------------------------*/ + + function createByte(codePoint, shift) { + return stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80); + } + + function encodeCodePoint(codePoint) { + if ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence + return stringFromCharCode(codePoint); + } + var symbol = ''; + if ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence + symbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0); + } + else if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence + checkScalarValue(codePoint); + symbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0); + symbol += createByte(codePoint, 6); + } + else if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence + symbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0); + symbol += createByte(codePoint, 12); + symbol += createByte(codePoint, 6); + } + symbol += stringFromCharCode((codePoint & 0x3F) | 0x80); + return symbol; + } + + function utf8encode(string) { + var codePoints = ucs2decode(string); + var length = codePoints.length; + var index = -1; + var codePoint; + var byteString = ''; + while (++index < length) { + codePoint = codePoints[index]; + byteString += encodeCodePoint(codePoint); + } + return byteString; + } + + /*--------------------------------------------------------------------------*/ + + function readContinuationByte() { + if (byteIndex >= byteCount) { + throw Error('Invalid byte index'); + } + + var continuationByte = byteArray[byteIndex] & 0xFF; + byteIndex++; + + if ((continuationByte & 0xC0) == 0x80) { + return continuationByte & 0x3F; + } + + // If we end up here, it’s not a continuation byte + throw Error('Invalid continuation byte'); + } + + function decodeSymbol() { + var byte1; + var byte2; + var byte3; + var byte4; + var codePoint; + + if (byteIndex > byteCount) { + throw Error('Invalid byte index'); + } + + if (byteIndex == byteCount) { + return false; + } + + // Read first byte + byte1 = byteArray[byteIndex] & 0xFF; + byteIndex++; + + // 1-byte sequence (no continuation bytes) + if ((byte1 & 0x80) == 0) { + return byte1; + } + + // 2-byte sequence + if ((byte1 & 0xE0) == 0xC0) { + byte2 = readContinuationByte(); + codePoint = ((byte1 & 0x1F) << 6) | byte2; + if (codePoint >= 0x80) { + return codePoint; + } else { + throw Error('Invalid continuation byte'); + } + } + + // 3-byte sequence (may include unpaired surrogates) + if ((byte1 & 0xF0) == 0xE0) { + byte2 = readContinuationByte(); + byte3 = readContinuationByte(); + codePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3; + if (codePoint >= 0x0800) { + checkScalarValue(codePoint); + return codePoint; + } else { + throw Error('Invalid continuation byte'); + } + } + + // 4-byte sequence + if ((byte1 & 0xF8) == 0xF0) { + byte2 = readContinuationByte(); + byte3 = readContinuationByte(); + byte4 = readContinuationByte(); + codePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) | + (byte3 << 0x06) | byte4; + if (codePoint >= 0x010000 && codePoint <= 0x10FFFF) { + return codePoint; + } + } + + throw Error('Invalid UTF-8 detected'); + } + + var byteArray; + var byteCount; + var byteIndex; + function utf8decode(byteString) { + byteArray = ucs2decode(byteString); + byteCount = byteArray.length; + byteIndex = 0; + var codePoints = []; + var tmp; + while ((tmp = decodeSymbol()) !== false) { + codePoints.push(tmp); + } + return ucs2encode(codePoints); + } + + /*--------------------------------------------------------------------------*/ + + var utf8 = { + 'version': '2.1.2', + 'encode': utf8encode, + 'decode': utf8decode + }; + + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + true + ) { + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { + return utf8; + }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); + } else if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js or RingoJS v0.8.0+ + freeModule.exports = utf8; + } else { // in Narwhal or RingoJS v0.7.0- + var object = {}; + var hasOwnProperty = object.hasOwnProperty; + for (var key in utf8) { + hasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]); + } + } + } else { // in Rhino or a web browser + root.utf8 = utf8; + } + + }(this)); + + /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)(module))) + +/***/ }), +/* 4 */ +/***/ (function(module, exports) { + + module.exports = function(module) { + if(!module.webpackPolyfill) { + module.deprecate = function() {}; + module.paths = []; + // module.parent = undefined by default + module.children = []; + module.webpackPolyfill = 1; + } + return module; + } + + +/***/ }), +/* 5 */ +/***/ (function(module, exports) { + + // https://developer.pebble.com/docs/pebblekit-js/Pebble/#on + Pebble.on('message', function(event) { + console.log('Message received from watch:', event.data); + }); + + +/***/ }) +/******/ ]); +//# sourceMappingURL=pebble-js-app.js.map \ No newline at end of file diff --git a/build/pebble-js-app.js.map b/build/pebble-js-app.js.map new file mode 100644 index 0000000..74fefaf --- /dev/null +++ b/build/pebble-js-app.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack/bootstrap c71645c9a0936d3b9cd9","/home/zahkc/.pebble-sdk/SDKs/4.3/sdk-core/pebble/common/include/_pkjs_shared_additions.js","/home/zahkc/.pebble-sdk/SDKs/4.3/sdk-core/pebble/common/include/_pkjs_message_wrapper.js","/home/zahkc/.pebble-sdk/SDKs/4.3/~/utf8/utf8.js","(webpack)/buildin/module.js","./src/pkjs/index.js"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,uBAAe;AACf;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;ACtCA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA,EAAC;;;;;;;ACnBD;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA,QAAO;AACP;AACA;AACA,QAAO;AACP;AACA;AACA,uBAAsB,QAAQ,EAAE;AAChC,yBAAwB,4BAA4B,EAAE;AACtD;AACA,QAAO;AACP;AACA,iBAAgB;AAChB;AACA;AACA;AACA;AACA,cAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,gBAAe;AACf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,gBAAe;AACf;;AAEA;AACA;AACA,gBAAe;AACf;;AAEA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,+DAA8D;AAC9D,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAqB,yBAAyB;AAC9C;AACA;AACA,oBAAmB;;AAEnB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6DAA4D;AAC5D,QAAO;AACP;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gCAA+B,uBAAuB;AACtD;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,sBAAqB,SAAS;AAC9B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,YAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAAyB,sDAAsD;AAC/E;;AAEA;AACA,0BAAyB,6BAA6B;AACtD;;AAEA;AACA,0BAAyB,iCAAiC;AAC1D;;AAEA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP,0EAAyE;AACzE,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAS;AACT;AACA;AACA,QAAO;AACP,UAAS;AACT;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,QAAO;AACP;AACA,QAAO;AACP;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,+EAA8E;AAC9E;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,MAAK;AACL;AACA;AACA;AACA;AACA,MAAK;AACL;;AAEA;AACA;AACA,IAAG;;AAEH;AACA;AACA,IAAG;AACH,EAAC;;;;;;;mCChrBD;AACA,EAAC;;AAED;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAqC;AACrC;AACA,MAAK;AACL,6BAA4B;AAC5B;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,uCAAsC;AACtC;AACA;AACA;AACA,uCAAsC;AACtC;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA,4CAA2C;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,OAEA;AACA;AACA;AACA;AACA,IAAG;AACH,GAAE;AACF,oBAAmB;AACnB;AACA,IAAG,OAAO;AACV;AACA;AACA;AACA;AACA;AACA;AACA,GAAE,OAAO;AACT;AACA;;AAEA,EAAC;;;;;;;;ACnPD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACTA;AACA;AACA;AACA,EAAC","file":"pebble-js-app.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap c71645c9a0936d3b9cd9","(function(p) {\n if (!p === undefined) {\n console.error('Pebble object not found!?');\n return;\n }\n\n // Aliases:\n p.on = p.addEventListener;\n p.off = p.removeEventListener;\n\n // For Android (WebView-based) pkjs, print stacktrace for uncaught errors:\n if (typeof window !== 'undefined' && window.addEventListener) {\n window.addEventListener('error', function(event) {\n if (event.error && event.error.stack) {\n console.error('' + event.error + '\\n' + event.error.stack);\n }\n });\n }\n\n})(Pebble);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /home/zahkc/.pebble-sdk/SDKs/4.3/sdk-core/pebble/common/include/_pkjs_shared_additions.js\n// module id = 1\n// module chunks = 0","(function() {\n var utf8 = require('utf8');\n var POSTMESSAGE_DEBUG = false;\n\n // Super simple polyfill for Array.from() that only deals with a Uint8Array:\n var arrayFromUint8Array = Array.from ? Array.from : function(uint8Array) {\n return [].slice.call(uint8Array);\n };\n\n function debugLog() {\n if (POSTMESSAGE_DEBUG) {\n console.log.apply(console, arguments);\n }\n }\n\n function createHandlersList() {\n var pos = 0;\n var handlers = [];\n\n return {\n add : function(handler) {\n handlers.push(handler);\n },\n clear : function() {\n handlers = [];\n pos = 0;\n },\n isEmpty : function() {\n return (handlers.length == 0);\n },\n remove : function(handler) {\n var idx = handlers.indexOf(handler);\n if (idx < 0) { return; } // Not registered\n if (idx < pos) { pos = Math.max(pos - 1, 0); } // We've iterated past it, and it's been removed\n handlers.splice(idx, 1);\n },\n newIterator : function() {\n pos = 0; // new iterator, reset position\n return {\n next : function() {\n if (pos < handlers.length) {\n return handlers[pos++];\n } else {\n return undefined;\n }\n }\n }\n }\n }\n }\n\n var EVENTS = {};\n\n var _callHandler = function(handler, event_name, callback_data) {\n var msg = { type: event_name };\n if (callback_data !== undefined) {\n msg.data = callback_data;\n }\n handler(msg);\n };\n\n var _callHandlersForEvent = function(event_name, callback_data) {\n var handler;\n if (!(event_name in EVENTS)) {\n return;\n }\n\n var it = EVENTS[event_name].newIterator();\n while ((handler = it.next())) {\n _callHandler(handler, event_name, callback_data);\n }\n }\n\n var _isPostMessageEvent = function(event_name) {\n return (['message', 'postmessageerror',\n 'postmessageconnected', 'postmessagedisconnected'].indexOf(event_name)) > -1;\n }\n\n var __Pebble = Pebble;\n\n // Create a new object with its prototype pointing to the original, using\n // Object.create(). This way, we can rely on JavaScript's prototype chain\n // traversal to make all properties on the original object \"just work\".\n // Note however, that these won't be \"own properties\", so when using\n // `for .. in`, Pebble.keys(), Object.getOwnPropertyNames(), etc. these\n // \"delegated properties\" will not be found.\n Pebble = Object.create(Pebble);\n\n for (var attr in __Pebble) {\n if (!__Pebble.hasOwnProperty(attr)) {\n continue;\n }\n // Attributes of Pebble which can be bound, should be bound to the original object\n if (__Pebble[attr].bind) {\n Pebble[attr] = __Pebble[attr].bind(__Pebble);\n } else {\n Pebble[attr] = __Pebble[attr];\n }\n }\n\n // Ensure that all exported functions exist.\n [\"addEventListener\", \"removeEventListener\", \"showSimpleNotificationOnPebble\",\n \"sendAppMessage\", \"getTimelineToken\", \"timelineSubscribe\",\n \"timelineUnsubscribe\", \"timelineSubscriptions\", \"getActiveWatchInfo\",\n \"getAccountToken\", \"getWatchToken\", \"appGlanceReload\"].forEach(\n function(elem, idx, arr) {\n if ((elem in Pebble) || ((typeof __Pebble[elem]) !== 'function')) {\n // This function has already been copied over or doesn't actually exist.\n return;\n }\n Pebble[elem] = __Pebble[elem].bind(__Pebble);\n }\n );\n\n // sendAppMessage is not supported, make it undefined so a user will get a\n // \"not a function\" error, and can check `typeof Pebble.sendAppMessage === 'function'`\n // to test for support.\n Pebble[\"sendAppMessage\"] = undefined;\n\n // The rocky implementation!\n\n function _scheduleAsyncPostMessageError(jsonString, reason) {\n _callHandlersForEvent('postmessageerror', JSON.parse(jsonString));\n console.error(\"postMessage() failed. Reason: \" + reason);\n }\n\n Pebble.postMessage = function(obj) {\n _out.sendObject(obj);\n };\n\n var on = function(event_name, handler) {\n if (typeof(handler) !== 'function') {\n throw TypeError(\"Handler for event expected, received \" + typeof(handler));\n }\n if (!(event_name in EVENTS)) {\n EVENTS[event_name] = createHandlersList();\n }\n EVENTS[event_name].add(handler);\n\n if ((event_name == \"postmessageconnected\" && _control.state == ControlStateSessionOpen) ||\n (event_name == \"postmessagedisconnected\" && _control.state != ControlStateSessionOpen)) {\n _callHandler(handler, event_name);\n }\n };\n\n Pebble.addEventListener = function(event_name, handler) {\n if (_isPostMessageEvent(event_name)) {\n return on(event_name, handler);\n } else if (event_name == 'appmessage') {\n throw Error(\"App Message not supported with Rocky.js apps. See Pebble.postMessage()\");\n } else {\n return __Pebble.addEventListener(event_name, handler);\n }\n };\n\n // Alias to the overridden implementation:\n Pebble.on = Pebble.addEventListener;\n\n var off = function(event_name, handler) {\n if (handler === undefined) {\n throw TypeError('Not enough arguments (missing handler)');\n }\n if (event_name in EVENTS) {\n EVENTS[event_name].remove(handler);\n }\n }\n\n Pebble.removeEventListener = function(event_name, handler) {\n if (_isPostMessageEvent(event_name)) {\n off(event_name, handler);\n } else {\n return __Pebble.removeEventListener(event_name, handler);\n }\n }\n\n // Alias to the overridden implementation:\n Pebble.off = Pebble.removeEventListener;\n\n /*********************************************************************************\n * postMessage(): Outbound object and control message queuing, sending & chunking.\n ********************************************************************************/\n\n var _out = new Sender();\n\n function Sender() {\n this.controlQueue = [];\n this.objectQueue = [];\n\n this._currentMessageType = undefined;\n this._failureCount = 0;\n this._offsetBytes = 0;\n this._chunkPayloadSize = 0;\n\n this._resetCurrent = function() {\n this._currentMessageType = undefined;\n this._failureCount = 0;\n this._offsetBytes = 0;\n this._chunkPayloadSize = 0;\n };\n\n this._getNextMessageType = function() {\n if (this.controlQueue.length > 0) {\n return \"control\";\n } else if (this.objectQueue.length > 0) {\n return \"object\";\n }\n // No messages remaining\n return undefined;\n };\n\n // Begin sending the next prioritized message\n this._sendNext = function() {\n if (this._currentMessageType !== undefined) {\n return; // Already something in flight\n }\n\n var type = this._getNextMessageType();\n if (type === undefined) {\n return; // No message to send\n }\n\n if (type === \"control\") {\n this._currentMessageType = type;\n this._trySendNextControl();\n } else if (type === \"object\") {\n this._currentMessageType = type;\n this._trySendNextChunk();\n }\n };\n\n\n //////////////////////////////////////////////////////////////////////////////\n // Sender: Control Message Handling\n //////////////////////////////////////////////////////////////////////////////\n\n this._controlSuccess = function() {\n this.controlQueue.shift();\n this._resetCurrent();\n this._sendNext();\n };\n\n this._controlFailure = function(e) {\n this._failureCount++;\n var willRetry = (this._failureCount <= 3);\n if (willRetry) {\n setTimeout(this._trySendNextControl.bind(this), 1000); // 1s retry\n } else {\n debugLog(\"Failed to send control message: \" + e +\n \", entering disconnected state.\");\n this.controlQueue.shift();\n this._resetCurrent();\n\n _control.enter(ControlStateDisconnected);\n this._sendNext();\n }\n };\n\n this._trySendNextControl = function() {\n var msg = this.controlQueue[0];\n __Pebble.sendAppMessage(msg,\n this._controlSuccess.bind(this),\n this._controlFailure.bind(this));\n };\n\n\n //////////////////////////////////////////////////////////////////////////////\n // Sender: Object Message Handling\n //////////////////////////////////////////////////////////////////////////////\n\n this._createDataObject = function(obj) {\n // Store obj as UTF-8 encoded JSON string into .data:\n var native_str_msg;\n try {\n native_str_msg = JSON.stringify(obj);\n } catch(e) {\n throw Error(\"First argument must be JSON-serializable.\");\n }\n // ECMA v5.1, 15.12.3, Note 5: Values that do not have a JSON\n // representation (such as undefined and functions) do not produce a\n // String. Instead they produce the undefined value.\n if (native_str_msg === undefined) {\n throw TypeError(\n \"Argument at index 0 is not a JSON.stringify()-able object\");\n }\n var utf8_str_msg = utf8.encode(native_str_msg);\n var data = [];\n for (var i = 0; i < utf8_str_msg.length; i++) {\n data.push(utf8_str_msg.charCodeAt(i));\n }\n data.push(0); // zero-terminate\n\n return {\n obj: obj,\n data: data,\n json: native_str_msg,\n };\n };\n\n this._completeObject = function(failureReasonOrUndefined) {\n var completeObject = this.objectQueue.shift();\n this._resetCurrent();\n\n if (failureReasonOrUndefined === undefined) {\n debugLog(\"Complete!\");\n } else {\n _scheduleAsyncPostMessageError(completeObject.json, failureReasonOrUndefined);\n }\n };\n\n this._chunkSuccess = function(e) {\n var data = this.objectQueue[0].data;\n debugLog(\"Sent \" + this._chunkPayloadSize + \" of \" + data.length + \" bytes\");\n this._offsetBytes += this._chunkPayloadSize;\n if (this._offsetBytes === data.length) {\n this._completeObject();\n this._sendNext();\n } else {\n this._trySendNextChunk();\n }\n };\n\n this._chunkFailure = function(e) {\n this._failureCount++;\n var willRetry = (this._failureCount <= 3);\n console.error(\"Chunk failed to send (willRetry=\" + willRetry + \"): \" + e);\n if (willRetry) {\n setTimeout(this._trySendNextChunk.bind(this), 1000); // 1s retry\n } else {\n this._completeObject(\"Too many failed transfer attempts\");\n this._sendNext();\n }\n };\n\n this._trySendNextChunk = function() {\n if (this._getNextMessageType() !== \"object\") {\n // This is no longer our highest priority outgoing message.\n // Send that message instead, and this message will be left in the queue\n // andrestarted when appropriate.\n this._resetCurrent();\n this._sendNext();\n return;\n }\n\n if (!_control.isSessionOpen()) {\n // Make sure to start over if session is closed while chunks have been\n // sent for the head object:\n this._offsetBytes = 0;\n this._chunkFailure(\"Session not open. Hint: check out the \\\"postmessageconnected\\\" event.\");\n return;\n }\n\n var data = this.objectQueue[0].data;\n var sizeRemaining = data.length - this._offsetBytes;\n debugLog(\"Sending next chunk, sizeRemaining: \" + sizeRemaining);\n this._chunkPayloadSize =\n Math.min(_control.protocol.tx_chunk_size, sizeRemaining);\n var n;\n var isFirst = (this._offsetBytes === 0);\n var isFirstBit;\n if (isFirst) {\n isFirstBit = (1 << 7);\n n = data.length;\n } else {\n isFirstBit = 0;\n n = this._offsetBytes;\n }\n var chunk = [\n n & 255,\n (n >> 8) & 255,\n (n >> 16) & 255,\n ((n >> 24) & ~(1 << 7)) | isFirstBit\n ];\n var chunkPayload = data.slice(\n this._offsetBytes, this._offsetBytes + this._chunkPayloadSize);\n Array.prototype.push.apply(chunk, chunkPayload);\n debugLog(\"Sending Chunk Size: \" + this._chunkPayloadSize);\n __Pebble.sendAppMessage({ControlKeyChunk: chunk},\n this._chunkSuccess.bind(this),\n this._chunkFailure.bind(this));\n };\n\n //////////////////////////////////////////////////////////////////////////////\n // Sender: Public Interface\n //////////////////////////////////////////////////////////////////////////////\n\n this.sendObject = function(obj) {\n debugLog(\"Queuing up object message: \" + JSON.stringify(obj));\n var dataObj = this._createDataObject(obj);\n this.objectQueue.push(dataObj)\n this._sendNext();\n };\n\n this.sendControl = function(obj) {\n debugLog(\"Sending control message: \" + JSON.stringify(obj));\n this.controlQueue.push(obj);\n this._sendNext();\n }\n };\n\n /*****************************************************************************\n * postMessage(): Receiving chunks of inbound objects and reassembly\n ****************************************************************************/\n\n var _in = new ChunkReceiver();\n\n function ChunkReceiver() {\n this.utf8_json_string = \"\";\n this.total_size_bytes = 0;\n this.received_size_bytes = 0;\n\n this.handleChunkReceived = function handleChunkReceived(chunk) {\n if (!chunk) {\n return false;\n }\n var isExpectingFirst = (this.utf8_json_string.length === 0);\n if (chunk.is_first != isExpectingFirst) {\n console.error(\n \"Protocol out of sync! chunk.is_first=\" + chunk.is_first +\n \" isExpectingFirst=\" + isExpectingFirst);\n return false;\n }\n if (chunk.is_first) {\n this.total_size_bytes = chunk.total_size_bytes;\n this.received_size_bytes = 0;\n } else {\n if (this.received_size_bytes != chunk.offset_bytes) {\n console.error(\n \"Protocol out of sync! received_size_bytes=\" +\n this.received_size_bytes + \" chunk.offset_bytes=\" + chunk.offset_bytes);\n return false;\n }\n if (this.received_size_bytes + chunk.data.length > this.total_size_bytes) {\n console.error(\n \"Protocol out of sync! received_size_bytes=\" + this.received_size_bytes +\n \" chunk.data.length=\" + chunk.data.length +\n \" total_size_bytes=\" + this.total_size_bytes);\n return false;\n }\n }\n\n debugLog(\"Received (\" + this.received_size_bytes + \" / \" +\n this.total_size_bytes + \" bytes)\");\n debugLog(\"Payload size: \" + chunk.data.length);\n\n this.received_size_bytes += chunk.data.length;\n var isLastChunk = (this.received_size_bytes == this.total_size_bytes);\n var isLastChunkZeroTerminated = undefined;\n if (isLastChunk) {\n isLastChunkZeroTerminated = (chunk.data[chunk.data.length - 1] === 0);\n }\n\n // Copy the received data over:\n var end = isLastChunk ? chunk.data.length - 1 : chunk.data.length;\n for (var i = 0; i < end; i++) {\n this.utf8_json_string += String.fromCharCode(chunk.data[i]);\n }\n\n if (isLastChunk) {\n if (isLastChunkZeroTerminated) {\n var json_string = utf8.decode(this.utf8_json_string);\n var data;\n try {\n data = JSON.parse(json_string);\n } catch (e) {\n console.error(\n \"Dropping message, failed to parse JSON with error: \" + e +\n \" (json_string=\" + json_string + \")\");\n }\n if (data !== undefined) {\n _callHandlersForEvent('message', data);\n }\n } else {\n console.error(\"Last Chunk wasn't zero terminated! Dropping message.\");\n }\n\n this.utf8_json_string = \"\";\n }\n\n return true;\n }\n }\n\n /*****************************************************************************\n * postMessage() Session Control Protocol\n ****************************************************************************/\n\n var ControlStateDisconnected = \"ControlStateDisconnected\";\n var ControlStateAwaitingResetCompleteRemoteInitiated = \"ControlStateAwaitingResetCompleteRemoteInitiated\";\n var ControlStateAwaitingResetCompleteLocalInitiated = \"ControlStateAwaitingResetCompleteLocalInitiated\";\n var ControlStateSessionOpen = \"ControlStateSessionOpen\";\n\n var ControlKeyResetRequest = \"ControlKeyResetRequest\";\n var ControlKeyResetComplete = \"ControlKeyResetComplete\";\n var ControlKeyChunk = \"ControlKeyChunk\";\n var ControlKeyUnsupportedError = \"ControlKeyUnsupportedError\";\n\n function _unpackResetCompleteMessage(data) {\n debugLog(\"Got ResetComplete: \" + data);\n return {\n min_version : data[0],\n max_version : data[1],\n max_tx_chunk_size : (data[2] << 8) | (data[3]),\n max_rx_chunk_size : (data[4] << 8) | (data[5]),\n };\n };\n\n function _unpackChunk(data) {\n //debugLog(\"Got Chunk: \" + data);\n if (data.length <= 4) {\n console.error(\"Chunk data too short to be valid!\");\n return;\n }\n var is_first_bit = (1 << 7);\n var is_first = (is_first_bit === (data[3] & is_first_bit));\n var chunk = {\n is_first : is_first\n };\n var msbyte = (~is_first_bit) & data[3];\n var num31bits = (msbyte << 24) | (data[2] << 16) | (data[1] << 8) | data[0];\n if (is_first) {\n chunk.total_size_bytes = num31bits;\n } else {\n chunk.offset_bytes = num31bits;\n }\n chunk.data = data.slice(4);\n return chunk;\n }\n\n function _remoteProtocolValidateAndSet(remote) {\n debugLog(\"Remote min: \" + remote.min_version);\n debugLog(\"Remote max: \" + remote.max_version);\n if (remote.min_version == undefined || remote.max_version == undefined ||\n remote.min_version > PROTOCOL.max_version || remote.max_version < PROTOCOL.min_version) {\n return false;\n }\n\n _control.protocol = {\n version : Math.min(remote.max_version, PROTOCOL.max_version),\n tx_chunk_size : Math.min(remote.max_rx_chunk_size, PROTOCOL.max_tx_chunk_size),\n rx_chunk_size : Math.min(remote.max_tx_chunk_size, PROTOCOL.max_rx_chunk_size),\n };\n\n return true;\n };\n\n function _sendControlMessage(msg) {\n _out.sendControl(msg);\n }\n\n function _controlSendResetComplete() {\n var data = new Uint8Array(6);\n data[0] = PROTOCOL.min_version;\n data[1] = PROTOCOL.max_version;\n data[2] = PROTOCOL.max_tx_chunk_size >> 8;\n data[3] = PROTOCOL.max_tx_chunk_size;\n data[4] = PROTOCOL.max_rx_chunk_size >> 8;\n data[5] = PROTOCOL.max_rx_chunk_size;\n _sendControlMessage({ ControlKeyResetComplete : arrayFromUint8Array(data) });\n }\n\n function _controlSendResetRequest() {\n _sendControlMessage({ ControlKeyResetRequest : 0 });\n }\n\n function _controlSendUnsupportedError() {\n _sendControlMessage({ ControlKeyUnsupportedError : 0 });\n }\n\n var ControlHandlers = {\n ControlStateDisconnected : function(payload) {\n },\n ControlStateAwaitingResetCompleteRemoteInitiated : function(payload) {\n if (ControlKeyResetComplete in payload) {\n var remote_protocol = _unpackResetCompleteMessage(payload[ControlKeyResetComplete]);\n // NOTE: This should *always* be true, we should never receive a\n // ResetComplete response from the Remote in this state since it already\n // knows it is unsupported\n if (_remoteProtocolValidateAndSet(remote_protocol)) {\n _control.enter(ControlStateSessionOpen);\n }\n } else if (ControlKeyResetRequest in payload) {\n _control.enter(ControlStateAwaitingResetCompleteRemoteInitiated); // Re-enter this state\n } else if (ControlKeyChunk in payload) {\n _control.enter(ControlStateAwaitingResetCompleteLocalInitiated);\n } else if (ControlKeyUnsupportedError in payload) {\n throw Error(\"Unsupported protocol error: \" + payload[ControlKeyUnsupportedError]);\n }\n },\n ControlStateAwaitingResetCompleteLocalInitiated : function(payload) {\n if (ControlKeyResetComplete in payload) {\n var remote_protocol = _unpackResetCompleteMessage(payload[ControlKeyResetComplete]);\n debugLog(\"Remote Protocol: \" + remote_protocol);\n if (_remoteProtocolValidateAndSet(remote_protocol)) {\n debugLog(\"OK Remote protocol...\");\n _controlSendResetComplete();\n _control.enter(ControlStateSessionOpen);\n } else {\n _controlSendUnsupportedError();\n }\n } else {\n ; // Ignore, we're in this state because we already sent a ResetRequest\n }\n },\n ControlStateSessionOpen : function(payload) {\n if (ControlKeyChunk in payload) {\n var chunk = _unpackChunk(payload[ControlKeyChunk]);\n if (false === _in.handleChunkReceived(chunk)) {\n _control.enter(ControlStateAwaitingResetCompleteLocalInitiated);\n }\n } else if (ControlKeyResetRequest in payload) {\n _control.enter(ControlStateAwaitingResetCompleteRemoteInitiated);\n } else {\n // FIXME: This could be an UnsupportedError, we probably don't want to\n // keep on trying to negotiate protocol\n _control.enter(ControlStateAwaitingResetCompleteLocalInitiated);\n }\n },\n };\n\n var ControlTransitions = {\n ControlStateDisconnected : function(from_state) {\n _control.resetProtocol();\n _control.state = ControlStateAwaitingResetCompleteRemoteInitiated;\n },\n ControlStateAwaitingResetCompleteRemoteInitiated : function(from_state) {\n _control.resetProtocol();\n _control.state = ControlStateAwaitingResetCompleteRemoteInitiated;\n _controlSendResetComplete();\n },\n ControlStateAwaitingResetCompleteLocalInitiated : function(from_state) {\n if (from_state != ControlStateAwaitingResetCompleteLocalInitiated) {\n // Coming from elsewhere, send the ResetRequest\n _controlSendResetRequest();\n }\n _control.resetProtocol();\n _control.state = ControlStateAwaitingResetCompleteLocalInitiated;\n },\n ControlStateSessionOpen : function(from_state) {\n _control.state = ControlStateSessionOpen;\n _callHandlersForEvent('postmessageconnected');\n },\n };\n\n var PROTOCOL = {\n min_version : 1,\n max_version : 1,\n max_tx_chunk_size : 1000,\n max_rx_chunk_size : 1000,\n };\n\n var _control = {\n state : ControlStateDisconnected,\n handle : function(msg) {\n debugLog(\"Handle \" + this.state + \"(\" + JSON.stringify(msg.payload) + \"}\");\n ControlHandlers[this.state](msg.payload);\n },\n enter : function(to_state) {\n debugLog(\"Enter \" + this.state + \" ===> \" + to_state);\n var prev_state = this.state;\n ControlTransitions[to_state](this.state);\n if (prev_state == ControlStateSessionOpen && to_state != ControlStateSessionOpen) {\n _callHandlersForEvent('postmessagedisconnected');\n }\n },\n isSessionOpen: function() {\n return (this.state === ControlStateSessionOpen);\n },\n resetProtocol: function() {\n this.protocol = {\n version : 0,\n tx_chunk_size : 0,\n rx_chunk_size : 0,\n };\n },\n protocol : {\n version : 0,\n tx_chunk_size : 0,\n rx_chunk_size : 0,\n },\n };\n\n __Pebble.addEventListener('appmessage', function(msg) {\n _control.handle(msg);\n });\n\n __Pebble.addEventListener('ready', function(e) {\n _control.enter(ControlStateAwaitingResetCompleteLocalInitiated);\n });\n})();\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /home/zahkc/.pebble-sdk/SDKs/4.3/sdk-core/pebble/common/include/_pkjs_message_wrapper.js\n// module id = 2\n// module chunks = 0","/*! https://mths.be/utf8js v2.1.2 by @mathias */\n;(function(root) {\n\n\t// Detect free variables `exports`\n\tvar freeExports = typeof exports == 'object' && exports;\n\n\t// Detect free variable `module`\n\tvar freeModule = typeof module == 'object' && module &&\n\t\tmodule.exports == freeExports && module;\n\n\t// Detect free variable `global`, from Node.js or Browserified code,\n\t// and use it as `root`\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {\n\t\troot = freeGlobal;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar stringFromCharCode = String.fromCharCode;\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2decode(string) {\n\t\tvar output = [];\n\t\tvar counter = 0;\n\t\tvar length = string.length;\n\t\tvar value;\n\t\tvar extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t// Taken from https://mths.be/punycode\n\tfunction ucs2encode(array) {\n\t\tvar length = array.length;\n\t\tvar index = -1;\n\t\tvar value;\n\t\tvar output = '';\n\t\twhile (++index < length) {\n\t\t\tvalue = array[index];\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t}\n\t\treturn output;\n\t}\n\n\tfunction checkScalarValue(codePoint) {\n\t\tif (codePoint >= 0xD800 && codePoint <= 0xDFFF) {\n\t\t\tthrow Error(\n\t\t\t\t'Lone surrogate U+' + codePoint.toString(16).toUpperCase() +\n\t\t\t\t' is not a scalar value'\n\t\t\t);\n\t\t}\n\t}\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction createByte(codePoint, shift) {\n\t\treturn stringFromCharCode(((codePoint >> shift) & 0x3F) | 0x80);\n\t}\n\n\tfunction encodeCodePoint(codePoint) {\n\t\tif ((codePoint & 0xFFFFFF80) == 0) { // 1-byte sequence\n\t\t\treturn stringFromCharCode(codePoint);\n\t\t}\n\t\tvar symbol = '';\n\t\tif ((codePoint & 0xFFFFF800) == 0) { // 2-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 6) & 0x1F) | 0xC0);\n\t\t}\n\t\telse if ((codePoint & 0xFFFF0000) == 0) { // 3-byte sequence\n\t\t\tcheckScalarValue(codePoint);\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 12) & 0x0F) | 0xE0);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\telse if ((codePoint & 0xFFE00000) == 0) { // 4-byte sequence\n\t\t\tsymbol = stringFromCharCode(((codePoint >> 18) & 0x07) | 0xF0);\n\t\t\tsymbol += createByte(codePoint, 12);\n\t\t\tsymbol += createByte(codePoint, 6);\n\t\t}\n\t\tsymbol += stringFromCharCode((codePoint & 0x3F) | 0x80);\n\t\treturn symbol;\n\t}\n\n\tfunction utf8encode(string) {\n\t\tvar codePoints = ucs2decode(string);\n\t\tvar length = codePoints.length;\n\t\tvar index = -1;\n\t\tvar codePoint;\n\t\tvar byteString = '';\n\t\twhile (++index < length) {\n\t\t\tcodePoint = codePoints[index];\n\t\t\tbyteString += encodeCodePoint(codePoint);\n\t\t}\n\t\treturn byteString;\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tfunction readContinuationByte() {\n\t\tif (byteIndex >= byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tvar continuationByte = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\tif ((continuationByte & 0xC0) == 0x80) {\n\t\t\treturn continuationByte & 0x3F;\n\t\t}\n\n\t\t// If we end up here, it’s not a continuation byte\n\t\tthrow Error('Invalid continuation byte');\n\t}\n\n\tfunction decodeSymbol() {\n\t\tvar byte1;\n\t\tvar byte2;\n\t\tvar byte3;\n\t\tvar byte4;\n\t\tvar codePoint;\n\n\t\tif (byteIndex > byteCount) {\n\t\t\tthrow Error('Invalid byte index');\n\t\t}\n\n\t\tif (byteIndex == byteCount) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Read first byte\n\t\tbyte1 = byteArray[byteIndex] & 0xFF;\n\t\tbyteIndex++;\n\n\t\t// 1-byte sequence (no continuation bytes)\n\t\tif ((byte1 & 0x80) == 0) {\n\t\t\treturn byte1;\n\t\t}\n\n\t\t// 2-byte sequence\n\t\tif ((byte1 & 0xE0) == 0xC0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x1F) << 6) | byte2;\n\t\t\tif (codePoint >= 0x80) {\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 3-byte sequence (may include unpaired surrogates)\n\t\tif ((byte1 & 0xF0) == 0xE0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x0F) << 12) | (byte2 << 6) | byte3;\n\t\t\tif (codePoint >= 0x0800) {\n\t\t\t\tcheckScalarValue(codePoint);\n\t\t\t\treturn codePoint;\n\t\t\t} else {\n\t\t\t\tthrow Error('Invalid continuation byte');\n\t\t\t}\n\t\t}\n\n\t\t// 4-byte sequence\n\t\tif ((byte1 & 0xF8) == 0xF0) {\n\t\t\tbyte2 = readContinuationByte();\n\t\t\tbyte3 = readContinuationByte();\n\t\t\tbyte4 = readContinuationByte();\n\t\t\tcodePoint = ((byte1 & 0x07) << 0x12) | (byte2 << 0x0C) |\n\t\t\t\t(byte3 << 0x06) | byte4;\n\t\t\tif (codePoint >= 0x010000 && codePoint <= 0x10FFFF) {\n\t\t\t\treturn codePoint;\n\t\t\t}\n\t\t}\n\n\t\tthrow Error('Invalid UTF-8 detected');\n\t}\n\n\tvar byteArray;\n\tvar byteCount;\n\tvar byteIndex;\n\tfunction utf8decode(byteString) {\n\t\tbyteArray = ucs2decode(byteString);\n\t\tbyteCount = byteArray.length;\n\t\tbyteIndex = 0;\n\t\tvar codePoints = [];\n\t\tvar tmp;\n\t\twhile ((tmp = decodeSymbol()) !== false) {\n\t\t\tcodePoints.push(tmp);\n\t\t}\n\t\treturn ucs2encode(codePoints);\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\tvar utf8 = {\n\t\t'version': '2.1.2',\n\t\t'encode': utf8encode,\n\t\t'decode': utf8decode\n\t};\n\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine(function() {\n\t\t\treturn utf8;\n\t\t});\n\t}\telse if (freeExports && !freeExports.nodeType) {\n\t\tif (freeModule) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = utf8;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tvar object = {};\n\t\t\tvar hasOwnProperty = object.hasOwnProperty;\n\t\t\tfor (var key in utf8) {\n\t\t\t\thasOwnProperty.call(utf8, key) && (freeExports[key] = utf8[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.utf8 = utf8;\n\t}\n\n}(this));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /home/zahkc/.pebble-sdk/SDKs/4.3/~/utf8/utf8.js\n// module id = 3\n// module chunks = 0","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tmodule.children = [];\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/module.js\n// module id = 4\n// module chunks = 0","// https://developer.pebble.com/docs/pebblekit-js/Pebble/#on\nPebble.on('message', function(event) {\n console.log('Message received from watch:', event.data);\n});\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/pkjs/index.js\n// module id = 5\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/build/pebble-rocky.map b/build/pebble-rocky.map new file mode 100644 index 0000000..7944e09 --- /dev/null +++ b/build/pebble-rocky.map @@ -0,0 +1,1432 @@ +Archive member included because of file (symbol) + +/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + basalt/src/rocky.c.41.o (window_create) + +Discarded input sections + + .text 0x0000000000000000 0x0 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crti.o + .bss 0x0000000000000000 0x0 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crti.o + .init 0x0000000000000000 0x4 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crti.o + .fini 0x0000000000000000 0x4 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crti.o + .text 0x0000000000000000 0xc8 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtbegin.o + .bss 0x0000000000000000 0x1c /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtbegin.o + .init_array 0x0000000000000000 0x4 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtbegin.o + .fini_array 0x0000000000000000 0x4 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtbegin.o + .eh_frame 0x0000000000000000 0x0 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtbegin.o + .jcr 0x0000000000000000 0x0 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtbegin.o + .tm_clone_table + 0x0000000000000000 0x0 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtbegin.o + .text 0x0000000000000000 0x0 basalt/src/rocky.c.41.o + .bss 0x0000000000000000 0x0 basalt/src/rocky.c.41.o + .text 0x0000000000000000 0x0 basalt/appinfo.auto.c.41.o + .bss 0x0000000000000000 0x0 basalt/appinfo.auto.c.41.o + .text 0x0000000000000000 0x0 basalt/src/resource_ids.auto.c.41.o + .bss 0x0000000000000000 0x0 basalt/src/resource_ids.auto.c.41.o + .data.RESOURCE_ID_JS_SNAPSHOT + 0x0000000000000000 0x4 basalt/src/resource_ids.auto.c.41.o + .text 0x0000000000000000 0x0 src/message_keys.auto.c.41.o + .bss 0x0000000000000000 0x0 src/message_keys.auto.c.41.o + .data.MESSAGE_KEY_ControlKeyResetComplete + 0x0000000000000000 0x4 src/message_keys.auto.c.41.o + .data.MESSAGE_KEY_ControlKeyUnsupportedError + 0x0000000000000000 0x4 src/message_keys.auto.c.41.o + .data.MESSAGE_KEY_ControlKeyChunk + 0x0000000000000000 0x4 src/message_keys.auto.c.41.o + .data.MESSAGE_KEY_ControlKeyResetRequest + 0x0000000000000000 0x4 src/message_keys.auto.c.41.o + .bss 0x0000000000000000 0x0 /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.accel_data_service_subscribe__deprecated + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.accel_data_service_unsubscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.accel_service_peek + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.accel_service_set_samples_per_update + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.accel_service_set_sampling_rate + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.accel_tap_service_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.accel_tap_service_unsubscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_legacy2_add_to_window + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_legacy2_clear_icon + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_legacy2_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_legacy2_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_legacy2_get_layer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_legacy2_remove_from_window + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_legacy2_set_background_color_2bit + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_legacy2_set_click_config_provider + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_legacy2_set_context + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_legacy2_set_icon + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_legacy2_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_legacy2_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_legacy2_get_context + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_legacy2_is_scheduled + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_legacy2_schedule + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_legacy2_set_curve + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_legacy2_set_delay + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_legacy2_set_duration + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_legacy2_set_handlers + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_legacy2_set_implementation + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_legacy2_unschedule + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_legacy2_unschedule_all + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_comm_get_sniff_interval + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_comm_set_sniff_interval + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_event_loop + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_log 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_message_deregister_callbacks + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_message_open + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_sync_deinit + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_sync_get + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_sync_init + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_sync_set + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_timer_cancel + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_timer_register + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_timer_reschedule + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.atan2_lookup + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.atoi 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.atol 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.battery_state_service_peek + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.battery_state_service_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.battery_state_service_unsubscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.bitmap_layer_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.bitmap_layer_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.bitmap_layer_get_layer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.bitmap_layer_set_alignment + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.bitmap_layer_set_background_color_2bit + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.bitmap_layer_set_bitmap + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.bitmap_layer_set_compositing_mode + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.bluetooth_connection_service_peek + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.bluetooth_connection_service_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.bluetooth_connection_service_unsubscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.click_number_of_clicks_counted + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.click_recognizer_get_button_id + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.clock_copy_time_string + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.clock_is_24h_style + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.cos_lookup + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.data_logging_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.data_logging_finish + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.data_logging_log + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_calc_buffer_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_calc_buffer_size_from_tuplets + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_find + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_merge + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_read_begin_from_buffer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_read_first + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_read_next + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_serialize_tuplets + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_serialize_tuplets_to_buffer__deprecated + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_serialize_tuplets_to_buffer_with_iter + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_write_begin + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_write_cstring + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_write_data + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_write_end + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_write_int + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_write_int16 + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_write_int32 + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_write_int8 + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_write_tuplet + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_write_uint16 + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_write_uint32 + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_write_uint8 + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.fonts_get_system_font + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.fonts_load_custom_font + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.fonts_unload_custom_font + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.free 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_create_as_sub_bitmap + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_create_with_data + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_create_with_resource + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gmtime 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gpath_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gpath_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gpath_draw_filled_legacy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gpath_draw_outline + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gpath_move_to + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gpath_rotate_to + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gpoint_equal + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_context_set_compositing_mode + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_context_set_fill_color_2bit + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_context_set_stroke_color_2bit + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_context_set_text_color_2bit + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_draw_bitmap_in_rect + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_draw_circle + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_draw_line + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_draw_pixel + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_draw_rect + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_draw_round_rect + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_fill_circle + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_fill_rect + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_text_layout_get_max_used_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.grect_align + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.grect_center_point + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.grect_clip + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.grect_contains_point + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.grect_crop + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.grect_equal + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.grect_is_empty + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.grect_standardize + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gsize_equal + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.inverter_layer_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.inverter_layer_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.inverter_layer_get_layer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_add_child + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_create_with_data + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_get_bounds + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_get_clips + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_get_data + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_get_frame + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_get_hidden + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_get_window + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_insert_above_sibling + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_insert_below_sibling + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_mark_dirty + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_remove_child_layers + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_remove_from_parent + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_set_bounds + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_set_clips + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_set_frame + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_set_hidden + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_set_update_proc + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.light_enable + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.light_enable_interaction + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.localtime__deprecated + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.malloc 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.memcpy 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.memmove 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.memset 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_cell_basic_draw + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_cell_basic_header_draw + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_cell_title_draw + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_index_compare + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_legacy2_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_get_layer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_get_scroll_layer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_get_selected_index + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_reload_data + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_legacy2_set_callbacks__deprecated + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_set_click_config_onto_window + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_set_selected_index + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_set_selected_next + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.number_window_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.number_window_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.number_window_get_value + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.number_window_set_label + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.number_window_set_max + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.number_window_set_min + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.number_window_set_step_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.number_window_set_value + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.persist_delete + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.persist_exists + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.persist_get_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.persist_read_bool + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.persist_read_data__deprecated + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.persist_read_int + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.persist_read_string__deprecated + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.persist_write_bool + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.persist_write_data__deprecated + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.persist_write_int + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.persist_write_string + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_legacy2_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_legacy2_create_layer_frame + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_legacy2_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_legacy2_update_gpoint + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_legacy2_update_grect + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_legacy2_update_int16 + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.psleep 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.rand 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.resource_get_handle + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.resource_load + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.resource_load_byte_range + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.resource_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.rot_bitmap_layer_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.rot_bitmap_layer_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.rot_bitmap_layer_increment_angle + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.rot_bitmap_layer_set_angle + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.rot_bitmap_layer_set_corner_clip_color_2bit + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.rot_bitmap_set_compositing_mode + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.rot_bitmap_set_src_ic + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_add_child + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_get_content_offset + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_get_content_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_get_layer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_get_shadow_hidden + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_scroll_down_click_handler + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_scroll_up_click_handler + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_set_callbacks + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_set_click_config_onto_window + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_set_content_offset + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_set_content_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_set_context + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_set_frame + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_set_shadow_hidden + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.simple_menu_layer_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.simple_menu_layer_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.simple_menu_layer_get_layer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.simple_menu_layer_get_selected_index + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.simple_menu_layer_set_selected_index + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.sin_lookup + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.snprintf + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.srand 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.strcat 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.strcmp 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.strcpy 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.strftime + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.strlen 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.strncat 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.strncmp 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.strncpy 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_legacy2_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_legacy2_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_legacy2_get_content_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_legacy2_get_layer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_legacy2_get_text + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_legacy2_set_background_color_2bit + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_legacy2_set_font + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_legacy2_set_overflow_mode + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_legacy2_set_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_legacy2_set_text + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_legacy2_set_text_alignment + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_legacy2_set_text_color_2bit + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.tick_timer_service_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.tick_timer_service_unsubscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.time__deprecated + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.time_ms_deprecated + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.vibes_cancel + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.vibes_double_pulse + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.vibes_enqueue_custom_pattern + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.vibes_long_pulse + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.vibes_short_pulse + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_get_click_config_provider + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_get_fullscreen + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_get_root_layer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_is_loaded + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_set_background_color_2bit + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_set_click_config_provider + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_set_click_config_provider_with_context + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_set_fullscreen + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_set_status_bar_icon + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_set_window_handlers + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_stack_contains_window + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_stack_get_top_window + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_stack_pop + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_stack_pop_all + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_stack_remove + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_focus_service_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_focus_service_unsubscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_get_user_data + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_set_user_data + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_message_get_context + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_message_inbox_size_maximum + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_message_outbox_begin + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_message_outbox_send + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_message_outbox_size_maximum + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_message_register_inbox_dropped + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_message_register_inbox_received + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_message_register_outbox_failed + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_message_register_outbox_sent + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_message_set_context + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_long_click_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_multi_click_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_raw_click_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_set_click_context + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_single_click_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_single_repeating_click_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_draw_text + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_serialize_tuplets_to_buffer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.persist_read_data + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.persist_read_string + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.persist_write_data + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dict_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_text_layout_get_content_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.simple_menu_layer_get_menu_layer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.accel_data_service_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.calloc 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.bitmap_layer_get_bitmap + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_legacy2_set_callbacks + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_get_click_config_context + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.number_window_get_window + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.realloc 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_create_blank_2bit + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.click_recognizer_is_repeating + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.accel_raw_data_service_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_worker_is_running + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_worker_kill + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_worker_launch + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_worker_message_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_worker_message_unsubscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_worker_send_message + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.worker_event_loop + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.worker_launch_app + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.heap_bytes_free + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.heap_bytes_used + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.compass_service_peek + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.compass_service_set_heading_filter + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.compass_service_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.compass_service_unsubscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.uuid_equal + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.uuid_to_string + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gpath_draw_filled + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_legacy2_set_custom_curve + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.watch_info_get_color + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.watch_info_get_firmware_version + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.watch_info_get_model + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_capture_frame_buffer_2bit + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_frame_buffer_is_captured + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_release_frame_buffer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.clock_to_timestamp + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.launch_reason + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.wakeup_cancel + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.wakeup_cancel_all + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.wakeup_get_launch_event + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.wakeup_query + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.wakeup_schedule + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.wakeup_service_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.clock_is_timezone_set + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.i18n_get_system_locale + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text._localeconv_r + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.setlocale + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.mktime 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gcolor_equal__deprecated + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.__profiler_init + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.__profiler_print_stats + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.__profiler_start + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.__profiler_stop + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.bitmap_layer_set_background_color + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_context_set_fill_color + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_context_set_stroke_color + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_context_set_text_color + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.rot_bitmap_layer_set_corner_clip_color + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.window_set_background_color + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.clock_get_timezone + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.localtime + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_get_context + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_is_scheduled + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_schedule + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_set_curve + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_set_custom_curve + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_set_delay + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_set_duration + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_set_handlers + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_set_implementation + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_unschedule + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_unschedule_all + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_create_blank + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_capture_frame_buffer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_capture_frame_buffer_format + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_create_layer_frame + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_from + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_get_animation + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_subject + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_to + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_update_gpoint + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_update_grect + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_update_int16 + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_create_blank_with_palette + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_get_bounds + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_get_bytes_per_row + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_get_data + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_get_format + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_get_palette + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_set_bounds + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_set_data + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_set_palette + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_sequence_create_with_resource + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_sequence_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_sequence_get_bitmap_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_sequence_get_current_frame_idx + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_sequence_get_total_num_frames + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_sequence_update_bitmap_next_frame + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_create_from_png_data + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_clone + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_get_delay + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_get_duration + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_get_play_count + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_get_elapsed + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_get_reverse + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_sequence_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_sequence_create_from_array + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_set_play_count + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_set_elapsed + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_set_reverse + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_spawn_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_spawn_create_from_array + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_get_curve + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_get_custom_curve + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.animation_get_implementation + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.launch_get_args + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_sequence_get_play_count + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_sequence_restart + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_sequence_set_play_count + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_context_set_antialiased + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_context_set_stroke_width + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_add_to_window + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_clear_icon + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_get_layer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_remove_from_window + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_set_background_color + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_set_click_config_provider + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_set_context + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_set_icon + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_set_icon_animated + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_sequence_update_bitmap_by_elapsed + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_create_palettized_from_1bit + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_cell_layer_is_highlighted + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_draw_rotated_bitmap + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_bar_layer_set_icon_press_animation + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_get_content_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_get_layer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_get_text + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_set_background_color + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_set_font + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_set_overflow_mode + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_set_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_set_text + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_set_text_alignment + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_set_text_color + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_draw + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_frame_draw + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_frame_get_duration + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_frame_set_duration + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_get_fill_color + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_get_hidden + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_get_num_points + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_get_path_open + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_get_point + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_get_radius + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_get_stroke_color + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_get_stroke_width + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_get_type + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_image_clone + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_image_create_with_resource + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_image_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_image_draw + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_image_get_bounds_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_image_get_command_list + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_image_set_bounds_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_list_draw + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_list_get_command + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_list_get_num_commands + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_list_iterate + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_sequence_clone + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_sequence_create_with_resource + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_sequence_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_sequence_get_bounds_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_sequence_get_frame_by_elapsed + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_sequence_get_frame_by_index + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_sequence_get_num_frames + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_sequence_get_play_count + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_sequence_get_total_duration + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_sequence_set_bounds_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_sequence_set_play_count + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_set_fill_color + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_set_hidden + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_set_path_open + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_set_point + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_set_radius + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_set_stroke_color + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_set_stroke_width + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_create_bounds_origin + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_update_uint32 + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gpath_draw_outline_open + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.time 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_set_highlight_colors + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_set_normal_colors + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_set_callbacks + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_pad_bottom_enable + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.status_bar_layer_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.status_bar_layer_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.status_bar_layer_get_background_color + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.status_bar_layer_get_foreground_color + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.status_bar_layer_get_layer + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.status_bar_layer_set_colors + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.status_bar_layer_set_separator_mode + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.difftime + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.time_ms 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gcolor_legible_over + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.property_animation_update_gcolor8 + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_focus_service_subscribe_handlers + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_menu_close + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_menu_freeze + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_menu_get_context + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_menu_get_root_level + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_menu_hierarchy_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_menu_item_get_action_data + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_menu_item_get_label + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_menu_level_add_action + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_menu_level_add_child + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_menu_level_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_menu_level_set_display_mode + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_menu_open + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_menu_set_result_window + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.action_menu_unfreeze + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dictation_session_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dictation_session_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dictation_session_enable_confirmation + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dictation_session_start + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dictation_session_stop + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.smartstrap_attribute_begin_write + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.smartstrap_attribute_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.smartstrap_attribute_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.smartstrap_attribute_end_write + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.smartstrap_attribute_get_attribute_id + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.smartstrap_attribute_get_service_id + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.smartstrap_attribute_read + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.smartstrap_service_is_available + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.smartstrap_set_timeout + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.smartstrap_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.smartstrap_unsubscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.connection_service_peek_pebble_app_connection + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.connection_service_peek_pebblekit_connection + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.connection_service_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.connection_service_unsubscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.dictation_session_enable_error_dialogs + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gbitmap_get_data_row_info + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.content_indicator_configure_direction + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.content_indicator_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.content_indicator_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.content_indicator_get_content_available + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.content_indicator_set_content_available + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_get_content_indicator + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_get_center_focused + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_set_center_focused + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.grect_inset + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gpoint_from_polar + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_draw_arc + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_fill_radial + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.grect_centered_from_polar + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_text_attributes_create + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_text_attributes_destroy + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_text_attributes_enable_paging + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_text_attributes_enable_screen_text_flow + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_text_attributes_restore_default_paging + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_text_attributes_restore_default_text_flow + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.graphics_text_layout_get_content_size_with_attributes + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_convert_point_to_screen + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_convert_rect_to_screen + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_get_paging + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.scroll_layer_set_paging + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_enable_screen_text_flow_and_paging + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.text_layer_restore_default_text_flow_and_paging + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.menu_layer_is_index_selected + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_activities_iterate + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_any_activity_accessible + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_events_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_events_unsubscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_get_minute_history + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_metric_accessible + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_peek_current_activities + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_sum + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_sum_today + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.time_start_of_today + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_metric_averaged_accessible + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_sum_averaged + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_get_measurement_system_for_display + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gdraw_command_frame_get_command_list + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.gcolor_equal + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_glance_add_slice + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.app_glance_reload + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.exit_reason_set + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_aggregate_averaged + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_cancel_metric_alert + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_metric_aggregate_averaged_accessible + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_peek_current_value + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_register_metric_alert + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.layer_get_unobstructed_bounds + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.preferred_result_display_duration + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.unobstructed_area_service_subscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.unobstructed_area_service_unsubscribe + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.memory_cache_flush + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_get_heart_rate_sample_period_expiration_sec + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.health_service_set_heart_rate_sample_period + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.preferred_content_size + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text.quiet_time_is_active + 0x0000000000000000 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .text 0x0000000000000000 0x0 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtend.o + .bss 0x0000000000000000 0x0 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtend.o + .eh_frame 0x0000000000000000 0x4 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtend.o + .jcr 0x0000000000000000 0x4 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtend.o + .tm_clone_table + 0x0000000000000000 0x0 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtend.o + .text 0x0000000000000000 0x0 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtn.o + .bss 0x0000000000000000 0x0 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtn.o + .init 0x0000000000000000 0x8 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtn.o + .fini 0x0000000000000000 0x8 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtn.o + +Memory Configuration + +Name Origin Length Attributes +APP 0x0000000000000000 0x0000000000010000 xrw +*default* 0x0000000000000000 0xffffffffffffffff + +Linker script and memory map + +LOAD /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crti.o +LOAD /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtbegin.o +LOAD basalt/src/rocky.c.41.o +LOAD basalt/appinfo.auto.c.41.o +LOAD basalt/src/resource_ids.auto.c.41.o +LOAD src/message_keys.auto.c.41.o +LOAD /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a +START GROUP +LOAD /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/libgcc.a +LOAD /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi/lib/thumb2/libc.a +END GROUP +LOAD /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtend.o +LOAD /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtn.o + +.header 0x0000000000000000 0x82 + *(.pbl_header) + .pbl_header 0x0000000000000000 0x82 basalt/appinfo.auto.c.41.o + 0x0000000000000000 __pbl_app_info + +.note.gnu.build-id + 0x0000000000000082 0x26 + 0x0000000000000082 PROVIDE (BUILD_ID, .) + *(.note.gnu.build-id) + *fill* 0x0000000000000082 0x2 + .note.gnu.build-id + 0x0000000000000084 0x24 linker stubs + +.text 0x00000000000000a8 0x50 + *(.text) + .text 0x00000000000000a8 0x14 /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + *(.text.*) + .text.startup.main + 0x00000000000000bc 0x16 basalt/src/rocky.c.41.o + 0x00000000000000bc main + *fill* 0x00000000000000d2 0x2 + .text.window_create + 0x00000000000000d4 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + 0x00000000000000d4 window_create + .text.window_stack_push + 0x00000000000000e0 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + 0x00000000000000e0 window_stack_push + .text.rocky_event_loop_with_resource + 0x00000000000000ec 0xc /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + 0x00000000000000ec rocky_event_loop_with_resource + *(.rodata) + *(.rodata*) + +.glue_7 0x00000000000000f8 0x0 + .glue_7 0x0000000000000000 0x0 linker stubs + +.glue_7t 0x00000000000000f8 0x0 + .glue_7t 0x0000000000000000 0x0 linker stubs + +.vfp11_veneer 0x00000000000000f8 0x0 + .vfp11_veneer 0x0000000000000000 0x0 linker stubs + +.v4_bx 0x00000000000000f8 0x0 + .v4_bx 0x0000000000000000 0x0 linker stubs + +.iplt 0x00000000000000f8 0x0 + .iplt 0x0000000000000000 0x0 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtbegin.o + +.rel.dyn 0x00000000000000f8 0x0 + .rel.iplt 0x0000000000000000 0x0 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtbegin.o + +.data 0x00000000000000f8 0x4 + *(.data) + .data 0x00000000000000f8 0x0 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crti.o + .data 0x00000000000000f8 0x4 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtbegin.o + 0x00000000000000f8 __dso_handle + .data 0x00000000000000fc 0x0 basalt/src/rocky.c.41.o + .data 0x00000000000000fc 0x0 basalt/appinfo.auto.c.41.o + .data 0x00000000000000fc 0x0 basalt/src/resource_ids.auto.c.41.o + .data 0x00000000000000fc 0x0 src/message_keys.auto.c.41.o + .data 0x00000000000000fc 0x0 /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .data 0x00000000000000fc 0x0 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtend.o + .data 0x00000000000000fc 0x0 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtn.o + *(.data.*) + +.igot.plt 0x00000000000000fc 0x0 + .igot.plt 0x0000000000000000 0x0 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtbegin.o + +.bss + *(.bss) + *(.bss.*) + +DISCARD + libc.a(*) + libm.a(*) + libgcc.a(*) + *(.eh_frame) +OUTPUT(/home/zahkc/Documents/Projects/Pebble/geiger/build/basalt/pebble-app.elf elf32-littlearm) + +.ARM.attributes + 0x0000000000000000 0x27 + .ARM.attributes + 0x0000000000000000 0x19 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crti.o + .ARM.attributes + 0x0000000000000019 0x29 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtbegin.o + .ARM.attributes + 0x0000000000000042 0x33 basalt/src/rocky.c.41.o + .ARM.attributes + 0x0000000000000075 0x33 basalt/appinfo.auto.c.41.o + .ARM.attributes + 0x00000000000000a8 0x33 basalt/src/resource_ids.auto.c.41.o + .ARM.attributes + 0x00000000000000db 0x33 src/message_keys.auto.c.41.o + .ARM.attributes + 0x000000000000010e 0x21 /home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/basalt/lib/libpebble.a(tmpFRPTsFpebble.o) + .ARM.attributes + 0x000000000000012f 0x29 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtend.o + .ARM.attributes + 0x0000000000000158 0x19 /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtn.o + +.comment 0x0000000000000000 0x4e + .comment 0x0000000000000000 0x4e /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtbegin.o + 0x4f (size before relaxing) + .comment 0x0000000000000000 0x4f basalt/src/rocky.c.41.o + .comment 0x0000000000000000 0x4f basalt/appinfo.auto.c.41.o + .comment 0x0000000000000000 0x4f basalt/src/resource_ids.auto.c.41.o + .comment 0x0000000000000000 0x4f src/message_keys.auto.c.41.o + .comment 0x0000000000000000 0x4f /home/zahkc/Documents/Pebble/pebble-dev/pebble-sdk-4.6-rc2-linux64/arm-cs-tools/bin/../lib/gcc/arm-none-eabi/4.7.2/thumb2/crtend.o + +.debug_info 0x0000000000000000 0x5fd + .debug_info 0x0000000000000000 0x15b basalt/src/rocky.c.41.o + .debug_info 0x000000000000015b 0x36a basalt/appinfo.auto.c.41.o + .debug_info 0x00000000000004c5 0x81 basalt/src/resource_ids.auto.c.41.o + .debug_info 0x0000000000000546 0xb7 src/message_keys.auto.c.41.o + +.debug_abbrev 0x0000000000000000 0x22c + .debug_abbrev 0x0000000000000000 0x106 basalt/src/rocky.c.41.o + .debug_abbrev 0x0000000000000106 0x9e basalt/appinfo.auto.c.41.o + .debug_abbrev 0x00000000000001a4 0x44 basalt/src/resource_ids.auto.c.41.o + .debug_abbrev 0x00000000000001e8 0x44 src/message_keys.auto.c.41.o + +.debug_loc 0x0000000000000000 0x20 + .debug_loc 0x0000000000000000 0x20 basalt/src/rocky.c.41.o + +.debug_aranges 0x0000000000000000 0x68 + .debug_aranges + 0x0000000000000000 0x20 basalt/src/rocky.c.41.o + .debug_aranges + 0x0000000000000020 0x18 basalt/appinfo.auto.c.41.o + .debug_aranges + 0x0000000000000038 0x18 basalt/src/resource_ids.auto.c.41.o + .debug_aranges + 0x0000000000000050 0x18 src/message_keys.auto.c.41.o + +.debug_ranges 0x0000000000000000 0x10 + .debug_ranges 0x0000000000000000 0x10 basalt/src/rocky.c.41.o + +.debug_line 0x0000000000000000 0x499 + .debug_line 0x0000000000000000 0x18a basalt/src/rocky.c.41.o + .debug_line 0x000000000000018a 0x156 basalt/appinfo.auto.c.41.o + .debug_line 0x00000000000002e0 0xe0 basalt/src/resource_ids.auto.c.41.o + .debug_line 0x00000000000003c0 0xd9 src/message_keys.auto.c.41.o + +.debug_str 0x0000000000000000 0x526 + .debug_str 0x0000000000000000 0x15b basalt/src/rocky.c.41.o + 0x194 (size before relaxing) + .debug_str 0x000000000000015b 0x30a basalt/appinfo.auto.c.41.o + 0x433 (size before relaxing) + .debug_str 0x0000000000000465 0x1f basalt/src/resource_ids.auto.c.41.o + 0x103 (size before relaxing) + .debug_str 0x0000000000000484 0xa2 src/message_keys.auto.c.41.o + 0x16e (size before relaxing) + +.debug_frame 0x0000000000000000 0x28 + .debug_frame 0x0000000000000000 0x28 basalt/src/rocky.c.41.o diff --git a/build/resources/rocky-app.js b/build/resources/rocky-app.js new file mode 100644 index 0000000..03e4890 --- /dev/null +++ b/build/resources/rocky-app.js @@ -0,0 +1,247 @@ +/******/ (function(modules) { // webpackBootstrap +/******/ // The module cache +/******/ var installedModules = {}; + +/******/ // The require function +/******/ function __webpack_require__(moduleId) { + +/******/ // Check if module is in cache +/******/ if(installedModules[moduleId]) +/******/ return installedModules[moduleId].exports; + +/******/ // Create a new module (and put it into the cache) +/******/ var module = installedModules[moduleId] = { +/******/ exports: {}, +/******/ id: moduleId, +/******/ loaded: false +/******/ }; + +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + +/******/ // Flag the module as loaded +/******/ module.loaded = true; + +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } + + +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; + +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; + +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; + +/******/ // Load entry module and return exports +/******/ return __webpack_require__(0); +/******/ }) +/************************************************************************/ +/******/ ([ +/* 0 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = __webpack_require__(1); + + +/***/ }), +/* 1 */ +/***/ (function(module, exports, __webpack_require__) { + + var rocky = __webpack_require__(2); + + // An object to cache our date & time values, + // to minimize computations in the draw handler. + var timeData = { + hr: '', + min: '' + }; + + // Every minute + // https://developer.pebble.com/docs/rockyjs/rocky/#on + rocky.on('minutechange', function(event) { + // Current date/time + // https://developer.pebble.com/docs/rockyjs/Date/ + var d = event.date; + + // Get current time, based on 12h or 24h format (01:00 or 1:00 AM) + timeData.hr = d.toLocaleTimeString().substring(0,2); + timeData.min = d.toLocaleTimeString().substring(3,5); + + + // Force screen redraw + rocky.requestDraw(); + }); + + // Redraw the screen + rocky.on('draw', function(event) { + // Drawing canvas + var ctx = event.context; + + // Clear the canvas + // https://developer.pebble.com/docs/rockyjs/CanvasRenderingContext2D/#Canvas + ctx.fillStyle = 'yellow'; + ctx.fillRect(0, 0, ctx.canvas.clientWidth, ctx.canvas.clientHeight); + + ctx.fillStyle = 'black'; + ctx.rockyFillRadial(ctx.canvas.clientWidth/2, ctx.canvas.clientWidth/2, 0, ctx.canvas.clientWidth/2.125 ,0, 2* Math.PI); + + ctx.fillStyle = 'white'; + ctx.rockyFillRadial(ctx.canvas.clientWidth/2, ctx.canvas.clientWidth/2, 0, ctx.canvas.clientWidth/2.5 ,0, 2* Math.PI); + + ctx.fillStyle = 'black'; + ctx.beginPath(); + ctx.moveTo(4 * ctx.canvas.clientWidth/10, 8 * ctx.canvas.clientHeight/10); + ctx.lineTo(4.5 * ctx.canvas.clientWidth/10, 5.5 * ctx.canvas.clientHeight/10); + ctx.lineTo(5 * ctx.canvas.clientWidth/10, 5.25 * ctx.canvas.clientHeight/10); + ctx.lineTo(5.5 * ctx.canvas.clientWidth/10, 5.5 * ctx.canvas.clientHeight/10); + ctx.lineTo(6 * ctx.canvas.clientWidth/10, 8 * ctx.canvas.clientHeight/10); + ctx.closePath(); + ctx.fill(); + + ctx.fillStyle = 'black'; + ctx.rockyFillRadial(1.25 * ctx.canvas.clientWidth/10, 8.55 * ctx.canvas.clientHeight/10, 0, ctx.canvas.clientWidth/16 ,0, 2* Math.PI); + + ctx.rockyFillRadial(8.5*ctx.canvas.clientWidth/10, 8.75*ctx.canvas.clientHeight/10, 0, ctx.canvas.clientWidth/8 ,0, 2* Math.PI); + ctx.fillStyle = 'yellow'; + ctx.rockyFillRadial(8.5*ctx.canvas.clientWidth/10, 8.75*ctx.canvas.clientHeight/10, 0, ctx.canvas.clientWidth/9 ,0, 2* Math.PI); + ctx.fillStyle = 'black'; + ctx.rockyFillRadial(8.5*ctx.canvas.clientWidth/10, 8.75*ctx.canvas.clientHeight/10, 0, ctx.canvas.clientWidth/10 ,0, 2* Math.PI); + ctx.fillStyle = 'yellow'; + ctx.rockyFillRadial(8.5*ctx.canvas.clientWidth/10, 8.75*ctx.canvas.clientHeight/10, 0, ctx.canvas.clientWidth/32 ,0, 2* Math.PI); + + ctx.beginPath(); + ctx.moveTo(8.5*ctx.canvas.clientWidth/10, 8.75*ctx.canvas.clientHeight/10 + 5); + ctx.lineTo(8 * ctx.canvas.clientWidth/10, 8 * ctx.canvas.clientHeight/10); + ctx.lineTo(9 * ctx.canvas.clientWidth/10, 8 * ctx.canvas.clientHeight/10); + ctx.closePath(); + ctx.fill(); + + ctx.beginPath(); + ctx.moveTo(8.5*ctx.canvas.clientWidth/10, 8.75*ctx.canvas.clientHeight/10); + ctx.lineTo(7.32 * ctx.canvas.clientWidth/10, 8.75 * ctx.canvas.clientHeight/10); + ctx.lineTo(8 * ctx.canvas.clientWidth/10, 9.8 * ctx.canvas.clientHeight/10); + ctx.closePath(); + ctx.fill(); + + ctx.beginPath(); + ctx.moveTo(8.5*ctx.canvas.clientWidth/10, 8.75*ctx.canvas.clientHeight/10); + ctx.lineTo(9.69 * ctx.canvas.clientWidth/10, 8.75 * ctx.canvas.clientHeight/10); + ctx.lineTo(9 * ctx.canvas.clientWidth/10, 9.8 * ctx.canvas.clientHeight/10); + ctx.closePath(); + ctx.fill(); + + + + + ctx.fillStyle = 'black'; + ctx.rockyFillRadial(8.5*ctx.canvas.clientWidth/10, 8.75*ctx.canvas.clientHeight/10, 0, ctx.canvas.clientWidth/48 ,0, 2* Math.PI); + + + ctx.strokeStyle = 'lightgrey'; + ctx.beginPath(); + ctx.arc(ctx.canvas.clientWidth/2 , 5.5 * ctx.canvas.clientHeight/10, 50, 1.125 * Math.PI, 1.875 * Math.PI); + ctx.stroke(); + ctx.beginPath(); + ctx.arc(ctx.canvas.clientWidth/2 , 5.5 * ctx.canvas.clientHeight/10, 40, 1.125 * Math.PI, 1.875 * Math.PI); + ctx.stroke(); + + ctx.font = '14px bold Gothic'; + ctx.fillText('0', 1.5 * ctx.canvas.clientWidth/10, 3.5 * ctx.canvas.clientWidth/10) + ctx.fillText('15', 2.75 * ctx.canvas.clientWidth/10 - 5, 2 * ctx.canvas.clientWidth/10) + ctx.fillText('30', 4.75 * ctx.canvas.clientWidth/10 - 3, 1.5 * ctx.canvas.clientWidth/10) + ctx.fillText('45', 6.75 * ctx.canvas.clientWidth/10, 2 * ctx.canvas.clientWidth/10) + ctx.fillText('60', 8 * ctx.canvas.clientWidth/10, 3.5 * ctx.canvas.clientWidth/10) + + + ctx.fillText('12', 0.8 * ctx.canvas.clientWidth/10, 7 * ctx.canvas.clientHeight/10); + ctx.fillText('3', 2 * ctx.canvas.clientWidth/10, 8 * ctx.canvas.clientHeight/10); + ctx.fillText('6', 1 * ctx.canvas.clientWidth/10, 9 * ctx.canvas.clientHeight/10); + ctx.fillText('9' , 0 * ctx.canvas.clientWidth/10, 8 * ctx.canvas.clientHeight/10); + + plotLines(ctx, 0, 5, 'lightgrey'); + plotLines(ctx, 5, 0, 'lightgrey'); + plotLines(ctx, 10, 0, 'lightgrey'); + plotLines(ctx, 15, 5, 'lightgrey'); + plotLines(ctx, 20, 0, 'lightgrey'); + plotLines(ctx, 25, 0, 'lightgrey'); + plotLines(ctx, 30, 5, 'lightgrey'); + plotLines(ctx, 35, 0, 'lightgrey'); + plotLines(ctx, 40, 0, 'lightgrey'); + plotLines(ctx, 45, 5, 'red'); + plotLines(ctx, 50, 0, 'red'); + plotLines(ctx, 55, 0, 'red'); + plotLines(ctx, 60, 5, 'red'); + + ctx.font = '18px bold Gothic' + ctx.fillText('r/hr', 4 * ctx.canvas.clientWidth/10, 3.5 * ctx.canvas.clientHeight/10); + + ctx.lineWidth = 1; + ctx.strokeStyle = "darkgrey"; + ctx.beginPath(); + ctx.moveTo(ctx.canvas.clientWidth/2 , 5.5 * ctx.canvas.clientHeight/10); + var minDeg = 203 + (134/60 * parseInt(timeData.min)); + ctx.lineTo( + (Math.cos( minDeg / (180 / Math.PI) ) * 48) + ctx.canvas.clientWidth/2, + (Math.sin( minDeg / (180 / Math.PI) ) * 48) + 5.5 * ctx.canvas.clientHeight/10 + ); + ctx.stroke(); + + ctx.strokeStyle = 'darkcandyapplered'; + ctx.beginPath(); + ctx.moveTo(ctx.canvas.clientWidth/2 , 5.5 * ctx.canvas.clientHeight/10); + ctx.lineTo( + (Math.cos( minDeg / (180 / Math.PI) ) * -10) + ctx.canvas.clientWidth/2, + (Math.sin( minDeg / (180 / Math.PI) ) * -10) + 5.5 * ctx.canvas.clientHeight/10 + ); + ctx.stroke(); + + var minDeg = Math.abs((360/12 * (parseInt(timeData.hr)%12)) - 90); + ctx.strokeStyle = 'white'; + ctx.beginPath(); + ctx.moveTo(1.25 * ctx.canvas.clientWidth/10, 8.55 * ctx.canvas.clientHeight/10); + ctx.lineTo( + (Math.cos( minDeg / (180 / Math.PI) ) * 10) + 1.25 * ctx.canvas.clientWidth/10, + (Math.sin( minDeg / (180 / Math.PI) ) * 10) + 8.55 * ctx.canvas.clientHeight/10 + ); + ctx.stroke(); + + }); + + function plotLines(ctx, minute, boost, color){ + + ctx.lineWidth = 1; + ctx.strokeStyle = color; + + var deg = 203 + (134/60 * minute); + + ctx.beginPath(); + ctx.moveTo( + (Math.cos( deg / (180 / Math.PI) ) * 40) + ctx.canvas.clientWidth/2, + (Math.sin( deg / (180 / Math.PI) ) * 40) + 5.5 * ctx.canvas.clientHeight/10 + ); + ctx.lineTo( + (Math.cos( deg / (180 / Math.PI) ) * (50 + boost)) + ctx.canvas.clientWidth/2, + (Math.sin( deg / (180 / Math.PI) ) * (50 + boost)) + 5.5 * ctx.canvas.clientHeight/10 + ); + ctx.stroke(); + + } + + // Send a single message to the Phone + // https://developer.pebble.com/docs/rockyjs/rocky/#postMessage + rocky.postMessage("This arrives on the phone via bluetooth!"); + + +/***/ }), +/* 2 */ +/***/ (function(module, exports) { + + module.exports = _rocky; + + +/***/ }) +/******/ ]); \ No newline at end of file diff --git a/build/src/message_keys.auto.c b/build/src/message_keys.auto.c new file mode 100644 index 0000000..eb5fcff --- /dev/null +++ b/build/src/message_keys.auto.c @@ -0,0 +1,12 @@ + +#include + +// +// AUTOGENERATED BY BUILD +// DO NOT MODIFY - CHANGES WILL BE OVERWRITTEN +// + +uint32_t MESSAGE_KEY_ControlKeyChunk = 3; +uint32_t MESSAGE_KEY_ControlKeyResetComplete = 2; +uint32_t MESSAGE_KEY_ControlKeyResetRequest = 1; +uint32_t MESSAGE_KEY_ControlKeyUnsupportedError = 4; diff --git a/build/src/message_keys.auto.c.14.o b/build/src/message_keys.auto.c.14.o new file mode 100644 index 0000000..f7537e8 Binary files /dev/null and b/build/src/message_keys.auto.c.14.o differ diff --git a/build/src/message_keys.auto.c.23.o b/build/src/message_keys.auto.c.23.o new file mode 100644 index 0000000..f7537e8 Binary files /dev/null and b/build/src/message_keys.auto.c.23.o differ diff --git a/build/src/message_keys.auto.c.32.o b/build/src/message_keys.auto.c.32.o new file mode 100644 index 0000000..f7537e8 Binary files /dev/null and b/build/src/message_keys.auto.c.32.o differ diff --git a/build/src/message_keys.auto.c.41.o b/build/src/message_keys.auto.c.41.o new file mode 100644 index 0000000..f7537e8 Binary files /dev/null and b/build/src/message_keys.auto.c.41.o differ diff --git a/build/webpack/pkjs/webpack.config.js b/build/webpack/pkjs/webpack.config.js new file mode 100644 index 0000000..413d96b --- /dev/null +++ b/build/webpack/pkjs/webpack.config.js @@ -0,0 +1,101 @@ +//////////////////////////////////////////////////////////////////////////////// +// Template vars injected by projess_js.py: + +// boolean +const isSandbox = false; + +// Array with absolute file path strings +const entryFilenames = ["_pkjs_shared_additions.js", +"_pkjs_message_wrapper.js", +"/home/zahkc/Documents/Projects/Pebble/geiger/src/pkjs/index.js"]; + +// folder path string +const outputPath = "build"; + +// file name string +const outputFilename = "pebble-js-app.js"; + +// Array with absolute folder path strings +const resolveRoots = ["/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/common/include", +"/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/common/tools/webpack", +"/home/zahkc/.pebble-sdk/SDKs/current/node_modules", +"/home/zahkc/Documents/Projects/Pebble/geiger/build/js"]; + +// Object, { alias1: 'path1', ... } +const resolveAliases = {"app_package.json": "/home/zahkc/Documents/Projects/Pebble/geiger/package.json"}; + +// null or Object with key 'sourceMapFilename' +const sourceMapConfig = {"sourceMapFilename": "pebble-js-app.js.map"}; + +//////////////////////////////////////////////////////////////////////////////// +// NOTE: Must escape dollar-signs, because this is a Python template! + +const webpack = require('webpack'); + +module.exports = (() => { + // The basic config: + const config = { + entry: entryFilenames, + output: { + path: outputPath, + filename: outputFilename + }, + target: 'node', + resolve: { + root: resolveRoots, + extensions: ['', '.js', '.json'], + alias: resolveAliases + }, + resolveLoader: { + root: resolveRoots + } + }; + + if (sourceMapConfig) { + // Enable webpack's source map output: + config.devtool = 'source-map'; + config.output.sourceMapFilename = sourceMapConfig.sourceMapFilename; + config.output.devtoolModuleFilenameTemplate = '[resource-path]'; + config.output.devtoolFallbackModuleFilenameTemplate = '[resourcePath]?[hash]'; + } + + return config; +})(); + +module.exports.plugins = (() => { + const plugins = [ + // Returns a non-zero exit code when webpack reports an error: + require('webpack-fail-plugin'), + + // Includes _message_keys_wrapper in every build to mimic old loader.js: + new webpack.ProvidePlugin({ require: '_message_key_wrapper' }) + ]; + + if (isSandbox) { + // Prevents using `require('evil_loader!mymodule')` to execute custom + // loader code during the webpack build. + const RestrictResourcePlugin = require('restrict-resource-webpack-plugin'); + const plugin = new RestrictResourcePlugin(/!+/, + 'Custom inline loaders are not permitted.'); + plugins.push(plugin); + } + + return plugins; +})(); + +module.exports.module = { + loaders: (() => { + const loaders = [{'test': /\.json$/, 'loader': 'json-loader'}]; + + if (isSandbox) { + // See restricted-resource-loader.js, prevents loading files outside + // of the project folder, i.e. `require(../../not_your_business)`: + const restrictLoader = { + 'test': /^.*/, 'loader': 'restricted-resource-loader' + }; + loaders.push(restrictLoader); + } + + return loaders; + })() +}; diff --git a/build/webpack/rocky/webpack.config.js b/build/webpack/rocky/webpack.config.js new file mode 100644 index 0000000..1d90dc3 --- /dev/null +++ b/build/webpack/rocky/webpack.config.js @@ -0,0 +1,99 @@ +//////////////////////////////////////////////////////////////////////////////// +// Template vars injected by projess_js.py: + +// boolean +const isSandbox = false; + +// Array with absolute file path strings +const entryFilenames = ["/home/zahkc/Documents/Projects/Pebble/geiger/src/rocky/index.js"]; + +// folder path string +const outputPath = "build/resources"; + +// file name string +const outputFilename = "rocky-app.js"; + +// Array with absolute folder path strings +const resolveRoots = ["/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/common/include", +"/home/zahkc/.pebble-sdk/SDKs/current/sdk-core/pebble/common/tools/webpack", +"/home/zahkc/.pebble-sdk/SDKs/current/node_modules", +"/home/zahkc/Documents/Projects/Pebble/geiger/build/js"]; + +// Object, { alias1: 'path1', ... } +const resolveAliases = {"app_package.json": "/home/zahkc/Documents/Projects/Pebble/geiger/package.json"}; + +// null or Object with key 'sourceMapFilename' +const sourceMapConfig = null; + +//////////////////////////////////////////////////////////////////////////////// +// NOTE: Must escape dollar-signs, because this is a Python template! + +const webpack = require('webpack'); + +module.exports = (() => { + // The basic config: + const config = { + entry: entryFilenames, + output: { + path: outputPath, + filename: outputFilename + }, + target: 'node', + resolve: { + root: resolveRoots, + extensions: ['', '.js', '.json'], + alias: resolveAliases + }, + resolveLoader: { + root: resolveRoots + } + }; + + if (sourceMapConfig) { + // Enable webpack's source map output: + config.devtool = 'source-map'; + config.output.sourceMapFilename = sourceMapConfig.sourceMapFilename; + config.output.devtoolModuleFilenameTemplate = '[resource-path]'; + config.output.devtoolFallbackModuleFilenameTemplate = '[resourcePath]?[hash]'; + } + + return config; +})(); + +module.exports.plugins = (() => { + const plugins = [ + // Returns a non-zero exit code when webpack reports an error: + require('webpack-fail-plugin'), + + // Includes _message_keys_wrapper in every build to mimic old loader.js: + new webpack.ProvidePlugin({ require: '_message_key_wrapper' }) + ]; + + if (isSandbox) { + // Prevents using `require('evil_loader!mymodule')` to execute custom + // loader code during the webpack build. + const RestrictResourcePlugin = require('restrict-resource-webpack-plugin'); + const plugin = new RestrictResourcePlugin(/!+/, + 'Custom inline loaders are not permitted.'); + plugins.push(plugin); + } + + return plugins; +})(); + +module.exports.module = { + loaders: (() => { + const loaders = [{'test': /\.json$/, 'loader': 'json-loader'}]; + + if (isSandbox) { + // See restricted-resource-loader.js, prevents loading files outside + // of the project folder, i.e. `require(../../not_your_business)`: + const restrictLoader = { + 'test': /^.*/, 'loader': 'restricted-resource-loader' + }; + loaders.push(restrictLoader); + } + + return loaders; + })() +}; diff --git a/package.json b/package.json new file mode 100644 index 0000000..b312578 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "Geiger Counter", + "author": "Zahkc", + "version": "1.0.0", + "keywords": ["pebble-app"], + "private": false, + "dependencies": {}, + "pebble": { + "main": { + "rockyjs": "src/rocky/index.js", + "pkjs": "src/pkjs/index.js" + }, + "displayName": "geiger", + "uuid": "a426b361-f97e-4934-8581-4e1cb299b74a", + "projectType": "rocky", + "sdkVersion": "3", + "enableMultiJS": true, + "watchapp": { + "watchface": true + }, + "resources": { + "media": [] + } + } +} diff --git a/src/pkjs/index.js b/src/pkjs/index.js new file mode 100644 index 0000000..a60a7a6 --- /dev/null +++ b/src/pkjs/index.js @@ -0,0 +1,4 @@ +// https://developer.pebble.com/docs/pebblekit-js/Pebble/#on +Pebble.on('message', function(event) { + console.log('Message received from watch:', event.data); +}); diff --git a/src/rocky/index.js b/src/rocky/index.js new file mode 100644 index 0000000..3559bad --- /dev/null +++ b/src/rocky/index.js @@ -0,0 +1,183 @@ +var rocky = require('rocky'); + +// An object to cache our date & time values, +// to minimize computations in the draw handler. +var timeData = { + hr: '', + min: '' +}; + +// Every minute +// https://developer.pebble.com/docs/rockyjs/rocky/#on +rocky.on('minutechange', function(event) { + // Current date/time + // https://developer.pebble.com/docs/rockyjs/Date/ + var d = event.date; + + // Get current time, based on 12h or 24h format (01:00 or 1:00 AM) + timeData.hr = d.toLocaleTimeString().substring(0,2); + timeData.min = d.toLocaleTimeString().substring(3,5); + + + // Force screen redraw + rocky.requestDraw(); +}); + +// Redraw the screen +rocky.on('draw', function(event) { + // Drawing canvas + var ctx = event.context; + + // Clear the canvas + // https://developer.pebble.com/docs/rockyjs/CanvasRenderingContext2D/#Canvas + ctx.fillStyle = 'yellow'; + ctx.fillRect(0, 0, ctx.canvas.clientWidth, ctx.canvas.clientHeight); + + ctx.fillStyle = 'black'; + ctx.rockyFillRadial(ctx.canvas.clientWidth/2, ctx.canvas.clientWidth/2, 0, ctx.canvas.clientWidth/2.125 ,0, 2* Math.PI); + + ctx.fillStyle = 'white'; + ctx.rockyFillRadial(ctx.canvas.clientWidth/2, ctx.canvas.clientWidth/2, 0, ctx.canvas.clientWidth/2.5 ,0, 2* Math.PI); + + ctx.fillStyle = 'black'; + ctx.beginPath(); + ctx.moveTo(4 * ctx.canvas.clientWidth/10, 8 * ctx.canvas.clientHeight/10); + ctx.lineTo(4.5 * ctx.canvas.clientWidth/10, 5.5 * ctx.canvas.clientHeight/10); + ctx.lineTo(5 * ctx.canvas.clientWidth/10, 5.25 * ctx.canvas.clientHeight/10); + ctx.lineTo(5.5 * ctx.canvas.clientWidth/10, 5.5 * ctx.canvas.clientHeight/10); + ctx.lineTo(6 * ctx.canvas.clientWidth/10, 8 * ctx.canvas.clientHeight/10); + ctx.closePath(); + ctx.fill(); + + ctx.fillStyle = 'black'; + ctx.rockyFillRadial(1.25 * ctx.canvas.clientWidth/10, 8.55 * ctx.canvas.clientHeight/10, 0, ctx.canvas.clientWidth/16 ,0, 2* Math.PI); + + ctx.rockyFillRadial(8.5*ctx.canvas.clientWidth/10, 8.75*ctx.canvas.clientHeight/10, 0, ctx.canvas.clientWidth/8 ,0, 2* Math.PI); + ctx.fillStyle = 'yellow'; + ctx.rockyFillRadial(8.5*ctx.canvas.clientWidth/10, 8.75*ctx.canvas.clientHeight/10, 0, ctx.canvas.clientWidth/9 ,0, 2* Math.PI); + ctx.fillStyle = 'black'; + ctx.rockyFillRadial(8.5*ctx.canvas.clientWidth/10, 8.75*ctx.canvas.clientHeight/10, 0, ctx.canvas.clientWidth/10 ,0, 2* Math.PI); + ctx.fillStyle = 'yellow'; + ctx.rockyFillRadial(8.5*ctx.canvas.clientWidth/10, 8.75*ctx.canvas.clientHeight/10, 0, ctx.canvas.clientWidth/32 ,0, 2* Math.PI); + + ctx.beginPath(); + ctx.moveTo(8.5*ctx.canvas.clientWidth/10, 8.75*ctx.canvas.clientHeight/10 + 5); + ctx.lineTo(8 * ctx.canvas.clientWidth/10, 8 * ctx.canvas.clientHeight/10); + ctx.lineTo(9 * ctx.canvas.clientWidth/10, 8 * ctx.canvas.clientHeight/10); + ctx.closePath(); + ctx.fill(); + + ctx.beginPath(); + ctx.moveTo(8.5*ctx.canvas.clientWidth/10, 8.75*ctx.canvas.clientHeight/10); + ctx.lineTo(7.32 * ctx.canvas.clientWidth/10, 8.75 * ctx.canvas.clientHeight/10); + ctx.lineTo(8 * ctx.canvas.clientWidth/10, 9.8 * ctx.canvas.clientHeight/10); + ctx.closePath(); + ctx.fill(); + + ctx.beginPath(); + ctx.moveTo(8.5*ctx.canvas.clientWidth/10, 8.75*ctx.canvas.clientHeight/10); + ctx.lineTo(9.69 * ctx.canvas.clientWidth/10, 8.75 * ctx.canvas.clientHeight/10); + ctx.lineTo(9 * ctx.canvas.clientWidth/10, 9.8 * ctx.canvas.clientHeight/10); + ctx.closePath(); + ctx.fill(); + + + + + ctx.fillStyle = 'black'; + ctx.rockyFillRadial(8.5*ctx.canvas.clientWidth/10, 8.75*ctx.canvas.clientHeight/10, 0, ctx.canvas.clientWidth/48 ,0, 2* Math.PI); + + + ctx.strokeStyle = 'lightgrey'; + ctx.beginPath(); + ctx.arc(ctx.canvas.clientWidth/2 , 5.5 * ctx.canvas.clientHeight/10, 50, 1.125 * Math.PI, 1.875 * Math.PI); + ctx.stroke(); + ctx.beginPath(); + ctx.arc(ctx.canvas.clientWidth/2 , 5.5 * ctx.canvas.clientHeight/10, 40, 1.125 * Math.PI, 1.875 * Math.PI); + ctx.stroke(); + + ctx.font = '14px bold Gothic'; + ctx.fillText('0', 1.5 * ctx.canvas.clientWidth/10, 3.5 * ctx.canvas.clientWidth/10) + ctx.fillText('15', 2.75 * ctx.canvas.clientWidth/10 - 5, 2 * ctx.canvas.clientWidth/10) + ctx.fillText('30', 4.75 * ctx.canvas.clientWidth/10 - 3, 1.5 * ctx.canvas.clientWidth/10) + ctx.fillText('45', 6.75 * ctx.canvas.clientWidth/10, 2 * ctx.canvas.clientWidth/10) + ctx.fillText('60', 8 * ctx.canvas.clientWidth/10, 3.5 * ctx.canvas.clientWidth/10) + + + ctx.fillText('12', 0.8 * ctx.canvas.clientWidth/10, 7 * ctx.canvas.clientHeight/10); + ctx.fillText('3', 2 * ctx.canvas.clientWidth/10, 8 * ctx.canvas.clientHeight/10); + ctx.fillText('6', 1 * ctx.canvas.clientWidth/10, 9 * ctx.canvas.clientHeight/10); + ctx.fillText('9' , 0 * ctx.canvas.clientWidth/10, 8 * ctx.canvas.clientHeight/10); + + plotLines(ctx, 0, 5, 'lightgrey'); + plotLines(ctx, 5, 0, 'lightgrey'); + plotLines(ctx, 10, 0, 'lightgrey'); + plotLines(ctx, 15, 5, 'lightgrey'); + plotLines(ctx, 20, 0, 'lightgrey'); + plotLines(ctx, 25, 0, 'lightgrey'); + plotLines(ctx, 30, 5, 'lightgrey'); + plotLines(ctx, 35, 0, 'lightgrey'); + plotLines(ctx, 40, 0, 'lightgrey'); + plotLines(ctx, 45, 5, 'red'); + plotLines(ctx, 50, 0, 'red'); + plotLines(ctx, 55, 0, 'red'); + plotLines(ctx, 60, 5, 'red'); + + ctx.font = '18px bold Gothic' + ctx.fillText('r/hr', 4 * ctx.canvas.clientWidth/10, 3.5 * ctx.canvas.clientHeight/10); + + ctx.lineWidth = 1; + ctx.strokeStyle = "darkgrey"; + ctx.beginPath(); + ctx.moveTo(ctx.canvas.clientWidth/2 , 5.5 * ctx.canvas.clientHeight/10); + var minDeg = 203 + (134/60 * parseInt(timeData.min)); + ctx.lineTo( + (Math.cos( minDeg / (180 / Math.PI) ) * 48) + ctx.canvas.clientWidth/2, + (Math.sin( minDeg / (180 / Math.PI) ) * 48) + 5.5 * ctx.canvas.clientHeight/10 + ); + ctx.stroke(); + + ctx.strokeStyle = 'darkcandyapplered'; + ctx.beginPath(); + ctx.moveTo(ctx.canvas.clientWidth/2 , 5.5 * ctx.canvas.clientHeight/10); + ctx.lineTo( + (Math.cos( minDeg / (180 / Math.PI) ) * -10) + ctx.canvas.clientWidth/2, + (Math.sin( minDeg / (180 / Math.PI) ) * -10) + 5.5 * ctx.canvas.clientHeight/10 + ); + ctx.stroke(); + + var minDeg = Math.abs((360/12 * (parseInt(timeData.hr)%12)) - 90); + ctx.strokeStyle = 'white'; + ctx.beginPath(); + ctx.moveTo(1.25 * ctx.canvas.clientWidth/10, 8.55 * ctx.canvas.clientHeight/10); + ctx.lineTo( + (Math.cos( minDeg / (180 / Math.PI) ) * 10) + 1.25 * ctx.canvas.clientWidth/10, + (Math.sin( minDeg / (180 / Math.PI) ) * 10) + 8.55 * ctx.canvas.clientHeight/10 + ); + ctx.stroke(); + +}); + +function plotLines(ctx, minute, boost, color){ + + ctx.lineWidth = 1; + ctx.strokeStyle = color; + + var deg = 203 + (134/60 * minute); + + ctx.beginPath(); + ctx.moveTo( + (Math.cos( deg / (180 / Math.PI) ) * 40) + ctx.canvas.clientWidth/2, + (Math.sin( deg / (180 / Math.PI) ) * 40) + 5.5 * ctx.canvas.clientHeight/10 + ); + ctx.lineTo( + (Math.cos( deg / (180 / Math.PI) ) * (50 + boost)) + ctx.canvas.clientWidth/2, + (Math.sin( deg / (180 / Math.PI) ) * (50 + boost)) + 5.5 * ctx.canvas.clientHeight/10 + ); + ctx.stroke(); + +} + +// Send a single message to the Phone +// https://developer.pebble.com/docs/rockyjs/rocky/#postMessage +rocky.postMessage("This arrives on the phone via bluetooth!"); diff --git a/wscript b/wscript new file mode 100644 index 0000000..e6b347a --- /dev/null +++ b/wscript @@ -0,0 +1,30 @@ +# +# This file is the default set of rules to compile a Pebble application. +# +# Feel free to customize this to your needs. +# +top = '.' +out = 'build' + + +def options(ctx): + ctx.load('pebble_sdk') + + +def configure(ctx): + """ + This method is used to configure your build. ctx.load(`pebble_sdk`) automatically configures + a build for each valid platform in `targetPlatforms`. Platform-specific configuration: add your + change after calling ctx.load('pebble_sdk') and make sure to set the correct environment first. + Universal configuration: add your change prior to calling ctx.load('pebble_sdk'). + """ + ctx.load('pebble_sdk') + + +def build(ctx): + ctx.load('pebble_sdk') + ctx.pbl_bundle(js=ctx.path.ant_glob(['src/pkjs/**/*.js', + 'src/pkjs/**/*.json', + 'src/common/**/*.js']), + js_entry_file='src/pkjs/index.js', + bin_type='rocky')