Merge branch 'pin-commonhal-additions' into stm32-neopixel
This commit is contained in:
commit
e1579a1cc5
@ -158,6 +158,14 @@ void reset_pin_number(uint8_t pin_number) {
|
||||
#endif
|
||||
}
|
||||
|
||||
void common_hal_never_reset_pin(const mcu_pin_obj_t* pin) {
|
||||
never_reset_pin_number(pin->number);
|
||||
}
|
||||
|
||||
void common_hal_reset_pin(const mcu_pin_obj_t* pin) {
|
||||
reset_pin_number(pin->number);
|
||||
}
|
||||
|
||||
void claim_pin(const mcu_pin_obj_t* pin) {
|
||||
#ifdef MICROPY_HW_NEOPIXEL
|
||||
if (pin == MICROPY_HW_NEOPIXEL) {
|
||||
|
@ -125,6 +125,14 @@ void never_reset_pin_number(uint8_t pin_number) {
|
||||
never_reset_pins[nrf_pin_port(pin_number)] |= 1 << nrf_relative_pin_number(pin_number);
|
||||
}
|
||||
|
||||
void common_hal_never_reset_pin(const mcu_pin_obj_t* pin) {
|
||||
never_reset_pin_number(pin->number);
|
||||
}
|
||||
|
||||
void common_hal_reset_pin(const mcu_pin_obj_t* pin) {
|
||||
reset_pin_number(pin->number);
|
||||
}
|
||||
|
||||
void claim_pin(const mcu_pin_obj_t* pin) {
|
||||
// Set bit in claimed_pins bitmask.
|
||||
claimed_pins[nrf_pin_port(pin->number)] |= 1 << nrf_relative_pin_number(pin->number);
|
||||
|
@ -72,6 +72,14 @@ void never_reset_pin_number(uint8_t pin_port, uint8_t pin_number) {
|
||||
never_reset_pins[pin_port] |= 1<<pin_number;
|
||||
}
|
||||
|
||||
void common_hal_never_reset_pin(const mcu_pin_obj_t* pin) {
|
||||
never_reset_pin_number(pin->port, pin->number);
|
||||
}
|
||||
|
||||
void common_hal_reset_pin(const mcu_pin_obj_t* pin) {
|
||||
reset_pin_number(pin->port, pin->number);
|
||||
}
|
||||
|
||||
void claim_pin(const mcu_pin_obj_t* pin) {
|
||||
// Set bit in claimed_pins bitmask.
|
||||
claimed_pins[pin->port] |= 1<<pin->number;
|
||||
|
@ -201,7 +201,7 @@ STATIC mp_obj_t bleio_adapter_stop_advertising(mp_obj_t self_in) {
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_1(bleio_adapter_stop_advertising_obj, bleio_adapter_stop_advertising);
|
||||
|
||||
//| .. method:: start_scan(prefixes=b"", \*, buffer_size=512, extended=False, timeout=None, interval=0.1, window=0.1, minimum_rssi=-80)
|
||||
//| .. method:: start_scan(prefixes=b"", \*, buffer_size=512, extended=False, timeout=None, interval=0.1, window=0.1, minimum_rssi=-80, active=True)
|
||||
//|
|
||||
//| Starts a BLE scan and returns an iterator of results. Advertisements and scan responses are
|
||||
//| filtered and returned separately.
|
||||
@ -227,7 +227,7 @@ STATIC mp_obj_t bleio_adapter_start_scan(size_t n_args, const mp_obj_t *pos_args
|
||||
{ MP_QSTR_prefixes, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
|
||||
{ MP_QSTR_buffer_size, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 512} },
|
||||
{ MP_QSTR_extended, MP_ARG_KW_ONLY | MP_ARG_BOOL, {.u_bool = false} },
|
||||
{ MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
|
||||
{ MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = mp_const_none} },
|
||||
{ MP_QSTR_interval, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
|
||||
{ MP_QSTR_window, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
|
||||
{ MP_QSTR_minimum_rssi, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = -80} },
|
||||
@ -239,7 +239,7 @@ STATIC mp_obj_t bleio_adapter_start_scan(size_t n_args, const mp_obj_t *pos_args
|
||||
mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
||||
|
||||
mp_float_t timeout = 0;
|
||||
if (args[ARG_timeout].u_obj != MP_OBJ_NULL) {
|
||||
if (args[ARG_timeout].u_obj != mp_const_none) {
|
||||
timeout = mp_obj_get_float(args[ARG_timeout].u_obj);
|
||||
}
|
||||
|
||||
@ -306,7 +306,7 @@ const mp_obj_property_t bleio_adapter_connected_obj = {
|
||||
|
||||
//| .. attribute:: connections
|
||||
//|
|
||||
//| Tuple of active connections including those initiated through
|
||||
//| Tuple of active connections including those initiated through
|
||||
//| :py:meth:`_bleio.Adapter.connect`. (read-only)
|
||||
//|
|
||||
STATIC mp_obj_t bleio_adapter_get_connections(mp_obj_t self) {
|
||||
|
@ -37,5 +37,7 @@ void assert_pin(mp_obj_t obj, bool none_ok);
|
||||
void assert_pin_free(const mcu_pin_obj_t* pin);
|
||||
|
||||
bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t* pin);
|
||||
void common_hal_never_reset_pin(const mcu_pin_obj_t* pin);
|
||||
void common_hal_reset_pin(const mcu_pin_obj_t* pin);
|
||||
|
||||
#endif // MICROPY_INCLUDED_SHARED_BINDINGS_MICROCONTROLLER_PIN_H
|
||||
|
@ -113,7 +113,7 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self,
|
||||
if (result != PWMOUT_OK) {
|
||||
self->backlight_inout.base.type = &digitalio_digitalinout_type;
|
||||
common_hal_digitalio_digitalinout_construct(&self->backlight_inout, backlight_pin);
|
||||
never_reset_pin_number(backlight_pin->number);
|
||||
common_hal_never_reset_pin(backlight_pin);
|
||||
} else {
|
||||
self->backlight_pwm.base.type = &pulseio_pwmout_type;
|
||||
common_hal_pulseio_pwmout_never_reset(&self->backlight_pwm);
|
||||
|
@ -82,7 +82,7 @@ void common_hal_displayio_epaperdisplay_construct(displayio_epaperdisplay_obj_t*
|
||||
if (busy_pin != NULL) {
|
||||
self->busy.base.type = &digitalio_digitalinout_type;
|
||||
common_hal_digitalio_digitalinout_construct(&self->busy, busy_pin);
|
||||
never_reset_pin_number(busy_pin->number);
|
||||
common_hal_never_reset_pin(busy_pin);
|
||||
}
|
||||
|
||||
// Clear the color memory if it isn't in use.
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include "py/gc.h"
|
||||
#include "shared-bindings/busio/SPI.h"
|
||||
#include "shared-bindings/digitalio/DigitalInOut.h"
|
||||
#include "shared-bindings/microcontroller/Pin.h"
|
||||
#include "shared-bindings/microcontroller/__init__.h"
|
||||
#include "shared-bindings/time/__init__.h"
|
||||
#include "shared-module/displayio/display_core.h"
|
||||
@ -61,12 +62,12 @@ void common_hal_displayio_fourwire_construct(displayio_fourwire_obj_t* self,
|
||||
self->reset.base.type = &digitalio_digitalinout_type;
|
||||
common_hal_digitalio_digitalinout_construct(&self->reset, reset);
|
||||
common_hal_digitalio_digitalinout_switch_to_output(&self->reset, true, DRIVE_MODE_PUSH_PULL);
|
||||
never_reset_pin_number(reset->number);
|
||||
common_hal_never_reset_pin(reset);
|
||||
common_hal_displayio_fourwire_reset(self);
|
||||
}
|
||||
|
||||
never_reset_pin_number(command->number);
|
||||
never_reset_pin_number(chip_select->number);
|
||||
common_hal_never_reset_pin(command);
|
||||
common_hal_never_reset_pin(chip_select);
|
||||
}
|
||||
|
||||
void common_hal_displayio_fourwire_deinit(displayio_fourwire_obj_t* self) {
|
||||
@ -74,9 +75,9 @@ void common_hal_displayio_fourwire_deinit(displayio_fourwire_obj_t* self) {
|
||||
common_hal_busio_spi_deinit(self->bus);
|
||||
}
|
||||
|
||||
reset_pin_number(self->command.pin->number);
|
||||
reset_pin_number(self->chip_select.pin->number);
|
||||
reset_pin_number(self->reset.pin->number);
|
||||
common_hal_reset_pin(self->command.pin);
|
||||
common_hal_reset_pin(self->chip_select.pin);
|
||||
common_hal_reset_pin(self->reset.pin);
|
||||
}
|
||||
|
||||
bool common_hal_displayio_fourwire_reset(mp_obj_t obj) {
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "py/runtime.h"
|
||||
#include "shared-bindings/busio/I2C.h"
|
||||
#include "shared-bindings/digitalio/DigitalInOut.h"
|
||||
#include "shared-bindings/microcontroller/Pin.h"
|
||||
#include "shared-bindings/microcontroller/__init__.h"
|
||||
#include "shared-bindings/time/__init__.h"
|
||||
#include "shared-module/displayio/display_core.h"
|
||||
@ -48,7 +49,7 @@ void common_hal_displayio_i2cdisplay_construct(displayio_i2cdisplay_obj_t* self,
|
||||
self->reset.base.type = &digitalio_digitalinout_type;
|
||||
common_hal_digitalio_digitalinout_construct(&self->reset, reset);
|
||||
common_hal_digitalio_digitalinout_switch_to_output(&self->reset, true, DRIVE_MODE_PUSH_PULL);
|
||||
never_reset_pin_number(reset->number);
|
||||
common_hal_never_reset_pin(reset);
|
||||
common_hal_displayio_i2cdisplay_reset(self);
|
||||
}
|
||||
|
||||
@ -72,7 +73,7 @@ void common_hal_displayio_i2cdisplay_deinit(displayio_i2cdisplay_obj_t* self) {
|
||||
common_hal_busio_i2c_deinit(self->bus);
|
||||
}
|
||||
|
||||
reset_pin_number(self->reset.pin->number);
|
||||
common_hal_reset_pin(self->reset.pin);
|
||||
}
|
||||
|
||||
bool common_hal_displayio_i2cdisplay_reset(mp_obj_t obj) {
|
||||
|
@ -117,7 +117,7 @@ void rgb_led_status_init() {
|
||||
mp_const_none);
|
||||
#else
|
||||
if (!common_hal_busio_spi_deinited(&status_apa102)) {
|
||||
// This may call us recursively if reset_pin_number() is called,
|
||||
// This may call us recursively if common_hal_reset_pin() is called,
|
||||
// The rgb_led_status_init_in_progress guard will prevent further recursion.
|
||||
common_hal_busio_spi_deinit(&status_apa102);
|
||||
}
|
||||
@ -181,11 +181,11 @@ void rgb_led_status_init() {
|
||||
|
||||
void reset_status_led() {
|
||||
#ifdef MICROPY_HW_NEOPIXEL
|
||||
reset_pin_number(MICROPY_HW_NEOPIXEL->number);
|
||||
common_hal_reset_pin(MICROPY_HW_NEOPIXEL);
|
||||
#endif
|
||||
#if defined(MICROPY_HW_APA102_MOSI) && defined(MICROPY_HW_APA102_SCK)
|
||||
reset_pin_number(MICROPY_HW_APA102_MOSI->number);
|
||||
reset_pin_number(MICROPY_HW_APA102_SCK->number);
|
||||
common_hal_reset_pin(MICROPY_HW_APA102_MOSI);
|
||||
common_hal_reset_pin(MICROPY_HW_APA102_SCK);
|
||||
#endif
|
||||
#if defined(CP_RGB_STATUS_LED)
|
||||
// TODO: Support sharing status LED with user.
|
||||
|
@ -91,6 +91,10 @@ else
|
||||
CFLAGS += -DUSB_AVAILABLE
|
||||
endif
|
||||
|
||||
ifndef USB_INTERFACE_NAME
|
||||
USB_INTERFACE_NAME = "CircuitPython"
|
||||
endif
|
||||
|
||||
ifndef USB_DEVICES
|
||||
USB_DEVICES = "CDC,MSC,AUDIO,HID"
|
||||
endif
|
||||
@ -145,6 +149,7 @@ USB_DESCRIPTOR_ARGS = \
|
||||
--vid $(USB_VID)\
|
||||
--pid $(USB_PID)\
|
||||
--serial_number_length $(USB_SERIAL_NUMBER_LENGTH)\
|
||||
--interface_name $(USB_INTERFACE_NAME)\
|
||||
--devices $(USB_DEVICES)\
|
||||
--hid_devices $(USB_HID_DEVICES)\
|
||||
--msc_max_packet_size $(USB_MSC_MAX_PACKET_SIZE)\
|
||||
|
@ -8,6 +8,7 @@ sys.path.append("../../tools/usb_descriptor")
|
||||
from adafruit_usb_descriptor import audio, audio10, cdc, hid, midi, msc, standard, util
|
||||
import hid_report_descriptors
|
||||
|
||||
DEFAULT_INTERFACE_NAME = 'CircuitPython'
|
||||
ALL_DEVICES='CDC,MSC,AUDIO,HID'
|
||||
ALL_DEVICES_SET=frozenset(ALL_DEVICES.split(','))
|
||||
DEFAULT_DEVICES='CDC,MSC,AUDIO,HID'
|
||||
@ -32,6 +33,9 @@ parser.add_argument('--devices', type=lambda l: tuple(l.split(',')), default=DEF
|
||||
help='devices to include in descriptor (AUDIO includes MIDI support)')
|
||||
parser.add_argument('--hid_devices', type=lambda l: tuple(l.split(',')), default=DEFAULT_HID_DEVICES,
|
||||
help='HID devices to include in HID report descriptor')
|
||||
parser.add_argument('--interface_name', type=str,
|
||||
help='The name/prefix to use in the interface descriptions',
|
||||
default=DEFAULT_INTERFACE_NAME)
|
||||
parser.add_argument('--msc_max_packet_size', type=int, default=64,
|
||||
help='Max packet size for MSC')
|
||||
parser.add_argument('--no-renumber_endpoints', dest='renumber_endpoints', action='store_false',
|
||||
@ -151,7 +155,7 @@ cdc_comm_interface = standard.InterfaceDescriptor(
|
||||
bInterfaceClass=cdc.CDC_CLASS_COMM, # Communications Device Class
|
||||
bInterfaceSubClass=cdc.CDC_SUBCLASS_ACM, # Abstract control model
|
||||
bInterfaceProtocol=cdc.CDC_PROTOCOL_NONE,
|
||||
iInterface=StringIndex.index("CircuitPython CDC control"),
|
||||
iInterface=StringIndex.index("{} CDC control".format(args.interface_name)),
|
||||
subdescriptors=[
|
||||
cdc.Header(
|
||||
description="CDC comm",
|
||||
@ -172,7 +176,7 @@ cdc_comm_interface = standard.InterfaceDescriptor(
|
||||
cdc_data_interface = standard.InterfaceDescriptor(
|
||||
description="CDC data",
|
||||
bInterfaceClass=cdc.CDC_CLASS_DATA,
|
||||
iInterface=StringIndex.index("CircuitPython CDC data"),
|
||||
iInterface=StringIndex.index("{} CDC data".format(args.interface_name)),
|
||||
subdescriptors=[
|
||||
standard.EndpointDescriptor(
|
||||
description="CDC data out",
|
||||
@ -192,7 +196,7 @@ msc_interfaces = [
|
||||
bInterfaceClass=msc.MSC_CLASS,
|
||||
bInterfaceSubClass=msc.MSC_SUBCLASS_TRANSPARENT,
|
||||
bInterfaceProtocol=msc.MSC_PROTOCOL_BULK,
|
||||
iInterface=StringIndex.index("CircuitPython Mass Storage"),
|
||||
iInterface=StringIndex.index("{} Mass Storage".format(args.interface_name)),
|
||||
subdescriptors=[
|
||||
standard.EndpointDescriptor(
|
||||
description="MSC in",
|
||||
@ -256,7 +260,7 @@ hid_interfaces = [
|
||||
bInterfaceClass=hid.HID_CLASS,
|
||||
bInterfaceSubClass=hid.HID_SUBCLASS_NOBOOT,
|
||||
bInterfaceProtocol=hid.HID_PROTOCOL_NONE,
|
||||
iInterface=StringIndex.index("CircuitPython HID"),
|
||||
iInterface=StringIndex.index("{} HID".format(args.interface_name)),
|
||||
subdescriptors=[
|
||||
hid.HIDDescriptor(
|
||||
description="HID",
|
||||
@ -272,9 +276,9 @@ hid_interfaces = [
|
||||
|
||||
# USB OUT -> midi_in_jack_emb -> midi_out_jack_ext -> CircuitPython
|
||||
midi_in_jack_emb = midi.InJackDescriptor(
|
||||
description="MIDI PC -> CircuitPython",
|
||||
description="MIDI PC -> {}".format(args.interface_name),
|
||||
bJackType=midi.JACK_TYPE_EMBEDDED,
|
||||
iJack=StringIndex.index("CircuitPython usb_midi.ports[0]"))
|
||||
iJack=StringIndex.index("{} usb_midi.ports[0]".format(args.interface_name)))
|
||||
midi_out_jack_ext = midi.OutJackDescriptor(
|
||||
description="MIDI data out to user code.",
|
||||
bJackType=midi.JACK_TYPE_EXTERNAL,
|
||||
@ -287,10 +291,10 @@ midi_in_jack_ext = midi.InJackDescriptor(
|
||||
bJackType=midi.JACK_TYPE_EXTERNAL,
|
||||
iJack=0)
|
||||
midi_out_jack_emb = midi.OutJackDescriptor(
|
||||
description="MIDI PC <- CircuitPython",
|
||||
description="MIDI PC <- {}".format(args.interface_name),
|
||||
bJackType=midi.JACK_TYPE_EMBEDDED,
|
||||
input_pins=[(midi_in_jack_ext, 1)],
|
||||
iJack=StringIndex.index("CircuitPython usb_midi.ports[1]"))
|
||||
iJack=StringIndex.index("{} usb_midi.ports[1]".format(args.interface_name)))
|
||||
|
||||
|
||||
audio_midi_interface = standard.InterfaceDescriptor(
|
||||
@ -298,7 +302,7 @@ audio_midi_interface = standard.InterfaceDescriptor(
|
||||
bInterfaceClass=audio.AUDIO_CLASS_DEVICE,
|
||||
bInterfaceSubClass=audio.AUDIO_SUBCLASS_MIDI_STREAMING,
|
||||
bInterfaceProtocol=audio.AUDIO_PROTOCOL_V1,
|
||||
iInterface=StringIndex.index("CircuitPython MIDI"),
|
||||
iInterface=StringIndex.index("{} MIDI".format(args.interface_name)),
|
||||
subdescriptors=[
|
||||
midi.Header(
|
||||
jacks_and_elements=[
|
||||
@ -309,12 +313,12 @@ audio_midi_interface = standard.InterfaceDescriptor(
|
||||
],
|
||||
),
|
||||
standard.EndpointDescriptor(
|
||||
description="MIDI data out to CircuitPython",
|
||||
description="MIDI data out to {}".format(args.interface_name),
|
||||
bEndpointAddress=args.midi_ep_num_out | standard.EndpointDescriptor.DIRECTION_OUT,
|
||||
bmAttributes=standard.EndpointDescriptor.TYPE_BULK),
|
||||
midi.DataEndpointDescriptor(baAssocJack=[midi_in_jack_emb]),
|
||||
standard.EndpointDescriptor(
|
||||
description="MIDI data in from CircuitPython",
|
||||
description="MIDI data in from {}".format(args.interface_name),
|
||||
bEndpointAddress=args.midi_ep_num_in | standard.EndpointDescriptor.DIRECTION_IN,
|
||||
bmAttributes=standard.EndpointDescriptor.TYPE_BULK,
|
||||
bInterval = 0x0),
|
||||
@ -334,7 +338,7 @@ audio_control_interface = standard.InterfaceDescriptor(
|
||||
bInterfaceClass=audio.AUDIO_CLASS_DEVICE,
|
||||
bInterfaceSubClass=audio.AUDIO_SUBCLASS_CONTROL,
|
||||
bInterfaceProtocol=audio.AUDIO_PROTOCOL_V1,
|
||||
iInterface=StringIndex.index("CircuitPython Audio"),
|
||||
iInterface=StringIndex.index("{} Audio".format(args.interface_name)),
|
||||
subdescriptors=[
|
||||
cs_ac_interface,
|
||||
])
|
||||
|
Loading…
Reference in New Issue
Block a user