Skip to content

Commit f17b7d1

Browse files
committed
extmod/modpupdevices: add Light
This adds support for the Powered Up light.
1 parent cc12d11 commit f17b7d1

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

extmod/modpupdevices.c

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -526,6 +526,64 @@ STATIC const mp_obj_type_t pupdevices_ForceSensor_type = {
526526
.locals_dict = (mp_obj_dict_t *)&pupdevices_ForceSensor_locals_dict,
527527
};
528528

529+
// Class structure for Light
530+
typedef struct _pupdevices_Light_obj_t {
531+
mp_obj_base_t base;
532+
pbdevice_t *pbdev;
533+
} pupdevices_Light_obj_t;
534+
535+
// pybricks.pupdevices.Light.__init__
536+
STATIC mp_obj_t pupdevices_Light_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
537+
PB_PARSE_ARGS_CLASS(n_args, n_kw, args,
538+
PB_ARG_REQUIRED(port));
539+
540+
pupdevices_Light_obj_t *self = m_new_obj(pupdevices_Light_obj_t);
541+
self->base.type = (mp_obj_type_t *)type;
542+
543+
mp_int_t port_num = pb_type_enum_get_value(port, &pb_enum_type_Port);
544+
545+
// Get iodevices
546+
self->pbdev = pbdevice_get_device(port_num, PBIO_IODEV_TYPE_ID_LPF2_LIGHT);
547+
548+
return MP_OBJ_FROM_PTR(self);
549+
}
550+
551+
// pybricks.pupdevices.Light.on
552+
STATIC mp_obj_t pupdevices_Light_on(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
553+
PB_PARSE_ARGS_METHOD(n_args, pos_args, kw_args,
554+
pupdevices_Light_obj_t, self,
555+
PB_ARG_DEFAULT_INT(brightness, 100));
556+
557+
// Set the brightness
558+
pbdevice_set_power_supply(self->pbdev, pb_obj_get_int(brightness));
559+
560+
return mp_const_none;
561+
}
562+
MP_DEFINE_CONST_FUN_OBJ_KW(pupdevices_Light_on_obj, 1, pupdevices_Light_on);
563+
564+
// pybricks.pupdevices.Light.off
565+
STATIC mp_obj_t pupdevices_Light_off(mp_obj_t self_in) {
566+
pupdevices_Light_obj_t *self = MP_OBJ_TO_PTR(self_in);
567+
pbdevice_set_power_supply(self->pbdev, 0);
568+
return mp_const_none;
569+
}
570+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pupdevices_Light_off_obj, pupdevices_Light_off);
571+
572+
// dir(pybricks.pupdevices.Light)
573+
STATIC const mp_rom_map_elem_t pupdevices_Light_locals_dict_table[] = {
574+
{ MP_ROM_QSTR(MP_QSTR_on), MP_ROM_PTR(&pupdevices_Light_on_obj) },
575+
{ MP_ROM_QSTR(MP_QSTR_off), MP_ROM_PTR(&pupdevices_Light_off_obj) },
576+
};
577+
STATIC MP_DEFINE_CONST_DICT(pupdevices_Light_locals_dict, pupdevices_Light_locals_dict_table);
578+
579+
// type(pybricks.pupdevices.Light)
580+
STATIC const mp_obj_type_t pupdevices_Light_type = {
581+
{ &mp_type_type },
582+
.name = MP_QSTR_Light,
583+
.make_new = pupdevices_Light_make_new,
584+
.locals_dict = (mp_obj_dict_t *)&pupdevices_Light_locals_dict,
585+
};
586+
529587
// dir(pybricks.pupdevices)
530588
STATIC const mp_rom_map_elem_t pupdevices_globals_table[] = {
531589
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_pupdevices) },
@@ -535,6 +593,7 @@ STATIC const mp_rom_map_elem_t pupdevices_globals_table[] = {
535593
{ MP_ROM_QSTR(MP_QSTR_ColorSensor), MP_ROM_PTR(&pupdevices_ColorSensor_type) },
536594
{ MP_ROM_QSTR(MP_QSTR_UltrasonicSensor), MP_ROM_PTR(&pupdevices_UltrasonicSensor_type) },
537595
{ MP_ROM_QSTR(MP_QSTR_ForceSensor), MP_ROM_PTR(&pupdevices_ForceSensor_type) },
596+
{ MP_ROM_QSTR(MP_QSTR_Light), MP_ROM_PTR(&pupdevices_Light_type) },
538597
};
539598

540599
STATIC MP_DEFINE_CONST_DICT(

0 commit comments

Comments
 (0)