Oliver Fabel 1 год назад
Родитель
Сommit
e7bdb9d2ba

+ 14 - 8
CHANGELOG.md

@@ -7,20 +7,26 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
 
 ## [Unreleased]
 
+## [0.2.0-alpha.1] - 2024-04-03
+
 ### Added
 
-* support external imports
-* `time` module support
-* `random` module support
-* basic `flipperzero` module
-* some test python scripts
+* Support for external imports
+* Python `time` module support
+* Python `random` module support
+* Basic `flipperzero` module with support for:
+  * Vibration
+  * LED
+  * Backlight
+* Some test Python scripts
 
 ## [0.1.0-alpha.1] - 2024-04-01
 
 ### Added
 
-* basic build setup
-* minimal working example
+* Basic build setup
+* Minimal working example
 
-[unreleased]: https://github.com/ofabel/mp-flipper/compare/v0.1.0-alpha.1...HEAD
+[Unreleased]: https://github.com/ofabel/mp-flipper/compare/v0.2.0-alpha.1...HEAD
+[0.2.0-alpha.1]: https://github.com/ofabel/mp-flipper/releases/tag/v0.2.0-alpha.1
 [0.1.0-alpha.1]: https://github.com/ofabel/mp-flipper/releases/tag/v0.1.0-alpha.1

+ 18 - 1
examples/flipperzero_light_test.py

@@ -3,7 +3,7 @@ import flipperzero
 
 is_red = True
 
-for i in range(0, 20, 1):
+for i in range(0, 25, 1):
   brightness = i * 10
   is_red = not is_red
 
@@ -13,3 +13,20 @@ for i in range(0, 20, 1):
   flipperzero.light_set(flipperzero.LIGHT_BACKLIGHT, brightness)
 
   time.sleep_ms(200)
+
+flipperzero.light_set(flipperzero.LIGHT_RED, 0)
+flipperzero.light_set(flipperzero.LIGHT_GREEN, 0)
+flipperzero.light_set(flipperzero.LIGHT_BLUE, 0)
+flipperzero.light_set(flipperzero.LIGHT_BACKLIGHT, 0)
+
+time.sleep_ms(500)
+
+flipperzero.light_blink_start(flipperzero.LIGHT_RED, 200, 100, 200)
+
+time.sleep(1)
+
+flipperzero.light_blink_set_color(flipperzero.LIGHT_BLUE)
+
+time.sleep(1)
+
+flipperzero.light_blink_stop()

+ 30 - 8
lib/micropython-port/_modflipperzero.c

@@ -4,17 +4,39 @@
 
 #include "_modflipperzero.h"
 
-inline void mp_flipper_vibro(bool state) {
-    furi_hal_vibro_on(state);
+static Light decode_light(uint8_t value) {
+    Light light = 0;
+
+    light += value & MP_FLIPPER_LED_RED ? LightRed : 0;
+    light += value & MP_FLIPPER_LED_GREEN ? LightGreen : 0;
+    light += value & MP_FLIPPER_LED_BLUE ? LightBlue : 0;
+    light += value & MP_FLIPPER_LED_BACKLIGHT ? LightBacklight : 0;
+
+    return light;
 }
 
 inline void mp_flipper_light_set(uint8_t raw_light, uint8_t brightness) {
-    Light light = 0;
-
-    light += raw_light & MP_FLIPPER_LED_RED ? LightRed : 0;
-    light += raw_light & MP_FLIPPER_LED_GREEN ? LightGreen : 0;
-    light += raw_light & MP_FLIPPER_LED_BLUE ? LightBlue : 0;
-    light += raw_light & MP_FLIPPER_LED_BACKLIGHT ? LightBacklight : 0;
+    Light light = decode_light(raw_light);
 
     furi_hal_light_set(light, brightness);
 }
+
+inline void mp_flipper_light_blink_start(uint8_t raw_light, uint8_t brightness, uint16_t on_time, uint16_t period) {
+    Light light = decode_light(raw_light);
+
+    furi_hal_light_blink_start(light, brightness, on_time, period);
+}
+
+inline void mp_flipper_light_blink_set_color(uint8_t raw_light) {
+    Light light = decode_light(raw_light);
+
+    furi_hal_light_blink_set_color(light);
+}
+
+inline void mp_flipper_light_blink_stop() {
+    furi_hal_light_blink_stop();
+}
+
+inline void mp_flipper_vibro(bool state) {
+    furi_hal_vibro_on(state);
+}

+ 5 - 2
lib/micropython-port/_modflipperzero.h

@@ -3,11 +3,14 @@
 #include <stdint.h>
 #include <stdbool.h>
 
-void mp_flipper_vibro(bool state);
-
 #define MP_FLIPPER_LED_RED (1 << 0)
 #define MP_FLIPPER_LED_GREEN (1 << 1)
 #define MP_FLIPPER_LED_BLUE (1 << 2)
 #define MP_FLIPPER_LED_BACKLIGHT (1 << 3)
 
 void mp_flipper_light_set(uint8_t raw_light, uint8_t brightness);
+void mp_flipper_light_blink_start(uint8_t raw_light, uint8_t brightness, uint16_t on_time, uint16_t period);
+void mp_flipper_light_blink_set_color(uint8_t raw_light);
+void mp_flipper_light_blink_stop();
+
+void mp_flipper_vibro(bool state);

+ 37 - 2
lib/micropython-port/modflipperzero.c

@@ -12,16 +12,48 @@ static mp_obj_t flipperzero_light_set(mp_obj_t light_obj, mp_obj_t brightness_ob
 
     mp_flipper_light_set(light, brightness);
 
-    return mp_const_true;
+    return mp_const_none;
 }
 static MP_DEFINE_CONST_FUN_OBJ_2(flipperzero_light_set_obj, flipperzero_light_set);
 
+static mp_obj_t flipperzero_light_blink_start(size_t n_args, const mp_obj_t* args) {
+    if(n_args != 4) {
+        return mp_const_none;
+    }
+
+    mp_int_t light = mp_obj_get_int(args[0]);
+    mp_int_t brightness = mp_obj_get_int(args[1]);
+    mp_int_t on_time = mp_obj_get_int(args[2]);
+    mp_int_t period = mp_obj_get_int(args[3]);
+
+    mp_flipper_light_blink_start(light, brightness, on_time, period);
+
+    return mp_const_none;
+}
+static MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(flipperzero_light_blink_start_obj, 4, 4, flipperzero_light_blink_start);
+
+static mp_obj_t flipperzero_light_blink_stop() {
+    mp_flipper_light_blink_stop();
+
+    return mp_const_none;
+}
+static MP_DEFINE_CONST_FUN_OBJ_0(flipperzero_light_blink_stop_obj, flipperzero_light_blink_stop);
+
+static mp_obj_t flipperzero_light_blink_set_color(mp_obj_t light_obj) {
+    mp_int_t light = mp_obj_get_int(light_obj);
+
+    mp_flipper_light_blink_set_color(light);
+
+    return mp_const_none;
+}
+static MP_DEFINE_CONST_FUN_OBJ_1(flipperzero_light_blink_set_color_obj, flipperzero_light_blink_set_color);
+
 static mp_obj_t flipperzero_vibro_set(mp_obj_t state) {
     bool state_bool = mp_obj_is_true(state);
 
     mp_flipper_vibro(state_bool);
 
-    return mp_const_true;
+    return state_bool ? mp_const_true : mp_const_false;
 }
 static MP_DEFINE_CONST_FUN_OBJ_1(flipperzero_vibro_set_obj, flipperzero_vibro_set);
 
@@ -32,6 +64,9 @@ static const mp_rom_map_elem_t flipperzero_module_globals_table[] = {
     {MP_ROM_QSTR(MP_QSTR_LIGHT_BLUE), MP_ROM_INT(MP_FLIPPER_LED_BLUE)},
     {MP_ROM_QSTR(MP_QSTR_LIGHT_BACKLIGHT), MP_ROM_INT(MP_FLIPPER_LED_BACKLIGHT)},
     {MP_ROM_QSTR(MP_QSTR_light_set), MP_ROM_PTR(&flipperzero_light_set_obj)},
+    {MP_ROM_QSTR(MP_QSTR_light_blink_start), MP_ROM_PTR(&flipperzero_light_blink_start_obj)},
+    {MP_ROM_QSTR(MP_QSTR_light_blink_set_color), MP_ROM_PTR(&flipperzero_light_blink_set_color_obj)},
+    {MP_ROM_QSTR(MP_QSTR_light_blink_stop), MP_ROM_PTR(&flipperzero_light_blink_stop_obj)},
     {MP_ROM_QSTR(MP_QSTR_vibro_set), MP_ROM_PTR(&flipperzero_vibro_set_obj)},
 };
 static MP_DEFINE_CONST_DICT(flipperzero_module_globals, flipperzero_module_globals_table);