• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pybricks / pybricks-micropython / 4814710639

pending completion
4814710639

push

github

David Lechner
pybricks.common.BLE: Reset data after timeout.

2979 of 5834 relevant lines covered (51.06%)

33858416.54 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/pybricks/common/pb_type_lightarray.c
1
// SPDX-License-Identifier: MIT
2
// Copyright (c) 2018-2023 The Pybricks Authors
3

4
#include "py/mpconfig.h"
5

6
#if PYBRICKS_PY_COMMON_LIGHT_ARRAY
7

8
#include "py/obj.h"
9

10
#include <pybricks/common.h>
11

12
#include <pybricks/util_pb/pb_error.h>
13
#include <pybricks/util_mp/pb_obj_helper.h>
14
#include <pybricks/util_mp/pb_kwarg_helper.h>
15
#include <pybricks/util_mp/pb_obj_helper.h>
16

17
// pybricks._common.Light class object
18
typedef struct _common_LightArray_obj_t {
19
    mp_obj_base_t base;
20
    pb_device_t *pbdev;
21
    uint8_t light_mode;
22
    uint8_t number_of_lights;
23
} common_LightArray_obj_t;
24

25
// pybricks._common.LightArray.on
26
STATIC mp_obj_t common_LightArray_on(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
×
27
    PB_PARSE_ARGS_METHOD(n_args, pos_args, kw_args,
×
28
        common_LightArray_obj_t, self,
29
        PB_ARG_DEFAULT_INT(brightness, 100));
×
30

31
    int32_t brightness_values[4];
×
32

33
    // Given an integer, make all lights the same brightness.
34
    if (mp_obj_is_int(brightness_in)) {
×
35
        int32_t b = pb_obj_get_pct(brightness_in);
×
36
        for (uint8_t i = 0; i < self->number_of_lights; i++) {
×
37
            brightness_values[i] = b;
×
38
        }
39
    }
40
    // Otherwise, get each brightness value from list or tuple.
41
    else {
42
        mp_obj_t *brightness_objects;
×
43
        size_t num_values;
×
44
        mp_obj_get_array(brightness_in, &num_values, &brightness_objects);
×
45
        if (num_values != self->number_of_lights) {
×
46
            pb_assert(PBIO_ERROR_INVALID_ARG);
×
47
        }
48
        for (uint8_t i = 0; i < self->number_of_lights; i++) {
×
49
            brightness_values[i] = pb_obj_get_pct(brightness_objects[i]);
×
50
        }
51
    }
52

53
    // Set the brightness values
54
    pb_device_set_values(self->pbdev, self->light_mode, brightness_values, self->number_of_lights);
×
55

56
    return mp_const_none;
×
57
}
58
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(common_LightArray_on_obj, 1, common_LightArray_on);
59

60
// pybricks._common.LightArray.off
61
STATIC mp_obj_t common_LightArray_off(mp_obj_t self_in) {
×
62
    common_LightArray_obj_t *self = MP_OBJ_TO_PTR(self_in);
×
63

64
    int32_t brightness[4] = { };
×
65
    pb_device_set_values(self->pbdev, self->light_mode, brightness, self->number_of_lights);
×
66

67
    return mp_const_none;
×
68
}
69
STATIC MP_DEFINE_CONST_FUN_OBJ_1(common_LightArray_off_obj, common_LightArray_off);
70

71
// dir(pybricks.builtins.LightArray)
72
STATIC const mp_rom_map_elem_t common_LightArray_locals_dict_table[] = {
73
    { MP_ROM_QSTR(MP_QSTR_on), MP_ROM_PTR(&common_LightArray_on_obj) },
74
    { MP_ROM_QSTR(MP_QSTR_off), MP_ROM_PTR(&common_LightArray_off_obj) },
75
};
76
STATIC MP_DEFINE_CONST_DICT(common_LightArray_locals_dict, common_LightArray_locals_dict_table);
77

78
// type(pybricks.builtins.LightArray)
79
STATIC MP_DEFINE_CONST_OBJ_TYPE(pb_type_LightArray,
80
    MP_QSTR_LightArray,
81
    MP_TYPE_FLAG_NONE,
82
    locals_dict, &common_LightArray_locals_dict);
83

84
// pybricks._common.LightArray.__init__
85
mp_obj_t common_LightArray_obj_make_new(pb_device_t *pbdev, uint8_t light_mode, uint8_t number_of_lights) {
×
86
    common_LightArray_obj_t *light = mp_obj_malloc(common_LightArray_obj_t, &pb_type_LightArray);
×
87
    light->pbdev = pbdev;
×
88
    light->light_mode = light_mode;
×
89
    light->number_of_lights = number_of_lights;
×
90
    return MP_OBJ_FROM_PTR(light);
×
91
}
92

93
#endif // PYBRICKS_PY_COMMON_LIGHT_ARRAY
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc