Skip to content

Commit 7cad76f

Browse files
committed
cmodules/m5unfied: Add Power API.
Signed-off-by: lbuque <[email protected]>
1 parent 2693fcd commit 7cad76f

File tree

2 files changed

+132
-56
lines changed

2 files changed

+132
-56
lines changed

m5stack/cmodules/m5unified/m5unified_power.c

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,32 +30,48 @@ const mp_obj_type_t mp_power_port_mask_enum = {
3030
};
3131
#endif
3232

33-
MAKE_METHOD_KW(power, setExtPower, 1);
33+
MAKE_METHOD_KW(power, setExtOutput, 1);
34+
MAKE_METHOD_0(power, getExtOutput);
35+
MAKE_METHOD_KW(power, setUsbOutput, 1);
36+
MAKE_METHOD_0(power, getUsbOutput);
3437
MAKE_METHOD_KW(power, setLed, 1);
3538
MAKE_METHOD_0(power, powerOff);
39+
MAKE_METHOD_V(power, timerSleep, 2, 5);
40+
MAKE_METHOD_KW(power, deepSleep, 1);
41+
MAKE_METHOD_KW(power, lightSleep, 1);
3642
MAKE_METHOD_0(power, getBatteryLevel);
3743
MAKE_METHOD_KW(power, setBatteryCharge, 1);
3844
MAKE_METHOD_KW(power, setChargeCurrent, 1);
39-
MAKE_METHOD_KW(power, setExtOutput, 1);
40-
MAKE_METHOD_0(power, getExtOutput);
41-
MAKE_METHOD_KW(power, setUsbOutput, 1);
42-
MAKE_METHOD_0(power, getUsbOutput);
45+
MAKE_METHOD_1(power, setChargeVoltage);
4346
MAKE_METHOD_0(power, isCharging);
47+
MAKE_METHOD_0(power, getBatteryVoltage);
48+
MAKE_METHOD_0(power, getBatteryCurrent);
49+
MAKE_METHOD_0(power, getKeyState);
50+
MAKE_METHOD_1(power, setVibration);
51+
MAKE_METHOD_0(power, getType);
4452

4553
STATIC const mp_rom_map_elem_t power_member_table[] = {
4654
{ MP_ROM_QSTR(MP_QSTR_PORT), MP_ROM_PTR(&mp_power_port_mask_enum) },
4755
// control functions
48-
MAKE_TABLE(power, setExtPower),
56+
MAKE_TABLE(power, setExtOutput),
57+
MAKE_TABLE(power, getExtOutput),
58+
MAKE_TABLE(power, setUsbOutput),
59+
MAKE_TABLE(power, getUsbOutput),
4960
MAKE_TABLE(power, setLed),
5061
MAKE_TABLE(power, powerOff),
62+
MAKE_TABLE(power, timerSleep),
63+
MAKE_TABLE(power, deepSleep),
64+
MAKE_TABLE(power, lightSleep),
5165
MAKE_TABLE(power, getBatteryLevel),
5266
MAKE_TABLE(power, setBatteryCharge),
5367
MAKE_TABLE(power, setChargeCurrent),
54-
MAKE_TABLE(power, setExtOutput),
55-
MAKE_TABLE(power, getExtOutput),
56-
MAKE_TABLE(power, setUsbOutput),
57-
MAKE_TABLE(power, getUsbOutput),
68+
MAKE_TABLE(power, setChargeVoltage),
5869
MAKE_TABLE(power, isCharging),
70+
MAKE_TABLE(power, getBatteryVoltage),
71+
MAKE_TABLE(power, getBatteryCurrent),
72+
MAKE_TABLE(power, getKeyState),
73+
MAKE_TABLE(power, setVibration),
74+
MAKE_TABLE(power, getType),
5975
};
6076

6177
STATIC MP_DEFINE_CONST_DICT(power_member, power_member_table);

m5stack/components/M5Unified/mpy_m5power.cpp

Lines changed: 106 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2,37 +2,62 @@
22

