Forum Rule: Always post complete source code & details to reproduce any issue!
Page 7 of 8 FirstFirst ... 5 6 7 8 LastLast
Results 151 to 175 of 187

Thread: MTP Responder Contribution

  1. #151
    Senior Member
    Join Date
    Jul 2014
    Posts
    2,528
    Quote Originally Posted by xenington View Post
    Been trying to get this working on Linux all day. Getting fed up now.

    By fiddling with the udev rules, nautilus now displays 'Teensy MTP Disk' but is unable to access it ("no MTP devices found").
    What Teensy you are using?
    If T3, you can activate Serial1 and get some log of packets. (uncomment Serial1.begin)
    I do not use Linux myself, but I seen it running on Ubuntu/Nautilus.

  2. #152
    If T3, you can activate Serial1 and get some log of packets. (uncomment Serial1.begin)
    Teensy 4, ide 1.8.10, teensyduino 1.49. The pc is running ubuntu 18.04. Unfortunately, Serial doesn't work in mtp experimental mode. Is there another way to get the logs?

    In an earlier post you said to use a card formatted for exfat. Does that still hold?

    I thought the problem might be old SPI and Time libs, but updating those didn't help. Tomorrow I'll try updating the rest.

  3. #153
    Senior Member+ defragster's Avatar
    Join Date
    Feb 2015
    Posts
    10,610
    What SD connect is there on T4? Not SDIO? I didn't get today's update yet but yesterday it was coded to use standard SPI SD.

    Serial1 is uart on pins 0/1 - would feed to a USB adapter or a second Teensy to echo out USB.

    Cool that debug info is there - could also be sent out Serial USB as seen on Windows showing the 'loop' printing while MTP active.

  4. #154
    Sdio via the pads underneath. # define use_sdio is set to 1.

    Will investigate serial1 tomorrow.

  5. #155
    Senior Member+ defragster's Avatar
    Join Date
    Feb 2015
    Posts
    10,610
    Quote Originally Posted by xenington View Post
    Sdio via the pads underneath. # define use_sdio is set to 1.

    Will investigate serial1 tomorrow.
    Good - assume SDIO has been seen to work? I tested mine back a few p#119? when it failed with the sdfat-Beta diskinfo sketch.

    Downloaded Now 6 hr old update MTP:: made the MTP_config.h edit " #define USE_SDIO 1
    "
    >> Had to "#ifdef 0" out code of either MAIN.cpp or mtp-test.ino - both define storage and setup and loop and both are included by IDE builder since they are same directory. A bit awkward - maybe do "#ifdef USING_MAKEFILE" in the .cpp and then edit makefile to define that? That would preclude the IDE from finding anything there, but work for makefile that ignores the .ino. I was okay with empty .INO - it is just an example and the IDE shows the tab which is a good lesson for IDE users to learn.

    >> It is running now and a RIGHT click Drag and release 'Copy' of a file on the MTP::Teensy, the Windows UI showed copy underway - then quit. And the MTP::Teensy was then no longer viable.
    - unplugged and re-plugged Teeny and it came up showing zero size 'COPY' name of that file with size of zero not 190 MB

    >> Delete of that empty 'Copy' file works as does delete of the 'New Folder 2' created yesterday.

    Here is a snapshot of T4 memory usage in building this sample with TD_1.49:
    Code:
    FlexRAM section ITCM+DTCM = 512 KB
        Config : aaaaaaaf
        ITCM :  43936 B	(67.04% of   64 KB)
        DTCM :  29376 B	( 6.40% of  448 KB)
        Available for Stack: 429376
    OCRAM: 512KB
        DMAMEM:   1120 B	( 0.21% of  512 KB)
        Available for Heap: 523168 B	(99.79% of  512 KB)
    Flash:  53488 B	( 2.63% of 1984 KB)

  6. #156
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    6,098
    For what it is worth, I booted up my old desktop into Ubuntu 18.04.3 LTS .

    I then plugged in my Teensy with the MTP stuff on it and it showed up as an Icon on my desktop (Teensy MTP Disk) which I double clicked on and it showed me the files...

    Note: before this I did do: sudo apt-get install mtp-tools

    doing a command like: dmesg | tail -30
    shows lots of stuff like it installed... and mentiones Teensyduino MTP disk on ...

    Not sure yet how to address from command line.

  7. #157
    Yes the sdfat-beta examples all work. I have to keep renaming sdfat-beta.h > sdfat.h to do it though.

    I don't mind the empty tab in mtp-test.

  8. #158
    >KurtE Thanks I'll give it a go. I have tried various mtp software on the ubuntu side which makes me think my problem might be old teensy libs.

    When updating ide and teensyduino, are the included libs the most recent?

  9. #159
    Senior Member+ defragster's Avatar
    Join Date
    Feb 2015
    Posts
    10,610
    Quote Originally Posted by xenington View Post
    Yes the sdfat-beta examples all work. I have to keep renaming sdfat-beta.h > sdfat.h to do it though.

    I don't mind the empty tab in mtp-test.
    For me it doesn't cause trouble having the 'sdfat-beta.h > sdfat.h ' file copied instead of renamed to build both.

    Nice that KurtE sees it working.

    @KurtE - I'm not sure about command line use either - that is when I found that linked MTPdrive App that presents it as a drive letter. That is the ONLY useful link I found on a brief search.

    Some links resolved to Android in the years old version '4' - that was when they typically appeared as MTP.

  10. #160
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    6,098
    I found a link on Ask Ubuntu, which I will fill in, Will edit post from PC...

    But the data on my linux showed up like:
    Code:
    kurt@kurt-XPS-8300:~$ 
    kurt@kurt-XPS-8300:~$ 
    kurt@kurt-XPS-8300:~$ cd /run/user/$UID/gvfs
    kurt@kurt-XPS-8300:/run/user/1000/gvfs$ ls
    'gphoto2:host=%5Busb%3A001%2C005%5D'
    kurt@kurt-XPS-8300:/run/user/1000/gvfs$ cd gphoto2\:host\=%5Busb%3A001%2C005%5D/
    kurt@kurt-XPS-8300:/run/user/1000/gvfs/gphoto2:host=%5Busb%3A001%2C005%5D$ ls
     C64   mtpindex.dat  'System Volume Information'
    kurt@kurt-XPS-8300:/run/user/1000/gvfs/gphoto2:host=%5Busb%3A001%2C005%5D$
    Edit: one location I found some data:
    https://askubuntu.com/questions/3423...the-filesystem

  11. #161
    Senior Member
    Join Date
    Dec 2013
    Posts
    264
    I only installed SdFat beta ver 2.0.0 library and maybe I'm cheating but this is all I did in MTP_config.h
    Code:
        #if USE_SDFAT_BETA == 1
        //#include "SdFat-beta.h"
        #include "SdFat.h"
        #else
        #include "SdFat.h"
        #endif

  12. #162
    Senior Member
    Join Date
    Dec 2013
    Posts
    264
    @ WMXZ
    Can I send you a beer money or donation of some kind, renaming files works like a charm

  13. #163
    Senior Member
    Join Date
    Dec 2013
    Posts
    264
    Perhaps we should do something like this for detecting the library version ?
    Code:
    #if defined(SdFat_h)
        char *SDFAT_ver = SD_FAT_VERSION;
        if (!strcmp("2.0.0", SDFAT_ver)) { // ver 2.0.0
          Serial.print( "SdFat version "), Serial.println( SD_FAT_VERSION );
        } else if ((SDFAT_ver[0] == '2') && (SDFAT_ver[1] == '.')) { // ver 2.
          Serial.println("Warning: MTP Library was only tested on SdFat Version 2.0.0 beta");
          Serial.print("SdFat Version currently installed "), Serial.println( SD_FAT_VERSION );
        } else { // ver 1
          Serial.print("Wrong SdFat Version "), Serial.println( SD_FAT_VERSION );
        }
    #endif
    EDIT:
    Issue is I'm getting compile warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] #define SD_FAT_VERSION "2.0.0"
    Last edited by Chris O.; 01-26-2020 at 01:10 AM.

  14. #164
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    6,098
    If possible use: const char*

  15. #165
    Senior Member
    Join Date
    Dec 2013
    Posts
    264
    If possible use: const char*
    O0o!! why didnt I think of that

  16. #166
    Senior Member
    Join Date
    Dec 2013
    Posts
    264
    Arduino-1.8.10
    Teensyduino 1.49
    So I've been playing around some more with Native Serial support (COMx port), can anyone test this:

    For Teensy 4.0 ADD or EDIT ---\cores\teensy4 usb_desc.h, for Teensy LC or (3.0, 3.1, 3.2, 3.5, 3.6) ADD or EDIT ---\cores\teensy3 usb_desc.h
    Code:
    #elif defined(USB_MTPDISK_SERIAL) // \cores\teensy4 usb_desc.h
      #define VENDOR_ID		        0x16C0
      #define PRODUCT_ID		0x0476
      #define RAWHID_USAGE_PAGE	0xFFAB  // recommended: 0xFF00 to 0xFFFF
      #define RAWHID_USAGE		0x0200  // recommended: 0x0100 to 0xFFFF
      #define DEVICE_CLASS		0xEF
      #define DEVICE_SUBCLASS	0x02
      #define DEVICE_PROTOCOL	0x01
      #define MANUFACTURER_NAME	{'T','e','e','n','s','y','d','u','i','n','o'}
      #define MANUFACTURER_NAME_LEN	11
      #define PRODUCT_NAME		{'T','e','e','n','s','y',' ','M','T','P',' ','D','i','s','k','/','S','e','r','i','a','l'}
      #define PRODUCT_NAME_LEN	    22
      #define EP0_SIZE		        64
      #define NUM_ENDPOINTS         7  
      #define NUM_USB_BUFFERS	    12 
      #define NUM_INTERFACE		    3  
      #define CDC_IAD_DESCRIPTOR	1
      #define CDC_STATUS_INTERFACE	0
      #define CDC_DATA_INTERFACE	1 // Native Serial port
      #define CDC_ACM_ENDPOINT	    2
      #define CDC_RX_ENDPOINT       3
      #define CDC_TX_ENDPOINT       4 
      #define CDC_ACM_SIZE          16
      #define CDC_RX_SIZE_480       512
      #define CDC_TX_SIZE_480       512
      #define CDC_RX_SIZE_12        64
      #define CDC_TX_SIZE_12        64
      #define MTP_INTERFACE         2 // MTP Disk
      #define MTP_TX_ENDPOINT       5
      #define MTP_RX_ENDPOINT       5
      #define MTP_EVENT_ENDPOINT    6
      #define MTP_TX_SIZE_480       512
      #define MTP_RX_SIZE_480       512
      #define MTP_TX_SIZE_12        64
      #define MTP_RX_SIZE_12        64
      #define MTP_EVENT_SIZE        16
      #define MTP_EVENT_INTERVAL    1
      #define ENDPOINT2_CONFIG	ENDPOINT_RECEIVE_UNUSED + ENDPOINT_TRANSMIT_INTERRUPT    // Native Serial port
      #define ENDPOINT3_CONFIG	ENDPOINT_RECEIVE_BULK + ENDPOINT_TRANSMIT_UNUSED         // Native Serial port
      #define ENDPOINT4_CONFIG	ENDPOINT_RECEIVE_UNUSED + ENDPOINT_TRANSMIT_BULK         // Native Serial port
      #define ENDPOINT5_CONFIG	ENDPOINT_RECEIVE_BULK + ENDPOINT_TRANSMIT_BULK           // MTP Disk
      #define ENDPOINT6_CONFIG	ENDPOINT_RECEIVE_INTERRUPT + ENDPOINT_TRANSMIT_INTERRUPT // MTP Disk
    seems to be ok no issues uploading code to Teensy 4.0 or Serial lag.

    For Teensy LC, 3.x or 4.0 MTP + Serial Menu in Arduino (IDE) tools; edit boards.txt.
    My changes are marked in red

    Code:
    menu.usb=USB Type
    menu.speed=CPU Speed
    menu.opt=Optimize
    menu.keys=Keyboard Layout
    
    teensy40.name=Teensy 4.0
    teensy40.upload.maximum_size=2031616
    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
    teensy40.build.toolchain=arm/bin/
    teensy40.build.command.gcc=arm-none-eabi-gcc
    teensy40.build.command.g++=arm-none-eabi-g++
    teensy40.build.command.ar=arm-none-eabi-gcc-ar
    teensy40.build.command.objcopy=arm-none-eabi-objcopy
    teensy40.build.command.objdump=arm-none-eabi-objdump
    teensy40.build.command.linker=arm-none-eabi-gcc
    teensy40.build.command.size=arm-none-eabi-size
    teensy40.build.flags.common=-g -Wall -ffunction-sections -fdata-sections -nostdlib
    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=149
    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.keyboard=Keyboard
    teensy40.menu.usb.keyboard.build.usbtype=USB_KEYBOARDONLY
    teensy40.menu.usb.keyboard.fake_serial=teensy_gateway
    teensy40.menu.usb.touch=Keyboard + Touch Screen
    teensy40.menu.usb.touch.build.usbtype=USB_TOUCHSCREEN
    teensy40.menu.usb.touch.fake_serial=teensy_gateway
    teensy40.menu.usb.hidtouch=Keyboard + Mouse + Touch Screen
    teensy40.menu.usb.hidtouch.build.usbtype=USB_HID_TOUCHSCREEN
    teensy40.menu.usb.hidtouch.fake_serial=teensy_gateway
    teensy40.menu.usb.hid=Keyboard + Mouse + Joystick
    teensy40.menu.usb.hid.build.usbtype=USB_HID
    teensy40.menu.usb.hid.fake_serial=teensy_gateway
    teensy40.menu.usb.serialhid=Serial + Keyboard + Mouse + Joystick
    teensy40.menu.usb.serialhid.build.usbtype=USB_SERIAL_HID
    teensy40.menu.usb.midi=MIDI
    teensy40.menu.usb.midi.build.usbtype=USB_MIDI
    teensy40.menu.usb.midi.fake_serial=teensy_gateway
    teensy40.menu.usb.midi4=MIDIx4
    teensy40.menu.usb.midi4.build.usbtype=USB_MIDI4
    teensy40.menu.usb.midi4.fake_serial=teensy_gateway
    teensy40.menu.usb.midi16=MIDIx16
    teensy40.menu.usb.midi16.build.usbtype=USB_MIDI16
    teensy40.menu.usb.midi16.fake_serial=teensy_gateway
    teensy40.menu.usb.serialmidi=Serial + MIDI
    teensy40.menu.usb.serialmidi.build.usbtype=USB_MIDI_SERIAL
    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
    # TEENSY 4.0 MTP + Serial
    teensy40.menu.usb.mtpserial=MTP Disk (Experimental) + Serial
    teensy40.menu.usb.mtpserial.build.usbtype=USB_MTPDISK_SERIAL
    
    teensy40.menu.usb.rawhid=Raw HID
    teensy40.menu.usb.rawhid.build.usbtype=USB_RAWHID
    teensy40.menu.usb.rawhid.fake_serial=teensy_gateway
    #teensy40.menu.usb.flightsim=Flight Sim Controls
    #teensy40.menu.usb.flightsim.build.usbtype=USB_FLIGHTSIM
    #teensy40.menu.usb.flightsim.fake_serial=teensy_gateway
    #teensy40.menu.usb.flightsimjoystick=Flight Sim Controls + Joystick
    #teensy40.menu.usb.flightsimjoystick.build.usbtype=USB_FLIGHTSIM_JOYSTICK
    #teensy40.menu.usb.flightsimjoystick.fake_serial=teensy_gateway
    #teensy40.menu.usb.disable=No USB
    #teensy40.menu.usb.disable.build.usbtype=USB_DISABLED
    
    teensy40.menu.speed.600=600 MHz
    teensy40.menu.speed.528=528 MHz
    teensy40.menu.speed.450=450 MHz
    teensy40.menu.speed.396=396 MHz
    teensy40.menu.speed.150=150 MHz
    teensy40.menu.speed.24=24 MHz
    teensy40.menu.speed.720=720 MHz (overclock)
    teensy40.menu.speed.816=816 MHz (overclock)
    teensy40.menu.speed.912=912 MHz (overclock, cooling req'd)
    teensy40.menu.speed.960=960 MHz (overclock, cooling req'd)
    teensy40.menu.speed.1008=1.008 GHz (overclock, cooling req'd)
    teensy40.menu.speed.1008.build.fcpu=1000000000
    teensy40.menu.speed.960.build.fcpu=960000000
    teensy40.menu.speed.912.build.fcpu=912000000
    teensy40.menu.speed.816.build.fcpu=816000000
    teensy40.menu.speed.720.build.fcpu=720000000
    teensy40.menu.speed.600.build.fcpu=600000000
    teensy40.menu.speed.528.build.fcpu=528000000
    teensy40.menu.speed.450.build.fcpu=450000000
    teensy40.menu.speed.396.build.fcpu=396000000
    teensy40.menu.speed.150.build.fcpu=150000000
    teensy40.menu.speed.24.build.fcpu=24000000
    
    teensy40.menu.opt.o2std=Faster
    teensy40.menu.opt.o2std.build.flags.optimize=-O2
    teensy40.menu.opt.o2std.build.flags.ldspecs=
    #teensy40.menu.opt.o2lto=Faster with LTO
    #teensy40.menu.opt.o2lto.build.flags.optimize=-O2 -flto -fno-fat-lto-objects
    #teensy40.menu.opt.o2lto.build.flags.ldspecs=-fuse-linker-plugin
    teensy40.menu.opt.o1std=Fast
    teensy40.menu.opt.o1std.build.flags.optimize=-O1
    teensy40.menu.opt.o1std.build.flags.ldspecs=
    #teensy40.menu.opt.o1lto=Fast with LTO
    #teensy40.menu.opt.o1lto.build.flags.optimize=-O1 -flto -fno-fat-lto-objects
    #teensy40.menu.opt.o1lto.build.flags.ldspecs=-fuse-linker-plugin
    teensy40.menu.opt.o3std=Fastest
    teensy40.menu.opt.o3std.build.flags.optimize=-O3
    teensy40.menu.opt.o3std.build.flags.ldspecs=
    #teensy40.menu.opt.o3purestd=Fastest + pure-code
    #teensy40.menu.opt.o3purestd.build.flags.optimize=-O3 -mpure-code -D__PURE_CODE__
    #teensy40.menu.opt.o3purestd.build.flags.ldspecs=
    #teensy40.menu.opt.o3lto=Fastest with LTO
    #teensy40.menu.opt.o3lto.build.flags.optimize=-O3 -flto -fno-fat-lto-objects
    #teensy40.menu.opt.o3lto.build.flags.ldspecs=-fuse-linker-plugin
    #teensy40.menu.opt.o3purelto=Fastest + pure-code with LTO
    #teensy40.menu.opt.o3purelto.build.flags.optimize=-O3 -mpure-code -D__PURE_CODE__ -flto -fno-fat-lto-objects
    #teensy40.menu.opt.o3purelto.build.flags.ldspecs=-fuse-linker-plugin
    teensy40.menu.opt.ogstd=Debug
    teensy40.menu.opt.ogstd.build.flags.optimize=-Og
    teensy40.menu.opt.ogstd.build.flags.ldspecs=
    #teensy40.menu.opt.oglto=Debug with LTO
    #teensy40.menu.opt.oglto.build.flags.optimize=-Og -flto -fno-fat-lto-objects
    #teensy40.menu.opt.oglto.build.flags.ldspecs=-fuse-linker-plugin
    teensy40.menu.opt.osstd=Smallest Code
    teensy40.menu.opt.osstd.build.flags.optimize=-Os --specs=nano.specs
    teensy40.menu.opt.osstd.build.flags.ldspecs=
    #teensy40.menu.opt.oslto=Smallest Code with LTO
    #teensy40.menu.opt.oslto.build.flags.optimize=-Os -flto -fno-fat-lto-objects --specs=nano.specs
    #teensy40.menu.opt.oslto.build.flags.ldspecs=-fuse-linker-plugin
    
    teensy40.menu.keys.en-us=US English
    teensy40.menu.keys.en-us.build.keylayout=US_ENGLISH
    teensy40.menu.keys.fr-ca=Canadian French
    teensy40.menu.keys.fr-ca.build.keylayout=CANADIAN_FRENCH
    teensy40.menu.keys.xx-ca=Canadian Multilingual
    teensy40.menu.keys.xx-ca.build.keylayout=CANADIAN_MULTILINGUAL
    teensy40.menu.keys.cz-cz=Czech
    teensy40.menu.keys.cz-cz.build.keylayout=CZECH
    teensy40.menu.keys.da-da=Danish
    teensy40.menu.keys.da-da.build.keylayout=DANISH
    teensy40.menu.keys.fi-fi=Finnish
    teensy40.menu.keys.fi-fi.build.keylayout=FINNISH
    teensy40.menu.keys.fr-fr=French
    teensy40.menu.keys.fr-fr.build.keylayout=FRENCH
    teensy40.menu.keys.fr-be=French Belgian
    teensy40.menu.keys.fr-be.build.keylayout=FRENCH_BELGIAN
    teensy40.menu.keys.fr-ch=French Swiss
    teensy40.menu.keys.fr-ch.build.keylayout=FRENCH_SWISS
    teensy40.menu.keys.de-de=German
    teensy40.menu.keys.de-de.build.keylayout=GERMAN
    teensy40.menu.keys.de-dm=German (Mac)
    teensy40.menu.keys.de-dm.build.keylayout=GERMAN_MAC
    teensy40.menu.keys.de-ch=German Swiss
    teensy40.menu.keys.de-ch.build.keylayout=GERMAN_SWISS
    teensy40.menu.keys.is-is=Icelandic
    teensy40.menu.keys.is-is.build.keylayout=ICELANDIC
    teensy40.menu.keys.en-ie=Irish
    teensy40.menu.keys.en-ie.build.keylayout=IRISH
    teensy40.menu.keys.it-it=Italian
    teensy40.menu.keys.it-it.build.keylayout=ITALIAN
    teensy40.menu.keys.no-no=Norwegian
    teensy40.menu.keys.no-no.build.keylayout=NORWEGIAN
    teensy40.menu.keys.pt-pt=Portuguese
    teensy40.menu.keys.pt-pt.build.keylayout=PORTUGUESE
    teensy40.menu.keys.pt-br=Portuguese Brazilian
    teensy40.menu.keys.pt-br.build.keylayout=PORTUGUESE_BRAZILIAN
    teensy40.menu.keys.rs-rs=Serbian (Latin Only)
    teensy40.menu.keys.rs-rs.build.keylayout=SERBIAN_LATIN_ONLY
    teensy40.menu.keys.es-es=Spanish
    teensy40.menu.keys.es-es.build.keylayout=SPANISH
    teensy40.menu.keys.es-mx=Spanish Latin America
    teensy40.menu.keys.es-mx.build.keylayout=SPANISH_LATIN_AMERICA
    teensy40.menu.keys.sv-se=Swedish
    teensy40.menu.keys.sv-se.build.keylayout=SWEDISH
    teensy40.menu.keys.tr-tr=Turkish (partial)
    teensy40.menu.keys.tr-tr.build.keylayout=TURKISH
    teensy40.menu.keys.en-gb=United Kingdom
    teensy40.menu.keys.en-gb.build.keylayout=UNITED_KINGDOM
    teensy40.menu.keys.usint=US International
    teensy40.menu.keys.usint.build.keylayout=US_INTERNATIONAL
    
    
    teensy36.name=Teensy 3.6
    teensy36.upload.maximum_size=1048576
    teensy36.upload.maximum_data_size=262144
    teensy36.upload.tool=teensyloader
    teensy36.upload.protocol=halfkay
    teensy36.build.board=TEENSY36
    teensy36.build.core=teensy3
    teensy36.build.mcu=mk66fx1m0
    teensy36.build.warn_data_percentage=99
    teensy36.build.toolchain=arm/bin/
    teensy36.build.command.gcc=arm-none-eabi-gcc
    teensy36.build.command.g++=arm-none-eabi-g++
    teensy36.build.command.ar=arm-none-eabi-gcc-ar
    teensy36.build.command.objcopy=arm-none-eabi-objcopy
    teensy36.build.command.objdump=arm-none-eabi-objdump
    teensy36.build.command.linker=arm-none-eabi-gcc
    teensy36.build.command.size=arm-none-eabi-size
    teensy36.build.flags.common=-g -Wall -ffunction-sections -fdata-sections -nostdlib
    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=149
    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
    teensy36.build.flags.ld=-Wl,--gc-sections,--relax,--defsym=__rtc_localtime={extra.time.local} "-T{build.core.path}/mk66fx1m0.ld" -lstdc++
    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.keyboard=Keyboard
    teensy36.menu.usb.keyboard.build.usbtype=USB_KEYBOARDONLY
    teensy36.menu.usb.keyboard.fake_serial=teensy_gateway
    teensy36.menu.usb.touch=Keyboard + Touch Screen
    teensy36.menu.usb.touch.build.usbtype=USB_TOUCHSCREEN
    teensy36.menu.usb.touch.fake_serial=teensy_gateway
    teensy36.menu.usb.hidtouch=Keyboard + Mouse + Touch Screen
    teensy36.menu.usb.hidtouch.build.usbtype=USB_HID_TOUCHSCREEN
    teensy36.menu.usb.hidtouch.fake_serial=teensy_gateway
    teensy36.menu.usb.hid=Keyboard + Mouse + Joystick
    teensy36.menu.usb.hid.build.usbtype=USB_HID
    teensy36.menu.usb.hid.fake_serial=teensy_gateway
    teensy36.menu.usb.serialhid=Serial + Keyboard + Mouse + Joystick
    teensy36.menu.usb.serialhid.build.usbtype=USB_SERIAL_HID
    teensy36.menu.usb.midi=MIDI
    teensy36.menu.usb.midi.build.usbtype=USB_MIDI
    teensy36.menu.usb.midi.fake_serial=teensy_gateway
    teensy36.menu.usb.midi4=MIDIx4
    teensy36.menu.usb.midi4.build.usbtype=USB_MIDI4
    teensy36.menu.usb.midi4.fake_serial=teensy_gateway
    teensy36.menu.usb.midi16=MIDIx16
    teensy36.menu.usb.midi16.build.usbtype=USB_MIDI16
    teensy36.menu.usb.midi16.fake_serial=teensy_gateway
    teensy36.menu.usb.serialmidi=Serial + MIDI
    teensy36.menu.usb.serialmidi.build.usbtype=USB_MIDI_SERIAL
    teensy36.menu.usb.serialmidi4=Serial + MIDIx4
    teensy36.menu.usb.serialmidi4.build.usbtype=USB_MIDI4_SERIAL
    teensy36.menu.usb.serialmidi16=Serial + MIDIx16
    teensy36.menu.usb.serialmidi16.build.usbtype=USB_MIDI16_SERIAL
    teensy36.menu.usb.audio=Audio
    teensy36.menu.usb.audio.build.usbtype=USB_AUDIO
    teensy36.menu.usb.audio.fake_serial=teensy_gateway
    teensy36.menu.usb.serialmidiaudio=Serial + MIDI + Audio
    teensy36.menu.usb.serialmidiaudio.build.usbtype=USB_MIDI_AUDIO_SERIAL
    teensy36.menu.usb.serialmidi16audio=Serial + MIDIx16 + Audio
    teensy36.menu.usb.serialmidi16audio.build.usbtype=USB_MIDI16_AUDIO_SERIAL
    teensy36.menu.usb.mtp=MTP Disk (Experimental)
    teensy36.menu.usb.mtp.build.usbtype=USB_MTPDISK
    teensy36.menu.usb.mtp.fake_serial=teensy_gateway
    
    teensy36.menu.usb.mtpserial=MTP Disk (Experimental) + Serial
    teensy36.menu.usb.mtpserial.build.usbtype=USB_MTPDISK_SERIAL
    
    teensy36.menu.usb.rawhid=Raw HID
    teensy36.menu.usb.rawhid.build.usbtype=USB_RAWHID
    teensy36.menu.usb.rawhid.fake_serial=teensy_gateway
    teensy36.menu.usb.flightsim=Flight Sim Controls
    teensy36.menu.usb.flightsim.build.usbtype=USB_FLIGHTSIM
    teensy36.menu.usb.flightsim.fake_serial=teensy_gateway
    teensy36.menu.usb.flightsimjoystick=Flight Sim Controls + Joystick
    teensy36.menu.usb.flightsimjoystick.build.usbtype=USB_FLIGHTSIM_JOYSTICK
    teensy36.menu.usb.flightsimjoystick.fake_serial=teensy_gateway
    teensy36.menu.usb.everything=All of the Above
    teensy36.menu.usb.everything.build.usbtype=USB_EVERYTHING
    teensy36.menu.usb.disable=No USB
    teensy36.menu.usb.disable.build.usbtype=USB_DISABLED
    
    teensy36.menu.speed.180=180 MHz
    teensy36.menu.speed.168=168 MHz
    teensy36.menu.speed.144=144 MHz
    teensy36.menu.speed.120=120 MHz
    teensy36.menu.speed.96=96 MHz
    teensy36.menu.speed.72=72 MHz
    teensy36.menu.speed.48=48 MHz
    teensy36.menu.speed.24=24 MHz
    teensy36.menu.speed.16=16 MHz (No USB)
    teensy36.menu.speed.8=8 MHz (No USB)
    teensy36.menu.speed.4=4 MHz (No USB)
    teensy36.menu.speed.2=2 MHz (No USB)
    teensy36.menu.speed.192=192 MHz (overclock)
    teensy36.menu.speed.216=216 MHz (overclock)
    teensy36.menu.speed.240=240 MHz (overclock)
    teensy36.menu.speed.256=256 MHz (overclock)
    teensy36.menu.speed.256.build.fcpu=256000000
    teensy36.menu.speed.240.build.fcpu=240000000
    teensy36.menu.speed.216.build.fcpu=216000000
    teensy36.menu.speed.192.build.fcpu=192000000
    teensy36.menu.speed.180.build.fcpu=180000000
    teensy36.menu.speed.168.build.fcpu=168000000
    teensy36.menu.speed.144.build.fcpu=144000000
    teensy36.menu.speed.120.build.fcpu=120000000
    teensy36.menu.speed.96.build.fcpu=96000000
    teensy36.menu.speed.72.build.fcpu=72000000
    teensy36.menu.speed.48.build.fcpu=48000000
    teensy36.menu.speed.24.build.fcpu=24000000
    teensy36.menu.speed.16.build.fcpu=16000000
    teensy36.menu.speed.8.build.fcpu=8000000
    teensy36.menu.speed.4.build.fcpu=4000000
    teensy36.menu.speed.2.build.fcpu=2000000
    
    teensy36.menu.opt.o2std=Faster
    teensy36.menu.opt.o2std.build.flags.optimize=-O2
    teensy36.menu.opt.o2std.build.flags.ldspecs=
    teensy36.menu.opt.o2lto=Faster with LTO
    teensy36.menu.opt.o2lto.build.flags.optimize=-O2 -flto -fno-fat-lto-objects
    teensy36.menu.opt.o2lto.build.flags.ldspecs=-fuse-linker-plugin
    teensy36.menu.opt.o1std=Fast
    teensy36.menu.opt.o1std.build.flags.optimize=-O1
    teensy36.menu.opt.o1std.build.flags.ldspecs=
    teensy36.menu.opt.o1lto=Fast with LTO
    teensy36.menu.opt.o1lto.build.flags.optimize=-O1 -flto -fno-fat-lto-objects
    teensy36.menu.opt.o1lto.build.flags.ldspecs=-fuse-linker-plugin
    teensy36.menu.opt.o3std=Fastest
    teensy36.menu.opt.o3std.build.flags.optimize=-O3
    teensy36.menu.opt.o3std.build.flags.ldspecs=
    teensy36.menu.opt.o3purestd=Fastest + pure-code
    teensy36.menu.opt.o3purestd.build.flags.optimize=-O3 -mpure-code -D__PURE_CODE__
    teensy36.menu.opt.o3purestd.build.flags.ldspecs=
    teensy36.menu.opt.o3lto=Fastest with LTO
    teensy36.menu.opt.o3lto.build.flags.optimize=-O3 -flto -fno-fat-lto-objects
    teensy36.menu.opt.o3lto.build.flags.ldspecs=-fuse-linker-plugin
    teensy36.menu.opt.o3purelto=Fastest + pure-code with LTO
    teensy36.menu.opt.o3purelto.build.flags.optimize=-O3 -mpure-code -D__PURE_CODE__ -flto -fno-fat-lto-objects
    teensy36.menu.opt.o3purelto.build.flags.ldspecs=-fuse-linker-plugin
    teensy36.menu.opt.ogstd=Debug
    teensy36.menu.opt.ogstd.build.flags.optimize=-Og
    teensy36.menu.opt.ogstd.build.flags.ldspecs=
    teensy36.menu.opt.oglto=Debug with LTO
    teensy36.menu.opt.oglto.build.flags.optimize=-Og -flto -fno-fat-lto-objects
    teensy36.menu.opt.oglto.build.flags.ldspecs=-fuse-linker-plugin
    teensy36.menu.opt.osstd=Smallest Code
    teensy36.menu.opt.osstd.build.flags.optimize=-Os --specs=nano.specs
    teensy36.menu.opt.osstd.build.flags.ldspecs=
    teensy36.menu.opt.oslto=Smallest Code with LTO
    teensy36.menu.opt.oslto.build.flags.optimize=-Os -flto -fno-fat-lto-objects --specs=nano.specs
    teensy36.menu.opt.oslto.build.flags.ldspecs=-fuse-linker-plugin
    
    teensy36.menu.keys.en-us=US English
    teensy36.menu.keys.en-us.build.keylayout=US_ENGLISH
    teensy36.menu.keys.fr-ca=Canadian French
    teensy36.menu.keys.fr-ca.build.keylayout=CANADIAN_FRENCH
    teensy36.menu.keys.xx-ca=Canadian Multilingual
    teensy36.menu.keys.xx-ca.build.keylayout=CANADIAN_MULTILINGUAL
    teensy36.menu.keys.cz-cz=Czech
    teensy36.menu.keys.cz-cz.build.keylayout=CZECH
    teensy36.menu.keys.da-da=Danish
    teensy36.menu.keys.da-da.build.keylayout=DANISH
    teensy36.menu.keys.fi-fi=Finnish
    teensy36.menu.keys.fi-fi.build.keylayout=FINNISH
    teensy36.menu.keys.fr-fr=French
    teensy36.menu.keys.fr-fr.build.keylayout=FRENCH
    teensy36.menu.keys.fr-be=French Belgian
    teensy36.menu.keys.fr-be.build.keylayout=FRENCH_BELGIAN
    teensy36.menu.keys.fr-ch=French Swiss
    teensy36.menu.keys.fr-ch.build.keylayout=FRENCH_SWISS
    teensy36.menu.keys.de-de=German
    teensy36.menu.keys.de-de.build.keylayout=GERMAN
    teensy36.menu.keys.de-dm=German (Mac)
    teensy36.menu.keys.de-dm.build.keylayout=GERMAN_MAC
    teensy36.menu.keys.de-ch=German Swiss
    teensy36.menu.keys.de-ch.build.keylayout=GERMAN_SWISS
    teensy36.menu.keys.is-is=Icelandic
    teensy36.menu.keys.is-is.build.keylayout=ICELANDIC
    teensy36.menu.keys.en-ie=Irish
    teensy36.menu.keys.en-ie.build.keylayout=IRISH
    teensy36.menu.keys.it-it=Italian
    teensy36.menu.keys.it-it.build.keylayout=ITALIAN
    teensy36.menu.keys.no-no=Norwegian
    teensy36.menu.keys.no-no.build.keylayout=NORWEGIAN
    teensy36.menu.keys.pt-pt=Portuguese
    teensy36.menu.keys.pt-pt.build.keylayout=PORTUGUESE
    teensy36.menu.keys.pt-br=Portuguese Brazilian
    teensy36.menu.keys.pt-br.build.keylayout=PORTUGUESE_BRAZILIAN
    teensy36.menu.keys.rs-rs=Serbian (Latin Only)
    teensy36.menu.keys.rs-rs.build.keylayout=SERBIAN_LATIN_ONLY
    teensy36.menu.keys.es-es=Spanish
    teensy36.menu.keys.es-es.build.keylayout=SPANISH
    teensy36.menu.keys.es-mx=Spanish Latin America
    teensy36.menu.keys.es-mx.build.keylayout=SPANISH_LATIN_AMERICA
    teensy36.menu.keys.sv-se=Swedish
    teensy36.menu.keys.sv-se.build.keylayout=SWEDISH
    teensy36.menu.keys.tr-tr=Turkish (partial)
    teensy36.menu.keys.tr-tr.build.keylayout=TURKISH
    teensy36.menu.keys.en-gb=United Kingdom
    teensy36.menu.keys.en-gb.build.keylayout=UNITED_KINGDOM
    teensy36.menu.keys.usint=US International
    teensy36.menu.keys.usint.build.keylayout=US_INTERNATIONAL
    
    
    teensy35.name=Teensy 3.5
    teensy35.upload.maximum_size=524288
    teensy35.upload.maximum_data_size=262136
    teensy35.upload.tool=teensyloader
    teensy35.upload.protocol=halfkay
    teensy35.build.board=TEENSY35
    teensy35.build.core=teensy3
    teensy35.build.mcu=mk64fx512
    teensy35.build.warn_data_percentage=98
    teensy35.build.toolchain=arm/bin/
    teensy35.build.command.gcc=arm-none-eabi-gcc
    teensy35.build.command.g++=arm-none-eabi-g++
    teensy35.build.command.ar=arm-none-eabi-gcc-ar
    teensy35.build.command.objcopy=arm-none-eabi-objcopy
    teensy35.build.command.objdump=arm-none-eabi-objdump
    teensy35.build.command.linker=arm-none-eabi-gcc
    teensy35.build.command.size=arm-none-eabi-size
    teensy35.build.flags.common=-g -Wall -ffunction-sections -fdata-sections -nostdlib
    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=149
    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
    teensy35.build.flags.ld=-Wl,--gc-sections,--relax,--defsym=__rtc_localtime={extra.time.local} "-T{build.core.path}/mk64fx512.ld" -lstdc++
    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.keyboard=Keyboard
    teensy35.menu.usb.keyboard.build.usbtype=USB_KEYBOARDONLY
    teensy35.menu.usb.keyboard.fake_serial=teensy_gateway
    teensy35.menu.usb.touch=Keyboard + Touch Screen
    teensy35.menu.usb.touch.build.usbtype=USB_TOUCHSCREEN
    teensy35.menu.usb.touch.fake_serial=teensy_gateway
    teensy35.menu.usb.hidtouch=Keyboard + Mouse + Touch Screen
    teensy35.menu.usb.hidtouch.build.usbtype=USB_HID_TOUCHSCREEN
    teensy35.menu.usb.hidtouch.fake_serial=teensy_gateway
    teensy35.menu.usb.hid=Keyboard + Mouse + Joystick
    teensy35.menu.usb.hid.build.usbtype=USB_HID
    teensy35.menu.usb.hid.fake_serial=teensy_gateway
    teensy35.menu.usb.serialhid=Serial + Keyboard + Mouse + Joystick
    teensy35.menu.usb.serialhid.build.usbtype=USB_SERIAL_HID
    teensy35.menu.usb.midi=MIDI
    teensy35.menu.usb.midi.build.usbtype=USB_MIDI
    teensy35.menu.usb.midi.fake_serial=teensy_gateway
    teensy35.menu.usb.midi4=MIDIx4
    teensy35.menu.usb.midi4.build.usbtype=USB_MIDI4
    teensy35.menu.usb.midi4.fake_serial=teensy_gateway
    teensy35.menu.usb.midi16=MIDIx16
    teensy35.menu.usb.midi16.build.usbtype=USB_MIDI16
    teensy35.menu.usb.midi16.fake_serial=teensy_gateway
    teensy35.menu.usb.serialmidi=Serial + MIDI
    teensy35.menu.usb.serialmidi.build.usbtype=USB_MIDI_SERIAL
    teensy35.menu.usb.serialmidi4=Serial + MIDIx4
    teensy35.menu.usb.serialmidi4.build.usbtype=USB_MIDI4_SERIAL
    teensy35.menu.usb.serialmidi16=Serial + MIDIx16
    teensy35.menu.usb.serialmidi16.build.usbtype=USB_MIDI16_SERIAL
    teensy35.menu.usb.audio=Audio
    teensy35.menu.usb.audio.build.usbtype=USB_AUDIO
    teensy35.menu.usb.audio.fake_serial=teensy_gateway
    teensy35.menu.usb.serialmidiaudio=Serial + MIDI + Audio
    teensy35.menu.usb.serialmidiaudio.build.usbtype=USB_MIDI_AUDIO_SERIAL
    teensy35.menu.usb.serialmidi16audio=Serial + MIDIx16 + Audio
    teensy35.menu.usb.serialmidi16audio.build.usbtype=USB_MIDI16_AUDIO_SERIAL
    
    teensy35.menu.usb.mtp=MTP Disk (Experimental)
    teensy35.menu.usb.mtp.build.usbtype=USB_MTPDISK
    teensy35.menu.usb.mtp.fake_serial=teensy_gateway
    teensy35.menu.usb.mtpserial=MTP Disk (Experimental) + Serial
    teensy35.menu.usb.mtpserial.build.usbtype=USB_MTPDISK_SERIAL
    
    teensy35.menu.usb.rawhid=Raw HID
    teensy35.menu.usb.rawhid.build.usbtype=USB_RAWHID
    teensy35.menu.usb.rawhid.fake_serial=teensy_gateway
    teensy35.menu.usb.flightsim=Flight Sim Controls
    teensy35.menu.usb.flightsim.build.usbtype=USB_FLIGHTSIM
    teensy35.menu.usb.flightsim.fake_serial=teensy_gateway
    teensy35.menu.usb.flightsimjoystick=Flight Sim Controls + Joystick
    teensy35.menu.usb.flightsimjoystick.build.usbtype=USB_FLIGHTSIM_JOYSTICK
    teensy35.menu.usb.flightsimjoystick.fake_serial=teensy_gateway
    teensy35.menu.usb.everything=All of the Above
    teensy35.menu.usb.everything.build.usbtype=USB_EVERYTHING
    teensy35.menu.usb.disable=No USB
    teensy35.menu.usb.disable.build.usbtype=USB_DISABLED
    
    teensy35.menu.speed.120=120 MHz
    teensy35.menu.speed.96=96 MHz
    teensy35.menu.speed.72=72 MHz
    teensy35.menu.speed.48=48 MHz
    teensy35.menu.speed.24=24 MHz
    teensy35.menu.speed.16=16 MHz (No USB)
    teensy35.menu.speed.8=8 MHz (No USB)
    teensy35.menu.speed.4=4 MHz (No USB)
    teensy35.menu.speed.2=2 MHz (No USB)
    teensy35.menu.speed.144=144 MHz (overclock)
    teensy35.menu.speed.168=168 MHz (overclock)
    teensy35.menu.speed.168.build.fcpu=168000000
    teensy35.menu.speed.144.build.fcpu=144000000
    teensy35.menu.speed.120.build.fcpu=120000000
    teensy35.menu.speed.96.build.fcpu=96000000
    teensy35.menu.speed.72.build.fcpu=72000000
    teensy35.menu.speed.48.build.fcpu=48000000
    teensy35.menu.speed.24.build.fcpu=24000000
    teensy35.menu.speed.16.build.fcpu=16000000
    teensy35.menu.speed.8.build.fcpu=8000000
    teensy35.menu.speed.4.build.fcpu=4000000
    teensy35.menu.speed.2.build.fcpu=2000000
    
    teensy35.menu.opt.o2std=Faster
    teensy35.menu.opt.o2std.build.flags.optimize=-O2
    teensy35.menu.opt.o2std.build.flags.ldspecs=
    teensy35.menu.opt.o2lto=Faster with LTO
    teensy35.menu.opt.o2lto.build.flags.optimize=-O2 -flto -fno-fat-lto-objects
    teensy35.menu.opt.o2lto.build.flags.ldspecs=-fuse-linker-plugin
    teensy35.menu.opt.o1std=Fast
    teensy35.menu.opt.o1std.build.flags.optimize=-O1
    teensy35.menu.opt.o1std.build.flags.ldspecs=
    teensy35.menu.opt.o1lto=Fast with LTO
    teensy35.menu.opt.o1lto.build.flags.optimize=-O1 -flto -fno-fat-lto-objects
    teensy35.menu.opt.o1lto.build.flags.ldspecs=-fuse-linker-plugin
    teensy35.menu.opt.o3std=Fastest
    teensy35.menu.opt.o3std.build.flags.optimize=-O3
    teensy35.menu.opt.o3std.build.flags.ldspecs=
    teensy35.menu.opt.o3purestd=Fastest + pure-code
    teensy35.menu.opt.o3purestd.build.flags.optimize=-O3 -mpure-code -D__PURE_CODE__
    teensy35.menu.opt.o3purestd.build.flags.ldspecs=
    teensy35.menu.opt.o3lto=Fastest with LTO
    teensy35.menu.opt.o3lto.build.flags.optimize=-O3 -flto -fno-fat-lto-objects
    teensy35.menu.opt.o3lto.build.flags.ldspecs=-fuse-linker-plugin
    teensy35.menu.opt.o3purelto=Fastest + pure-code with LTO
    teensy35.menu.opt.o3purelto.build.flags.optimize=-O3 -mpure-code -D__PURE_CODE__ -flto -fno-fat-lto-objects
    teensy35.menu.opt.o3purelto.build.flags.ldspecs=-fuse-linker-plugin
    teensy35.menu.opt.ogstd=Debug
    teensy35.menu.opt.ogstd.build.flags.optimize=-Og
    teensy35.menu.opt.ogstd.build.flags.ldspecs=
    teensy35.menu.opt.oglto=Debug with LTO
    teensy35.menu.opt.oglto.build.flags.optimize=-Og -flto -fno-fat-lto-objects
    teensy35.menu.opt.oglto.build.flags.ldspecs=-fuse-linker-plugin
    teensy35.menu.opt.osstd=Smallest Code
    teensy35.menu.opt.osstd.build.flags.optimize=-Os --specs=nano.specs
    teensy35.menu.opt.osstd.build.flags.ldspecs=
    teensy35.menu.opt.oslto=Smallest Code with LTO
    teensy35.menu.opt.oslto.build.flags.optimize=-Os -flto -fno-fat-lto-objects --specs=nano.specs
    teensy35.menu.opt.oslto.build.flags.ldspecs=-fuse-linker-plugin
    
    teensy35.menu.keys.en-us=US English
    teensy35.menu.keys.en-us.build.keylayout=US_ENGLISH
    teensy35.menu.keys.fr-ca=Canadian French
    teensy35.menu.keys.fr-ca.build.keylayout=CANADIAN_FRENCH
    teensy35.menu.keys.xx-ca=Canadian Multilingual
    teensy35.menu.keys.xx-ca.build.keylayout=CANADIAN_MULTILINGUAL
    teensy35.menu.keys.cz-cz=Czech
    teensy35.menu.keys.cz-cz.build.keylayout=CZECH
    teensy35.menu.keys.da-da=Danish
    teensy35.menu.keys.da-da.build.keylayout=DANISH
    teensy35.menu.keys.fi-fi=Finnish
    teensy35.menu.keys.fi-fi.build.keylayout=FINNISH
    teensy35.menu.keys.fr-fr=French
    teensy35.menu.keys.fr-fr.build.keylayout=FRENCH
    teensy35.menu.keys.fr-be=French Belgian
    teensy35.menu.keys.fr-be.build.keylayout=FRENCH_BELGIAN
    teensy35.menu.keys.fr-ch=French Swiss
    teensy35.menu.keys.fr-ch.build.keylayout=FRENCH_SWISS
    teensy35.menu.keys.de-de=German
    teensy35.menu.keys.de-de.build.keylayout=GERMAN
    teensy35.menu.keys.de-dm=German (Mac)
    teensy35.menu.keys.de-dm.build.keylayout=GERMAN_MAC
    teensy35.menu.keys.de-ch=German Swiss
    teensy35.menu.keys.de-ch.build.keylayout=GERMAN_SWISS
    teensy35.menu.keys.is-is=Icelandic
    teensy35.menu.keys.is-is.build.keylayout=ICELANDIC
    teensy35.menu.keys.en-ie=Irish
    teensy35.menu.keys.en-ie.build.keylayout=IRISH
    teensy35.menu.keys.it-it=Italian
    teensy35.menu.keys.it-it.build.keylayout=ITALIAN
    teensy35.menu.keys.no-no=Norwegian
    teensy35.menu.keys.no-no.build.keylayout=NORWEGIAN
    teensy35.menu.keys.pt-pt=Portuguese
    teensy35.menu.keys.pt-pt.build.keylayout=PORTUGUESE
    teensy35.menu.keys.pt-br=Portuguese Brazilian
    teensy35.menu.keys.pt-br.build.keylayout=PORTUGUESE_BRAZILIAN
    teensy35.menu.keys.rs-rs=Serbian (Latin Only)
    teensy35.menu.keys.rs-rs.build.keylayout=SERBIAN_LATIN_ONLY
    teensy35.menu.keys.es-es=Spanish
    teensy35.menu.keys.es-es.build.keylayout=SPANISH
    teensy35.menu.keys.es-mx=Spanish Latin America
    teensy35.menu.keys.es-mx.build.keylayout=SPANISH_LATIN_AMERICA
    teensy35.menu.keys.sv-se=Swedish
    teensy35.menu.keys.sv-se.build.keylayout=SWEDISH
    teensy35.menu.keys.tr-tr=Turkish (partial)
    teensy35.menu.keys.tr-tr.build.keylayout=TURKISH
    teensy35.menu.keys.en-gb=United Kingdom
    teensy35.menu.keys.en-gb.build.keylayout=UNITED_KINGDOM
    teensy35.menu.keys.usint=US International
    teensy35.menu.keys.usint.build.keylayout=US_INTERNATIONAL
    
    
    teensy31.name=Teensy 3.2 / 3.1
    teensy31.upload.maximum_size=262144
    teensy31.upload.maximum_data_size=65536
    teensy31.upload.tool=teensyloader
    teensy31.upload.protocol=halfkay
    teensy31.build.board=TEENSY31
    teensy31.build.core=teensy3
    teensy31.build.mcu=mk20dx256
    teensy31.build.warn_data_percentage=97
    teensy31.build.toolchain=arm/bin/
    teensy31.build.command.gcc=arm-none-eabi-gcc
    teensy31.build.command.g++=arm-none-eabi-g++
    teensy31.build.command.ar=arm-none-eabi-gcc-ar
    teensy31.build.command.objcopy=arm-none-eabi-objcopy
    teensy31.build.command.objdump=arm-none-eabi-objdump
    teensy31.build.command.linker=arm-none-eabi-gcc
    teensy31.build.command.size=arm-none-eabi-size
    teensy31.build.flags.common=-g -Wall -ffunction-sections -fdata-sections -nostdlib
    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=149
    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
    teensy31.build.flags.ld=-Wl,--gc-sections,--relax,--defsym=__rtc_localtime={extra.time.local} "-T{build.core.path}/mk20dx256.ld" -lstdc++
    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.keyboard=Keyboard
    teensy31.menu.usb.keyboard.build.usbtype=USB_KEYBOARDONLY
    teensy31.menu.usb.keyboard.fake_serial=teensy_gateway
    teensy31.menu.usb.touch=Keyboard + Touch Screen
    teensy31.menu.usb.touch.build.usbtype=USB_TOUCHSCREEN
    teensy31.menu.usb.touch.fake_serial=teensy_gateway
    teensy31.menu.usb.hidtouch=Keyboard + Mouse + Touch Screen
    teensy31.menu.usb.hidtouch.build.usbtype=USB_HID_TOUCHSCREEN
    teensy31.menu.usb.hidtouch.fake_serial=teensy_gateway
    teensy31.menu.usb.hid=Keyboard + Mouse + Joystick
    teensy31.menu.usb.hid.build.usbtype=USB_HID
    teensy31.menu.usb.hid.fake_serial=teensy_gateway
    teensy31.menu.usb.serialhid=Serial + Keyboard + Mouse + Joystick
    teensy31.menu.usb.serialhid.build.usbtype=USB_SERIAL_HID
    teensy31.menu.usb.midi=MIDI
    teensy31.menu.usb.midi.build.usbtype=USB_MIDI
    teensy31.menu.usb.midi.fake_serial=teensy_gateway
    teensy31.menu.usb.midi4=MIDIx4
    teensy31.menu.usb.midi4.build.usbtype=USB_MIDI4
    teensy31.menu.usb.midi4.fake_serial=teensy_gateway
    teensy31.menu.usb.midi16=MIDIx16
    teensy31.menu.usb.midi16.build.usbtype=USB_MIDI16
    teensy31.menu.usb.midi16.fake_serial=teensy_gateway
    teensy31.menu.usb.serialmidi=Serial + MIDI
    teensy31.menu.usb.serialmidi.build.usbtype=USB_MIDI_SERIAL
    teensy31.menu.usb.serialmidi4=Serial + MIDIx4
    teensy31.menu.usb.serialmidi4.build.usbtype=USB_MIDI4_SERIAL
    teensy31.menu.usb.serialmidi16=Serial + MIDIx16
    teensy31.menu.usb.serialmidi16.build.usbtype=USB_MIDI16_SERIAL
    teensy31.menu.usb.audio=Audio
    teensy31.menu.usb.audio.build.usbtype=USB_AUDIO
    teensy31.menu.usb.audio.fake_serial=teensy_gateway
    teensy31.menu.usb.serialmidiaudio=Serial + MIDI + Audio
    teensy31.menu.usb.serialmidiaudio.build.usbtype=USB_MIDI_AUDIO_SERIAL
    teensy31.menu.usb.serialmidi16audio=Serial + MIDIx16 + Audio
    teensy31.menu.usb.serialmidi16audio.build.usbtype=USB_MIDI16_AUDIO_SERIAL
    
    teensy31.menu.usb.mtp=MTP Disk (Experimental)
    teensy31.menu.usb.mtp.build.usbtype=USB_MTPDISK
    teensy31.menu.usb.mtp.fake_serial=teensy_gateway
    teensy31.menu.usb.mtpserial=MTP Disk (Experimental) + Serial
    teensy31.menu.usb.mtpserial.build.usbtype=USB_MTPDISK_SERIAL
    
    teensy31.menu.usb.rawhid=Raw HID
    teensy31.menu.usb.rawhid.build.usbtype=USB_RAWHID
    teensy31.menu.usb.rawhid.fake_serial=teensy_gateway
    teensy31.menu.usb.flightsim=Flight Sim Controls
    teensy31.menu.usb.flightsim.build.usbtype=USB_FLIGHTSIM
    teensy31.menu.usb.flightsim.fake_serial=teensy_gateway
    teensy31.menu.usb.flightsimjoystick=Flight Sim Controls + Joystick
    teensy31.menu.usb.flightsimjoystick.build.usbtype=USB_FLIGHTSIM_JOYSTICK
    teensy31.menu.usb.flightsimjoystick.fake_serial=teensy_gateway
    teensy31.menu.usb.everything=All of the Above
    teensy31.menu.usb.everything.build.usbtype=USB_EVERYTHING
    teensy31.menu.usb.disable=No USB
    teensy31.menu.usb.disable.build.usbtype=USB_DISABLED
    
    teensy31.menu.speed.96=96 MHz (overclock)
    teensy31.menu.speed.72=72 MHz
    teensy31.menu.speed.48=48 MHz
    teensy31.menu.speed.24=24 MHz
    teensy31.menu.speed.16=16 MHz (No USB)
    teensy31.menu.speed.8=8 MHz (No USB)
    teensy31.menu.speed.4=4 MHz (No USB)
    teensy31.menu.speed.2=2 MHz (No USB)
    teensy31.menu.speed.120=120 MHz (overclock)
    #uncomment these if you want to try faster overclocking
    #teensy31.menu.speed.144=144 MHz (overclock)
    #teensy31.menu.speed.168=168 MHz (overclock)
    teensy31.menu.speed.168.build.fcpu=168000000
    teensy31.menu.speed.144.build.fcpu=144000000
    teensy31.menu.speed.120.build.fcpu=120000000
    teensy31.menu.speed.96.build.fcpu=96000000
    teensy31.menu.speed.72.build.fcpu=72000000
    teensy31.menu.speed.48.build.fcpu=48000000
    teensy31.menu.speed.24.build.fcpu=24000000
    teensy31.menu.speed.16.build.fcpu=16000000
    teensy31.menu.speed.8.build.fcpu=8000000
    teensy31.menu.speed.4.build.fcpu=4000000
    teensy31.menu.speed.2.build.fcpu=2000000
    
    teensy31.menu.opt.o2std=Faster
    teensy31.menu.opt.o2std.build.flags.optimize=-O2
    teensy31.menu.opt.o2std.build.flags.ldspecs=
    teensy31.menu.opt.o2lto=Faster with LTO
    teensy31.menu.opt.o2lto.build.flags.optimize=-O2 -flto -fno-fat-lto-objects
    teensy31.menu.opt.o2lto.build.flags.ldspecs=-fuse-linker-plugin
    teensy31.menu.opt.o1std=Fast
    teensy31.menu.opt.o1std.build.flags.optimize=-O1
    teensy31.menu.opt.o1std.build.flags.ldspecs=
    teensy31.menu.opt.o1lto=Fast with LTO
    teensy31.menu.opt.o1lto.build.flags.optimize=-O1 -flto -fno-fat-lto-objects
    teensy31.menu.opt.o1lto.build.flags.ldspecs=-fuse-linker-plugin
    teensy31.menu.opt.o3std=Fastest
    teensy31.menu.opt.o3std.build.flags.optimize=-O3
    teensy31.menu.opt.o3std.build.flags.ldspecs=
    teensy31.menu.opt.o3purestd=Fastest + pure-code
    teensy31.menu.opt.o3purestd.build.flags.optimize=-O3 -mpure-code -D__PURE_CODE__
    teensy31.menu.opt.o3purestd.build.flags.ldspecs=
    teensy31.menu.opt.o3lto=Fastest with LTO
    teensy31.menu.opt.o3lto.build.flags.optimize=-O3 -flto -fno-fat-lto-objects
    teensy31.menu.opt.o3lto.build.flags.ldspecs=-fuse-linker-plugin
    teensy31.menu.opt.o3purelto=Fastest + pure-code with LTO
    teensy31.menu.opt.o3purelto.build.flags.optimize=-O3 -mpure-code -D__PURE_CODE__ -flto -fno-fat-lto-objects
    teensy31.menu.opt.o3purelto.build.flags.ldspecs=-fuse-linker-plugin
    teensy31.menu.opt.ogstd=Debug
    teensy31.menu.opt.ogstd.build.flags.optimize=-Og
    teensy31.menu.opt.ogstd.build.flags.ldspecs=
    teensy31.menu.opt.oglto=Debug with LTO
    teensy31.menu.opt.oglto.build.flags.optimize=-Og -flto -fno-fat-lto-objects
    teensy31.menu.opt.oglto.build.flags.ldspecs=-fuse-linker-plugin
    teensy31.menu.opt.osstd=Smallest Code
    teensy31.menu.opt.osstd.build.flags.optimize=-Os --specs=nano.specs
    teensy31.menu.opt.osstd.build.flags.ldspecs=
    teensy31.menu.opt.oslto=Smallest Code with LTO
    teensy31.menu.opt.oslto.build.flags.optimize=-Os -flto -fno-fat-lto-objects --specs=nano.specs
    teensy31.menu.opt.oslto.build.flags.ldspecs=-fuse-linker-plugin
    
    teensy31.menu.keys.en-us=US English
    teensy31.menu.keys.en-us.build.keylayout=US_ENGLISH
    teensy31.menu.keys.fr-ca=Canadian French
    teensy31.menu.keys.fr-ca.build.keylayout=CANADIAN_FRENCH
    teensy31.menu.keys.xx-ca=Canadian Multilingual
    teensy31.menu.keys.xx-ca.build.keylayout=CANADIAN_MULTILINGUAL
    teensy31.menu.keys.cz-cz=Czech
    teensy31.menu.keys.cz-cz.build.keylayout=CZECH
    teensy31.menu.keys.da-da=Danish
    teensy31.menu.keys.da-da.build.keylayout=DANISH
    teensy31.menu.keys.fi-fi=Finnish
    teensy31.menu.keys.fi-fi.build.keylayout=FINNISH
    teensy31.menu.keys.fr-fr=French
    teensy31.menu.keys.fr-fr.build.keylayout=FRENCH
    teensy31.menu.keys.fr-be=French Belgian
    teensy31.menu.keys.fr-be.build.keylayout=FRENCH_BELGIAN
    teensy31.menu.keys.fr-ch=French Swiss
    teensy31.menu.keys.fr-ch.build.keylayout=FRENCH_SWISS
    teensy31.menu.keys.de-de=German
    teensy31.menu.keys.de-de.build.keylayout=GERMAN
    teensy31.menu.keys.de-dm=German (Mac)
    teensy31.menu.keys.de-dm.build.keylayout=GERMAN_MAC
    teensy31.menu.keys.de-ch=German Swiss
    teensy31.menu.keys.de-ch.build.keylayout=GERMAN_SWISS
    teensy31.menu.keys.is-is=Icelandic
    teensy31.menu.keys.is-is.build.keylayout=ICELANDIC
    teensy31.menu.keys.en-ie=Irish
    teensy31.menu.keys.en-ie.build.keylayout=IRISH
    teensy31.menu.keys.it-it=Italian
    teensy31.menu.keys.it-it.build.keylayout=ITALIAN
    teensy31.menu.keys.no-no=Norwegian
    teensy31.menu.keys.no-no.build.keylayout=NORWEGIAN
    teensy31.menu.keys.pt-pt=Portuguese
    teensy31.menu.keys.pt-pt.build.keylayout=PORTUGUESE
    teensy31.menu.keys.pt-br=Portuguese Brazilian
    teensy31.menu.keys.pt-br.build.keylayout=PORTUGUESE_BRAZILIAN
    teensy31.menu.keys.rs-rs=Serbian (Latin Only)
    teensy31.menu.keys.rs-rs.build.keylayout=SERBIAN_LATIN_ONLY
    teensy31.menu.keys.es-es=Spanish
    teensy31.menu.keys.es-es.build.keylayout=SPANISH
    teensy31.menu.keys.es-mx=Spanish Latin America
    teensy31.menu.keys.es-mx.build.keylayout=SPANISH_LATIN_AMERICA
    teensy31.menu.keys.sv-se=Swedish
    teensy31.menu.keys.sv-se.build.keylayout=SWEDISH
    teensy31.menu.keys.tr-tr=Turkish (partial)
    teensy31.menu.keys.tr-tr.build.keylayout=TURKISH
    teensy31.menu.keys.en-gb=United Kingdom
    teensy31.menu.keys.en-gb.build.keylayout=UNITED_KINGDOM
    teensy31.menu.keys.usint=US International
    teensy31.menu.keys.usint.build.keylayout=US_INTERNATIONAL
    
    teensy31.vid.0=0x16C0
    teensy31.vid.1=0x16C0
    teensy31.vid.2=0x16C0
    teensy31.vid.3=0x16C0
    teensy31.vid.4=0x16C0
    teensy31.pid.0=0x0483
    teensy31.pid.1=0x0487
    teensy31.pid.2=0x0489
    teensy31.pid.3=0x048A
    teensy31.pid.4=0x0476
    
    teensy30.name=Teensy 3.0
    teensy30.upload.maximum_size=131072
    teensy30.upload.maximum_data_size=16384
    teensy30.upload.tool=teensyloader
    teensy30.upload.protocol=halfkay
    teensy30.build.board=TEENSY30
    teensy30.build.core=teensy3
    teensy30.build.mcu=mk20dx128
    teensy30.build.warn_data_percentage=94
    teensy30.build.toolchain=arm/bin/
    teensy30.build.command.gcc=arm-none-eabi-gcc
    teensy30.build.command.g++=arm-none-eabi-g++
    teensy30.build.command.ar=arm-none-eabi-gcc-ar
    teensy30.build.command.objcopy=arm-none-eabi-objcopy
    teensy30.build.command.objdump=arm-none-eabi-objdump
    teensy30.build.command.linker=arm-none-eabi-gcc
    teensy30.build.command.size=arm-none-eabi-size
    teensy30.build.flags.common=-g -Wall -ffunction-sections -fdata-sections -nostdlib
    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=149
    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
    teensy30.build.flags.ld=-Wl,--gc-sections,--relax,--defsym=__rtc_localtime={extra.time.local} "-T{build.core.path}/mk20dx128.ld" -lstdc++
    teensy30.build.flags.ldspecs=--specs=nano.specs
    teensy30.build.flags.libs=-larm_cortexM4l_math -lm
    teensy30.serial.restart_cmd=false
    
    teensy30.menu.usb.serial=Serial
    teensy30.menu.usb.serial.build.usbtype=USB_SERIAL
    teensy30.menu.usb.keyboard=Keyboard
    teensy30.menu.usb.keyboard.build.usbtype=USB_KEYBOARDONLY
    teensy30.menu.usb.keyboard.fake_serial=teensy_gateway
    teensy30.menu.usb.hid=Keyboard + Mouse + Joystick
    teensy30.menu.usb.hid.build.usbtype=USB_HID
    teensy30.menu.usb.hid.fake_serial=teensy_gateway
    teensy30.menu.usb.serialhid=Serial + Keyboard + Mouse + Joystick
    teensy30.menu.usb.serialhid.build.usbtype=USB_SERIAL_HID
    teensy30.menu.usb.touch=Keyboard + Touch Screen
    teensy30.menu.usb.touch.build.usbtype=USB_TOUCHSCREEN
    teensy30.menu.usb.touch.fake_serial=teensy_gateway
    teensy30.menu.usb.midi=MIDI
    teensy30.menu.usb.midi.build.usbtype=USB_MIDI
    teensy30.menu.usb.midi.fake_serial=teensy_gateway
    teensy30.menu.usb.midi4=MIDIx4
    teensy30.menu.usb.midi4.build.usbtype=USB_MIDI4
    teensy30.menu.usb.midi4.fake_serial=teensy_gateway
    teensy30.menu.usb.serialmidi=Serial + MIDI
    teensy30.menu.usb.serialmidi.build.usbtype=USB_MIDI_SERIAL
    teensy30.menu.usb.serialmidi4=Serial + MIDIx4
    teensy30.menu.usb.serialmidi4.build.usbtype=USB_MIDI4_SERIAL
    teensy30.menu.usb.audio=Audio
    teensy30.menu.usb.audio.build.usbtype=USB_AUDIO
    teensy30.menu.usb.audio.fake_serial=teensy_gateway
    teensy30.menu.usb.serialmidiaudio=Serial + MIDI + Audio
    teensy30.menu.usb.serialmidiaudio.build.usbtype=USB_MIDI_AUDIO_SERIAL
    
    teensy30.menu.usb.mtp=MTP Disk (Experimental)
    teensy30.menu.usb.mtp.build.usbtype=USB_MTPDISK
    teensy30.menu.usb.mtp.fake_serial=teensy_gateway
    teensy30.menu.usb.mtpserial=MTP Disk (Experimental) + Serial
    teensy30.menu.usb.mtpserial.build.usbtype=USB_MTPDISK_SERIAL
    
    teensy30.menu.usb.rawhid=Raw HID
    teensy30.menu.usb.rawhid.build.usbtype=USB_RAWHID
    teensy30.menu.usb.rawhid.fake_serial=teensy_gateway
    teensy30.menu.usb.flightsim=Flight Sim Controls
    teensy30.menu.usb.flightsim.build.usbtype=USB_FLIGHTSIM
    teensy30.menu.usb.flightsim.fake_serial=teensy_gateway
    teensy30.menu.usb.disable=No USB
    teensy30.menu.usb.disable.build.usbtype=USB_DISABLED
    
    teensy30.menu.speed.96=96 MHz (overclock)
    teensy30.menu.speed.48=48 MHz
    teensy30.menu.speed.24=24 MHz
    teensy30.menu.speed.96.build.fcpu=96000000
    teensy30.menu.speed.48.build.fcpu=48000000
    teensy30.menu.speed.24.build.fcpu=24000000
    
    teensy30.menu.opt.o2std=Faster
    teensy30.menu.opt.o2std.build.flags.optimize=-O2
    teensy30.menu.opt.o2std.build.flags.ldspecs=
    teensy30.menu.opt.o2lto=Faster with LTO
    teensy30.menu.opt.o2lto.build.flags.optimize=-O2 -flto -fno-fat-lto-objects
    teensy30.menu.opt.o2lto.build.flags.ldspecs=-fuse-linker-plugin
    teensy30.menu.opt.o1std=Fast
    teensy30.menu.opt.o1std.build.flags.optimize=-O1
    teensy30.menu.opt.o1std.build.flags.ldspecs=
    teensy30.menu.opt.o1lto=Fast with LTO
    teensy30.menu.opt.o1lto.build.flags.optimize=-O1 -flto -fno-fat-lto-objects
    teensy30.menu.opt.o1lto.build.flags.ldspecs=-fuse-linker-plugin
    teensy30.menu.opt.o3std=Fastest
    teensy30.menu.opt.o3std.build.flags.optimize=-O3
    teensy30.menu.opt.o3std.build.flags.ldspecs=
    teensy30.menu.opt.o3lto=Fastest with LTO
    teensy30.menu.opt.o3lto.build.flags.optimize=-O3 -flto -fno-fat-lto-objects
    teensy30.menu.opt.o3lto.build.flags.ldspecs=-fuse-linker-plugin
    teensy30.menu.opt.ogstd=Debug
    teensy30.menu.opt.ogstd.build.flags.optimize=-Og
    teensy30.menu.opt.ogstd.build.flags.ldspecs=
    teensy30.menu.opt.oglto=Debug with LTO
    teensy30.menu.opt.oglto.build.flags.optimize=-Og -flto -fno-fat-lto-objects
    teensy30.menu.opt.oglto.build.flags.ldspecs=-fuse-linker-plugin
    teensy30.menu.opt.osstd=Smallest Code
    teensy30.menu.opt.osstd.build.flags.optimize=-Os --specs=nano.specs
    teensy30.menu.opt.osstd.build.flags.ldspecs=
    teensy30.menu.opt.oslto=Smallest Code with LTO
    teensy30.menu.opt.oslto.build.flags.optimize=-Os -flto -fno-fat-lto-objects --specs=nano.specs
    teensy30.menu.opt.oslto.build.flags.ldspecs=-fuse-linker-plugin
    
    teensy30.menu.keys.en-us=US English
    teensy30.menu.keys.en-us.build.keylayout=US_ENGLISH
    teensy30.menu.keys.fr-ca=Canadian French
    teensy30.menu.keys.fr-ca.build.keylayout=CANADIAN_FRENCH
    teensy30.menu.keys.xx-ca=Canadian Multilingual
    teensy30.menu.keys.xx-ca.build.keylayout=CANADIAN_MULTILINGUAL
    teensy30.menu.keys.cz-cz=Czech
    teensy30.menu.keys.cz-cz.build.keylayout=CZECH
    teensy30.menu.keys.da-da=Danish
    teensy30.menu.keys.da-da.build.keylayout=DANISH
    teensy30.menu.keys.fi-fi=Finnish
    teensy30.menu.keys.fi-fi.build.keylayout=FINNISH
    teensy30.menu.keys.fr-fr=French
    teensy30.menu.keys.fr-fr.build.keylayout=FRENCH
    teensy30.menu.keys.fr-be=French Belgian
    teensy30.menu.keys.fr-be.build.keylayout=FRENCH_BELGIAN
    teensy30.menu.keys.fr-ch=French Swiss
    teensy30.menu.keys.fr-ch.build.keylayout=FRENCH_SWISS
    teensy30.menu.keys.de-de=German
    teensy30.menu.keys.de-de.build.keylayout=GERMAN
    teensy30.menu.keys.de-dm=German (Mac)
    teensy30.menu.keys.de-dm.build.keylayout=GERMAN_MAC
    teensy30.menu.keys.de-ch=German Swiss
    teensy30.menu.keys.de-ch.build.keylayout=GERMAN_SWISS
    teensy30.menu.keys.is-is=Icelandic
    teensy30.menu.keys.is-is.build.keylayout=ICELANDIC
    teensy30.menu.keys.en-ie=Irish
    teensy30.menu.keys.en-ie.build.keylayout=IRISH
    teensy30.menu.keys.it-it=Italian
    teensy30.menu.keys.it-it.build.keylayout=ITALIAN
    teensy30.menu.keys.no-no=Norwegian
    teensy30.menu.keys.no-no.build.keylayout=NORWEGIAN
    teensy30.menu.keys.pt-pt=Portuguese
    teensy30.menu.keys.pt-pt.build.keylayout=PORTUGUESE
    teensy30.menu.keys.pt-br=Portuguese Brazilian
    teensy30.menu.keys.pt-br.build.keylayout=PORTUGUESE_BRAZILIAN
    teensy30.menu.keys.rs-rs=Serbian (Latin Only)
    teensy30.menu.keys.rs-rs.build.keylayout=SERBIAN_LATIN_ONLY
    teensy30.menu.keys.es-es=Spanish
    teensy30.menu.keys.es-es.build.keylayout=SPANISH
    teensy30.menu.keys.es-mx=Spanish Latin America
    teensy30.menu.keys.es-mx.build.keylayout=SPANISH_LATIN_AMERICA
    teensy30.menu.keys.sv-se=Swedish
    teensy30.menu.keys.sv-se.build.keylayout=SWEDISH
    teensy30.menu.keys.tr-tr=Turkish (partial)
    teensy30.menu.keys.tr-tr.build.keylayout=TURKISH
    teensy30.menu.keys.en-gb=United Kingdom
    teensy30.menu.keys.en-gb.build.keylayout=UNITED_KINGDOM
    teensy30.menu.keys.usint=US International
    teensy30.menu.keys.usint.build.keylayout=US_INTERNATIONAL
    
    
    teensyLC.name=Teensy LC
    teensyLC.upload.maximum_size=63488
    teensyLC.upload.maximum_data_size=8192
    teensyLC.upload.tool=teensyloader
    teensyLC.upload.protocol=halfkay
    teensyLC.build.board=TEENSYLC
    teensyLC.build.core=teensy3
    teensyLC.build.mcu=mkl26z64
    teensyLC.build.warn_data_percentage=88
    teensyLC.build.toolchain=arm/bin/
    teensyLC.build.command.gcc=arm-none-eabi-gcc
    teensyLC.build.command.g++=arm-none-eabi-g++
    teensyLC.build.command.ar=arm-none-eabi-gcc-ar
    teensyLC.build.command.objcopy=arm-none-eabi-objcopy
    teensyLC.build.command.objdump=arm-none-eabi-objdump
    teensyLC.build.command.linker=arm-none-eabi-gcc
    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=149
    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
    teensyLC.build.flags.ld=-Wl,--gc-sections,--relax,--defsym=__rtc_localtime={extra.time.local} "-T{build.core.path}/mkl26z64.ld" -lstdc++
    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.keyboard=Keyboard
    teensyLC.menu.usb.keyboard.build.usbtype=USB_KEYBOARDONLY
    teensyLC.menu.usb.keyboard.fake_serial=teensy_gateway
    teensyLC.menu.usb.hid=Keyboard + Mouse + Joystick
    teensyLC.menu.usb.hid.build.usbtype=USB_HID
    teensyLC.menu.usb.hid.fake_serial=teensy_gateway
    teensyLC.menu.usb.serialhid=Serial + Keyboard + Mouse + Joystick
    teensyLC.menu.usb.serialhid.build.usbtype=USB_SERIAL_HID
    teensyLC.menu.usb.touch=Keyboard + Touch Screen
    teensyLC.menu.usb.touch.build.usbtype=USB_TOUCHSCREEN
    teensyLC.menu.usb.touch.fake_serial=teensy_gateway
    teensyLC.menu.usb.midi=MIDI
    teensyLC.menu.usb.midi.build.usbtype=USB_MIDI
    teensyLC.menu.usb.midi.fake_serial=teensy_gateway
    teensyLC.menu.usb.midi4=MIDIx4
    teensyLC.menu.usb.midi4.build.usbtype=USB_MIDI4
    teensyLC.menu.usb.midi4.fake_serial=teensy_gateway
    teensyLC.menu.usb.serialmidi=Serial + MIDI
    teensyLC.menu.usb.serialmidi.build.usbtype=USB_MIDI_SERIAL
    teensyLC.menu.usb.serialmidi4=Serial + MIDIx4
    teensyLC.menu.usb.serialmidi4.build.usbtype=USB_MIDI4_SERIAL
    
    teensyLC.menu.usb.mtp=MTP Disk (Experimental)
    teensyLC.menu.usb.mtp.build.usbtype=USB_MTPDISK
    teensyLC.menu.usb.mtp.fake_serial=teensy_gateway
    teensyLC.menu.usb.mtpserial=MTP Disk (Experimental) + Serial
    teensyLC.menu.usb.mtpserial.build.usbtype=USB_MTPDISK_SERIAL
    
    teensyLC.menu.usb.rawhid=Raw HID
    teensyLC.menu.usb.rawhid.build.usbtype=USB_RAWHID
    teensyLC.menu.usb.rawhid.fake_serial=teensy_gateway
    teensyLC.menu.usb.flightsim=Flight Sim Controls
    teensyLC.menu.usb.flightsim.build.usbtype=USB_FLIGHTSIM
    teensyLC.menu.usb.flightsim.fake_serial=teensy_gateway
    teensyLC.menu.usb.disable=No USB
    teensyLC.menu.usb.disable.build.usbtype=USB_DISABLED
    
    teensyLC.menu.speed.48=48 MHz
    teensyLC.menu.speed.24=24 MHz
    teensyLC.menu.speed.48.build.fcpu=48000000
    teensyLC.menu.speed.24.build.fcpu=24000000
    
    teensyLC.menu.opt.osstd=Smallest Code
    teensyLC.menu.opt.osstd.build.flags.optimize=-Os --specs=nano.specs
    teensyLC.menu.opt.osstd.build.flags.ldspecs=
    teensyLC.menu.opt.oslto=Smallest Code with LTO
    teensyLC.menu.opt.oslto.build.flags.optimize=-Os -flto -fno-fat-lto-objects --specs=nano.specs
    teensyLC.menu.opt.oslto.build.flags.ldspecs=-fuse-linker-plugin
    teensyLC.menu.opt.ogstd=Debug
    teensyLC.menu.opt.ogstd.build.flags.optimize=-Og
    teensyLC.menu.opt.ogstd.build.flags.ldspecs=
    teensyLC.menu.opt.oglto=Debug with LTO
    teensyLC.menu.opt.oglto.build.flags.optimize=-Og -flto -fno-fat-lto-objects
    teensyLC.menu.opt.oglto.build.flags.ldspecs=-fuse-linker-plugin
    teensyLC.menu.opt.o3std=Fastest
    teensyLC.menu.opt.o3std.build.flags.optimize=-O3
    teensyLC.menu.opt.o3std.build.flags.ldspecs=
    teensyLC.menu.opt.o3lto=Fastest with LTO
    teensyLC.menu.opt.o3lto.build.flags.optimize=-O3 -flto -fno-fat-lto-objects
    teensyLC.menu.opt.o3lto.build.flags.ldspecs=-fuse-linker-plugin
    teensyLC.menu.opt.o2std=Faster
    teensyLC.menu.opt.o2std.build.flags.optimize=-O2
    teensyLC.menu.opt.o2std.build.flags.ldspecs=
    teensyLC.menu.opt.o2lto=Faster with LTO
    teensyLC.menu.opt.o2lto.build.flags.optimize=-O2 -flto -fno-fat-lto-objects
    teensyLC.menu.opt.o2lto.build.flags.ldspecs=-fuse-linker-plugin
    teensyLC.menu.opt.o1std=Fast
    teensyLC.menu.opt.o1std.build.flags.optimize=-O1
    teensyLC.menu.opt.o1std.build.flags.ldspecs=
    teensyLC.menu.opt.o1lto=Fast with LTO
    teensyLC.menu.opt.o1lto.build.flags.optimize=-O1 -flto -fno-fat-lto-objects
    teensyLC.menu.opt.o1lto.build.flags.ldspecs=-fuse-linker-plugin
    
    teensyLC.menu.keys.en-us=US English
    teensyLC.menu.keys.en-us.build.keylayout=US_ENGLISH
    teensyLC.menu.keys.fr-ca=Canadian French
    teensyLC.menu.keys.fr-ca.build.keylayout=CANADIAN_FRENCH
    teensyLC.menu.keys.xx-ca=Canadian Multilingual
    teensyLC.menu.keys.xx-ca.build.keylayout=CANADIAN_MULTILINGUAL
    teensyLC.menu.keys.cz-cz=Czech
    teensyLC.menu.keys.cz-cz.build.keylayout=CZECH
    teensyLC.menu.keys.da-da=Danish
    teensyLC.menu.keys.da-da.build.keylayout=DANISH
    teensyLC.menu.keys.fi-fi=Finnish
    teensyLC.menu.keys.fi-fi.build.keylayout=FINNISH
    teensyLC.menu.keys.fr-fr=French
    teensyLC.menu.keys.fr-fr.build.keylayout=FRENCH
    teensyLC.menu.keys.fr-be=French Belgian
    teensyLC.menu.keys.fr-be.build.keylayout=FRENCH_BELGIAN
    teensyLC.menu.keys.fr-ch=French Swiss
    teensyLC.menu.keys.fr-ch.build.keylayout=FRENCH_SWISS
    teensyLC.menu.keys.de-de=German
    teensyLC.menu.keys.de-de.build.keylayout=GERMAN
    teensyLC.menu.keys.de-dm=German (Mac)
    teensyLC.menu.keys.de-dm.build.keylayout=GERMAN_MAC
    teensyLC.menu.keys.de-ch=German Swiss
    teensyLC.menu.keys.de-ch.build.keylayout=GERMAN_SWISS
    teensyLC.menu.keys.is-is=Icelandic
    teensyLC.menu.keys.is-is.build.keylayout=ICELANDIC
    teensyLC.menu.keys.en-ie=Irish
    teensyLC.menu.keys.en-ie.build.keylayout=IRISH
    teensyLC.menu.keys.it-it=Italian
    teensyLC.menu.keys.it-it.build.keylayout=ITALIAN
    teensyLC.menu.keys.no-no=Norwegian
    teensyLC.menu.keys.no-no.build.keylayout=NORWEGIAN
    teensyLC.menu.keys.pt-pt=Portuguese
    teensyLC.menu.keys.pt-pt.build.keylayout=PORTUGUESE
    teensyLC.menu.keys.pt-br=Portuguese Brazilian
    teensyLC.menu.keys.pt-br.build.keylayout=PORTUGUESE_BRAZILIAN
    teensyLC.menu.keys.rs-rs=Serbian (Latin Only)
    teensyLC.menu.keys.rs-rs.build.keylayout=SERBIAN_LATIN_ONLY
    teensyLC.menu.keys.es-es=Spanish
    teensyLC.menu.keys.es-es.build.keylayout=SPANISH
    teensyLC.menu.keys.es-mx=Spanish Latin America
    teensyLC.menu.keys.es-mx.build.keylayout=SPANISH_LATIN_AMERICA
    teensyLC.menu.keys.sv-se=Swedish
    teensyLC.menu.keys.sv-se.build.keylayout=SWEDISH
    teensyLC.menu.keys.tr-tr=Turkish (partial)
    teensyLC.menu.keys.tr-tr.build.keylayout=TURKISH
    teensyLC.menu.keys.en-gb=United Kingdom
    teensyLC.menu.keys.en-gb.build.keylayout=UNITED_KINGDOM
    teensyLC.menu.keys.usint=US International
    teensyLC.menu.keys.usint.build.keylayout=US_INTERNATIONAL
    
    
    teensypp2.name=Teensy++ 2.0
    teensypp2.upload.maximum_size=130048
    teensypp2.upload.maximum_data_size=8192
    teensypp2.upload.tool=teensyloader
    teensypp2.upload.protocol=halfkay
    teensypp2.build.board=TEENSY2PP
    teensypp2.build.core=teensy
    teensypp2.build.mcu=at90usb1286
    teensypp2.build.warn_data_percentage=94
    teensypp2.build.toolchain=avr/bin/
    teensypp2.build.command.gcc=avr-gcc
    teensypp2.build.command.g++=avr-g++
    teensypp2.build.command.ar=avr-ar
    teensypp2.build.command.objcopy=avr-objcopy
    teensypp2.build.command.objdump=avr-objdump
    teensypp2.build.command.linker=avr-gcc
    teensypp2.build.command.size=avr-size
    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=149 -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
    teensypp2.build.flags.ld=-Wl,--gc-sections,--relax
    teensypp2.build.flags.ldspecs=
    teensypp2.build.flags.libs=-lm
    teensypp2.build.serial_number=true
    teensypp2.serial.restart_cmd=true
    
    teensypp2.menu.usb.serial=Serial
    teensypp2.menu.usb.serial.build.usbtype=USB_SERIAL
    teensypp2.menu.usb.hid=Keyboard + Mouse + Joystick
    teensypp2.menu.usb.hid.build.usbtype=USB_HID
    teensypp2.menu.usb.hid.fake_serial=teensy_gateway
    teensypp2.menu.usb.serialhid=Serial + Keyboard + Mouse + Joystick
    teensypp2.menu.usb.serialhid.build.usbtype=USB_SERIAL_HID
    teensypp2.menu.usb.int_disk=Disk(Internal) + Keyboard
    teensypp2.menu.usb.int_disk.build.usbtype=USB_DISK
    teensypp2.menu.usb.int_disk.fake_serial=teensy_gateway
    teensypp2.menu.usb.int_disk.build.elfpatch=mktinyfat
    teensypp2.menu.usb.sd_disk=Disk(SD Card) + Keyboard
    teensypp2.menu.usb.sd_disk.build.usbtype=USB_DISK_SDFLASH
    teensypp2.menu.usb.sd_disk.fake_serial=teensy_gateway
    teensypp2.menu.usb.midi=MIDI
    teensypp2.menu.usb.midi.build.usbtype=USB_MIDI
    teensypp2.menu.usb.midi.fake_serial=teensy_gateway
    teensypp2.menu.usb.rawhid=Raw HID
    teensypp2.menu.usb.rawhid.build.usbtype=USB_RAWHID
    teensypp2.menu.usb.rawhid.fake_serial=teensy_gateway
    teensypp2.menu.usb.flightsim=Flight Sim Controls
    teensypp2.menu.usb.flightsim.build.usbtype=USB_FLIGHTSIM
    teensypp2.menu.usb.flightsim.fake_serial=teensy_gateway
    teensypp2.menu.speed.16=16 MHz
    teensypp2.menu.speed.8=8 MHz
    teensypp2.menu.speed.4=4 MHz
    teensypp2.menu.speed.2=2 MHz
    teensypp2.menu.speed.1=1 MHz
    teensypp2.menu.speed.16.build.fcpu=16000000L
    teensypp2.menu.speed.8.build.fcpu=8000000L
    teensypp2.menu.speed.4.build.fcpu=4000000L
    teensypp2.menu.speed.2.build.fcpu=2000000L
    teensypp2.menu.speed.1.build.fcpu=1000000L
    
    teensypp2.menu.keys.en-us=US English
    teensypp2.menu.keys.en-us.build.keylayout=US_ENGLISH
    teensypp2.menu.keys.fr-ca=Canadian French
    teensypp2.menu.keys.fr-ca.build.keylayout=CANADIAN_FRENCH
    teensypp2.menu.keys.xx-ca=Canadian Multilingual
    teensypp2.menu.keys.xx-ca.build.keylayout=CANADIAN_MULTILINGUAL
    teensypp2.menu.keys.cz-cz=Czech
    teensypp2.menu.keys.cz-cz.build.keylayout=CZECH
    teensypp2.menu.keys.da-da=Danish
    teensypp2.menu.keys.da-da.build.keylayout=DANISH
    teensypp2.menu.keys.fi-fi=Finnish
    teensypp2.menu.keys.fi-fi.build.keylayout=FINNISH
    teensypp2.menu.keys.fr-fr=French
    teensypp2.menu.keys.fr-fr.build.keylayout=FRENCH
    teensypp2.menu.keys.fr-be=French Belgian
    teensypp2.menu.keys.fr-be.build.keylayout=FRENCH_BELGIAN
    teensypp2.menu.keys.fr-ch=French Swiss
    teensypp2.menu.keys.fr-ch.build.keylayout=FRENCH_SWISS
    teensypp2.menu.keys.de-de=German
    teensypp2.menu.keys.de-de.build.keylayout=GERMAN
    teensypp2.menu.keys.de-dm=German (Mac)
    teensypp2.menu.keys.de-dm.build.keylayout=GERMAN_MAC
    teensypp2.menu.keys.de-ch=German Swiss
    teensypp2.menu.keys.de-ch.build.keylayout=GERMAN_SWISS
    teensypp2.menu.keys.is-is=Icelandic
    teensypp2.menu.keys.is-is.build.keylayout=ICELANDIC
    teensypp2.menu.keys.en-ie=Irish
    teensypp2.menu.keys.en-ie.build.keylayout=IRISH
    teensypp2.menu.keys.it-it=Italian
    teensypp2.menu.keys.it-it.build.keylayout=ITALIAN
    teensypp2.menu.keys.no-no=Norwegian
    teensypp2.menu.keys.no-no.build.keylayout=NORWEGIAN
    teensypp2.menu.keys.pt-pt=Portuguese
    teensypp2.menu.keys.pt-pt.build.keylayout=PORTUGUESE
    teensypp2.menu.keys.pt-br=Portuguese Brazilian
    teensypp2.menu.keys.pt-br.build.keylayout=PORTUGUESE_BRAZILIAN
    teensypp2.menu.keys.rs-rs=Serbian (Latin Only)
    teensypp2.menu.keys.rs-rs.build.keylayout=SERBIAN_LATIN_ONLY
    teensypp2.menu.keys.es-es=Spanish
    teensypp2.menu.keys.es-es.build.keylayout=SPANISH
    teensypp2.menu.keys.es-mx=Spanish Latin America
    teensypp2.menu.keys.es-mx.build.keylayout=SPANISH_LATIN_AMERICA
    teensypp2.menu.keys.sv-se=Swedish
    teensypp2.menu.keys.sv-se.build.keylayout=SWEDISH
    teensypp2.menu.keys.tr-tr=Turkish (partial)
    teensypp2.menu.keys.tr-tr.build.keylayout=TURKISH
    teensypp2.menu.keys.en-gb=United Kingdom
    teensypp2.menu.keys.en-gb.build.keylayout=UNITED_KINGDOM
    teensypp2.menu.keys.usint=US International
    teensypp2.menu.keys.usint.build.keylayout=US_INTERNATIONAL
    
    
    teensy2.name=Teensy 2.0
    teensy2.upload.maximum_size=32256
    teensy2.upload.maximum_data_size=2560
    teensy2.upload.tool=teensyloader
    teensy2.upload.protocol=halfkay
    teensy2.build.board=TEENSY2
    teensy2.build.core=teensy
    teensy2.build.mcu=atmega32u4
    teensy2.build.warn_data_percentage=80
    teensy2.build.toolchain=avr/bin/
    teensy2.build.command.gcc=avr-gcc
    teensy2.build.command.g++=avr-g++
    teensy2.build.command.ar=avr-ar
    teensy2.build.command.objcopy=avr-objcopy
    teensy2.build.command.objdump=avr-objdump
    teensy2.build.command.linker=avr-gcc
    teensy2.build.command.size=avr-size
    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=149 -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
    teensy2.build.flags.ld=-Wl,--gc-sections,--relax
    teensy2.build.flags.ldspecs=
    teensy2.build.flags.libs=-lm
    teensy2.build.serial_number=true
    teensy2.serial.restart_cmd=true
    
    teensy2.menu.usb.serial=Serial
    teensy2.menu.usb.serial.build.usbtype=USB_SERIAL
    teensy2.menu.usb.hid=Keyboard + Mouse + Joystick
    teensy2.menu.usb.hid.build.usbtype=USB_HID
    teensy2.menu.usb.hid.fake_serial=teensy_gateway
    teensy2.menu.usb.serialhid=Serial + Keyboard + Mouse + Joystick
    teensy2.menu.usb.serialhid.build.usbtype=USB_SERIAL_HID
    teensy2.menu.usb.int_disk=Disk(Internal) + Keyboard
    teensy2.menu.usb.int_disk.build.usbtype=USB_DISK
    teensy2.menu.usb.int_disk.fake_serial=teensy_gateway
    teensy2.menu.usb.int_disk.build.elfpatch=mktinyfat
    teensy2.menu.usb.sd_disk=Disk(SD Card) + Keyboard
    teensy2.menu.usb.sd_disk.build.usbtype=USB_DISK_SDFLASH
    teensy2.menu.usb.sd_disk.fake_serial=teensy_gateway
    teensy2.menu.usb.midi=MIDI
    teensy2.menu.usb.midi.build.usbtype=USB_MIDI
    teensy2.menu.usb.midi.fake_serial=teensy_gateway
    teensy2.menu.usb.rawhid=Raw HID
    teensy2.menu.usb.rawhid.build.usbtype=USB_RAWHID
    teensy2.menu.usb.rawhid.fake_serial=teensy_gateway
    teensy2.menu.usb.flightsim=Flight Sim Controls
    teensy2.menu.usb.flightsim.build.usbtype=USB_FLIGHTSIM
    teensy2.menu.usb.flightsim.fake_serial=teensy_gateway
    teensy2.menu.speed.16=16 MHz
    teensy2.menu.speed.8=8 MHz
    teensy2.menu.speed.4=4 MHz
    teensy2.menu.speed.2=2 MHz
    teensy2.menu.speed.1=1 MHz
    teensy2.menu.speed.16.build.fcpu=16000000L
    teensy2.menu.speed.8.build.fcpu=8000000L
    teensy2.menu.speed.4.build.fcpu=4000000L
    teensy2.menu.speed.2.build.fcpu=2000000L
    teensy2.menu.speed.1.build.fcpu=1000000L
    
    teensy2.menu.keys.en-us=US English
    teensy2.menu.keys.en-us.build.keylayout=US_ENGLISH
    teensy2.menu.keys.fr-ca=Canadian French
    teensy2.menu.keys.fr-ca.build.keylayout=CANADIAN_FRENCH
    teensy2.menu.keys.xx-ca=Canadian Multilingual
    teensy2.menu.keys.xx-ca.build.keylayout=CANADIAN_MULTILINGUAL
    teensy2.menu.keys.cz-cz=Czech
    teensy2.menu.keys.cz-cz.build.keylayout=CZECH
    teensy2.menu.keys.da-da=Danish
    teensy2.menu.keys.da-da.build.keylayout=DANISH
    teensy2.menu.keys.fi-fi=Finnish
    teensy2.menu.keys.fi-fi.build.keylayout=FINNISH
    teensy2.menu.keys.fr-fr=French
    teensy2.menu.keys.fr-fr.build.keylayout=FRENCH
    teensy2.menu.keys.fr-be=French Belgian
    teensy2.menu.keys.fr-be.build.keylayout=FRENCH_BELGIAN
    teensy2.menu.keys.fr-ch=French Swiss
    teensy2.menu.keys.fr-ch.build.keylayout=FRENCH_SWISS
    teensy2.menu.keys.de-de=German
    teensy2.menu.keys.de-de.build.keylayout=GERMAN
    teensy2.menu.keys.de-dm=German (Mac)
    teensy2.menu.keys.de-dm.build.keylayout=GERMAN_MAC
    teensy2.menu.keys.de-ch=German Swiss
    teensy2.menu.keys.de-ch.build.keylayout=GERMAN_SWISS
    teensy2.menu.keys.is-is=Icelandic
    teensy2.menu.keys.is-is.build.keylayout=ICELANDIC
    teensy2.menu.keys.en-ie=Irish
    teensy2.menu.keys.en-ie.build.keylayout=IRISH
    teensy2.menu.keys.it-it=Italian
    teensy2.menu.keys.it-it.build.keylayout=ITALIAN
    teensy2.menu.keys.no-no=Norwegian
    teensy2.menu.keys.no-no.build.keylayout=NORWEGIAN
    teensy2.menu.keys.pt-pt=Portuguese
    teensy2.menu.keys.pt-pt.build.keylayout=PORTUGUESE
    teensy2.menu.keys.pt-br=Portuguese Brazilian
    teensy2.menu.keys.pt-br.build.keylayout=PORTUGUESE_BRAZILIAN
    teensy2.menu.keys.rs-rs=Serbian (Latin Only)
    teensy2.menu.keys.rs-rs.build.keylayout=SERBIAN_LATIN_ONLY
    teensy2.menu.keys.es-es=Spanish
    teensy2.menu.keys.es-es.build.keylayout=SPANISH
    teensy2.menu.keys.es-mx=Spanish Latin America
    teensy2.menu.keys.es-mx.build.keylayout=SPANISH_LATIN_AMERICA
    teensy2.menu.keys.sv-se=Swedish
    teensy2.menu.keys.sv-se.build.keylayout=SWEDISH
    teensy2.menu.keys.tr-tr=Turkish (partial)
    teensy2.menu.keys.tr-tr.build.keylayout=TURKISH
    teensy2.menu.keys.en-gb=United Kingdom
    teensy2.menu.keys.en-gb.build.keylayout=UNITED_KINGDOM
    teensy2.menu.keys.usint=US International
    teensy2.menu.keys.usint.build.keylayout=US_INTERNATIONAL
    Edit:
    MTP_Storage.h and MTP.h
    from
    Code:
    #if !defined(USB_MTPDISK)
      #error "You need to select USB Type: 'MTP Disk (Experimental)'"
    #endif
    to
    Code:
    #if !defined(USB_MTPDISK) && !defined(USB_MTPDISK_SERIAL)
    #error "You need to select USB Type: 'MTP Disk (Experimental)' or 'MTP Disk (Experimental) + Serial'"
    #endif
    Last edited by Chris O.; 01-26-2020 at 05:28 AM.

  17. #167
    Senior Member
    Join Date
    Jul 2014
    Posts
    2,528
    Quote Originally Posted by xenington View Post
    Teensy 4, ide 1.8.10, teensyduino 1.49. The pc is running ubuntu 18.04. Unfortunately, Serial doesn't work in mtp experimental mode. Is there another way to get the logs?
    T4 version uses Pauls debug printf to Serial4. For this you have to uncomment core/teensy4/debug/printf.h " #define PRINT_DEBUG_STUFF"
    (Im fortuned to have a Breakoutboard that exposes Serial4-

  18. #168
    Senior Member+ defragster's Avatar
    Join Date
    Feb 2015
    Posts
    10,610
    FYI: I downloaded the trial MTPdrive - scanned and it looked clean. And installed.

    It starts up looking good showing the Teensy as as "Teensy (#???)" - but the UI to associate a drive letter { Z: and Y: } was hinky - failed - spawned a second instance - that repeated.

    Then the UI shows Teensy on X: in its list, and X: appeared in a dos box:
    Code:
    C:\WINDOWS\system32>x:
    
    X:\>dir
     Volume in drive X is Teensy [SD Card] @ MTPdrive(TRIAL)
     Volume Serial Number is 600D-CAFE
    
     Directory of X:\
    
    01/26/2020  03:27 AM                 0 mtpindex.dat
    01/26/2020  03:27 AM       200,000,000 benchB.dat
    01/26/2020  03:27 AM               484 ll.txt
    01/26/2020  03:27 AM             1,452 ll.txt
    01/26/2020  03:27 AM    <DIR>          New Folder
    01/26/2020  03:27 AM    <DIR>          System Volume Information
                   4 File(s)    200,001,936 bytes
                   2 Dir(s)  31,520,652,800 bytes free
    
    X:\>dir x: > x:ll.txt
    
    X:\>type ll.txt
    A device attached to the system is not functioning.
    
    X:\>type ll.txt
    A device attached to the system is not functioning.
    
    X:\>notepad ll.txt
    
    X:\>
    Note sure if this is the MTPdrive software being LAME or the Teensy failing to interact as expected?
    > It won't TYPE the file
    > I do see it now in File Explorer, and double click on ll.txt opened the file as does above "notepad ll.txt"
    > but ll.txt doesn't have a SINGLE copy of the directory - it has THREE copies?
    > I repeated dir into another file and it holds FOUR copies of the directory

    Note sure if there are meaningful details - but MTPdrive creates a LOG that shows "???" for Serial # below:
    Code:
    DEVICE
    WPD_OBJECT_ID: "DEVICE"
    WPD_OBJECT_PARENT_ID: ""
    WPD_OBJECT_CONTENT_TYPE: WPD_CONTENT_TYPE_FUNCTIONAL_OBJECT
    WPD_FUNCTIONAL_OBJECT_CATEGORY: WPD_FUNCTIONAL_CATEGORY_DEVICE
    WPD_OBJECT_PERSISTENT_UNIQUE_ID: "DEVICE"
    WPD_OBJECT_CAN_DELETE: FALSE
    WPD_OBJECT_ISHIDDEN: TRUE
    WPD_OBJECT_FORMAT: WPD_OBJECT_FORMAT_PROPERTIES_ONLY
    WPD_DEVICE_PROTOCOL: "MSC:"
    WPD_DEVICE_FRIENDLY_NAME: "E:\"
    WPD_DEVICE_POWER_SOURCE: 1
    WPD_DEVICE_POWER_LEVEL: 100
    WPD_DEVICE_TYPE: 0
    WPD_DEVICE_SERIAL_NUMBER: "058F63626479"
    WPD_DEVICE_MANUFACTURER: "Generic-"
    WPD_DEVICE_MODEL: "Compact Flash   "
    WPD_DEVICE_FIRMWARE_VERSION: "1.01"
    
    DEVICE
    WPD_OBJECT_ID: "DEVICE"
    WPD_OBJECT_PARENT_ID: ""
    WPD_OBJECT_CONTENT_TYPE: WPD_CONTENT_TYPE_FUNCTIONAL_OBJECT
    WPD_FUNCTIONAL_OBJECT_CATEGORY: WPD_FUNCTIONAL_CATEGORY_DEVICE
    WPD_OBJECT_PERSISTENT_UNIQUE_ID: "DEVICE"
    WPD_OBJECT_CAN_DELETE: FALSE
    WPD_OBJECT_ISHIDDEN: TRUE
    WPD_OBJECT_FORMAT: WPD_OBJECT_FORMAT_PROPERTIES_ONLY
    WPD_DEVICE_PROTOCOL: "MSC:"
    WPD_DEVICE_FRIENDLY_NAME: "F:\"
    WPD_DEVICE_POWER_SOURCE: 1
    WPD_DEVICE_POWER_LEVEL: 100
    WPD_DEVICE_TYPE: 0
    WPD_DEVICE_SERIAL_NUMBER: "058F63626479"
    WPD_DEVICE_MANUFACTURER: "Generic-"
    WPD_DEVICE_MODEL: "SD/MMC          "
    WPD_DEVICE_FIRMWARE_VERSION: "1.00"
    
    DEVICE
    WPD_OBJECT_ID: "DEVICE"
    WPD_OBJECT_PARENT_ID: ""
    WPD_OBJECT_CONTENT_TYPE: WPD_CONTENT_TYPE_FUNCTIONAL_OBJECT
    WPD_FUNCTIONAL_OBJECT_CATEGORY: WPD_FUNCTIONAL_CATEGORY_DEVICE
    WPD_OBJECT_PERSISTENT_UNIQUE_ID: "DEVICE"
    WPD_OBJECT_CAN_DELETE: FALSE
    WPD_OBJECT_ISHIDDEN: TRUE
    WPD_OBJECT_FORMAT: WPD_OBJECT_FORMAT_PROPERTIES_ONLY
    WPD_DEVICE_PROTOCOL: "MSC:"
    WPD_DEVICE_FRIENDLY_NAME: "J:\"
    WPD_DEVICE_POWER_SOURCE: 1
    WPD_DEVICE_POWER_LEVEL: 100
    WPD_DEVICE_TYPE: 0
    WPD_DEVICE_SERIAL_NUMBER: "058F63626479"
    WPD_DEVICE_MANUFACTURER: "Generic-"
    WPD_DEVICE_MODEL: "xD-Picture      "
    WPD_DEVICE_FIRMWARE_VERSION: "1.02"
    
    DEVICE
    WPD_OBJECT_ID: "DEVICE"
    WPD_OBJECT_PARENT_ID: ""
    WPD_OBJECT_CONTENT_TYPE: WPD_CONTENT_TYPE_FUNCTIONAL_OBJECT
    WPD_FUNCTIONAL_OBJECT_CATEGORY: WPD_FUNCTIONAL_CATEGORY_DEVICE
    WPD_OBJECT_PERSISTENT_UNIQUE_ID: "DEVICE"
    WPD_OBJECT_CAN_DELETE: FALSE
    WPD_OBJECT_ISHIDDEN: TRUE
    WPD_OBJECT_FORMAT: WPD_OBJECT_FORMAT_PROPERTIES_ONLY
    WPD_DEVICE_PROTOCOL: "MSC:"
    WPD_DEVICE_FRIENDLY_NAME: "G:\"
    WPD_DEVICE_POWER_SOURCE: 1
    WPD_DEVICE_POWER_LEVEL: 100
    WPD_DEVICE_TYPE: 0
    WPD_DEVICE_SERIAL_NUMBER: "058F63626479"
    WPD_DEVICE_MANUFACTURER: "Generic-"
    WPD_DEVICE_MODEL: "MS/MS-PRO       "
    WPD_DEVICE_FIRMWARE_VERSION: "1.03"
    
    DEVICE
    WPD_OBJECT_ID: "DEVICE"
    WPD_OBJECT_CONTAINER_FUNCTIONAL_OBJECT_ID: "DEVICE"
    WPD_OBJECT_PERSISTENT_UNIQUE_ID: "DEVICE"
    WPD_OBJECT_PARENT_ID: ""
    WPD_OBJECT_FORMAT: WPD_OBJECT_FORMAT_PROPERTIES_ONLY
    WPD_OBJECT_CONTENT_TYPE: WPD_CONTENT_TYPE_FUNCTIONAL_OBJECT
    WPD_FUNCTIONAL_OBJECT_CATEGORY: WPD_FUNCTIONAL_CATEGORY_DEVICE
    WPD_OBJECT_CAN_DELETE: FALSE
    WPD_DEVICE_FIRMWARE_VERSION: "1.0"
    WPD_DEVICE_PROTOCOL: "MTP: 1.00"
    WPD_DEVICE_MANUFACTURER: "PJRC"
    WPD_DEVICE_MODEL: "Teensy"
    WPD_OBJECT_NAME: "Teensy"
    WPD_DEVICE_SUPPORTS_NON_CONSUMABLE: FALSE
    WPD_DEVICE_SERIAL_NUMBER: "???"
    WPD_DEVICE_TYPE: 0
    WPD_DEVICE_TRANSPORT: 1
    WPD_DEVICE_POWER_SOURCE: 0
    WPD_DEVICE_FRIENDLY_NAME: "Teensy"
    
      s1
    WPD_STORAGE_TYPE: 4
    WPD_STORAGE_FILE_SYSTEM_TYPE: "Generic hierarchical"
    WPD_STORAGE_ACCESS_CAPABILITY: 0
    WPD_STORAGE_CAPACITY: 31902400512
    WPD_STORAGE_FREE_SPACE_IN_BYTES: 31520718848
    WPD_STORAGE_FREE_SPACE_IN_OBJECTS: E_ERROR_NOT_FOUND
    WPD_STORAGE_DESCRIPTION: "SD Card"
    WPD_OBJECT_PERSISTENT_UNIQUE_ID: "SID-{1,,31902400512}"
    WPD_OBJECT_NAME: "SD Card"
    WPD_STORAGE_SERIAL_NUMBER: ""
    WPD_OBJECT_ID: "s1"
    WPD_OBJECT_PARENT_ID: "DEVICE"
    WPD_OBJECT_FORMAT: WPD_OBJECT_FORMAT_PROPERTIES_ONLY
    WPD_OBJECT_CAN_DELETE: FALSE
    WPD_OBJECT_CONTENT_TYPE: WPD_CONTENT_TYPE_FUNCTIONAL_OBJECT
    WPD_FUNCTIONAL_OBJECT_CATEGORY: WPD_FUNCTIONAL_CATEGORY_STORAGE
    WPD_OBJECT_CONTAINER_FUNCTIONAL_OBJECT_ID: "s1"
    
    DEVICE
    WPD_OBJECT_ID: "DEVICE"
    WPD_OBJECT_CONTAINER_FUNCTIONAL_OBJECT_ID: "DEVICE"
    WPD_OBJECT_PERSISTENT_UNIQUE_ID: "DEVICE"
    WPD_OBJECT_PARENT_ID: ""
    WPD_OBJECT_FORMAT: WPD_OBJECT_FORMAT_PROPERTIES_ONLY
    WPD_OBJECT_CONTENT_TYPE: WPD_CONTENT_TYPE_FUNCTIONAL_OBJECT
    WPD_FUNCTIONAL_OBJECT_CATEGORY: WPD_FUNCTIONAL_CATEGORY_DEVICE
    WPD_OBJECT_CAN_DELETE: FALSE
    WPD_DEVICE_FIRMWARE_VERSION: "1.0"
    WPD_DEVICE_PROTOCOL: "MTP: 1.00"
    WPD_DEVICE_MANUFACTURER: "PJRC"
    WPD_DEVICE_MODEL: "Teensy"
    WPD_OBJECT_NAME: "Teensy"
    WPD_DEVICE_SUPPORTS_NON_CONSUMABLE: FALSE
    WPD_DEVICE_SERIAL_NUMBER: "???"
    WPD_DEVICE_TYPE: 0
    WPD_DEVICE_TRANSPORT: 1
    WPD_DEVICE_POWER_SOURCE: 0
    WPD_DEVICE_FRIENDLY_NAME: "Teensy"
    
    DEVICE
    WPD_OBJECT_ID: "DEVICE"
    WPD_OBJECT_CONTAINER_FUNCTIONAL_OBJECT_ID: "DEVICE"
    WPD_OBJECT_PERSISTENT_UNIQUE_ID: "DEVICE"
    WPD_OBJECT_PARENT_ID: ""
    WPD_OBJECT_FORMAT: WPD_OBJECT_FORMAT_PROPERTIES_ONLY
    WPD_OBJECT_CONTENT_TYPE: WPD_CONTENT_TYPE_FUNCTIONAL_OBJECT
    WPD_FUNCTIONAL_OBJECT_CATEGORY: WPD_FUNCTIONAL_CATEGORY_DEVICE
    WPD_OBJECT_CAN_DELETE: FALSE
    WPD_DEVICE_FIRMWARE_VERSION: "1.0"
    WPD_DEVICE_PROTOCOL: "MTP: 1.00"
    WPD_DEVICE_MANUFACTURER: "PJRC"
    WPD_DEVICE_MODEL: "Teensy"
    WPD_OBJECT_NAME: "Teensy"
    WPD_DEVICE_SUPPORTS_NON_CONSUMABLE: FALSE
    WPD_DEVICE_SERIAL_NUMBER: "???"
    WPD_DEVICE_TYPE: 0
    WPD_DEVICE_TRANSPORT: 1
    WPD_DEVICE_POWER_SOURCE: 0
    WPD_DEVICE_FRIENDLY_NAME: "Teensy"
    
      s1
    WPD_STORAGE_TYPE: 4
    WPD_STORAGE_FILE_SYSTEM_TYPE: "Generic hierarchical"
    WPD_STORAGE_ACCESS_CAPABILITY: 0
    WPD_STORAGE_CAPACITY: 31902400512
    WPD_STORAGE_FREE_SPACE_IN_BYTES: 31520718848
    WPD_STORAGE_FREE_SPACE_IN_OBJECTS: E_ERROR_NOT_FOUND
    WPD_STORAGE_DESCRIPTION: "SD Card"
    WPD_OBJECT_PERSISTENT_UNIQUE_ID: "SID-{1,,31902400512}"
    WPD_OBJECT_NAME: "SD Card"
    WPD_STORAGE_SERIAL_NUMBER: ""
    WPD_OBJECT_ID: "s1"
    WPD_OBJECT_PARENT_ID: "DEVICE"
    WPD_OBJECT_FORMAT: WPD_OBJECT_FORMAT_PROPERTIES_ONLY
    WPD_OBJECT_CAN_DELETE: FALSE
    WPD_OBJECT_CONTENT_TYPE: WPD_CONTENT_TYPE_FUNCTIONAL_OBJECT
    WPD_FUNCTIONAL_OBJECT_CATEGORY: WPD_FUNCTIONAL_CATEGORY_STORAGE
    WPD_OBJECT_CONTAINER_FUNCTIONAL_OBJECT_ID: "s1"
    
        o4
    WPD_OBJECT_ID: "o4"
    WPD_OBJECT_DATE_CREATED: E_ERROR_NOT_FOUND
    WPD_OBJECT_PARENT_ID: "s1"
    WPD_OBJECT_DATE_MODIFIED: E_ERROR_NOT_FOUND
    WPD_OBJECT_FORMAT: WPD_OBJECT_FORMAT_PROPERTIES_ONLY
    WPD_OBJECT_CONTENT_TYPE: WPD_CONTENT_TYPE_FOLDER
    WPD_OBJECT_NAME: "New Folder"
    WPD_OBJECT_CONTAINER_FUNCTIONAL_OBJECT_ID: "s4"
    WPD_OBJECT_PERSISTENT_UNIQUE_ID: "{00000004-0000-0000-0100-000000000000}"
    WPD_OBJECT_SIZE: 0
    WPD_OBJECT_CAN_DELETE: TRUE
    WPD_PROPERTIES_MTP_VENDOR_EXTENDED_OBJECT_PROPS: 0
    WPD_OBJECT_ORIGINAL_FILE_NAME: "New Folder"
    
        o3
    WPD_OBJECT_ID: "o3"
    WPD_OBJECT_DATE_CREATED: E_ERROR_NOT_FOUND
    WPD_OBJECT_PARENT_ID: "s1"
    WPD_OBJECT_DATE_MODIFIED: E_ERROR_NOT_FOUND
    WPD_OBJECT_FORMAT: WPD_OBJECT_FORMAT_UNSPECIFIED
    WPD_OBJECT_CONTENT_TYPE: WPD_CONTENT_TYPE_UNSPECIFIED
    WPD_OBJECT_NAME: "mtpindex.dat"
    WPD_OBJECT_CONTAINER_FUNCTIONAL_OBJECT_ID: "s3"
    WPD_OBJECT_PERSISTENT_UNIQUE_ID: "{00000003-0000-0000-0100-000000000000}"
    WPD_OBJECT_SIZE: 0
    WPD_OBJECT_CAN_DELETE: TRUE
    WPD_PROPERTIES_MTP_VENDOR_EXTENDED_OBJECT_PROPS: 0
    WPD_OBJECT_ORIGINAL_FILE_NAME: "mtpindex.dat"
    
        o2
    WPD_OBJECT_ID: "o2"
    WPD_OBJECT_DATE_CREATED: E_ERROR_NOT_FOUND
    WPD_OBJECT_PARENT_ID: "s1"
    WPD_OBJECT_DATE_MODIFIED: E_ERROR_NOT_FOUND
    WPD_OBJECT_FORMAT: WPD_OBJECT_FORMAT_UNSPECIFIED
    WPD_OBJECT_CONTENT_TYPE: WPD_CONTENT_TYPE_UNSPECIFIED
    WPD_OBJECT_NAME: "benchB.dat"
    WPD_OBJECT_CONTAINER_FUNCTIONAL_OBJECT_ID: "s2"
    WPD_OBJECT_PERSISTENT_UNIQUE_ID: "{00000002-0000-0000-0100-000000000000}"
    WPD_OBJECT_SIZE: 200000000
    WPD_OBJECT_CAN_DELETE: TRUE
    WPD_PROPERTIES_MTP_VENDOR_EXTENDED_OBJECT_PROPS: 0
    WPD_OBJECT_ORIGINAL_FILE_NAME: "benchB.dat"
    
        o1
    WPD_OBJECT_ID: "o1"
    WPD_OBJECT_DATE_CREATED: E_ERROR_NOT_FOUND
    WPD_OBJECT_PARENT_ID: "s1"
    WPD_OBJECT_DATE_MODIFIED: E_ERROR_NOT_FOUND
    WPD_OBJECT_FORMAT: WPD_OBJECT_FORMAT_PROPERTIES_ONLY
    WPD_OBJECT_CONTENT_TYPE: WPD_CONTENT_TYPE_FOLDER
    WPD_OBJECT_NAME: "System Volume Information"
    WPD_OBJECT_CONTAINER_FUNCTIONAL_OBJECT_ID: "s1"
    WPD_OBJECT_PERSISTENT_UNIQUE_ID: "{00000001-0000-0000-0100-000000000000}"
    WPD_OBJECT_SIZE: 0
    WPD_OBJECT_CAN_DELETE: TRUE
    WPD_PROPERTIES_MTP_VENDOR_EXTENDED_OBJECT_PROPS: 0
    WPD_OBJECT_ORIGINAL_FILE_NAME: "System Volume Information"
    
          o6
    WPD_OBJECT_ID: "o6"
    WPD_OBJECT_DATE_CREATED: E_ERROR_NOT_FOUND
    WPD_OBJECT_PARENT_ID: "o1"
    WPD_OBJECT_DATE_MODIFIED: E_ERROR_NOT_FOUND
    WPD_OBJECT_FORMAT: WPD_OBJECT_FORMAT_UNSPECIFIED
    WPD_OBJECT_CONTENT_TYPE: WPD_CONTENT_TYPE_UNSPECIFIED
    WPD_OBJECT_NAME: "IndexerVolumeGuid"
    WPD_OBJECT_CONTAINER_FUNCTIONAL_OBJECT_ID: "s6"
    WPD_OBJECT_PERSISTENT_UNIQUE_ID: "{00000006-0001-0000-0100-000000000000}"
    WPD_OBJECT_SIZE: 76
    WPD_OBJECT_CAN_DELETE: TRUE
    WPD_PROPERTIES_MTP_VENDOR_EXTENDED_OBJECT_PROPS: 0
    WPD_OBJECT_ORIGINAL_FILE_NAME: "IndexerVolumeGuid"
    
          o5
    WPD_OBJECT_ID: "o5"
    WPD_OBJECT_DATE_CREATED: E_ERROR_NOT_FOUND
    WPD_OBJECT_PARENT_ID: "o1"
    WPD_OBJECT_DATE_MODIFIED: E_ERROR_NOT_FOUND
    WPD_OBJECT_FORMAT: WPD_OBJECT_FORMAT_UNSPECIFIED
    WPD_OBJECT_CONTENT_TYPE: WPD_CONTENT_TYPE_UNSPECIFIED
    WPD_OBJECT_NAME: "WPSettings.dat"
    WPD_OBJECT_CONTAINER_FUNCTIONAL_OBJECT_ID: "s5"
    WPD_OBJECT_PERSISTENT_UNIQUE_ID: "{00000005-0001-0000-0100-000000000000}"
    WPD_OBJECT_SIZE: 12
    WPD_OBJECT_CAN_DELETE: TRUE
    WPD_PROPERTIES_MTP_VENDOR_EXTENDED_OBJECT_PROPS: 0
    WPD_OBJECT_ORIGINAL_FILE_NAME: "WPSettings.dat"
    
    
    \SD Card\New Folder -> {00000004-0000-0000-0100-000000000000}
    \SD Card\mtpindex.dat -> {00000003-0000-0000-0100-000000000000}
    \SD Card\benchB.dat -> {00000002-0000-0000-0100-000000000000}
    \SD Card\System Volume Information -> {00000001-0000-0000-0100-000000000000}
    \SD Card\System Volume Information\IndexerVolumeGuid -> {00000006-0001-0000-0100-000000000000}
    \SD Card\System Volume Information\WPSettings.dat -> {00000005-0001-0000-0100-000000000000}

  19. #169
    Senior Member
    Join Date
    Jul 2014
    Posts
    2,528
    Quote Originally Posted by Chris O. View Post
    Arduino-1.8.10
    Teensyduino 1.49
    So I've been playing around some more with Native Serial support (COMx port), can anyone test this:
    Yes, faking a usb everything is working and similar to the fake midi I was using in other thread.
    For smooth download we need from Paul a new product-id that teensyduino recognizes.
    BTW, latest GitHub (as of now) is already modified for USB_DISK_SERIAL on T4. need now to see T3
    only additional action is adding the two lines in boards.txt (added to Readme)

  20. #170
    Senior Member
    Join Date
    Jul 2014
    Posts
    2,528
    Quote Originally Posted by defragster View Post
    FYI: I downloaded the trial MTPdrive - scanned and it looked clean. And installed.

    It starts up looking good showing the Teensy as as "Teensy (#???)" - but the UI to associate a drive letter { Z: and Y: } was hinky - failed - spawned a second instance - that repeated.
    The "???" is from the original code and send by Teensy. Not sure with what to replace. must read more on MTP document.
    Note what is not yet implemented is Date and Time (was also not in original implementation (that is work-to-be-done))

    Yes, I remember now, copying from PC to Teensy had always an issue: new information seemed appended and file not truncated.
    Have not checked that with actual version.
    Edit: all files are created with "FILE_WRITE" i.e. "(O_RDWR | O_CREAT | O_AT_END)"
    Edit: it also seems the File explorer first deletes old file before copying same file (ask you to overwrite)

  21. #171
    Senior Member+ defragster's Avatar
    Join Date
    Feb 2015
    Posts
    10,610
    Quote Originally Posted by WMXZ View Post
    The "???" is from the original code and send by Teensy. Not sure with what to replace. must read more on MTP document.
    Note what is not yet implemented is Date and Time (was also not in original implementation (that is work-to-be-done))

    Yes, I remember now, copying from PC to Teensy had always an issue: new information seemed appended and file not truncated.
    Have not checked that with actual version.
    Edit: all files are created with "FILE_WRITE" i.e. "(O_RDWR | O_CREAT | O_AT_END)"
    Edit: it also seems the File explorer first deletes old file before copying same file (ask you to overwrite)
    Should this work in : usb_string_serial_number_default.wString

    Those "DIR >" were to NEW files? - unless file was closed and opened for each packet? I didn't stare at contents - funny looking repeats with edits.

    This is from " Dir > forum.txt " - it looks like the prior data from two " Dir > ll.txt " are pre-prended? But 'forum.txt' is in last two entries. I did hit "Dir > ll.txt" twice so went to new file forum.txt.
    Code:
     Volume in drive X is Teensy [SD Card] @ MTPdrive(TRIAL)
     Volume Serial Number is 600D-CAFE
    
     Directory of X:\
    
    01/26/2020  03:27 AM                 0 mtpindex.dat
    01/26/2020  03:27 AM       200,000,000 benchB.dat
    01/26/2020  03:27 AM                 0 ll.txt
    01/26/2020  03:27 AM    <DIR>          New Folder
    01/26/2020  03:27 AM    <DIR>          System Volume Information
                   3 File(s)    200,000,000 bytes
                   2 Dir(s)  31,520,718,336 bytes free
     Volume in drive X is Teensy [SD Card] @ MTPdrive(TRIAL)
     Volume Serial Number is 600D-CAFE
    
     Directory of X:\
    
    01/26/2020  03:27 AM                 0 mtpindex.dat
    01/26/2020  03:27 AM       200,000,000 benchB.dat
    01/26/2020  03:27 AM                 0 ll.txt
    01/26/2020  03:27 AM    <DIR>          New Folder
    01/26/2020  03:27 AM    <DIR>          System Volume Information
                   3 File(s)    200,000,000 bytes
                   2 Dir(s)  31,520,718,336 bytes free
     Volume in drive X is Teensy [SD Card] @ MTPdrive(TRIAL)
     Volume Serial Number is 600D-CAFE
    
     Directory of X:\
    
    01/26/2020  03:27 AM                 0 mtpindex.dat
    01/26/2020  03:27 AM       200,000,000 benchB.dat
    01/26/2020  03:27 AM               484 ll.txt
    01/26/2020  03:27 AM             1,452 ll.txt
    01/26/2020  03:27 AM    <DIR>          New Folder
    01/26/2020  03:27 AM    <DIR>          System Volume Information
                   4 File(s)    200,001,936 bytes
          Volume in drive X is Teensy [SD Card] @ MTPdrive(TRIAL)
     Volume Serial Number is 600D-CAFE
    
     Directory of X:\
    
    01/26/2020  03:27 AM                 0 mtpindex.dat
    01/26/2020  03:27 AM       200,000,000 benchB.dat
    01/26/2020  03:27 AM                 0 forum.txt
    01/26/2020  03:27 AM             1,452 ll.txt
    01/26/2020  03:27 AM    <DIR>          New Folder
    01/26/2020  03:27 AM    <DIR>          System Volume Information
                   4 File(s)    200,001,452 bytes
                   2 Dir(s)  31,520,652,800 bytes free
     Volume in drive X is Teensy [SD Card] @ MTPdrive(TRIAL)
     Volume Serial Number is 600D-CAFE
    
     Directory of X:\
    
    01/26/2020  03:27 AM                 0 mtpindex.dat
    01/26/2020  03:27 AM       200,000,000 benchB.dat
    01/26/2020  03:27 AM                 0 ll.txt
    01/26/2020  03:27 AM    <DIR>          New Folder
    01/26/2020  03:27 AM    <DIR>          System Volume Information
                   3 File(s)    200,000,000 bytes
                   2 Dir(s)  31,520,718,336 bytes free
     Volume in drive X is Teensy [SD Card] @ MTPdrive(TRIAL)
     Volume Serial Number is 600D-CAFE
    
     Directory of X:\
    
    01/26/2020  03:27 AM                 0 mtpindex.dat
    01/26/2020  03:27 AM       200,000,000 benchB.dat
    01/26/2020  03:27 AM                 0 ll.txt
    01/26/2020  03:27 AM    <DIR>          New Folder
    01/26/2020  03:27 AM    <DIR>          System Volume Information
                   3 File(s)    200,000,000 bytes
                   2 Dir(s)  31,520,718,336 bytes free
     Volume in drive X is Teensy [SD Card] @ MTPdrive(TRIAL)
     Volume Serial Number is 600D-CAFE
    
     Directory of X:\
    
    01/26/2020  03:27 AM                 0 mtpindex.dat
    01/26/2020  03:27 AM       200,000,000 benchB.dat
    01/26/2020  03:27 AM               484 ll.txt
    01/26/2020  03:27 AM             1,452 ll.txt
    01/26/2020  03:27 AM    <DIR>          New Folder
    01/26/2020  03:27 AM    <DIR>          System Volume Information
                   4 File(s)    200,001,936 bytes
          Volume in drive X is Teensy [SD Card] @ MTPdrive(TRIAL)
     Volume Serial Number is 600D-CAFE
    
     Directory of X:\
    
    01/26/2020  03:27 AM                 0 mtpindex.dat
    01/26/2020  03:27 AM       200,000,000 benchB.dat
    01/26/2020  03:27 AM                 0 forum.txt
    01/26/2020  03:27 AM             1,452 ll.txt
    01/26/2020  03:27 AM    <DIR>          New Folder
    01/26/2020  03:27 AM    <DIR>          System Volume Information
                   4 File(s)    200,001,452 bytes
                   2 Dir(s)  31,520,652,800 bytes free
     Volume in drive X is Teensy [SD Card] @ MTPdrive(TRIAL)
     Volume Serial Number is 600D-CAFE
    
     Directory of X:\
    
    01/26/2020  03:27 AM                 0 mtpindex.dat
    01/26/2020  03:27 AM       200,000,000 benchB.dat
    01/26/2020  03:27 AM                 0 forum.txt
    01/26/2020  03:27 AM             1,452 ll.txt
    01/26/2020  03:27 AM    <DIR>          New Folder
    01/26/2020  03:27 AM    <DIR>          System Volume Information
                   4 File(s)    200,001,452 bytes
                   2 Dir(s)  31,520,652,800 bytes free

  22. #172
    Senior Member
    Join Date
    Jul 2014
    Posts
    2,528
    I updated GitHub to include also new files for Teensy3 and boards.txt.
    I have it working on T4.0 and T3.6
    As soon as Paul decides what to do (using Seremu, Serial, or both with proper product-id) and changes cores , these file will disappear.

    @defagster, Downloaded MTPdrive, but it seems it only communicates with the File explorer (or so) there is no additional traffic with teensy.
    Difficult to say what is correct and what wrong. Must think about it.

  23. #173
    OK, getting mighty peeved now. Another day wasted trying to get this to work.

    I have installed everything: libmtp, mtp-tools, gvfs-mtp, go-mtp, jmtpfs, gmtp and python-pymtp. I fiddled some more with the udev rules. I tried different cables, different usb ports on the PC and updated to the very latest MTP-t4 lib. I also updated numerous, probably irrelavent, Teensy libs.

    @KurtE - I hate you. No I don't, it is just jealousy. Are you using udev rules? If so, what are they?

    For a brief moment earlier, it worked! After a minute or so though it packed up and has refused to come back. At the time, I was doing something unconnected with this issue, so don't know what happened. I haven't been able to replicate it anyway.

    Nautilus now sometimes shows 'Teensy MTP Disk/Serial' and sometimes 'teensyduino 0476' but cannot mount either. Serial via the usb is now working. After an 8 second delay, 'loop' is printed every second. The serial.print called in setup, 'mtp-test', doesn't appear. Can I use serial to debug now?

    Thanks for all your help. Dinner time.

  24. #174
    Senior Member
    Join Date
    Jul 2014
    Posts
    2,528
    Quote Originally Posted by xenington View Post
    OK, getting mighty peeved now. Another day wasted trying to get this to work.
    I tried today SW as is on Ubuntu with Nautilus and no other "mtp" installation and standard udev rules.
    No problems occurred. So I may not be of further help.

    I confirm, however, that on T4 copying from PC to Teensy is not working properly; there seems to be residual data from previous copies, or recycled object ids. I will investigate.

    Edit: Copy PC to Teensy should be working
    Last edited by WMXZ; 01-27-2020 at 08:00 PM.

  25. #175
    Senior Member
    Join Date
    Jul 2014
    Posts
    2,528
    Updated GitHub https://github.com/WMXZ-EU/MTP_t4 so that mounting/enabling MTP device on PC resets the object list.
    This allows to refresh the MTP disk content by unmount/mount (Linux) or disable/enable (Windows) the MTP device.

    As MTP is, AFAIK, mostly used to transfer file/directories and not to replace a mass-storage-class (MSC) a simple refresh command, while connected to device, seems not to be easy. A continuous update by the responder (Teensy) would be possiblem, but would require proper implementation of MTP events and was far too heavy for my application. Anyone, who wants to implement events is welcome to improve the system.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •