[FL-3893] JS modules (#3841)
* feat: backport js_gpio from unleashed
* feat: backport js_keyboard, TextInputModel::minimum_length from unleashed
* fix: api version inconsistency
* style: js_gpio
* build: fix submodule ._ .
* refactor: js_gpio
* docs: type declarations for gpio
* feat: gpio interrupts
* fix: js_gpio freeing, resetting and minor stylistic changes
* style: js_gpio
* style: mlib array, fixme's
* feat: js_gpio adc
* feat: js_event_loop
* docs: js_event_loop
* feat: js_event_loop subscription cancellation
* feat: js_event_loop + js_gpio integration
* fix: js_event_loop memory leak
* feat: stop event loop on back button
* test: js: basic, math, event_loop
* feat: js_event_loop queue
* feat: js linkage to previously loaded plugins
* build: fix ci errors
* feat: js module ordered teardown
* feat: js_gui_defer_free
* feat: basic hourglass view
* style: JS ASS (Argument Schema for Scripts)
* fix: js_event_loop mem leaks and lifetime problems
* fix: crashing test and pvs false positives
* feat: mjs custom obj destructors, gui submenu view
* refactor: yank js_gui_defer_free (yuck)
* refactor: maybe_unsubscribe
* empty_screen, docs, typing fix-ups
* docs: navigation event & demo
* feat: submenu setHeader
* feat: text_input
* feat: text_box
* docs: text_box availability
* ci: silence irrelevant pvs low priority warning
* style: use furistring
* style: _get_at -> _safe_get
* fix: built-in module name assignment
* feat: js_dialog; refactor, optimize: js_gui
* docs: js_gui
* ci: silence pvs warning: Memory allocation is infallible
* style: fix storage spelling
* feat: foreign pointer signature checks
* feat: js_storage
* docs: js_storage
* fix: my unit test was breaking other tests ;_;
* ci: fix ci?
* Make doxygen happy
* docs: flipper, math, notification, global
* style: review suggestions
* style: review fixups
* fix: badusb demo script
* docs: badusb
* ci: add nofl
* ci: make linter happy
* Bump api version
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2024-10-14 21:42:11 +03:00
|
|
|
let eventLoop = require("event_loop");
|
|
|
|
|
let gpio = require("gpio");
|
|
|
|
|
|
|
|
|
|
// initialize pins
|
|
|
|
|
let led = gpio.get("pc3"); // same as `gpio.get(7)`
|
2025-02-13 12:50:38 +04:00
|
|
|
let led2 = gpio.get("pa7"); // same as `gpio.get(2)`
|
[FL-3893] JS modules (#3841)
* feat: backport js_gpio from unleashed
* feat: backport js_keyboard, TextInputModel::minimum_length from unleashed
* fix: api version inconsistency
* style: js_gpio
* build: fix submodule ._ .
* refactor: js_gpio
* docs: type declarations for gpio
* feat: gpio interrupts
* fix: js_gpio freeing, resetting and minor stylistic changes
* style: js_gpio
* style: mlib array, fixme's
* feat: js_gpio adc
* feat: js_event_loop
* docs: js_event_loop
* feat: js_event_loop subscription cancellation
* feat: js_event_loop + js_gpio integration
* fix: js_event_loop memory leak
* feat: stop event loop on back button
* test: js: basic, math, event_loop
* feat: js_event_loop queue
* feat: js linkage to previously loaded plugins
* build: fix ci errors
* feat: js module ordered teardown
* feat: js_gui_defer_free
* feat: basic hourglass view
* style: JS ASS (Argument Schema for Scripts)
* fix: js_event_loop mem leaks and lifetime problems
* fix: crashing test and pvs false positives
* feat: mjs custom obj destructors, gui submenu view
* refactor: yank js_gui_defer_free (yuck)
* refactor: maybe_unsubscribe
* empty_screen, docs, typing fix-ups
* docs: navigation event & demo
* feat: submenu setHeader
* feat: text_input
* feat: text_box
* docs: text_box availability
* ci: silence irrelevant pvs low priority warning
* style: use furistring
* style: _get_at -> _safe_get
* fix: built-in module name assignment
* feat: js_dialog; refactor, optimize: js_gui
* docs: js_gui
* ci: silence pvs warning: Memory allocation is infallible
* style: fix storage spelling
* feat: foreign pointer signature checks
* feat: js_storage
* docs: js_storage
* fix: my unit test was breaking other tests ;_;
* ci: fix ci?
* Make doxygen happy
* docs: flipper, math, notification, global
* style: review suggestions
* style: review fixups
* fix: badusb demo script
* docs: badusb
* ci: add nofl
* ci: make linter happy
* Bump api version
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2024-10-14 21:42:11 +03:00
|
|
|
let pot = gpio.get("pc0"); // same as `gpio.get(16)`
|
|
|
|
|
let button = gpio.get("pc1"); // same as `gpio.get(15)`
|
|
|
|
|
led.init({ direction: "out", outMode: "push_pull" });
|
|
|
|
|
pot.init({ direction: "in", inMode: "analog" });
|
|
|
|
|
button.init({ direction: "in", pull: "up", inMode: "interrupt", edge: "falling" });
|
|
|
|
|
|
|
|
|
|
// blink led
|
|
|
|
|
print("Commencing blinking (PC3)");
|
|
|
|
|
eventLoop.subscribe(eventLoop.timer("periodic", 1000), function (_, _item, led, state) {
|
|
|
|
|
led.write(state);
|
|
|
|
|
return [led, !state];
|
|
|
|
|
}, led, true);
|
|
|
|
|
|
2025-02-13 12:50:38 +04:00
|
|
|
// cycle led pwm
|
|
|
|
|
print("Commencing PWM (PA7)");
|
|
|
|
|
eventLoop.subscribe(eventLoop.timer("periodic", 10), function (_, _item, led2, state) {
|
|
|
|
|
led2.pwmWrite(10000, state);
|
|
|
|
|
return [led2, (state + 1) % 101];
|
|
|
|
|
}, led2, 0);
|
|
|
|
|
|
[FL-3893] JS modules (#3841)
* feat: backport js_gpio from unleashed
* feat: backport js_keyboard, TextInputModel::minimum_length from unleashed
* fix: api version inconsistency
* style: js_gpio
* build: fix submodule ._ .
* refactor: js_gpio
* docs: type declarations for gpio
* feat: gpio interrupts
* fix: js_gpio freeing, resetting and minor stylistic changes
* style: js_gpio
* style: mlib array, fixme's
* feat: js_gpio adc
* feat: js_event_loop
* docs: js_event_loop
* feat: js_event_loop subscription cancellation
* feat: js_event_loop + js_gpio integration
* fix: js_event_loop memory leak
* feat: stop event loop on back button
* test: js: basic, math, event_loop
* feat: js_event_loop queue
* feat: js linkage to previously loaded plugins
* build: fix ci errors
* feat: js module ordered teardown
* feat: js_gui_defer_free
* feat: basic hourglass view
* style: JS ASS (Argument Schema for Scripts)
* fix: js_event_loop mem leaks and lifetime problems
* fix: crashing test and pvs false positives
* feat: mjs custom obj destructors, gui submenu view
* refactor: yank js_gui_defer_free (yuck)
* refactor: maybe_unsubscribe
* empty_screen, docs, typing fix-ups
* docs: navigation event & demo
* feat: submenu setHeader
* feat: text_input
* feat: text_box
* docs: text_box availability
* ci: silence irrelevant pvs low priority warning
* style: use furistring
* style: _get_at -> _safe_get
* fix: built-in module name assignment
* feat: js_dialog; refactor, optimize: js_gui
* docs: js_gui
* ci: silence pvs warning: Memory allocation is infallible
* style: fix storage spelling
* feat: foreign pointer signature checks
* feat: js_storage
* docs: js_storage
* fix: my unit test was breaking other tests ;_;
* ci: fix ci?
* Make doxygen happy
* docs: flipper, math, notification, global
* style: review suggestions
* style: review fixups
* fix: badusb demo script
* docs: badusb
* ci: add nofl
* ci: make linter happy
* Bump api version
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2024-10-14 21:42:11 +03:00
|
|
|
// read potentiometer when button is pressed
|
|
|
|
|
print("Press the button (PC1)");
|
|
|
|
|
eventLoop.subscribe(button.interrupt(), function (_, _item, pot) {
|
2024-10-31 05:42:57 +03:00
|
|
|
print("PC0 is at", pot.readAnalog(), "mV");
|
[FL-3893] JS modules (#3841)
* feat: backport js_gpio from unleashed
* feat: backport js_keyboard, TextInputModel::minimum_length from unleashed
* fix: api version inconsistency
* style: js_gpio
* build: fix submodule ._ .
* refactor: js_gpio
* docs: type declarations for gpio
* feat: gpio interrupts
* fix: js_gpio freeing, resetting and minor stylistic changes
* style: js_gpio
* style: mlib array, fixme's
* feat: js_gpio adc
* feat: js_event_loop
* docs: js_event_loop
* feat: js_event_loop subscription cancellation
* feat: js_event_loop + js_gpio integration
* fix: js_event_loop memory leak
* feat: stop event loop on back button
* test: js: basic, math, event_loop
* feat: js_event_loop queue
* feat: js linkage to previously loaded plugins
* build: fix ci errors
* feat: js module ordered teardown
* feat: js_gui_defer_free
* feat: basic hourglass view
* style: JS ASS (Argument Schema for Scripts)
* fix: js_event_loop mem leaks and lifetime problems
* fix: crashing test and pvs false positives
* feat: mjs custom obj destructors, gui submenu view
* refactor: yank js_gui_defer_free (yuck)
* refactor: maybe_unsubscribe
* empty_screen, docs, typing fix-ups
* docs: navigation event & demo
* feat: submenu setHeader
* feat: text_input
* feat: text_box
* docs: text_box availability
* ci: silence irrelevant pvs low priority warning
* style: use furistring
* style: _get_at -> _safe_get
* fix: built-in module name assignment
* feat: js_dialog; refactor, optimize: js_gui
* docs: js_gui
* ci: silence pvs warning: Memory allocation is infallible
* style: fix storage spelling
* feat: foreign pointer signature checks
* feat: js_storage
* docs: js_storage
* fix: my unit test was breaking other tests ;_;
* ci: fix ci?
* Make doxygen happy
* docs: flipper, math, notification, global
* style: review suggestions
* style: review fixups
* fix: badusb demo script
* docs: badusb
* ci: add nofl
* ci: make linter happy
* Bump api version
Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
2024-10-14 21:42:11 +03:00
|
|
|
}, pot);
|
|
|
|
|
|
|
|
|
|
// the program will just exit unless this is here
|
|
|
|
|
eventLoop.run();
|
|
|
|
|
|
|
|
|
|
// possible pins https://docs.flipper.net/gpio-and-modules#miFsS
|
|
|
|
|
// "PA7" aka 2
|
|
|
|
|
// "PA6" aka 3
|
|
|
|
|
// "PA4" aka 4
|
|
|
|
|
// "PB3" aka 5
|
|
|
|
|
// "PB2" aka 6
|
|
|
|
|
// "PC3" aka 7
|
|
|
|
|
// "PA14" aka 10
|
|
|
|
|
// "PA13" aka 12
|
|
|
|
|
// "PB6" aka 13
|
|
|
|
|
// "PB7" aka 14
|
|
|
|
|
// "PC1" aka 15
|
|
|
|
|
// "PC0" aka 16
|
|
|
|
|
// "PB14" aka 17
|
|
|
|
|
|
|
|
|
|
// possible modes
|
|
|
|
|
// { direction: "out", outMode: "push_pull" }
|
|
|
|
|
// { direction: "out", outMode: "open_drain" }
|
|
|
|
|
// { direction: "out", outMode: "push_pull", altFn: true }
|
|
|
|
|
// { direction: "out", outMode: "open_drain", altFn: true }
|
|
|
|
|
// { direction: "in", inMode: "analog" }
|
|
|
|
|
// { direction: "in", inMode: "plain_digital" }
|
|
|
|
|
// { direction: "in", inMode: "interrupt", edge: "rising" }
|
|
|
|
|
// { direction: "in", inMode: "interrupt", edge: "falling" }
|
|
|
|
|
// { direction: "in", inMode: "interrupt", edge: "both" }
|
|
|
|
|
// { direction: "in", inMode: "event", edge: "rising" }
|
|
|
|
|
// { direction: "in", inMode: "event", edge: "falling" }
|
|
|
|
|
// { direction: "in", inMode: "event", edge: "both" }
|
|
|
|
|
// all variants support an optional `pull` field which can either be undefined,
|
|
|
|
|
// "up" or "down"
|