@@ -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)
530588STATIC 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
540599STATIC MP_DEFINE_CONST_DICT (
0 commit comments