1
+ #include " drivers/as7343/as7343.hpp"
2
+ #include " common/pimoroni_i2c.hpp"
3
+ #include " micropython/modules/util.hpp"
4
+
5
+
6
+ using namespace pimoroni ;
7
+
8
+ extern " C" {
9
+ #include " breakout_as7343.h"
10
+ #include " pimoroni_i2c.h"
11
+
12
+ /* **** Variables Struct *****/
13
+ typedef struct _breakout_as7343_BreakoutAS7343_obj_t {
14
+ mp_obj_base_t base;
15
+ AS7343 *breakout;
16
+ _PimoroniI2C_obj_t *i2c;
17
+ } breakout_as7343_BreakoutAS7343_obj_t;
18
+
19
+
20
+
21
+ /* **** Constructor *****/
22
+ mp_obj_t BreakoutAS7343_make_new (const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
23
+ breakout_as7343_BreakoutAS7343_obj_t *self = nullptr ;
24
+
25
+ enum { ARG_i2c, ARG_int };
26
+ static const mp_arg_t allowed_args[] = {
27
+ { MP_QSTR_i2c, MP_ARG_OBJ, {.u_obj = nullptr } },
28
+ { MP_QSTR_interrupt, MP_ARG_INT, {.u_int = PIN_UNUSED} },
29
+ };
30
+
31
+ // Parse args.
32
+ mp_arg_val_t args[MP_ARRAY_SIZE (allowed_args)];
33
+ mp_arg_parse_all_kw_array (n_args, n_kw, all_args, MP_ARRAY_SIZE (allowed_args), allowed_args, args);
34
+
35
+ self = m_new_obj (breakout_as7343_BreakoutAS7343_obj_t);
36
+ self->base .type = &breakout_as7343_BreakoutAS7343_type;
37
+
38
+ self->i2c = PimoroniI2C_from_machine_i2c_or_native (args[ARG_i2c].u_obj );
39
+
40
+ self->breakout = m_new_class (AS7343, (pimoroni::I2C *)(self->i2c ->i2c ), args[ARG_int].u_int );
41
+
42
+ if (!self->breakout ->init ()) {
43
+ mp_raise_msg (&mp_type_RuntimeError, " BreakoutAS7343: breakout not found when initialising" );
44
+ }
45
+
46
+ return MP_OBJ_FROM_PTR (self);
47
+ }
48
+
49
+ /* **** Methods *****/
50
+ mp_obj_t BreakoutAS7343_reset (mp_obj_t self_in) {
51
+ breakout_as7343_BreakoutAS7343_obj_t *self = MP_OBJ_TO_PTR2 (self_in, breakout_as7343_BreakoutAS7343_obj_t);
52
+ self->breakout ->reset ();
53
+
54
+ return mp_const_none;
55
+ }
56
+
57
+ mp_obj_t BreakoutAS7343_version (mp_obj_t self_in) {
58
+ breakout_as7343_BreakoutAS7343_obj_t *self = MP_OBJ_TO_PTR2 (self_in, breakout_as7343_BreakoutAS7343_obj_t);
59
+
60
+ uint8_t aux_id, revision_id, hardware_id;
61
+ self->breakout ->get_version (aux_id, revision_id, hardware_id);
62
+
63
+ mp_obj_t tuple[3 ];
64
+ tuple[0 ] = mp_obj_new_int (aux_id);
65
+ tuple[1 ] = mp_obj_new_int (revision_id);
66
+ tuple[2 ] = mp_obj_new_int (hardware_id);
67
+ return mp_obj_new_tuple (3 , tuple);
68
+ }
69
+
70
+ mp_obj_t BreakoutAS7343_read (mp_obj_t self_in) {
71
+ breakout_as7343_BreakoutAS7343_obj_t *self = MP_OBJ_TO_PTR2 (self_in, breakout_as7343_BreakoutAS7343_obj_t);
72
+ AS7343::reading reading = self->breakout ->read ();
73
+
74
+ mp_obj_t tuple[12 ];
75
+ tuple[0 ] = mp_obj_new_float (reading.FZ );
76
+ tuple[1 ] = mp_obj_new_float (reading.FY );
77
+ tuple[2 ] = mp_obj_new_float (reading.FXL );
78
+ tuple[3 ] = mp_obj_new_float (reading.NIR );
79
+
80
+ tuple[4 ] = mp_obj_new_float (reading.F2 );
81
+ tuple[5 ] = mp_obj_new_float (reading.F3 );
82
+ tuple[6 ] = mp_obj_new_float (reading.F4 );
83
+ tuple[7 ] = mp_obj_new_float (reading.F6 );
84
+
85
+ tuple[8 ] = mp_obj_new_float (reading.F1 );
86
+ tuple[9 ] = mp_obj_new_float (reading.F5 );
87
+ tuple[10 ] = mp_obj_new_float (reading.F7 );
88
+ tuple[11 ] = mp_obj_new_float (reading.F8 );
89
+
90
+ return mp_obj_new_tuple (12 , tuple);
91
+ }
92
+
93
+ mp_obj_t BreakoutAS7343_set_gain (mp_obj_t self_in, mp_obj_t value_in) {
94
+ breakout_as7343_BreakoutAS7343_obj_t *self = MP_OBJ_TO_PTR2 (self_in, breakout_as7343_BreakoutAS7343_obj_t);
95
+
96
+ self->breakout ->set_gain (mp_obj_get_int (value_in));
97
+
98
+ return mp_const_none;
99
+ }
100
+
101
+ mp_obj_t BreakoutAS7343_set_measurement_time (mp_obj_t self_in, mp_obj_t value_in) {
102
+ breakout_as7343_BreakoutAS7343_obj_t *self = MP_OBJ_TO_PTR2 (self_in, breakout_as7343_BreakoutAS7343_obj_t);
103
+
104
+ self->breakout ->set_measurement_time (mp_obj_get_float (value_in));
105
+
106
+ return mp_const_none;
107
+ }
108
+
109
+ mp_obj_t BreakoutAS7343_set_integration_time (mp_obj_t self_in, mp_obj_t value_in) {
110
+ breakout_as7343_BreakoutAS7343_obj_t *self = MP_OBJ_TO_PTR2 (self_in, breakout_as7343_BreakoutAS7343_obj_t);
111
+
112
+ self->breakout ->set_integration_time (mp_obj_get_float (value_in));
113
+
114
+ return mp_const_none;
115
+ }
116
+
117
+ mp_obj_t BreakoutAS7343_set_illumination_current (mp_obj_t self_in, mp_obj_t value_in) {
118
+ breakout_as7343_BreakoutAS7343_obj_t *self = MP_OBJ_TO_PTR2 (self_in, breakout_as7343_BreakoutAS7343_obj_t);
119
+
120
+ self->breakout ->set_illumination_current (mp_obj_get_int (value_in));
121
+
122
+ return mp_const_none;
123
+ }
124
+
125
+ mp_obj_t BreakoutAS7343_set_illumination_led (mp_obj_t self_in, mp_obj_t value_in) {
126
+ breakout_as7343_BreakoutAS7343_obj_t *self = MP_OBJ_TO_PTR2 (self_in, breakout_as7343_BreakoutAS7343_obj_t);
127
+
128
+ self->breakout ->set_illumination_led (value_in == mp_const_true);
129
+
130
+ return mp_const_none;
131
+ }
132
+
133
+ mp_obj_t BreakoutAS7343_set_channels (mp_obj_t self_in, mp_obj_t value_in) {
134
+ breakout_as7343_BreakoutAS7343_obj_t *self = MP_OBJ_TO_PTR2 (self_in, breakout_as7343_BreakoutAS7343_obj_t);
135
+
136
+ self->breakout ->set_channels ((AS7343::channel_count)mp_obj_get_int (value_in));
137
+
138
+ return mp_const_none;
139
+ }
140
+ }
0 commit comments