History: usbd_cd_mtp

This page describes all changes made to the usbd_cd_mtp package, USBD MTP Class Driver, since its release.


2.29 (2020-04-28, 17:10):

  • Added TINY file system support.
  • Cleaned up FAT file system support file.
  • When an object property was asked for by the host for a deleted object, it was answered. Now for these requests an invalid object handle response code is sent. This bug did not cause an error on host side.
  • When a whole directory tree of the root directory was copied to a different directory of the root, and then deleted later, wrong MTP events were sent to the host, causing inconsistency between host and device's file structures.
  • Warnings eliminated.

2.28 (2020-06-25, 19:31):

  • ObjectAdded event sent when a new object is created. This is required because reusing object IDs (introduced in version 2.27) could cause improper behavior with some host systems (host did not recognize the new object if an object ID was assigned to it that was used earlier in the same session).
  • ZLP was not sent if the size of the event message was aligned to endpoint packet size; this might have caused some events to be missed by the host side.

2.27 (2020-06-17, 12:50):

  • Sped up object file access by adding new fields in an entry, allowing faster search, and by reusing invalidated entries. This change significantly improves the performance when a lot of files are managed (create, erase) within the context of one session.

2.26 (2020-04-07, 18:30):

  • Bug fix: In MtpGetObjectHandlersHdlr() function the size of the local array dpsdir[] used to store a directory name was wrongly calculated and would overflow when its content was set.

2.25 (2019-11-22, 10:30):

  • Bug fix: Faulty checking of Transaction ID corrected in SendPartialObject handler and also corrected in SendObject SendObjectInfo and SetObjectPropertyValue handler. This could rarely cause failures during file copy, move, write.

2.24 (2019-11-19, 11:40):

  • Added support for TruncateObject handler defined in the Android MTP Extension.
  • Object file is only opened at OpenSession and closed at CloseSession or at next OpenSession if no CloseSession was received from host.
  • Replacing space with underscore in object names is done depending on file system configuration option.

2.23 (2019-11-13, 16:30):

  • Bug fix: Disconnecting USB cable during internal move/copy on Linux source file remains open.
  • Bug fix: If an object is created in a directory which has not been opened, wrong data is sent for GetObjectHandles for that directory.
  • Bug fix: If a file has no extension and dot, '.' is appended at the end of file name.

2.22 (2019-11-08, 15:50):

  • Disconnecting USB cable during internal move/copy on Linux source file remains open.
  • When the USB cable is disconnected while an USB Tx transfer is active, after reconnection a hard fault is occurred.

2.21 (2019-10-25, 13:30):

  • DeleteObject: unable to delete an undiscovered non-empty directory.
  • SendObject: cable removal during SendObject resulted in destination file remaining open

2.20 ( 2019-10-22, 17:22 ):

  • Added support for the following commands, defined in the Android MTP Extension: GetPartialObject64SendPartialObject, BeginEditObject, EndEditObject.
  • Using these commands the host can copy an object within the medium in data chunks (Begin-GetPartial-SendPartial-GetPartial-SendPartial-...-End).
  • Linux hosts tend to use these commands when copying object within the medium. Furthermore, this is seemingly the only way used by Linux hosts for these copy operations. Windows hosts do not use these commands but copy whole files using GetObject and SendObject if CopyObject support is disabled.
  •  Disconnecting USB cable while copying an object from the host to the device might have resulted in the destination object/file becoming inaccessible after reconnection.

2.19 (2019-10-16, 18:30):

  • MoveObject and CopyObject support is enabled/disabled by a configuration option.

2.18 (2019-10-15, 17:10):

  • MTP device always sent OK device status for Get Device Status request even if its state was Busy.
  • Cancel Request was not handled in CopyObject and MoveObject handlers.

2.17 (2019-10-07, 14:00):

  • Bug fixed: Handling of SendObjectInfo caused crash on Linux.
  • Correct letter case of name is sent to host if a new folder is created or renamed.
  • Case-insensitive compare fixed

2.16 (2019-09-30, 10:00):

  • File name length at creation/rename is checked according to file name length of the file system. Previously this was not checked and the file name reported by the MTP device could be wrong after accepting the one sent by the host.
  • 'Name' (0xDC44) object property is ignored and 'File name' object property is used instead. 'Name' holds only the name part of the file name (without the extension). 'File name' includes the extension as well. During rename both properties are sent to the device, so 'Name' can be ignored.

2.15 (2018-02-06, 15:09):

  • Bug fixed: MTP did not work without an RTOS.

2.14r2 (2018-08-29, 18:20):

  • Document HTML link added to the documentation folder.
  • History and document files renamed to the package name.

2.14 (2018-04-26, 07:58):

  • Eliminated unaligned access: it could cause exception during upload.
  • Module cannot be compiled when file change event was enabled.
  • Rename did not work if FAT file system was used.

2.13 (2018-02-06, 15:09):

  • Implemented support for SafeFLASH file system.

2.12 (2017-06-29, 10:31):

  • Eliminated compiler warnings.


  • Compiler warnings were eliminated.
  • Invalid object info response code was wrong.


  • Automatic file extension change was fixed when a file was uploaded with an extension that was different to the expected based on the object type (the associated extension was appended to the file name).
  • MTP crash when connected to Linux was fixed.


  • Removed support for re-using invalidated object IDs due to improper operation after object deletion.
  • Directory deletion made safer by eliminating recursion.


  • PictBridge bug: device response and device requests were not handled correctly (request and response were both sent in DREQUEST.DPS).


  • Invalidated entries in object file are reused
  • File closed after creating in SendObjectInfo handler. Then reopened in SendObject handler.
  • Cancel Request setup packet handling implemented.
  • Get Device Status setup packet handling changed. It returns the real device status.


  • bug fix: MTP communication froze if both file system event and transfer end event set at the same time.


  • mtp_fs_event_task() and ProcessMTP() merged to one task using the same event with two event flags.
  • psp_strncmp() used to reduce stack usage in some functions.
  • File system event handling changed to handle more than one event.


  • Bug fixed: Due to incorrect mutex handling, device operation was hanging.
  • Bug fixed: Rename file was failed in subdirectories.
  • Bug fixed: Copy file between subdirectories failed.


  • Bug fixed: Due to incorrect mutex handling, incorrect operation could occur causing Windows to report device disconnection. For example: if an existing file was overwritten on the device.


  • No limitations on the max. number of files in a directory.


  • Initial release.