@@ -34,11 +34,11 @@ const spk_obj_t m5_speaker = {&mp_spk_type, &(M5.Speaker)};
34
34
const pwr_obj_t m5_power = {&mp_power_type, &(M5.Power ) };
35
35
const pwr_obj_t m5_imu = {&mp_imu_type, &(M5.Imu ) };
36
36
als_obj_t m5_als = {&mp_als_type, &(M5.Als ) };
37
- btn_obj_t m5_btnA = {&mp_btn_type, &(M5.BtnA ) };
38
- btn_obj_t m5_btnB = {&mp_btn_type, &(M5.BtnB ) };
39
- btn_obj_t m5_btnC = {&mp_btn_type, &(M5.BtnC ) };
40
- btn_obj_t m5_btnPWR = {&mp_btn_type, &(M5.BtnPWR ) };
41
- btn_obj_t m5_btnEXT = {&mp_btn_type, &(M5.BtnEXT ) };
37
+ btn_obj_t m5_btnA = {&mp_btn_type, &(M5.BtnA ), { 0 } };
38
+ btn_obj_t m5_btnB = {&mp_btn_type, &(M5.BtnB ), { 0 } };
39
+ btn_obj_t m5_btnC = {&mp_btn_type, &(M5.BtnC ), { 0 } };
40
+ btn_obj_t m5_btnPWR = {&mp_btn_type, &(M5.BtnPWR ), { 0 } };
41
+ btn_obj_t m5_btnEXT = {&mp_btn_type, &(M5.BtnEXT ), { 0 } };
42
42
gfx_obj_t m5_display = {&mp_gfxdevice_type, &(M5.Display )};
43
43
touch_obj_t m5_touch = {&mp_touch_type, &(M5.Touch ) };
44
44
const mic_obj_t m5_mic = {&mp_mic_type, &(M5.Mic ) };
@@ -62,6 +62,44 @@ mp_obj_t m5_begin(void) {
62
62
// set default font to DejaVu9, keep same style with UIFlow website UI design.
63
63
M5.Display .setTextFont (&fonts::DejaVu9);
64
64
65
+ {
66
+ for (uint8_t i = 0 ; i < 5 ; i++) {
67
+ MP_STATE_PORT (wasClicked_cb)[i] = mp_const_none;
68
+ MP_STATE_PORT (wasDoubleClicked_cb)[i] = mp_const_none;
69
+ MP_STATE_PORT (wasHold_cb)[i] = mp_const_none;
70
+ MP_STATE_PORT (wasPressed_cb)[i] = mp_const_none;
71
+ MP_STATE_PORT (wasReleased_cb)[i] = mp_const_none;
72
+ }
73
+ m5_btnA.callbacks .wasClicked_cb = &MP_STATE_PORT (wasClicked_cb)[0 ];
74
+ m5_btnA.callbacks .wasDoubleClicked_cb = &MP_STATE_PORT (wasDoubleClicked_cb)[0 ];
75
+ m5_btnA.callbacks .wasHold_cb = &MP_STATE_PORT (wasHold_cb)[0 ];
76
+ m5_btnA.callbacks .wasPressed_cb = &MP_STATE_PORT (wasPressed_cb)[0 ];
77
+ m5_btnA.callbacks .wasReleased_cb = &MP_STATE_PORT (wasReleased_cb)[0 ];
78
+
79
+ m5_btnB.callbacks .wasClicked_cb = &MP_STATE_PORT (wasClicked_cb)[1 ];
80
+ m5_btnB.callbacks .wasDoubleClicked_cb = &MP_STATE_PORT (wasDoubleClicked_cb)[1 ];
81
+ m5_btnB.callbacks .wasHold_cb = &MP_STATE_PORT (wasHold_cb)[1 ];
82
+ m5_btnB.callbacks .wasPressed_cb = &MP_STATE_PORT (wasPressed_cb)[1 ];
83
+ m5_btnB.callbacks .wasReleased_cb = &MP_STATE_PORT (wasReleased_cb)[1 ];
84
+
85
+ m5_btnC.callbacks .wasClicked_cb = &MP_STATE_PORT (wasClicked_cb)[2 ];
86
+ m5_btnC.callbacks .wasDoubleClicked_cb = &MP_STATE_PORT (wasDoubleClicked_cb)[2 ];
87
+ m5_btnC.callbacks .wasHold_cb = &MP_STATE_PORT (wasHold_cb)[2 ];
88
+ m5_btnC.callbacks .wasPressed_cb = &MP_STATE_PORT (wasPressed_cb)[2 ];
89
+ m5_btnC.callbacks .wasReleased_cb = &MP_STATE_PORT (wasReleased_cb)[2 ];
90
+
91
+ m5_btnPWR.callbacks .wasClicked_cb = &MP_STATE_PORT (wasClicked_cb)[3 ];
92
+ m5_btnPWR.callbacks .wasDoubleClicked_cb = &MP_STATE_PORT (wasDoubleClicked_cb)[3 ];
93
+ m5_btnPWR.callbacks .wasHold_cb = &MP_STATE_PORT (wasHold_cb)[3 ];
94
+ m5_btnPWR.callbacks .wasPressed_cb = &MP_STATE_PORT (wasPressed_cb)[3 ];
95
+ m5_btnPWR.callbacks .wasReleased_cb = &MP_STATE_PORT (wasReleased_cb)[3 ];
96
+
97
+ m5_btnEXT.callbacks .wasClicked_cb = &MP_STATE_PORT (wasClicked_cb)[4 ];
98
+ m5_btnEXT.callbacks .wasDoubleClicked_cb = &MP_STATE_PORT (wasDoubleClicked_cb)[4 ];
99
+ m5_btnEXT.callbacks .wasHold_cb = &MP_STATE_PORT (wasHold_cb)[4 ];
100
+ m5_btnEXT.callbacks .wasPressed_cb = &MP_STATE_PORT (wasPressed_cb)[4 ];
101
+ m5_btnEXT.callbacks .wasReleased_cb = &MP_STATE_PORT (wasReleased_cb)[4 ];
102
+ }
65
103
return mp_const_none;
66
104
}
67
105
@@ -121,35 +159,35 @@ static void m5_btns_callbacks_check(void) {
121
159
if (m5_btn_list[i]->callbacks .flag ) {
122
160
if (m5_btn_list[i]->callbacks .flag_bit .wasClicked ) {
123
161
if (((m5::Button_Class *)(m5_btn_list[i]->btn ))->wasClicked ()) {
124
- mp_sched_schedule (m5_btn_list[i]->callbacks .wasClicked_cb ,
162
+ mp_sched_schedule (* m5_btn_list[i]->callbacks .wasClicked_cb ,
125
163
mp_obj_new_int (((m5::Button_Class *)(m5_btn_list[i]->btn ))->getState ()));
126
164
}
127
165
}
128
166
129
167
if (m5_btn_list[i]->callbacks .flag_bit .wasDoubleClicked ) {
130
168
if (((m5::Button_Class *)(m5_btn_list[i]->btn ))->wasDoubleClicked ()) {
131
- mp_sched_schedule (m5_btn_list[i]->callbacks .wasDoubleClicked_cb ,
169
+ mp_sched_schedule (* m5_btn_list[i]->callbacks .wasDoubleClicked_cb ,
132
170
mp_obj_new_int (((m5::Button_Class *)(m5_btn_list[i]->btn ))->getState ()));
133
171
}
134
172
}
135
173
136
174
if (m5_btn_list[i]->callbacks .flag_bit .wasHold ) {
137
175
if (((m5::Button_Class *)(m5_btn_list[i]->btn ))->wasHold ()) {
138
- mp_sched_schedule (m5_btn_list[i]->callbacks .wasHold_cb ,
176
+ mp_sched_schedule (* m5_btn_list[i]->callbacks .wasHold_cb ,
139
177
mp_obj_new_int (((m5::Button_Class *)(m5_btn_list[i]->btn ))->getState ()));
140
178
}
141
179
}
142
180
143
181
if (m5_btn_list[i]->callbacks .flag_bit .wasPressed ) {
144
182
if (((m5::Button_Class *)(m5_btn_list[i]->btn ))->wasPressed ()) {
145
- mp_sched_schedule (m5_btn_list[i]->callbacks .wasPressed_cb ,
183
+ mp_sched_schedule (* m5_btn_list[i]->callbacks .wasPressed_cb ,
146
184
mp_obj_new_int (((m5::Button_Class *)(m5_btn_list[i]->btn ))->getState ()));
147
185
}
148
186
}
149
187
150
188
if (m5_btn_list[i]->callbacks .flag_bit .wasReleased ) {
151
189
if (((m5::Button_Class *)(m5_btn_list[i]->btn ))->wasReleased ()) {
152
- mp_sched_schedule (m5_btn_list[i]->callbacks .wasReleased_cb ,
190
+ mp_sched_schedule (* m5_btn_list[i]->callbacks .wasReleased_cb ,
153
191
mp_obj_new_int (((m5::Button_Class *)(m5_btn_list[i]->btn ))->getState ()));
154
192
}
155
193
}
@@ -169,4 +207,10 @@ static void m5_btns_callbacks_deinit(void) {
169
207
#if MICROPY_PY_LVGL
170
208
#include " mpy_lvgl.txt"
171
209
#endif
210
+
211
+ MP_REGISTER_ROOT_POINTER (mp_obj_t wasClicked_cb[5 ]);
212
+ MP_REGISTER_ROOT_POINTER (mp_obj_t wasDoubleClicked_cb[5 ]);
213
+ MP_REGISTER_ROOT_POINTER (mp_obj_t wasHold_cb[5 ]);
214
+ MP_REGISTER_ROOT_POINTER (mp_obj_t wasPressed_cb[5 ]);
215
+ MP_REGISTER_ROOT_POINTER (mp_obj_t wasReleased_cb[5 ]);
172
216
}
0 commit comments