Skip to content

Commit c66d86c

Browse files
committed
stmhal: Big cleanup; merge gpio into Pin; make names consistent.
This is an attempt to clean up the Micro Python API on the pyboard. Gpio functionality is now in the Pin object, which seems more natural. Constants for MODE and PULL are now in pyb.Pin. Names of some classes have been adjusted to conform to CamelCase. Other miscellaneous changes and clean up here and there.
1 parent 738bdeb commit c66d86c

File tree

19 files changed

+563
-619
lines changed

19 files changed

+563
-619
lines changed

stmhal/Makefile

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ SRC_C = \
6565
timer.c \
6666
led.c \
6767
pin.c \
68-
pin_map.c \
6968
pin_named_pins.c \
7069
usart.c \
7170
usb.c \
@@ -84,8 +83,7 @@ SRC_C = \
8483
modtime.c \
8584
import.c \
8685
lexerfatfs.c \
87-
gpio.c \
88-
exti.c \
86+
extint.c \
8987
usrsw.c \
9088
rng.c \
9189
rtc.c \

stmhal/adc.c

Lines changed: 28 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
// adc = pyb.ADC(pin)
1919
// val = adc.read()
2020
//
21-
// adc = pyb.ADC_all(resolution)
21+
// adc = pyb.ADCAll(resolution)
2222
// val = adc.read_channel(channel)
2323
// val = adc.read_core_temp()
2424
// val = adc.read_core_vbat()
@@ -129,7 +129,7 @@ STATIC mp_obj_t adc_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp_
129129
if (MP_OBJ_IS_INT(pin_obj)) {
130130
channel = mp_obj_get_int(pin_obj);
131131
} else {
132-
const pin_obj_t *pin = pin_map_user_obj(pin_obj);
132+
const pin_obj_t *pin = pin_find(pin_obj);
133133
if ((pin->adc_num & PIN_ADC1) == 0) {
134134
// No ADC1 function on that pin
135135
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "pin %s does not have ADC capabilities", pin->name));
@@ -138,10 +138,10 @@ STATIC mp_obj_t adc_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp_
138138
}
139139

140140
if (!IS_ADC_CHANNEL(channel)) {
141-
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "Not a valid ADC Channel: %d", channel));
141+
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "not a valid ADC Channel: %d", channel));
142142
}
143143
if (pin_adc1[channel] == NULL) {
144-
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "Channel %d not available on this board", channel));
144+
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ValueError, "channel %d not available on this board", channel));
145145
}
146146

