From 61b5b70c8cb96908309ba2299b7335966d54e420 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Mon, 6 Apr 2026 15:09:09 +0300 Subject: initial --- .gitignore | 27 +++++++++++++++++++++++++ package.json | 32 +++++++++++++++++++++++++++++ src/c/fastforge.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ wscript | 54 +++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 173 insertions(+) create mode 100644 .gitignore create mode 100644 package.json create mode 100644 src/c/fastforge.c create mode 100644 wscript diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b59b919 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Pebble SDK build artifacts +build/ +*.pbw +*.elf +*.bin +*.raw.bin +*.map +*.o + +# Waf build system temporary files +.lock-waf* +.wafpickle* +config.log + +# Auto-generated files +src/message_keys.auto.c +build/src/message_keys.auto.c +build/include/message_keys.auto.h +build/*/resource_ids.auto.* +build/*/appinfo.auto.c +build/*/pebble_app.ld.auto +build/*/app_resources.pbpack +build/*/system_resources.resball + +# Logs and locks +*.log +.lock-* diff --git a/package.json b/package.json new file mode 100644 index 0000000..2e2224a --- /dev/null +++ b/package.json @@ -0,0 +1,32 @@ +{ + "name": "fastforge", + "author": "MakeAwesomeHappen", + "version": "1.0.0", + "keywords": ["pebble-app"], + "private": true, + "dependencies": {}, + "pebble": { + "displayName": "fastforge", + "uuid": "dee8dfc5-60b2-4c77-9315-08d96d7e4e38", + "sdkVersion": "3", + "enableMultiJS": true, + "targetPlatforms": [ + "aplite", + "basalt", + "chalk", + "diorite", + "emery", + "flint", + "gabbro" + ], + "watchapp": { + "watchface": false + }, + "messageKeys": [ + "dummy" + ], + "resources": { + "media": [] + } + } +} diff --git a/src/c/fastforge.c b/src/c/fastforge.c new file mode 100644 index 0000000..8db0492 --- /dev/null +++ b/src/c/fastforge.c @@ -0,0 +1,60 @@ +#include + +static Window *s_window; +static TextLayer *s_text_layer; + +static void prv_select_click_handler(ClickRecognizerRef recognizer, void *context) { + text_layer_set_text(s_text_layer, "Select"); +} + +static void prv_up_click_handler(ClickRecognizerRef recognizer, void *context) { + text_layer_set_text(s_text_layer, "Up"); +} + +static void prv_down_click_handler(ClickRecognizerRef recognizer, void *context) { + text_layer_set_text(s_text_layer, "Down"); +} + +static void prv_click_config_provider(void *context) { + window_single_click_subscribe(BUTTON_ID_SELECT, prv_select_click_handler); + window_single_click_subscribe(BUTTON_ID_UP, prv_up_click_handler); + window_single_click_subscribe(BUTTON_ID_DOWN, prv_down_click_handler); +} + +static void prv_window_load(Window *window) { + Layer *window_layer = window_get_root_layer(window); + GRect bounds = layer_get_bounds(window_layer); + + s_text_layer = text_layer_create(GRect(0, 72, bounds.size.w, 20)); + text_layer_set_text(s_text_layer, "Press a button"); + text_layer_set_text_alignment(s_text_layer, GTextAlignmentCenter); + layer_add_child(window_layer, text_layer_get_layer(s_text_layer)); +} + +static void prv_window_unload(Window *window) { + text_layer_destroy(s_text_layer); +} + +static void prv_init(void) { + s_window = window_create(); + window_set_click_config_provider(s_window, prv_click_config_provider); + window_set_window_handlers(s_window, (WindowHandlers) { + .load = prv_window_load, + .unload = prv_window_unload, + }); + const bool animated = true; + window_stack_push(s_window, animated); +} + +static void prv_deinit(void) { + window_destroy(s_window); +} + +int main(void) { + prv_init(); + + APP_LOG(APP_LOG_LEVEL_DEBUG, "Done initializing, pushed window: %p", s_window); + + app_event_loop(); + prv_deinit(); +} diff --git a/wscript b/wscript new file mode 100644 index 0000000..5238bc8 --- /dev/null +++ b/wscript @@ -0,0 +1,54 @@ +# +# This file is the default set of rules to compile a Pebble application. +# +# Feel free to customize this to your needs. +# +import os.path + +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') + + build_worker = os.path.exists('worker_src') + binaries = [] + + cached_env = ctx.env + for platform in ctx.env.TARGET_PLATFORMS: + ctx.env = ctx.all_envs[platform] + ctx.set_group(ctx.env.PLATFORM_NAME) + app_elf = '{}/pebble-app.elf'.format(ctx.env.BUILD_DIR) + ctx.pbl_build(source=ctx.path.ant_glob('src/c/**/*.c'), target=app_elf, bin_type='app') + + if build_worker: + worker_elf = '{}/pebble-worker.elf'.format(ctx.env.BUILD_DIR) + binaries.append({'platform': platform, 'app_elf': app_elf, 'worker_elf': worker_elf}) + ctx.pbl_build(source=ctx.path.ant_glob('worker_src/c/**/*.c'), + target=worker_elf, + bin_type='worker') + else: + binaries.append({'platform': platform, 'app_elf': app_elf}) + ctx.env = cached_env + + ctx.set_group('bundle') + ctx.pbl_bundle(binaries=binaries, + js=ctx.path.ant_glob(['src/pkjs/**/*.js', + 'src/pkjs/**/*.json', + 'src/common/**/*.js']), + js_entry_file='src/pkjs/index.js') -- cgit v1.2.3