33
extern "C"
44
{
5+
#include <py/obj.h>
56
#include "mpy_m5power.h"
67

8+
79
namespace m5
810
{
911
static inline Power_Class *getPower(const mp_obj_t& self) {
1012
return (Power_Class *)(((pwr_obj_t *)MP_OBJ_TO_PTR(self))->btn);
1113
}
1214

13-
mp_obj_t power_setExtPower(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
14-
enum {ARG_en, ARG_mask};
15-
/* *FORMAT-OFF* */
15+
mp_obj_t power_setExtOutput(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
16+
enum {ARG_enable, ARG_port_mask};
1617
const mp_arg_t allowed_args[] = {
17-
{ MP_QSTR_en, MP_ARG_BOOL | MP_ARG_REQUIRED, {.u_bool = true } },
18-
{ MP_QSTR_mask, MP_ARG_INT , {.u_int = 0xFF } },
18+
/* *FORMAT-OFF* */
19+
{ MP_QSTR_enable, MP_ARG_BOOL | MP_ARG_REQUIRED, {.u_bool = true} },
20+
{ MP_QSTR_port_mask, MP_ARG_INT, {.u_int = 0xFF} },
21+
/* *FORMAT-ON* */
1922
};
20-
/* *FORMAT-ON* */
2123
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
2224
// The first parameter is the Power object, parse from second parameter.
2325
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
2426

25-
getPower(pos_args[0])->setExtPower(args[ARG_en].u_bool, (ext_port_mask_t)args[ARG_en].u_int);
27+
getPower(pos_args[0])->setExtOutput(args[ARG_enable].u_bool, (ext_port_mask_t)args[ARG_port_mask].u_int);
2628
return mp_const_none;
2729
}
2830

31+
mp_obj_t power_getExtOutput(mp_obj_t self) {
32+
return mp_obj_new_bool(getPower(self)->getExtOutput());
33+
}
34+
35+
mp_obj_t power_setUsbOutput(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
36+
enum {ARG_enable};
37+
const mp_arg_t allowed_args[] = {
38+
/* *FORMAT-OFF* */
39+
{ MP_QSTR_enable, MP_ARG_INT | MP_ARG_REQUIRED, {.u_bool = true} }
40+
/* *FORMAT-ON* */
41+
};
42+
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
43+
// The first parameter is the Power object, parse from second parameter.
44+
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
45+
46+
getPower(pos_args[0])->setUsbOutput(args[ARG_enable].u_bool);
47+
return mp_const_none;
48+
}
49+
50+
mp_obj_t power_getUsbOutput(mp_obj_t self) {
51+
return mp_obj_new_bool(getPower(self)->getUsbOutput());
52+
}
53+
2954
mp_obj_t power_setLed(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
3055
enum {ARG_br};
31-
/* *FORMAT-OFF* */
3256
const mp_arg_t allowed_args[] = {
33-
{ MP_QSTR_br, MP_ARG_INT | MP_ARG_REQUIRED, {.u_int = 0 } }
57+
/* *FORMAT-OFF* */
58+
{ MP_QSTR_br, MP_ARG_INT | MP_ARG_REQUIRED, {.u_int = 0} },
59+
/* *FORMAT-ON* */
3460
};
35-
/* *FORMAT-ON* */
3661
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
3762
// The first parameter is the Power object, parse from second parameter.
3863
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
@@ -46,85 +71,120 @@ namespace m5
4671
return mp_const_none;
4772
}
4873

49-
mp_obj_t power_getBatteryLevel(mp_obj_t self) {
50-
return mp_obj_new_int(getPower(self)->getBatteryLevel());
74+
mp_obj_t power_timerSleep(size_t n_args, const mp_obj_t *args) {
75+
if (n_args == 2) {
76+
getPower(args[0])->timerSleep(mp_obj_get_int(args[1]));
77+
} else if (n_args == 3) {
78+
rtc_time_t time;
79+
time.minutes = mp_obj_get_int(args[1]);
80+
time.hours = mp_obj_get_int(args[2]);
81+
getPower(args[0])->timerSleep(time);
82+
} else if (n_args == 5) {
83+
rtc_time_t time;
84+
rtc_date_t date;
85+
time.minutes = mp_obj_get_int(args[1]);
86+
time.hours = mp_obj_get_int(args[2]);
87+
date.date = mp_obj_get_int(args[3]);
88+
date.weekDay = mp_obj_get_int(args[4]);
89+
getPower(args[0])->timerSleep(date, time);
90+
}
91+
return mp_const_none;
5192
}
5293

53-
mp_obj_t power_setBatteryCharge(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
54-
enum {ARG_enable};
55-
/* *FORMAT-OFF* */
94+
mp_obj_t power_deepSleep(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
95+
enum { ARG_micro_seconds, ARG_touch_wakeup };
5696
const mp_arg_t allowed_args[] = {
57-
{ MP_QSTR_enable, MP_ARG_INT | MP_ARG_REQUIRED, {.u_bool = true } }
97+
/* *FORMAT-OFF* */
98+
{ MP_QSTR_micro_seconds, MP_ARG_INT, {.u_int = 0} },
99+
{ MP_QSTR_touch_wakeup, MP_ARG_BOOL, {.u_bool = true} },
100+
/* *FORMAT-ON* */
58101
};
59-
/* *FORMAT-ON* */
60102
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
61103
// The first parameter is the Power object, parse from second parameter.
62104
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
63105

64-
getPower(pos_args[0])->setBatteryCharge(args[ARG_enable].u_bool);
106+
getPower(pos_args[0])->deepSleep(args[ARG_micro_seconds].u_int, args[ARG_touch_wakeup].u_bool);
65107
return mp_const_none;
66108
}
67109

68-
mp_obj_t power_setChargeCurrent(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
69-
enum {ARG_ma};
70-
/* *FORMAT-OFF* */
110+
mp_obj_t power_lightSleep(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
111+
enum { ARG_micro_seconds, ARG_touch_wakeup };
71112
const mp_arg_t allowed_args[] = {
72-
{ MP_QSTR_ma, MP_ARG_INT | MP_ARG_REQUIRED, {.u_int = true } }
113+
/* *FORMAT-OFF* */
114+
{ MP_QSTR_micro_seconds, MP_ARG_INT, {.u_int = 0} },
115+
{ MP_QSTR_touch_wakeup, MP_ARG_BOOL, {.u_bool = true} },
116+
/* *FORMAT-ON* */
73117
};
74-
/* *FORMAT-ON* */
75118
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
76119
// The first parameter is the Power object, parse from second parameter.
77120
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
78121

79-
getPower(pos_args[0])->setChargeCurrent(args[ARG_ma].u_int);
122+
getPower(pos_args[0])->lightSleep(args[ARG_micro_seconds].u_int, args[ARG_touch_wakeup].u_bool);
80123
return mp_const_none;
81124
}
82125

83-
// mp_obj_t power_getBatteryChargeCurrent(mp_obj_t self) {
84-
// return mp_obj_new_int(getPower(self)->getBatteryChargeCurrent());
85-
// }
126+
mp_obj_t power_getBatteryLevel(mp_obj_t self) {
127+
return mp_obj_new_int(getPower(self)->getBatteryLevel());
128+
}
86129

87-
mp_obj_t power_setExtOutput(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
88-
enum {ARG_enable, ARG_port_mask};
89-
/* *FORMAT-OFF* */
130+
mp_obj_t power_setBatteryCharge(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
131+
enum {ARG_enable};
90132
const mp_arg_t allowed_args[] = {
91-
{ MP_QSTR_enable, MP_ARG_BOOL | MP_ARG_REQUIRED, {.u_bool = true } },
92-
{ MP_QSTR_port_mask, MP_ARG_INT, {.u_int = 0xFF } },
133+
/* *FORMAT-OFF* */
134+
{ MP_QSTR_enable, MP_ARG_INT | MP_ARG_REQUIRED, {.u_bool = true} }
135+
/* *FORMAT-ON* */
93136
};
94-
/* *FORMAT-ON* */
95137
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
96138
// The first parameter is the Power object, parse from second parameter.
97139
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
98140

99-
getPower(pos_args[0])->setExtOutput(args[ARG_enable].u_bool, (ext_port_mask_t)args[ARG_port_mask].u_int);
141+
getPower(pos_args[0])->setBatteryCharge(args[ARG_enable].u_bool);
100142
return mp_const_none;
101143
}
102144

103-
mp_obj_t power_getExtOutput(mp_obj_t self) {
104-
return mp_obj_new_bool(getPower(self)->getExtOutput());
105-
}
106-
107-
mp_obj_t power_setUsbOutput(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
108-
enum {ARG_enable};
109-
/* *FORMAT-OFF* */
145+
mp_obj_t power_setChargeCurrent(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
146+
enum {ARG_ma};
110147
const mp_arg_t allowed_args[] = {
111-
{ MP_QSTR_enable, MP_ARG_INT | MP_ARG_REQUIRED, {.u_bool = true } }
148+
/* *FORMAT-OFF* */
149+
{ MP_QSTR_ma, MP_ARG_INT | MP_ARG_REQUIRED, {.u_int = true} }
150+
/* *FORMAT-ON* */
112151
};
113-
/* *FORMAT-ON* */
114152
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
115153
// The first parameter is the Power object, parse from second parameter.
116154
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
117155

118-
getPower(pos_args[0])->setUsbOutput(args[ARG_enable].u_bool);
156+
getPower(pos_args[0])->setChargeCurrent(args[ARG_ma].u_int);
119157
return mp_const_none;
120158
}
121159

122-
mp_obj_t power_getUsbOutput(mp_obj_t self) {
123-
return mp_obj_new_bool(getPower(self)->getUsbOutput());
160+
mp_obj_t power_setChargeVoltage(mp_obj_t self, mp_obj_t max_mv) {
161+
getPower(self)->setChargeVoltage(mp_obj_get_int(max_mv));
162+
return mp_const_none;
124163
}
125164

126165
mp_obj_t power_isCharging(mp_obj_t self) {
127166
return mp_obj_new_bool(getPower(self)->isCharging());
128167
}
168+
169+
mp_obj_t power_getBatteryVoltage(mp_obj_t self) {
170+
return mp_obj_new_int(getPower(self)->getBatteryVoltage());
171+
}
172+
173+
mp_obj_t power_getBatteryCurrent(mp_obj_t self) {
174+
return mp_obj_new_int(getPower(self)->getBatteryCurrent());
175+
}
176+
177+
mp_obj_t power_getKeyState(mp_obj_t self) {
178+
return mp_obj_new_int(getPower(self)->getKeyState());
179+
}
180+
181+
mp_obj_t power_setVibration(mp_obj_t self, mp_obj_t level) {
182+
getPower(self)->setVibration(mp_obj_get_int(level));
183+
return mp_const_none;
184+
}
185+
186+
mp_obj_t power_getType(mp_obj_t self) {
187+
return mp_obj_new_bool(getPower(self)->getType());
188+
}
129189
}
130190
}

0 commit comments

Comments
 (0)