147147
pyb_obj_adc_t *o = m_new_obj(pyb_obj_adc_t);
@@ -211,12 +211,12 @@ const mp_obj_type_t pyb_adc_type = {
211211
/******************************************************************************/
212212
/* adc all object */
213213

214-
typedef struct _pyb_obj_adc_all_t {
214+
typedef struct _pyb_adc_all_obj_t {
215215
mp_obj_base_t base;
216216
ADC_HandleTypeDef handle;
217-
} pyb_obj_adc_all_t;
217+
} pyb_adc_all_obj_t;
218218

219-
void adc_init_all(pyb_obj_adc_all_t *adc_all, uint32_t resolution) {
219+
void adc_init_all(pyb_adc_all_obj_t *adc_all, uint32_t resolution) {
220220

221221
switch (resolution) {
222222
case 6: resolution = ADC_RESOLUTION6b; break;
@@ -314,65 +314,59 @@ float adc_read_core_vref(ADC_HandleTypeDef *adcHandle) {
314314
/******************************************************************************/
315315
/* Micro Python bindings : adc_all object */
316316

317-
STATIC void adc_all_print(void (*print)(void *env, const char *fmt, ...), void *env, mp_obj_t self_in, mp_print_kind_t kind) {
318-
print(env, "<ADC all>");
317+
STATIC mp_obj_t adc_all_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp_obj_t *args) {
318+
// check number of arguments
319+
mp_check_nargs(n_args, 1, 1, n_kw, false);
320+
321+
// make ADCAll object
322+
pyb_adc_all_obj_t *o = m_new_obj(pyb_adc_all_obj_t);
323+
o->base.type = &pyb_adc_all_type;
324+
adc_init_all(o, mp_obj_get_int(args[0])); // args[0] is the resolution
325+
326+
return o;
319327
}
320328

321329
STATIC mp_obj_t adc_all_read_channel(mp_obj_t self_in, mp_obj_t channel) {
322-
pyb_obj_adc_all_t *self = self_in;
323-
330+
pyb_adc_all_obj_t *self = self_in;
324331
uint32_t chan = mp_obj_get_int(channel);
325332
uint32_t data = adc_config_and_read_channel(&self->handle, chan);
326333
return mp_obj_new_int(data);
327334
}
335+
STATIC MP_DEFINE_CONST_FUN_OBJ_2(adc_all_read_channel_obj, adc_all_read_channel);
328336

329337
STATIC mp_obj_t adc_all_read_core_temp(mp_obj_t self_in) {
330-
pyb_obj_adc_all_t *self = self_in;
331-
338+
pyb_adc_all_obj_t *self = self_in;
332339
int data = adc_read_core_temp(&self->handle);
333340
return mp_obj_new_int(data);
334341
}
342+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(adc_all_read_core_temp_obj, adc_all_read_core_temp);
335343

336344
STATIC mp_obj_t adc_all_read_core_vbat(mp_obj_t self_in) {
337-
pyb_obj_adc_all_t *self = self_in;
338-
345+
pyb_adc_all_obj_t *self = self_in;
339346
float data = adc_read_core_vbat(&self->handle);
340347
return mp_obj_new_float(data);
341348
}
349+
STATIC MP_DEFINE_CONST_FUN_OBJ_1(adc_all_read_core_vbat_obj, adc_all_read_core_vbat);
342350

343351
STATIC mp_obj_t adc_all_read_core_vref(mp_obj_t self_in) {
344-
pyb_obj_adc_all_t *self = self_in;
345-
352+
pyb_adc_all_obj_t *self = self_in;
346353
float data = adc_read_core_vref(&self->handle);
347354
return mp_obj_new_float(data);
348355
}
349-
350-
STATIC MP_DEFINE_CONST_FUN_OBJ_2(adc_all_read_channel_obj, adc_all_read_channel);
351-
STATIC MP_DEFINE_CONST_FUN_OBJ_1(adc_all_read_core_temp_obj, adc_all_read_core_temp);
352-
STATIC MP_DEFINE_CONST_FUN_OBJ_1(adc_all_read_core_vbat_obj, adc_all_read_core_vbat);
353356
STATIC MP_DEFINE_CONST_FUN_OBJ_1(adc_all_read_core_vref_obj, adc_all_read_core_vref);
354357

355358
STATIC const mp_map_elem_t adc_all_locals_dict_table[] = {
356-
{ MP_OBJ_NEW_QSTR(MP_QSTR_read_channel), (mp_obj_t) &adc_all_read_channel_obj},
359+
{ MP_OBJ_NEW_QSTR(MP_QSTR_read_channel), (mp_obj_t)&adc_all_read_channel_obj},
357360
{ MP_OBJ_NEW_QSTR(MP_QSTR_read_core_temp), (mp_obj_t)&adc_all_read_core_temp_obj},
358361
{ MP_OBJ_NEW_QSTR(MP_QSTR_read_core_vbat), (mp_obj_t)&adc_all_read_core_vbat_obj},
359362
{ MP_OBJ_NEW_QSTR(MP_QSTR_read_core_vref), (mp_obj_t)&adc_all_read_core_vref_obj},
360363
};
361364

362365
STATIC MP_DEFINE_CONST_DICT(adc_all_locals_dict, adc_all_locals_dict_table);
363366

364-
STATIC const mp_obj_type_t adc_all_type = {
367+
const mp_obj_type_t pyb_adc_all_type = {
365368
{ &mp_type_type },
366-
.name = MP_QSTR_ADC,
367-
.print = adc_all_print,
369+
.name = MP_QSTR_ADCAll,
370+
.make_new = adc_all_make_new,
368371
.locals_dict = (mp_obj_t)&adc_all_locals_dict,
369372
};
370-
371-
STATIC mp_obj_t pyb_ADC_all(mp_obj_t resolution) {
372-
pyb_obj_adc_all_t *o = m_new_obj(pyb_obj_adc_all_t);
373-
o->base.type = &adc_all_type;
374-
adc_init_all(o, mp_obj_get_int(resolution));
375-
return o;
376-
}
377-
378-
MP_DEFINE_CONST_FUN_OBJ_1(pyb_ADC_all_obj, pyb_ADC_all);

stmhal/adc.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
11
extern const mp_obj_type_t pyb_adc_type;
2-
3-
MP_DECLARE_CONST_FUN_OBJ(pyb_ADC_all_obj);
2+
extern const mp_obj_type_t pyb_adc_all_type;

stmhal/boards/stm32f4xx-prefix.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@
22

33
#include <stdio.h>
44
#include <stdint.h>
5-
#include <stm32f4xx_hal.h>
5+
6+
#include "stm32f4xx_hal.h"
67

78
#include "misc.h"
89
#include "mpconfig.h"
910
#include "qstr.h"
1011
#include "obj.h"
11-
1212
#include "pin.h"
1313

1414
#define AF(af_idx, af_fn, af_unit, af_type, af_ptr) \
1515
{ \
16-
{ &pin_af_obj_type }, \
16+
{ &pin_af_type }, \
1717
.idx = (af_idx), \
1818
.fn = AF_FN_ ## af_fn, \
1919
.unit = (af_unit), \
@@ -23,7 +23,7 @@
2323

2424
#define PIN(p_port, p_pin, p_num_af, p_af, p_adc_num, p_adc_channel) \
2525
{ \
26-
{ &pin_obj_type }, \
26+
{ &pin_type }, \
2727
.name = #p_port #p_pin, \
2828
.port = PORT_ ## p_port, \
2929
.pin = (p_pin), \

0 commit comments

Comments
 (0)