Преглед изворни кода

add led and backlight example

Oliver Fabel пре 1 година
родитељ
комит
f36b3e9317

+ 15 - 0
examples/flipperzero_light_test.py

@@ -0,0 +1,15 @@
+import time
+import flipperzero
+
+is_red = True
+
+for i in range(0, 20, 1):
+  brightness = i * 10
+  is_red = not is_red
+
+  flipperzero.light_set(flipperzero.LIGHT_RED, brightness if is_red else 0)
+  flipperzero.light_set(flipperzero.LIGHT_GREEN, brightness if not is_red else 0)
+  flipperzero.light_set(flipperzero.LIGHT_BLUE, 0)
+  flipperzero.light_set(flipperzero.LIGHT_BACKLIGHT, brightness)
+
+  time.sleep_ms(200)

+ 0 - 8
examples/flipperzero_test.py

@@ -1,8 +0,0 @@
-import time
-import flipperzero
-
-flipperzero.vibro(True)
-
-time.sleep_ms(125)
-
-flipperzero.vibro(False)

+ 8 - 0
examples/flipperzero_vibro_test.py

@@ -0,0 +1,8 @@
+import time
+import flipperzero
+
+flipperzero.vibro_set(True)
+
+time.sleep_ms(125)
+
+flipperzero.vibro_set(False)

+ 14 - 1
lib/micropython-port/_modflipperzero.c

@@ -2,6 +2,19 @@
 
 #include <furi_hal.h>
 
-void mp_flipper_vibro(bool state) {
+#include "_modflipperzero.h"
+
+inline void mp_flipper_vibro(bool state) {
     furi_hal_vibro_on(state);
 }
+
+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;
+
+    furi_hal_light_set(light, brightness);
+}

+ 8 - 0
lib/micropython-port/_modflipperzero.h

@@ -1,5 +1,13 @@
 #pragma once
 
+#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);

+ 24 - 4
lib/micropython-port/modflipperzero.c

@@ -1,18 +1,38 @@
+#include <stdio.h>
+
+#include <py/objint.h>
 #include <py/obj.h>
 #include <py/runtime.h>
 
 #include "_modflipperzero.h"
 
-static mp_obj_t flipperzero_vibro(mp_obj_t state) {
-    mp_flipper_vibro(state == mp_const_true);
+static mp_obj_t flipperzero_light_set(mp_obj_t light_obj, mp_obj_t brightness_obj) {
+    mp_int_t light = mp_obj_get_int(light_obj);
+    mp_int_t brightness = mp_obj_get_int(brightness_obj);
+
+    mp_flipper_light_set(light, brightness);
+
+    return mp_const_true;
+}
+static MP_DEFINE_CONST_FUN_OBJ_2(flipperzero_light_set_obj, flipperzero_light_set);
+
+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;
 }
-static MP_DEFINE_CONST_FUN_OBJ_1(flipperzero_vibro_obj, flipperzero_vibro);
+static MP_DEFINE_CONST_FUN_OBJ_1(flipperzero_vibro_set_obj, flipperzero_vibro_set);
 
 static const mp_rom_map_elem_t flipperzero_module_globals_table[] = {
     {MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_flipperzero)},
-    {MP_ROM_QSTR(MP_QSTR_vibro), MP_ROM_PTR(&flipperzero_vibro_obj)},
+    {MP_ROM_QSTR(MP_QSTR_LIGHT_RED), MP_ROM_INT(MP_FLIPPER_LED_RED)},
+    {MP_ROM_QSTR(MP_QSTR_LIGHT_GREEN), MP_ROM_INT(MP_FLIPPER_LED_GREEN)},
+    {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_vibro_set), MP_ROM_PTR(&flipperzero_vibro_set_obj)},
 };
 static MP_DEFINE_CONST_DICT(flipperzero_module_globals, flipperzero_module_globals_table);
 

+ 2 - 2
mpconfigport.h

@@ -2,8 +2,8 @@
 
 // Type definitions for the specific machine
 
-typedef intptr_t mp_int_t; // must be pointer size
-typedef uintptr_t mp_uint_t; // must be pointer size
+typedef int32_t mp_int_t; // must be pointer size
+typedef uint32_t mp_uint_t; // must be pointer size
 typedef long mp_off_t;
 
 // Need to provide a declaration/definition of alloca()