From 3dd59c3d5fa59f5bea3acc8e55c4d4a5091e66eb Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 10 Jan 2019 11:00:40 -0800 Subject: [PATCH] Polish thanks to Dan's feedback --- .travis.yml | 2 +- shared-bindings/usb_midi/PortIn.c | 3 +++ shared-bindings/usb_midi/PortOut.c | 3 +++ shared-module/usb_midi/__init__.c | 13 +++---------- supervisor/memory.h | 9 +++++++++ tools/gen_usb_descriptor.py | 2 ++ 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index d3e9f4bf18..bab5a24562 100755 --- a/.travis.yml +++ b/.travis.yml @@ -21,7 +21,7 @@ git: # that SDK is shortest and add it there. In the case of major re-organizations, # just try to make the builds "about equal in run time" env: - - TRAVIS_TESTS="unix docs translations website" TRAVIS_BOARDS="feather_huzzah circuitplayground_express mini_sam_m4 grandcentral_m4_express pca10056 pca10059 feather_nrf52832 feather_nrf52840_express makerdiary_nrf52840_mdk particle_boron particle_argon particle_xenon sparkfun_nrf52840_mini" TRAVIS_SDK=arm:nrf:esp8266 + - TRAVIS_TESTS="unix docs translations website" TRAVIS_BOARDS="feather_huzzah circuitplayground_express mini_sam_m4 grandcentral_m4_express pca10056 pca10059 feather_nrf52840_express makerdiary_nrf52840_mdk particle_boron particle_argon particle_xenon sparkfun_nrf52840_mini" TRAVIS_SDK=arm:nrf:esp8266 - TRAVIS_BOARDS="metro_m0_express metro_m4_express pirkey_m0 trellis_m4_express trinket_m0" TRAVIS_SDK=arm - TRAVIS_BOARDS="feather_radiofruit_zigbee gemma_m0 hallowing_m0_express itsybitsy_m0_express itsybitsy_m4_express meowmeow" TRAVIS_SDK=arm - TRAVIS_BOARDS="feather_m0_express_crickit feather_m0_rfm69 feather_m0_rfm9x feather_m4_express arduino_zero arduino_mkr1300 arduino_mkrzero" TRAVIS_SDK=arm diff --git a/shared-bindings/usb_midi/PortIn.c b/shared-bindings/usb_midi/PortIn.c index 0309b70f76..3c4d4f73f6 100644 --- a/shared-bindings/usb_midi/PortIn.c +++ b/shared-bindings/usb_midi/PortIn.c @@ -45,6 +45,9 @@ //| //| Not currently dynamically supported. //| +//| PortIn objects are constructed for every corresponding entry in the USB descriptor and added +//| to the `usb_midi.ports` tuple. +//| STATIC mp_obj_t usb_midi_portin_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *pos_args) { return mp_const_none; diff --git a/shared-bindings/usb_midi/PortOut.c b/shared-bindings/usb_midi/PortOut.c index 156a092e04..8b26b8ffc4 100644 --- a/shared-bindings/usb_midi/PortOut.c +++ b/shared-bindings/usb_midi/PortOut.c @@ -45,6 +45,9 @@ //| //| Not currently dynamically supported. //| +//| PortOut objects are constructed for every corresponding entry in the USB descriptor and added +//| to the `usb_midi.ports` tuple. +//| STATIC mp_obj_t usb_midi_portout_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *pos_args) { return mp_const_none; diff --git a/shared-module/usb_midi/__init__.c b/shared-module/usb_midi/__init__.c index 60afeeef1d..73a314b997 100644 --- a/shared-module/usb_midi/__init__.c +++ b/shared-module/usb_midi/__init__.c @@ -38,18 +38,11 @@ supervisor_allocation* usb_midi_allocation; -static inline uint16_t word_align(uint16_t size) { - if (size % 4 != 0) { - return (size & 0xfffc) + 0x4; - } - return size; -} - void usb_midi_init(void) { // TODO(tannewt): Make this dynamic. - uint16_t tuple_size = word_align(sizeof(mp_obj_tuple_t) + sizeof(mp_obj_t*) * 2); - uint16_t portin_size = word_align(sizeof(usb_midi_portin_obj_t)); - uint16_t portout_size = word_align(sizeof(usb_midi_portout_obj_t)); + uint16_t tuple_size = align32_size(sizeof(mp_obj_tuple_t) + sizeof(mp_obj_t*) * 2); + uint16_t portin_size = align32_size(sizeof(usb_midi_portin_obj_t)); + uint16_t portout_size = align32_size(sizeof(usb_midi_portout_obj_t)); // For each embedded MIDI Jack in the descriptor we create a Port usb_midi_allocation = allocate_memory(tuple_size + portin_size + portout_size, false); diff --git a/supervisor/memory.h b/supervisor/memory.h index 4f8317a2df..c89f14bd9e 100755 --- a/supervisor/memory.h +++ b/supervisor/memory.h @@ -39,6 +39,8 @@ typedef struct { uint32_t length; // in bytes } supervisor_allocation; + + void memory_init(void); void free_memory(supervisor_allocation* allocation); supervisor_allocation* allocate_remaining_memory(void); @@ -48,4 +50,11 @@ supervisor_allocation* allocate_remaining_memory(void); // statically allocated memory. supervisor_allocation* allocate_memory(uint32_t length, bool high_address); +static inline uint16_t align32_size(uint16_t size) { + if (size % 4 != 0) { + return (size & 0xfffc) + 0x4; + } + return size; +} + #endif // MICROPY_INCLUDED_SUPERVISOR_MEMORY_H diff --git a/tools/gen_usb_descriptor.py b/tools/gen_usb_descriptor.py index e8d66443d8..10bbf50663 100644 --- a/tools/gen_usb_descriptor.py +++ b/tools/gen_usb_descriptor.py @@ -274,6 +274,8 @@ descriptor_list = [] descriptor_list.append(cdc_iad) descriptor_list.extend(cdc_interfaces) descriptor_list.extend(msc_interfaces) +# Only add the control interface because other audio interfaces are managed by it to ensure the +# correct ordering. descriptor_list.append(audio_control_interface) # Put the CDC IAD just before the CDC interfaces. # There appears to be a bug in the Windows composite USB driver that requests the