diff --git a/.travis.yml b/.travis.yml index 160bd47..2183074 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,7 +2,7 @@ language: C env: global: - IDE_VERSION=1.8.12 - - TEENSY_VERSION=151 + - TEENSY_VERSION=152 - IDE_LOCATION=/usr/local/share/arduino - BOARDS_DESTINATION=$IDE_LOCATION/hardware diff --git a/README.md b/README.md index c0440fa..23b2b8d 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ This is meant to be used in conjunction with the [ArduinoXInput library](https:/ ## Installation -You must have both [Arduino](https://www.arduino.cc/en/main/software) and [Teensyduino](https://www.pjrc.com/teensy/td_download.html) installed before proceeding. Double-check that your installed Teensyduino version matches the files provided in this repository. This repository is currently using version [**1.51**](https://www.pjrc.com/teensy/td_151). If you don't know your Teensyduino version, compile a blank sketch with a Teensy board selected and the Teensy Loader will open. In the Teensy Loader window select `Help -> About` and it will tell you the version number. If your version does not match you will have to reinstall or update the Teensyduino software. +You must have both [Arduino](https://www.arduino.cc/en/main/software) and [Teensyduino](https://www.pjrc.com/teensy/td_download.html) installed before proceeding. Double-check that your installed Teensyduino version matches the files provided in this repository. This repository is currently using version [**1.52**](https://www.pjrc.com/teensy/td_152). If you don't know your Teensyduino version, compile a blank sketch with a Teensy board selected and the Teensy Loader will open. In the Teensy Loader window select `Help -> About` and it will tell you the version number. If your version does not match you will have to reinstall or update the Teensyduino software. Navigate to your Arduino installation directory and open up the 'hardware' folder. It is recommended that you make a backup of this folder before proceeding in case something goes wrong or if you want to revert the installation. diff --git a/teensy/avr/boards.txt b/teensy/avr/boards.txt index 8d74b25..210cf01 100644 --- a/teensy/avr/boards.txt +++ b/teensy/avr/boards.txt @@ -4,208 +4,213 @@ menu.opt=Optimize menu.keys=Keyboard Layout -#teensy41.name=Teensy 4.1 -#teensy41.upload.maximum_size=8126464 -#teensy41.upload.maximum_data_size=524288 -##teensy41.upload.maximum_data_size=1048576 -#teensy41.upload.tool=teensyloader -#teensy41.upload.protocol=halfkay -#teensy41.build.board=TEENSY41 -#teensy41.build.core=teensy4 -#teensy41.build.mcu=imxrt1062 -#teensy41.build.warn_data_percentage=99 -#teensy41.build.toolchain=arm/bin/ -#teensy41.build.command.gcc=arm-none-eabi-gcc -#teensy41.build.command.g++=arm-none-eabi-g++ -#teensy41.build.command.ar=arm-none-eabi-gcc-ar -#teensy41.build.command.objcopy=arm-none-eabi-objcopy -#teensy41.build.command.objdump=arm-none-eabi-objdump -#teensy41.build.command.linker=arm-none-eabi-gcc -#teensy41.build.command.size=arm-none-eabi-size -#teensy41.build.flags.common=-g -Wall -ffunction-sections -fdata-sections -nostdlib -#teensy41.build.flags.dep=-MMD -#teensy41.build.flags.optimize=-Os -#teensy41.build.flags.cpu=-mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -#teensy41.build.flags.defs=-D__IMXRT1062__ -DTEENSYDUINO=151 -#teensy41.build.flags.cpp=-std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing -#teensy41.build.flags.c= -#teensy41.build.flags.S=-x assembler-with-cpp -#teensy41.build.flags.ld=-Wl,--gc-sections,--relax "-T{build.core.path}/imxrt1062_t41.ld" -#teensy41.build.flags.libs=-larm_cortexM7lfsp_math -lm -lstdc++ -#teensy41.serial.restart_cmd=false -#teensy41.menu.usb.serial=Serial -#teensy41.menu.usb.serial.build.usbtype=USB_SERIAL -#teensy41.menu.usb.keyboard=Keyboard -#teensy41.menu.usb.keyboard.build.usbtype=USB_KEYBOARDONLY -#teensy41.menu.usb.keyboard.fake_serial=teensy_gateway -#teensy41.menu.usb.touch=Keyboard + Touch Screen -#teensy41.menu.usb.touch.build.usbtype=USB_TOUCHSCREEN -#teensy41.menu.usb.touch.fake_serial=teensy_gateway -#teensy41.menu.usb.hidtouch=Keyboard + Mouse + Touch Screen -#teensy41.menu.usb.hidtouch.build.usbtype=USB_HID_TOUCHSCREEN -#teensy41.menu.usb.hidtouch.fake_serial=teensy_gateway -#teensy41.menu.usb.hid=Keyboard + Mouse + Joystick -#teensy41.menu.usb.hid.build.usbtype=USB_HID -#teensy41.menu.usb.hid.fake_serial=teensy_gateway -#teensy41.menu.usb.serialhid=Serial + Keyboard + Mouse + Joystick -#teensy41.menu.usb.serialhid.build.usbtype=USB_SERIAL_HID -#teensy41.menu.usb.midi=MIDI -#teensy41.menu.usb.midi.build.usbtype=USB_MIDI -#teensy41.menu.usb.midi.fake_serial=teensy_gateway -#teensy41.menu.usb.midi4=MIDIx4 -#teensy41.menu.usb.midi4.build.usbtype=USB_MIDI4 -#teensy41.menu.usb.midi4.fake_serial=teensy_gateway -#teensy41.menu.usb.midi16=MIDIx16 -#teensy41.menu.usb.midi16.build.usbtype=USB_MIDI16 -#teensy41.menu.usb.midi16.fake_serial=teensy_gateway -#teensy41.menu.usb.serialmidi=Serial + MIDI -#teensy41.menu.usb.serialmidi.build.usbtype=USB_MIDI_SERIAL -#teensy41.menu.usb.serialmidi4=Serial + MIDIx4 -#teensy41.menu.usb.serialmidi4.build.usbtype=USB_MIDI4_SERIAL -#teensy41.menu.usb.serialmidi16=Serial + MIDIx16 -#teensy41.menu.usb.serialmidi16.build.usbtype=USB_MIDI16_SERIAL -##teensy41.menu.usb.audio=Audio -##teensy41.menu.usb.audio.build.usbtype=USB_AUDIO -##teensy41.menu.usb.audio.fake_serial=teensy_gateway -##teensy41.menu.usb.serialmidiaudio=Serial + MIDI + Audio -##teensy41.menu.usb.serialmidiaudio.build.usbtype=USB_MIDI_AUDIO_SERIAL -##teensy41.menu.usb.serialmidi16audio=Serial + MIDIx16 + Audio -##teensy41.menu.usb.serialmidi16audio.build.usbtype=USB_MIDI16_AUDIO_SERIAL -##teensy41.menu.usb.mtp=MTP Disk (Experimental) -##teensy41.menu.usb.mtp.build.usbtype=USB_MTPDISK -##teensy41.menu.usb.mtp.fake_serial=teensy_gateway -#teensy41.menu.usb.rawhid=Raw HID -#teensy41.menu.usb.rawhid.build.usbtype=USB_RAWHID -#teensy41.menu.usb.rawhid.fake_serial=teensy_gateway -#teensy41.menu.usb.flightsim=Flight Sim Controls -#teensy41.menu.usb.flightsim.build.usbtype=USB_FLIGHTSIM -#teensy41.menu.usb.flightsim.fake_serial=teensy_gateway -#teensy41.menu.usb.flightsimjoystick=Flight Sim Controls + Joystick -#teensy41.menu.usb.flightsimjoystick.build.usbtype=USB_FLIGHTSIM_JOYSTICK -#teensy41.menu.usb.flightsimjoystick.fake_serial=teensy_gateway -##teensy41.menu.usb.disable=No USB -##teensy41.menu.usb.disable.build.usbtype=USB_DISABLED +teensy41.name=Teensy 4.1 +teensy41.upload.maximum_size=8126464 +teensy41.build.board=TEENSY41 +teensy41.build.flags.ld=-Wl,--gc-sections,--relax "-T{build.core.path}/imxrt1062_t41.ld" +teensy41.upload.maximum_data_size=524288 +#teensy41.upload.maximum_data_size=1048576 +teensy41.upload.tool=teensyloader +teensy41.upload.protocol=halfkay +teensy41.build.core=teensy4 +teensy41.build.mcu=imxrt1062 +teensy41.build.warn_data_percentage=99 +teensy41.build.toolchain=arm/bin/ +teensy41.build.command.gcc=arm-none-eabi-gcc +teensy41.build.command.g++=arm-none-eabi-g++ +teensy41.build.command.ar=arm-none-eabi-gcc-ar +teensy41.build.command.objcopy=arm-none-eabi-objcopy +teensy41.build.command.objdump=arm-none-eabi-objdump +teensy41.build.command.linker=arm-none-eabi-gcc +teensy41.build.command.size=arm-none-eabi-size +teensy41.build.flags.common=-g -Wall -ffunction-sections -fdata-sections -nostdlib +teensy41.build.flags.dep=-MMD +teensy41.build.flags.optimize=-Os +teensy41.build.flags.cpu=-mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 +teensy41.build.flags.defs=-D__IMXRT1062__ -DTEENSYDUINO=152 +teensy41.build.flags.cpp=-std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing +teensy41.build.flags.c= +teensy41.build.flags.S=-x assembler-with-cpp +teensy41.build.flags.libs=-larm_cortexM7lfsp_math -lm -lstdc++ +teensy41.serial.restart_cmd=false +teensy41.menu.usb.serial=Serial +teensy41.menu.usb.serial.build.usbtype=USB_SERIAL +teensy41.menu.usb.serial2=Dual Serial +teensy41.menu.usb.serial2.build.usbtype=USB_DUAL_SERIAL +teensy41.menu.usb.serial3=Triple Serial +teensy41.menu.usb.serial3.build.usbtype=USB_TRIPLE_SERIAL +teensy41.menu.usb.keyboard=Keyboard +teensy41.menu.usb.keyboard.build.usbtype=USB_KEYBOARDONLY +teensy41.menu.usb.keyboard.fake_serial=teensy_gateway +teensy41.menu.usb.touch=Keyboard + Touch Screen +teensy41.menu.usb.touch.build.usbtype=USB_TOUCHSCREEN +teensy41.menu.usb.touch.fake_serial=teensy_gateway +teensy41.menu.usb.hidtouch=Keyboard + Mouse + Touch Screen +teensy41.menu.usb.hidtouch.build.usbtype=USB_HID_TOUCHSCREEN +teensy41.menu.usb.hidtouch.fake_serial=teensy_gateway +teensy41.menu.usb.hid=Keyboard + Mouse + Joystick +teensy41.menu.usb.hid.build.usbtype=USB_HID +teensy41.menu.usb.hid.fake_serial=teensy_gateway +teensy41.menu.usb.serialhid=Serial + Keyboard + Mouse + Joystick +teensy41.menu.usb.serialhid.build.usbtype=USB_SERIAL_HID +teensy41.menu.usb.midi=MIDI +teensy41.menu.usb.midi.build.usbtype=USB_MIDI +teensy41.menu.usb.midi.fake_serial=teensy_gateway +teensy41.menu.usb.midi4=MIDIx4 +teensy41.menu.usb.midi4.build.usbtype=USB_MIDI4 +teensy41.menu.usb.midi4.fake_serial=teensy_gateway +teensy41.menu.usb.midi16=MIDIx16 +teensy41.menu.usb.midi16.build.usbtype=USB_MIDI16 +teensy41.menu.usb.midi16.fake_serial=teensy_gateway +teensy41.menu.usb.serialmidi=Serial + MIDI +teensy41.menu.usb.serialmidi.build.usbtype=USB_MIDI_SERIAL +teensy41.menu.usb.serialmidi4=Serial + MIDIx4 +teensy41.menu.usb.serialmidi4.build.usbtype=USB_MIDI4_SERIAL +teensy41.menu.usb.serialmidi16=Serial + MIDIx16 +teensy41.menu.usb.serialmidi16.build.usbtype=USB_MIDI16_SERIAL +teensy41.menu.usb.audio=Audio +teensy41.menu.usb.audio.build.usbtype=USB_AUDIO +teensy41.menu.usb.audio.fake_serial=teensy_gateway +teensy41.menu.usb.serialmidiaudio=Serial + MIDI + Audio +teensy41.menu.usb.serialmidiaudio.build.usbtype=USB_MIDI_AUDIO_SERIAL +teensy41.menu.usb.serialmidi16audio=Serial + MIDIx16 + Audio +teensy41.menu.usb.serialmidi16audio.build.usbtype=USB_MIDI16_AUDIO_SERIAL +teensy41.menu.usb.mtp=MTP Disk (Experimental) +teensy41.menu.usb.mtp.build.usbtype=USB_MTPDISK +teensy41.menu.usb.mtp.fake_serial=teensy_gateway +teensy41.menu.usb.rawhid=Raw HID +teensy41.menu.usb.rawhid.build.usbtype=USB_RAWHID +teensy41.menu.usb.rawhid.fake_serial=teensy_gateway +teensy41.menu.usb.flightsim=Flight Sim Controls +teensy41.menu.usb.flightsim.build.usbtype=USB_FLIGHTSIM +teensy41.menu.usb.flightsim.fake_serial=teensy_gateway +teensy41.menu.usb.flightsimjoystick=Flight Sim Controls + Joystick +teensy41.menu.usb.flightsimjoystick.build.usbtype=USB_FLIGHTSIM_JOYSTICK +teensy41.menu.usb.flightsimjoystick.fake_serial=teensy_gateway +#teensy41.menu.usb.disable=No USB +#teensy41.menu.usb.disable.build.usbtype=USB_DISABLED -#teensy41.menu.speed.600=600 MHz -#teensy41.menu.speed.528=528 MHz -#teensy41.menu.speed.450=450 MHz -#teensy41.menu.speed.396=396 MHz -#teensy41.menu.speed.150=150 MHz -#teensy41.menu.speed.24=24 MHz -#teensy41.menu.speed.720=720 MHz (overclock) -#teensy41.menu.speed.816=816 MHz (overclock) -#teensy41.menu.speed.912=912 MHz (overclock, cooling req'd) -#teensy41.menu.speed.960=960 MHz (overclock, cooling req'd) -#teensy41.menu.speed.1008=1.008 GHz (overclock, cooling req'd) -#teensy41.menu.speed.1008.build.fcpu=1008000000 -#teensy41.menu.speed.960.build.fcpu=960000000 -#teensy41.menu.speed.912.build.fcpu=912000000 -#teensy41.menu.speed.816.build.fcpu=816000000 -#teensy41.menu.speed.720.build.fcpu=720000000 -#teensy41.menu.speed.600.build.fcpu=600000000 -#teensy41.menu.speed.528.build.fcpu=528000000 -#teensy41.menu.speed.450.build.fcpu=450000000 -#teensy41.menu.speed.396.build.fcpu=396000000 -#teensy41.menu.speed.150.build.fcpu=150000000 -#teensy41.menu.speed.24.build.fcpu=24000000 +teensy41.menu.speed.600=600 MHz +teensy41.menu.speed.528=528 MHz +teensy41.menu.speed.450=450 MHz +teensy41.menu.speed.396=396 MHz +teensy41.menu.speed.150=150 MHz +teensy41.menu.speed.24=24 MHz +teensy41.menu.speed.720=720 MHz (overclock) +teensy41.menu.speed.816=816 MHz (overclock) +teensy41.menu.speed.912=912 MHz (overclock, cooling req'd) +teensy41.menu.speed.960=960 MHz (overclock, cooling req'd) +teensy41.menu.speed.1008=1.008 GHz (overclock, cooling req'd) +teensy41.menu.speed.1008.build.fcpu=1008000000 +teensy41.menu.speed.960.build.fcpu=960000000 +teensy41.menu.speed.912.build.fcpu=912000000 +teensy41.menu.speed.816.build.fcpu=816000000 +teensy41.menu.speed.720.build.fcpu=720000000 +teensy41.menu.speed.600.build.fcpu=600000000 +teensy41.menu.speed.528.build.fcpu=528000000 +teensy41.menu.speed.450.build.fcpu=450000000 +teensy41.menu.speed.396.build.fcpu=396000000 +teensy41.menu.speed.150.build.fcpu=150000000 +teensy41.menu.speed.24.build.fcpu=24000000 -#teensy41.menu.opt.o2std=Faster -#teensy41.menu.opt.o2std.build.flags.optimize=-O2 -#teensy41.menu.opt.o2std.build.flags.ldspecs= -##teensy41.menu.opt.o2lto=Faster with LTO -##teensy41.menu.opt.o2lto.build.flags.optimize=-O2 -flto -fno-fat-lto-objects -##teensy41.menu.opt.o2lto.build.flags.ldspecs=-fuse-linker-plugin -#teensy41.menu.opt.o1std=Fast -#teensy41.menu.opt.o1std.build.flags.optimize=-O1 -#teensy41.menu.opt.o1std.build.flags.ldspecs= -##teensy41.menu.opt.o1lto=Fast with LTO -##teensy41.menu.opt.o1lto.build.flags.optimize=-O1 -flto -fno-fat-lto-objects -##teensy41.menu.opt.o1lto.build.flags.ldspecs=-fuse-linker-plugin -#teensy41.menu.opt.o3std=Fastest -#teensy41.menu.opt.o3std.build.flags.optimize=-O3 -#teensy41.menu.opt.o3std.build.flags.ldspecs= -##teensy41.menu.opt.o3purestd=Fastest + pure-code -##teensy41.menu.opt.o3purestd.build.flags.optimize=-O3 -mpure-code -D__PURE_CODE__ -##teensy41.menu.opt.o3purestd.build.flags.ldspecs= -##teensy41.menu.opt.o3lto=Fastest with LTO -##teensy41.menu.opt.o3lto.build.flags.optimize=-O3 -flto -fno-fat-lto-objects -##teensy41.menu.opt.o3lto.build.flags.ldspecs=-fuse-linker-plugin -##teensy41.menu.opt.o3purelto=Fastest + pure-code with LTO -##teensy41.menu.opt.o3purelto.build.flags.optimize=-O3 -mpure-code -D__PURE_CODE__ -flto -fno-fat-lto-objects -##teensy41.menu.opt.o3purelto.build.flags.ldspecs=-fuse-linker-plugin -#teensy41.menu.opt.ogstd=Debug -#teensy41.menu.opt.ogstd.build.flags.optimize=-Og -#teensy41.menu.opt.ogstd.build.flags.ldspecs= -##teensy41.menu.opt.oglto=Debug with LTO -##teensy41.menu.opt.oglto.build.flags.optimize=-Og -flto -fno-fat-lto-objects -##teensy41.menu.opt.oglto.build.flags.ldspecs=-fuse-linker-plugin -#teensy41.menu.opt.osstd=Smallest Code -#teensy41.menu.opt.osstd.build.flags.optimize=-Os --specs=nano.specs -#teensy41.menu.opt.osstd.build.flags.ldspecs= -##teensy41.menu.opt.oslto=Smallest Code with LTO -##teensy41.menu.opt.oslto.build.flags.optimize=-Os -flto -fno-fat-lto-objects --specs=nano.specs -##teensy41.menu.opt.oslto.build.flags.ldspecs=-fuse-linker-plugin +teensy41.menu.opt.o2std=Faster +teensy41.menu.opt.o2std.build.flags.optimize=-O2 +teensy41.menu.opt.o2std.build.flags.ldspecs= +#teensy41.menu.opt.o2lto=Faster with LTO +#teensy41.menu.opt.o2lto.build.flags.optimize=-O2 -flto -fno-fat-lto-objects +#teensy41.menu.opt.o2lto.build.flags.ldspecs=-fuse-linker-plugin +teensy41.menu.opt.o1std=Fast +teensy41.menu.opt.o1std.build.flags.optimize=-O1 +teensy41.menu.opt.o1std.build.flags.ldspecs= +#teensy41.menu.opt.o1lto=Fast with LTO +#teensy41.menu.opt.o1lto.build.flags.optimize=-O1 -flto -fno-fat-lto-objects +#teensy41.menu.opt.o1lto.build.flags.ldspecs=-fuse-linker-plugin +teensy41.menu.opt.o3std=Fastest +teensy41.menu.opt.o3std.build.flags.optimize=-O3 +teensy41.menu.opt.o3std.build.flags.ldspecs= +#teensy41.menu.opt.o3purestd=Fastest + pure-code +#teensy41.menu.opt.o3purestd.build.flags.optimize=-O3 -mpure-code -D__PURE_CODE__ +#teensy41.menu.opt.o3purestd.build.flags.ldspecs= +#teensy41.menu.opt.o3lto=Fastest with LTO +#teensy41.menu.opt.o3lto.build.flags.optimize=-O3 -flto -fno-fat-lto-objects +#teensy41.menu.opt.o3lto.build.flags.ldspecs=-fuse-linker-plugin +#teensy41.menu.opt.o3purelto=Fastest + pure-code with LTO +#teensy41.menu.opt.o3purelto.build.flags.optimize=-O3 -mpure-code -D__PURE_CODE__ -flto -fno-fat-lto-objects +#teensy41.menu.opt.o3purelto.build.flags.ldspecs=-fuse-linker-plugin +teensy41.menu.opt.ogstd=Debug +teensy41.menu.opt.ogstd.build.flags.optimize=-Og +teensy41.menu.opt.ogstd.build.flags.ldspecs= +#teensy41.menu.opt.oglto=Debug with LTO +#teensy41.menu.opt.oglto.build.flags.optimize=-Og -flto -fno-fat-lto-objects +#teensy41.menu.opt.oglto.build.flags.ldspecs=-fuse-linker-plugin +teensy41.menu.opt.osstd=Smallest Code +teensy41.menu.opt.osstd.build.flags.optimize=-Os --specs=nano.specs +teensy41.menu.opt.osstd.build.flags.ldspecs= +#teensy41.menu.opt.oslto=Smallest Code with LTO +#teensy41.menu.opt.oslto.build.flags.optimize=-Os -flto -fno-fat-lto-objects --specs=nano.specs +#teensy41.menu.opt.oslto.build.flags.ldspecs=-fuse-linker-plugin -#teensy41.menu.keys.en-us=US English -#teensy41.menu.keys.en-us.build.keylayout=US_ENGLISH -#teensy41.menu.keys.fr-ca=Canadian French -#teensy41.menu.keys.fr-ca.build.keylayout=CANADIAN_FRENCH -#teensy41.menu.keys.xx-ca=Canadian Multilingual -#teensy41.menu.keys.xx-ca.build.keylayout=CANADIAN_MULTILINGUAL -#teensy41.menu.keys.cz-cz=Czech -#teensy41.menu.keys.cz-cz.build.keylayout=CZECH -#teensy41.menu.keys.da-da=Danish -#teensy41.menu.keys.da-da.build.keylayout=DANISH -#teensy41.menu.keys.fi-fi=Finnish -#teensy41.menu.keys.fi-fi.build.keylayout=FINNISH -#teensy41.menu.keys.fr-fr=French -#teensy41.menu.keys.fr-fr.build.keylayout=FRENCH -#teensy41.menu.keys.fr-be=French Belgian -#teensy41.menu.keys.fr-be.build.keylayout=FRENCH_BELGIAN -#teensy41.menu.keys.fr-ch=French Swiss -#teensy41.menu.keys.fr-ch.build.keylayout=FRENCH_SWISS -#teensy41.menu.keys.de-de=German -#teensy41.menu.keys.de-de.build.keylayout=GERMAN -#teensy41.menu.keys.de-dm=German (Mac) -#teensy41.menu.keys.de-dm.build.keylayout=GERMAN_MAC -#teensy41.menu.keys.de-ch=German Swiss -#teensy41.menu.keys.de-ch.build.keylayout=GERMAN_SWISS -#teensy41.menu.keys.is-is=Icelandic -#teensy41.menu.keys.is-is.build.keylayout=ICELANDIC -#teensy41.menu.keys.en-ie=Irish -#teensy41.menu.keys.en-ie.build.keylayout=IRISH -#teensy41.menu.keys.it-it=Italian -#teensy41.menu.keys.it-it.build.keylayout=ITALIAN -#teensy41.menu.keys.no-no=Norwegian -#teensy41.menu.keys.no-no.build.keylayout=NORWEGIAN -#teensy41.menu.keys.pt-pt=Portuguese -#teensy41.menu.keys.pt-pt.build.keylayout=PORTUGUESE -#teensy41.menu.keys.pt-br=Portuguese Brazilian -#teensy41.menu.keys.pt-br.build.keylayout=PORTUGUESE_BRAZILIAN -#teensy41.menu.keys.rs-rs=Serbian (Latin Only) -#teensy41.menu.keys.rs-rs.build.keylayout=SERBIAN_LATIN_ONLY -#teensy41.menu.keys.es-es=Spanish -#teensy41.menu.keys.es-es.build.keylayout=SPANISH -#teensy41.menu.keys.es-mx=Spanish Latin America -#teensy41.menu.keys.es-mx.build.keylayout=SPANISH_LATIN_AMERICA -#teensy41.menu.keys.sv-se=Swedish -#teensy41.menu.keys.sv-se.build.keylayout=SWEDISH -#teensy41.menu.keys.tr-tr=Turkish (partial) -#teensy41.menu.keys.tr-tr.build.keylayout=TURKISH -#teensy41.menu.keys.en-gb=United Kingdom -#teensy41.menu.keys.en-gb.build.keylayout=UNITED_KINGDOM -#teensy41.menu.keys.usint=US International -#teensy41.menu.keys.usint.build.keylayout=US_INTERNATIONAL +teensy41.menu.keys.en-us=US English +teensy41.menu.keys.en-us.build.keylayout=US_ENGLISH +teensy41.menu.keys.fr-ca=Canadian French +teensy41.menu.keys.fr-ca.build.keylayout=CANADIAN_FRENCH +teensy41.menu.keys.xx-ca=Canadian Multilingual +teensy41.menu.keys.xx-ca.build.keylayout=CANADIAN_MULTILINGUAL +teensy41.menu.keys.cz-cz=Czech +teensy41.menu.keys.cz-cz.build.keylayout=CZECH +teensy41.menu.keys.da-da=Danish +teensy41.menu.keys.da-da.build.keylayout=DANISH +teensy41.menu.keys.fi-fi=Finnish +teensy41.menu.keys.fi-fi.build.keylayout=FINNISH +teensy41.menu.keys.fr-fr=French +teensy41.menu.keys.fr-fr.build.keylayout=FRENCH +teensy41.menu.keys.fr-be=French Belgian +teensy41.menu.keys.fr-be.build.keylayout=FRENCH_BELGIAN +teensy41.menu.keys.fr-ch=French Swiss +teensy41.menu.keys.fr-ch.build.keylayout=FRENCH_SWISS +teensy41.menu.keys.de-de=German +teensy41.menu.keys.de-de.build.keylayout=GERMAN +teensy41.menu.keys.de-dm=German (Mac) +teensy41.menu.keys.de-dm.build.keylayout=GERMAN_MAC +teensy41.menu.keys.de-ch=German Swiss +teensy41.menu.keys.de-ch.build.keylayout=GERMAN_SWISS +teensy41.menu.keys.is-is=Icelandic +teensy41.menu.keys.is-is.build.keylayout=ICELANDIC +teensy41.menu.keys.en-ie=Irish +teensy41.menu.keys.en-ie.build.keylayout=IRISH +teensy41.menu.keys.it-it=Italian +teensy41.menu.keys.it-it.build.keylayout=ITALIAN +teensy41.menu.keys.no-no=Norwegian +teensy41.menu.keys.no-no.build.keylayout=NORWEGIAN +teensy41.menu.keys.pt-pt=Portuguese +teensy41.menu.keys.pt-pt.build.keylayout=PORTUGUESE +teensy41.menu.keys.pt-br=Portuguese Brazilian +teensy41.menu.keys.pt-br.build.keylayout=PORTUGUESE_BRAZILIAN +teensy41.menu.keys.rs-rs=Serbian (Latin Only) +teensy41.menu.keys.rs-rs.build.keylayout=SERBIAN_LATIN_ONLY +teensy41.menu.keys.es-es=Spanish +teensy41.menu.keys.es-es.build.keylayout=SPANISH +teensy41.menu.keys.es-mx=Spanish Latin America +teensy41.menu.keys.es-mx.build.keylayout=SPANISH_LATIN_AMERICA +teensy41.menu.keys.sv-se=Swedish +teensy41.menu.keys.sv-se.build.keylayout=SWEDISH +teensy41.menu.keys.tr-tr=Turkish (partial) +teensy41.menu.keys.tr-tr.build.keylayout=TURKISH +teensy41.menu.keys.en-gb=United Kingdom +teensy41.menu.keys.en-gb.build.keylayout=UNITED_KINGDOM +teensy41.menu.keys.usint=US International +teensy41.menu.keys.usint.build.keylayout=US_INTERNATIONAL teensy40.name=Teensy 4.0 teensy40.upload.maximum_size=2031616 +teensy40.build.board=TEENSY40 +teensy40.build.flags.ld=-Wl,--gc-sections,--relax "-T{build.core.path}/imxrt1062.ld" teensy40.upload.maximum_data_size=524288 #teensy40.upload.maximum_data_size=1048576 teensy40.upload.tool=teensyloader teensy40.upload.protocol=halfkay -teensy40.build.board=TEENSY40 teensy40.build.core=teensy4 teensy40.build.mcu=imxrt1062 teensy40.build.warn_data_percentage=99 @@ -221,15 +226,18 @@ teensy40.build.flags.common=-g -Wall -ffunction-sections -fdata-sections -nostdl teensy40.build.flags.dep=-MMD teensy40.build.flags.optimize=-Os teensy40.build.flags.cpu=-mthumb -mcpu=cortex-m7 -mfloat-abi=hard -mfpu=fpv5-d16 -teensy40.build.flags.defs=-D__IMXRT1062__ -DTEENSYDUINO=151 +teensy40.build.flags.defs=-D__IMXRT1062__ -DTEENSYDUINO=152 teensy40.build.flags.cpp=-std=gnu++14 -fno-exceptions -fpermissive -fno-rtti -fno-threadsafe-statics -felide-constructors -Wno-error=narrowing teensy40.build.flags.c= teensy40.build.flags.S=-x assembler-with-cpp -teensy40.build.flags.ld=-Wl,--gc-sections,--relax "-T{build.core.path}/imxrt1062.ld" teensy40.build.flags.libs=-larm_cortexM7lfsp_math -lm -lstdc++ teensy40.serial.restart_cmd=false teensy40.menu.usb.serial=Serial teensy40.menu.usb.serial.build.usbtype=USB_SERIAL +teensy40.menu.usb.serial2=Dual Serial +teensy40.menu.usb.serial2.build.usbtype=USB_DUAL_SERIAL +teensy40.menu.usb.serial3=Triple Serial +teensy40.menu.usb.serial3.build.usbtype=USB_TRIPLE_SERIAL teensy40.menu.usb.keyboard=Keyboard teensy40.menu.usb.keyboard.build.usbtype=USB_KEYBOARDONLY teensy40.menu.usb.keyboard.fake_serial=teensy_gateway @@ -259,16 +267,16 @@ teensy40.menu.usb.serialmidi4=Serial + MIDIx4 teensy40.menu.usb.serialmidi4.build.usbtype=USB_MIDI4_SERIAL teensy40.menu.usb.serialmidi16=Serial + MIDIx16 teensy40.menu.usb.serialmidi16.build.usbtype=USB_MIDI16_SERIAL -#teensy40.menu.usb.audio=Audio -#teensy40.menu.usb.audio.build.usbtype=USB_AUDIO -#teensy40.menu.usb.audio.fake_serial=teensy_gateway -#teensy40.menu.usb.serialmidiaudio=Serial + MIDI + Audio -#teensy40.menu.usb.serialmidiaudio.build.usbtype=USB_MIDI_AUDIO_SERIAL -#teensy40.menu.usb.serialmidi16audio=Serial + MIDIx16 + Audio -#teensy40.menu.usb.serialmidi16audio.build.usbtype=USB_MIDI16_AUDIO_SERIAL -#teensy40.menu.usb.mtp=MTP Disk (Experimental) -#teensy40.menu.usb.mtp.build.usbtype=USB_MTPDISK -#teensy40.menu.usb.mtp.fake_serial=teensy_gateway +teensy40.menu.usb.audio=Audio +teensy40.menu.usb.audio.build.usbtype=USB_AUDIO +teensy40.menu.usb.audio.fake_serial=teensy_gateway +teensy40.menu.usb.serialmidiaudio=Serial + MIDI + Audio +teensy40.menu.usb.serialmidiaudio.build.usbtype=USB_MIDI_AUDIO_SERIAL +teensy40.menu.usb.serialmidi16audio=Serial + MIDIx16 + Audio +teensy40.menu.usb.serialmidi16audio.build.usbtype=USB_MIDI16_AUDIO_SERIAL +teensy40.menu.usb.mtp=MTP Disk (Experimental) +teensy40.menu.usb.mtp.build.usbtype=USB_MTPDISK +teensy40.menu.usb.mtp.fake_serial=teensy_gateway teensy40.menu.usb.rawhid=Raw HID teensy40.menu.usb.rawhid.build.usbtype=USB_RAWHID teensy40.menu.usb.rawhid.fake_serial=teensy_gateway @@ -414,7 +422,7 @@ teensy36.build.flags.common=-g -Wall -ffunction-sections -fdata-sections -nostdl teensy36.build.flags.dep=-MMD teensy36.build.flags.optimize=-Os teensy36.build.flags.cpu=-mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fsingle-precision-constant -teensy36.build.flags.defs=-D__MK66FX1M0__ -DTEENSYDUINO=151 +teensy36.build.flags.defs=-D__MK66FX1M0__ -DTEENSYDUINO=152 teensy36.build.flags.cpp=-fno-exceptions -fpermissive -felide-constructors -std=gnu++14 -Wno-error=narrowing -fno-rtti teensy36.build.flags.c= teensy36.build.flags.S=-x assembler-with-cpp @@ -423,6 +431,10 @@ teensy36.build.flags.libs=-larm_cortexM4lf_math -lm teensy36.serial.restart_cmd=false teensy36.menu.usb.serial=Serial teensy36.menu.usb.serial.build.usbtype=USB_SERIAL +teensy36.menu.usb.serial2=Dual Serial +teensy36.menu.usb.serial2.build.usbtype=USB_DUAL_SERIAL +teensy36.menu.usb.serial3=Triple Serial +teensy36.menu.usb.serial3.build.usbtype=USB_TRIPLE_SERIAL teensy36.menu.usb.keyboard=Keyboard teensy36.menu.usb.keyboard.build.usbtype=USB_KEYBOARDONLY teensy36.menu.usb.keyboard.fake_serial=teensy_gateway @@ -622,7 +634,7 @@ teensy35.build.flags.common=-g -Wall -ffunction-sections -fdata-sections -nostdl teensy35.build.flags.dep=-MMD teensy35.build.flags.optimize=-Os teensy35.build.flags.cpu=-mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fsingle-precision-constant -teensy35.build.flags.defs=-D__MK64FX512__ -DTEENSYDUINO=151 +teensy35.build.flags.defs=-D__MK64FX512__ -DTEENSYDUINO=152 teensy35.build.flags.cpp=-fno-exceptions -fpermissive -felide-constructors -std=gnu++14 -Wno-error=narrowing -fno-rtti teensy35.build.flags.c= teensy35.build.flags.S=-x assembler-with-cpp @@ -631,6 +643,10 @@ teensy35.build.flags.libs=-larm_cortexM4lf_math -lm teensy35.serial.restart_cmd=false teensy35.menu.usb.serial=Serial teensy35.menu.usb.serial.build.usbtype=USB_SERIAL +teensy35.menu.usb.serial2=Dual Serial +teensy35.menu.usb.serial2.build.usbtype=USB_DUAL_SERIAL +teensy35.menu.usb.serial3=Triple Serial +teensy35.menu.usb.serial3.build.usbtype=USB_TRIPLE_SERIAL teensy35.menu.usb.keyboard=Keyboard teensy35.menu.usb.keyboard.build.usbtype=USB_KEYBOARDONLY teensy35.menu.usb.keyboard.fake_serial=teensy_gateway @@ -820,7 +836,7 @@ teensy31.build.flags.common=-g -Wall -ffunction-sections -fdata-sections -nostdl teensy31.build.flags.dep=-MMD teensy31.build.flags.optimize=-Os teensy31.build.flags.cpu=-mthumb -mcpu=cortex-m4 -fsingle-precision-constant -teensy31.build.flags.defs=-D__MK20DX256__ -DTEENSYDUINO=151 +teensy31.build.flags.defs=-D__MK20DX256__ -DTEENSYDUINO=152 teensy31.build.flags.cpp=-fno-exceptions -fpermissive -felide-constructors -std=gnu++14 -Wno-error=narrowing -fno-rtti teensy31.build.flags.c= teensy31.build.flags.S=-x assembler-with-cpp @@ -829,6 +845,10 @@ teensy31.build.flags.libs=-larm_cortexM4l_math -lm teensy31.serial.restart_cmd=false teensy31.menu.usb.serial=Serial teensy31.menu.usb.serial.build.usbtype=USB_SERIAL +teensy31.menu.usb.serial2=Dual Serial +teensy31.menu.usb.serial2.build.usbtype=USB_DUAL_SERIAL +teensy31.menu.usb.serial3=Triple Serial +teensy31.menu.usb.serial3.build.usbtype=USB_TRIPLE_SERIAL teensy31.menu.usb.keyboard=Keyboard teensy31.menu.usb.keyboard.build.usbtype=USB_KEYBOARDONLY teensy31.menu.usb.keyboard.fake_serial=teensy_gateway @@ -1029,7 +1049,7 @@ teensy30.build.flags.common=-g -Wall -ffunction-sections -fdata-sections -nostdl teensy30.build.flags.dep=-MMD teensy30.build.flags.optimize=-Os teensy30.build.flags.cpu=-mthumb -mcpu=cortex-m4 -fsingle-precision-constant -teensy30.build.flags.defs=-D__MK20DX128__ -DTEENSYDUINO=151 +teensy30.build.flags.defs=-D__MK20DX128__ -DTEENSYDUINO=152 teensy30.build.flags.cpp=-fno-exceptions -fpermissive -felide-constructors -std=gnu++14 -Wno-error=narrowing -fno-rtti teensy30.build.flags.c= teensy30.build.flags.S=-x assembler-with-cpp @@ -1188,7 +1208,7 @@ teensyLC.build.command.size=arm-none-eabi-size teensyLC.build.flags.common=-g -Wall -ffunction-sections -fdata-sections -nostdlib teensyLC.build.flags.dep=-MMD teensyLC.build.flags.cpu=-mthumb -mcpu=cortex-m0plus -fsingle-precision-constant -teensyLC.build.flags.defs=-D__MKL26Z64__ -DTEENSYDUINO=151 +teensyLC.build.flags.defs=-D__MKL26Z64__ -DTEENSYDUINO=152 teensyLC.build.flags.cpp=-fno-exceptions -fpermissive -felide-constructors -std=gnu++14 -Wno-error=narrowing -fno-rtti teensyLC.build.flags.c= teensyLC.build.flags.S=-x assembler-with-cpp @@ -1197,6 +1217,10 @@ teensyLC.build.flags.libs=-larm_cortexM0l_math -lm teensyLC.serial.restart_cmd=false teensyLC.menu.usb.serial=Serial teensyLC.menu.usb.serial.build.usbtype=USB_SERIAL +teensyLC.menu.usb.serial2=Dual Serial +teensyLC.menu.usb.serial2.build.usbtype=USB_DUAL_SERIAL +teensyLC.menu.usb.serial3=Triple Serial +teensyLC.menu.usb.serial3.build.usbtype=USB_TRIPLE_SERIAL teensyLC.menu.usb.keyboard=Keyboard teensyLC.menu.usb.keyboard.build.usbtype=USB_KEYBOARDONLY teensyLC.menu.usb.keyboard.fake_serial=teensy_gateway @@ -1342,7 +1366,7 @@ teensypp2.build.flags.common=-g -Wall -ffunction-sections -fdata-sections teensypp2.build.flags.dep=-MMD teensypp2.build.flags.optimize=-Os teensypp2.build.flags.cpu=-mmcu=at90usb1286 -teensypp2.build.flags.defs=-DTEENSYDUINO=151 -DARDUINO_ARCH_AVR +teensypp2.build.flags.defs=-DTEENSYDUINO=152 -DARDUINO_ARCH_AVR teensypp2.build.flags.cpp=-fno-exceptions -fpermissive -felide-constructors -std=gnu++11 teensypp2.build.flags.c= teensypp2.build.flags.S=-x assembler-with-cpp @@ -1459,7 +1483,7 @@ teensy2.build.flags.common=-g -Wall -ffunction-sections -fdata-sections teensy2.build.flags.dep=-MMD teensy2.build.flags.optimize=-Os teensy2.build.flags.cpu=-mmcu=atmega32u4 -teensy2.build.flags.defs=-DTEENSYDUINO=151 -DARDUINO_ARCH_AVR +teensy2.build.flags.defs=-DTEENSYDUINO=152 -DARDUINO_ARCH_AVR teensy2.build.flags.cpp=-fno-exceptions -fpermissive -felide-constructors -std=gnu++11 teensy2.build.flags.c= teensy2.build.flags.S=-x assembler-with-cpp diff --git a/teensy/avr/cores/teensy3/WProgram.h b/teensy/avr/cores/teensy3/WProgram.h index 001232b..4a960b9 100644 --- a/teensy/avr/cores/teensy3/WProgram.h +++ b/teensy/avr/cores/teensy3/WProgram.h @@ -52,6 +52,8 @@ #include "avr_emulation.h" #include "usb_serial.h" +#include "usb_serial2.h" +#include "usb_serial3.h" #include "usb_seremu.h" #include "usb_keyboard.h" #include "usb_mouse.h" diff --git a/teensy/avr/cores/teensy3/usb_desc.c b/teensy/avr/cores/teensy3/usb_desc.c index 19e76f1..e9c935e 100644 --- a/teensy/avr/cores/teensy3/usb_desc.c +++ b/teensy/avr/cores/teensy3/usb_desc.c @@ -394,6 +394,11 @@ static uint8_t multitouch_report_desc[] = { 0x95, 0x01, // Report Count (1) 0x09, 0x56, // Usage (Scan Time) 0x81, 0x02, // Input (variable,absolute) + 0x09, 0x54, // USAGE (Contact count) + 0x25, 0x7f, // LOGICAL_MAXIMUM (127) + 0x95, 0x01, // REPORT_COUNT (1) + 0x75, 0x08, // REPORT_SIZE (8) + 0x81, 0x02, // INPUT (Data,Var,Abs) 0x05, 0x0D, // Usage Page (Digitizers) 0x09, 0x55, // Usage (Contact Count Maximum) 0x25, MULTITOUCH_FINGERS, // Logical Maximum (10) @@ -484,7 +489,21 @@ static uint8_t flightsim_report_desc[] = { #define CDC_DATA_INTERFACE_DESC_SIZE 0 #endif -#define MIDI_INTERFACE_DESC_POS CDC_DATA_INTERFACE_DESC_POS+CDC_DATA_INTERFACE_DESC_SIZE +#define CDC2_DATA_INTERFACE_DESC_POS CDC_DATA_INTERFACE_DESC_POS+CDC_DATA_INTERFACE_DESC_SIZE +#ifdef CDC2_DATA_INTERFACE +#define CDC2_DATA_INTERFACE_DESC_SIZE 8 + 9+5+5+4+5+7+9+7+7 +#else +#define CDC2_DATA_INTERFACE_DESC_SIZE 0 +#endif + +#define CDC3_DATA_INTERFACE_DESC_POS CDC2_DATA_INTERFACE_DESC_POS+CDC2_DATA_INTERFACE_DESC_SIZE +#ifdef CDC3_DATA_INTERFACE +#define CDC3_DATA_INTERFACE_DESC_SIZE 8 + 9+5+5+4+5+7+9+7+7 +#else +#define CDC3_DATA_INTERFACE_DESC_SIZE 0 +#endif + +#define MIDI_INTERFACE_DESC_POS CDC3_DATA_INTERFACE_DESC_POS+CDC3_DATA_INTERFACE_DESC_SIZE #ifdef MIDI_INTERFACE #if !defined(MIDI_NUM_CABLES) || MIDI_NUM_CABLES < 1 || MIDI_NUM_CABLES > 16 #error "MIDI_NUM_CABLES must be defined between 1 to 16" @@ -683,6 +702,156 @@ static uint8_t config_descriptor[CONFIG_DESC_SIZE] = { 0, // bInterval #endif // CDC_DATA_INTERFACE +#ifdef CDC2_DATA_INTERFACE + // interface association descriptor, USB ECN, Table 9-Z + 8, // bLength + 11, // bDescriptorType + CDC2_STATUS_INTERFACE, // bFirstInterface + 2, // bInterfaceCount + 0x02, // bFunctionClass + 0x02, // bFunctionSubClass + 0x01, // bFunctionProtocol + 0, // iFunction + // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12 + 9, // bLength + 4, // bDescriptorType + CDC2_STATUS_INTERFACE, // bInterfaceNumber + 0, // bAlternateSetting + 1, // bNumEndpoints + 0x02, // bInterfaceClass + 0x02, // bInterfaceSubClass + 0x01, // bInterfaceProtocol + 0, // iInterface + // CDC Header Functional Descriptor, CDC Spec 5.2.3.1, Table 26 + 5, // bFunctionLength + 0x24, // bDescriptorType + 0x00, // bDescriptorSubtype + 0x10, 0x01, // bcdCDC + // Call Management Functional Descriptor, CDC Spec 5.2.3.2, Table 27 + 5, // bFunctionLength + 0x24, // bDescriptorType + 0x01, // bDescriptorSubtype + 0x01, // bmCapabilities + 1, // bDataInterface + // Abstract Control Management Functional Descriptor, CDC Spec 5.2.3.3, Table 28 + 4, // bFunctionLength + 0x24, // bDescriptorType + 0x02, // bDescriptorSubtype + 0x06, // bmCapabilities + // Union Functional Descriptor, CDC Spec 5.2.3.8, Table 33 + 5, // bFunctionLength + 0x24, // bDescriptorType + 0x06, // bDescriptorSubtype + CDC2_STATUS_INTERFACE, // bMasterInterface + CDC2_DATA_INTERFACE, // bSlaveInterface0 + // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 + 7, // bLength + 5, // bDescriptorType + CDC2_ACM_ENDPOINT | 0x80, // bEndpointAddress + 0x03, // bmAttributes (0x03=intr) + CDC2_ACM_SIZE, 0, // wMaxPacketSize + 64, // bInterval + // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12 + 9, // bLength + 4, // bDescriptorType + CDC2_DATA_INTERFACE, // bInterfaceNumber + 0, // bAlternateSetting + 2, // bNumEndpoints + 0x0A, // bInterfaceClass + 0x00, // bInterfaceSubClass + 0x00, // bInterfaceProtocol + 0, // iInterface + // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 + 7, // bLength + 5, // bDescriptorType + CDC2_RX_ENDPOINT, // bEndpointAddress + 0x02, // bmAttributes (0x02=bulk) + CDC2_RX_SIZE, 0, // wMaxPacketSize + 0, // bInterval + // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 + 7, // bLength + 5, // bDescriptorType + CDC2_TX_ENDPOINT | 0x80, // bEndpointAddress + 0x02, // bmAttributes (0x02=bulk) + CDC2_TX_SIZE, 0, // wMaxPacketSize + 0, // bInterval +#endif // CDC2_DATA_INTERFACE + +#ifdef CDC3_DATA_INTERFACE + // interface association descriptor, USB ECN, Table 9-Z + 8, // bLength + 11, // bDescriptorType + CDC3_STATUS_INTERFACE, // bFirstInterface + 2, // bInterfaceCount + 0x02, // bFunctionClass + 0x02, // bFunctionSubClass + 0x01, // bFunctionProtocol + 0, // iFunction + // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12 + 9, // bLength + 4, // bDescriptorType + CDC3_STATUS_INTERFACE, // bInterfaceNumber + 0, // bAlternateSetting + 1, // bNumEndpoints + 0x02, // bInterfaceClass + 0x02, // bInterfaceSubClass + 0x01, // bInterfaceProtocol + 0, // iInterface + // CDC Header Functional Descriptor, CDC Spec 5.2.3.1, Table 26 + 5, // bFunctionLength + 0x24, // bDescriptorType + 0x00, // bDescriptorSubtype + 0x10, 0x01, // bcdCDC + // Call Management Functional Descriptor, CDC Spec 5.2.3.2, Table 27 + 5, // bFunctionLength + 0x24, // bDescriptorType + 0x01, // bDescriptorSubtype + 0x01, // bmCapabilities + 1, // bDataInterface + // Abstract Control Management Functional Descriptor, CDC Spec 5.2.3.3, Table 28 + 4, // bFunctionLength + 0x24, // bDescriptorType + 0x02, // bDescriptorSubtype + 0x06, // bmCapabilities + // Union Functional Descriptor, CDC Spec 5.2.3.8, Table 33 + 5, // bFunctionLength + 0x24, // bDescriptorType + 0x06, // bDescriptorSubtype + CDC3_STATUS_INTERFACE, // bMasterInterface + CDC3_DATA_INTERFACE, // bSlaveInterface0 + // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 + 7, // bLength + 5, // bDescriptorType + CDC3_ACM_ENDPOINT | 0x80, // bEndpointAddress + 0x03, // bmAttributes (0x03=intr) + CDC3_ACM_SIZE, 0, // wMaxPacketSize + 64, // bInterval + // interface descriptor, USB spec 9.6.5, page 267-269, Table 9-12 + 9, // bLength + 4, // bDescriptorType + CDC3_DATA_INTERFACE, // bInterfaceNumber + 0, // bAlternateSetting + 2, // bNumEndpoints + 0x0A, // bInterfaceClass + 0x00, // bInterfaceSubClass + 0x00, // bInterfaceProtocol + 0, // iInterface + // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 + 7, // bLength + 5, // bDescriptorType + CDC3_RX_ENDPOINT, // bEndpointAddress + 0x02, // bmAttributes (0x02=bulk) + CDC3_RX_SIZE, 0, // wMaxPacketSize + 0, // bInterval + // endpoint descriptor, USB spec 9.6.6, page 269-271, Table 9-13 + 7, // bLength + 5, // bDescriptorType + CDC3_TX_ENDPOINT | 0x80, // bEndpointAddress + 0x02, // bmAttributes (0x02=bulk) + CDC3_TX_SIZE, 0, // wMaxPacketSize + 0, // bInterval +#endif // CDC3_DATA_INTERFACE + #ifdef MIDI_INTERFACE // Standard MS Interface Descriptor, 9, // bLength diff --git a/teensy/avr/cores/teensy3/usb_desc.h b/teensy/avr/cores/teensy3/usb_desc.h index f191f8e..a613eda 100644 --- a/teensy/avr/cores/teensy3/usb_desc.h +++ b/teensy/avr/cores/teensy3/usb_desc.h @@ -140,6 +140,87 @@ let me know? http://forum.pjrc.com/forums/4-Suggestions-amp-Bug-Reports #define ENDPOINT3_CONFIG ENDPOINT_RECEIVE_ONLY #define ENDPOINT4_CONFIG ENDPOINT_TRANSMIT_ONLY +#elif defined(USB_DUAL_SERIAL) + #define VENDOR_ID 0x16C0 + #define PRODUCT_ID 0x048B + #define MANUFACTURER_NAME {'T','e','e','n','s','y','d','u','i','n','o'} + #define MANUFACTURER_NAME_LEN 11 + #define PRODUCT_NAME {'D','u','a','l',' ','S','e','r','i','a','l'} + #define PRODUCT_NAME_LEN 11 + #define EP0_SIZE 64 + #define NUM_ENDPOINTS 7 + #define NUM_USB_BUFFERS 22 + #define NUM_INTERFACE 4 + #define CDC_IAD_DESCRIPTOR 1 // Serial + #define CDC_STATUS_INTERFACE 0 + #define CDC_DATA_INTERFACE 1 + #define CDC_ACM_ENDPOINT 2 + #define CDC_RX_ENDPOINT 3 + #define CDC_TX_ENDPOINT 4 + #define CDC_ACM_SIZE 16 + #define CDC_RX_SIZE 64 + #define CDC_TX_SIZE 64 + #define CDC2_STATUS_INTERFACE 2 // SerialUSB1 + #define CDC2_DATA_INTERFACE 3 + #define CDC2_ACM_ENDPOINT 5 + #define CDC2_RX_ENDPOINT 6 + #define CDC2_TX_ENDPOINT 7 + #define CDC2_ACM_SIZE 16 + #define CDC2_RX_SIZE 64 + #define CDC2_TX_SIZE 64 + #define ENDPOINT2_CONFIG ENDPOINT_TRANSMIT_ONLY + #define ENDPOINT3_CONFIG ENDPOINT_RECEIVE_ONLY + #define ENDPOINT4_CONFIG ENDPOINT_TRANSMIT_ONLY + #define ENDPOINT5_CONFIG ENDPOINT_TRANSMIT_ONLY + #define ENDPOINT6_CONFIG ENDPOINT_RECEIVE_ONLY + #define ENDPOINT7_CONFIG ENDPOINT_TRANSMIT_ONLY + +#elif defined(USB_TRIPLE_SERIAL) + #define VENDOR_ID 0x16C0 + #define PRODUCT_ID 0x048C + #define MANUFACTURER_NAME {'T','e','e','n','s','y','d','u','i','n','o'} + #define MANUFACTURER_NAME_LEN 11 + #define PRODUCT_NAME {'T','r','i','p','l','e',' ','S','e','r','i','a','l'} + #define PRODUCT_NAME_LEN 13 + #define EP0_SIZE 64 + #define NUM_ENDPOINTS 10 + #define NUM_USB_BUFFERS 32 + #define NUM_INTERFACE 6 + #define CDC_IAD_DESCRIPTOR 1 // Serial + #define CDC_STATUS_INTERFACE 0 + #define CDC_DATA_INTERFACE 1 + #define CDC_ACM_ENDPOINT 2 + #define CDC_RX_ENDPOINT 3 + #define CDC_TX_ENDPOINT 4 + #define CDC_ACM_SIZE 16 + #define CDC_RX_SIZE 64 + #define CDC_TX_SIZE 64 + #define CDC2_STATUS_INTERFACE 2 // SerialUSB1 + #define CDC2_DATA_INTERFACE 3 + #define CDC2_ACM_ENDPOINT 5 + #define CDC2_RX_ENDPOINT 6 + #define CDC2_TX_ENDPOINT 7 + #define CDC2_ACM_SIZE 16 + #define CDC2_RX_SIZE 64 + #define CDC2_TX_SIZE 64 + #define CDC3_STATUS_INTERFACE 4 // SerialUSB2 + #define CDC3_DATA_INTERFACE 5 + #define CDC3_ACM_ENDPOINT 8 + #define CDC3_RX_ENDPOINT 9 + #define CDC3_TX_ENDPOINT 10 + #define CDC3_ACM_SIZE 16 + #define CDC3_RX_SIZE 64 + #define CDC3_TX_SIZE 64 + #define ENDPOINT2_CONFIG ENDPOINT_TRANSMIT_ONLY + #define ENDPOINT3_CONFIG ENDPOINT_RECEIVE_ONLY + #define ENDPOINT4_CONFIG ENDPOINT_TRANSMIT_ONLY + #define ENDPOINT5_CONFIG ENDPOINT_TRANSMIT_ONLY + #define ENDPOINT6_CONFIG ENDPOINT_RECEIVE_ONLY + #define ENDPOINT7_CONFIG ENDPOINT_TRANSMIT_ONLY + #define ENDPOINT8_CONFIG ENDPOINT_TRANSMIT_ONLY + #define ENDPOINT9_CONFIG ENDPOINT_RECEIVE_ONLY + #define ENDPOINT10_CONFIG ENDPOINT_TRANSMIT_ONLY + #elif defined(USB_KEYBOARDONLY) #define VENDOR_ID 0x16C0 #define PRODUCT_ID 0x04D0 @@ -289,7 +370,7 @@ let me know? http://forum.pjrc.com/forums/4-Suggestions-amp-Bug-Reports #define KEYMEDIA_INTERVAL 4 #define MULTITOUCH_INTERFACE 3 // Touchscreen #define MULTITOUCH_ENDPOINT 5 - #define MULTITOUCH_SIZE 8 + #define MULTITOUCH_SIZE 16 #define MULTITOUCH_FINGERS 10 #define ENDPOINT1_CONFIG ENDPOINT_TRANSMIT_ONLY #define ENDPOINT2_CONFIG ENDPOINT_RECEIVE_ONLY @@ -329,7 +410,7 @@ let me know? http://forum.pjrc.com/forums/4-Suggestions-amp-Bug-Reports #define MOUSE_INTERVAL 2 #define MULTITOUCH_INTERFACE 4 // Touchscreen #define MULTITOUCH_ENDPOINT 5 - #define MULTITOUCH_SIZE 8 + #define MULTITOUCH_SIZE 16 #define MULTITOUCH_FINGERS 10 #define ENDPOINT1_CONFIG ENDPOINT_TRANSMIT_ONLY #define ENDPOINT2_CONFIG ENDPOINT_RECEIVE_ONLY @@ -653,6 +734,7 @@ let me know? http://forum.pjrc.com/forums/4-Suggestions-amp-Bug-Reports #define ENDPOINT1_CONFIG ENDPOINT_TRANSMIT_ONLY #define ENDPOINT2_CONFIG ENDPOINT_RECEIVE_ONLY #define ENDPOINT3_CONFIG ENDPOINT_TRANSMIT_AND_RECEIVE + // TODO: Should ENDPOINT4_CONFIG be ENDPOINT_TRANSMIT_ONLY ??? #define ENDPOINT4_CONFIG ENDPOINT_RECEIVE_ONLY #elif defined(USB_AUDIO) diff --git a/teensy/avr/cores/teensy3/usb_dev.c b/teensy/avr/cores/teensy3/usb_dev.c index 9b17aa2..49b2d05 100644 --- a/teensy/avr/cores/teensy3/usb_dev.c +++ b/teensy/avr/cores/teensy3/usb_dev.c @@ -353,12 +353,30 @@ static void usb_setup(void) //serial_print("desc: not found\n"); endpoint0_stall(); return; -#if defined(CDC_STATUS_INTERFACE) case 0x2221: // CDC_SET_CONTROL_LINE_STATE - usb_cdc_line_rtsdtr_millis = systick_millis_count; - usb_cdc_line_rtsdtr = setup.wValue; + switch (setup.wIndex) { +#ifdef CDC_STATUS_INTERFACE + case CDC_STATUS_INTERFACE: + usb_cdc_line_rtsdtr_millis = systick_millis_count; + usb_cdc_line_rtsdtr = setup.wValue; + break; +#endif +#ifdef CDC2_STATUS_INTERFACE + case CDC2_STATUS_INTERFACE: + usb_cdc2_line_rtsdtr_millis = systick_millis_count; + usb_cdc2_line_rtsdtr = setup.wValue; + break; +#endif +#ifdef CDC3_STATUS_INTERFACE + case CDC3_STATUS_INTERFACE: + usb_cdc3_line_rtsdtr_millis = systick_millis_count; + usb_cdc3_line_rtsdtr = setup.wValue; + break; +#endif + } //serial_print("set control line state\n"); break; +#ifdef CDC_STATUS_INTERFACE case 0x2321: // CDC_SEND_BREAK break; case 0x2021: // CDC_SET_LINE_CODING @@ -594,21 +612,39 @@ static void usb_control(uint32_t stat) case 0x01: // OUT transaction received from host case 0x02: //serial_print("PID=OUT\n"); -#ifdef CDC_STATUS_INTERFACE if (setup.wRequestAndType == 0x2021 /*CDC_SET_LINE_CODING*/) { int i; - uint8_t *dst = (uint8_t *)usb_cdc_line_coding; - //serial_print("set line coding "); - for (i=0; i<7; i++) { - //serial_phex(*buf); - *dst++ = *buf++; + uint32_t *line_coding = NULL; + switch (setup.wIndex) { +#ifdef CDC_STATUS_INTERFACE + case CDC_STATUS_INTERFACE: + line_coding = usb_cdc_line_coding; + break; +#endif +#ifdef CDC2_STATUS_INTERFACE + case CDC2_STATUS_INTERFACE: + line_coding = usb_cdc2_line_coding; + break; +#endif +#ifdef CDC3_STATUS_INTERFACE + case CDC3_STATUS_INTERFACE: + line_coding = usb_cdc3_line_coding; + break; +#endif + } + if (line_coding) { + uint8_t *dst = (uint8_t *)line_coding; + //serial_print("set line coding "); + for (i=0; i<7; i++) { + //serial_phex(*buf); + *dst++ = *buf++; + } + //serial_phex32(line_coding[0]); + //serial_print("\n"); + if (line_coding[0] == 134) usb_reboot_timer = 15; } - //serial_phex32(usb_cdc_line_coding[0]); - //serial_print("\n"); - if (usb_cdc_line_coding[0] == 134) usb_reboot_timer = 15; endpoint0_transmit(NULL, 0); } -#endif #ifdef KEYBOARD_INTERFACE if (setup.word1 == 0x02000921 && setup.word2 == ((1<<16)|KEYBOARD_INTERFACE)) { keyboard_leds = buf[0]; @@ -859,6 +895,7 @@ void _reboot_Teensyduino_(void) { // TODO: initialize R0 with a code.... __asm__ volatile("bkpt"); + __builtin_unreachable(); } @@ -888,6 +925,20 @@ void usb_isr(void) if (t == 0) usb_serial_flush_callback(); } #endif +#ifdef CDC2_DATA_INTERFACE + t = usb_cdc2_transmit_flush_timer; + if (t) { + usb_cdc2_transmit_flush_timer = --t; + if (t == 0) usb_serial2_flush_callback(); + } +#endif +#ifdef CDC3_DATA_INTERFACE + t = usb_cdc3_transmit_flush_timer; + if (t) { + usb_cdc3_transmit_flush_timer = --t; + if (t == 0) usb_serial3_flush_callback(); + } +#endif #ifdef SEREMU_INTERFACE t = usb_seremu_transmit_flush_timer; if (t) { diff --git a/teensy/avr/cores/teensy3/usb_dev.h b/teensy/avr/cores/teensy3/usb_dev.h index a838308..bcc49fe 100644 --- a/teensy/avr/cores/teensy3/usb_dev.h +++ b/teensy/avr/cores/teensy3/usb_dev.h @@ -67,15 +67,6 @@ static inline uint32_t usb_rx_byte_count(uint32_t endpoint) return usb_rx_byte_count_data[endpoint]; } -#ifdef CDC_DATA_INTERFACE -extern uint32_t usb_cdc_line_coding[2]; -extern volatile uint32_t usb_cdc_line_rtsdtr_millis; -extern volatile uint32_t systick_millis_count; -extern volatile uint8_t usb_cdc_line_rtsdtr; -extern volatile uint8_t usb_cdc_transmit_flush_timer; -extern void usb_serial_flush_callback(void); -#endif - #ifdef SEREMU_INTERFACE extern volatile uint8_t usb_seremu_transmit_flush_timer; extern void usb_seremu_flush_callback(void); @@ -123,6 +114,18 @@ extern void (*usb_xinput_recv_callback)(void); } #endif +#ifdef CDC_DATA_INTERFACE +#include "usb_serial.h" +#endif + +#ifdef CDC2_DATA_INTERFACE +#include "usb_serial2.h" +#endif + +#ifdef CDC3_DATA_INTERFACE +#include "usb_serial3.h" +#endif + #else // F_CPU < 20000000 #ifdef __cplusplus diff --git a/teensy/avr/cores/teensy3/usb_inst.cpp b/teensy/avr/cores/teensy3/usb_inst.cpp index c9541d1..b3b3544 100644 --- a/teensy/avr/cores/teensy3/usb_inst.cpp +++ b/teensy/avr/cores/teensy3/usb_inst.cpp @@ -39,6 +39,18 @@ usb_serial_class Serial; #endif #endif +#ifdef CDC2_DATA_INTERFACE +#ifdef CDC2_STATUS_INTERFACE +usb_serial2_class SerialUSB1; +#endif +#endif + +#ifdef CDC3_DATA_INTERFACE +#ifdef CDC3_STATUS_INTERFACE +usb_serial3_class SerialUSB2; +#endif +#endif + #ifdef MIDI_INTERFACE usb_midi_class usbMIDI; #endif @@ -79,7 +91,8 @@ usb_serial_class Serial; #else // F_CPU < 20 MHz -#if defined(USB_SERIAL) || defined(USB_SERIAL_HID) +#if defined(USB_SERIAL) || defined(USB_DUAL_SERIAL) || \ + defined(USB_TRIPLE_SERIAL) || defined(USB_SERIAL_HID) usb_serial_class Serial; #elif (USB_DISABLED) usb_serial_class Serial; @@ -91,3 +104,7 @@ usb_seremu_class Serial; void serialEvent() __attribute__((weak)); void serialEvent() {} +void serialEventUSB1() __attribute__((weak)); +void serialEventUSB1() {} +void serialEventUSB2() __attribute__((weak)); +void serialEventUSB2() {} diff --git a/teensy/avr/cores/teensy3/usb_serial.h b/teensy/avr/cores/teensy3/usb_serial.h index 4dbe9ae..14e10ea 100644 --- a/teensy/avr/cores/teensy3/usb_serial.h +++ b/teensy/avr/cores/teensy3/usb_serial.h @@ -39,6 +39,8 @@ #if F_CPU >= 20000000 && !(defined(USB_DISABLED) || defined(USB_XINPUT)) +#include "core_pins.h" // for millis() + // C language implementation #ifdef __cplusplus extern "C" { @@ -52,6 +54,7 @@ int usb_serial_putchar(uint8_t c); int usb_serial_write(const void *buffer, uint32_t size); int usb_serial_write_buffer_free(void); void usb_serial_flush_output(void); +void usb_serial_flush_callback(void); extern uint32_t usb_cdc_line_coding[2]; extern volatile uint32_t usb_cdc_line_rtsdtr_millis; extern volatile uint32_t systick_millis_count;