sakumisu 2 лет назад
Родитель
Сommit
8f991699cb

+ 0 - 471
class/mtp/usb_mtp.h

@@ -1,471 +0,0 @@
-/*
- * Copyright (c) 2022, sakumisu
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-#ifndef USB_MTP_H
-#define USB_MTP_H
-
-#define USB_MTP_CLASS 0x06
-
-#define USB_MTP_SUB_CLASS 0x01U
-#define USB_MTP_PROTOCOL  0x01U
-
-/* MTP class requests */
-#define MTP_REQUEST_CANCEL             0x64U
-#define MTP_REQUEST_GET_EXT_EVENT_DATA 0x65U
-#define MTP_REQUEST_RESET              0x66U
-#define MTP_REQUEST_GET_DEVICE_STATUS  0x67U
-
-/* Container Types */
-#define MTP_CONTAINER_TYPE_UNDEFINED 0U
-#define MTP_CONTAINER_TYPE_COMMAND   1U
-#define MTP_CONTAINER_TYPE_DATA      2U
-#define MTP_CONTAINER_TYPE_RESPONSE  3U
-#define MTP_CONTAINER_TYPE_EVENT     4U
-
-/*
- * MTP Class specification Revision 1.1
- * Appendix D. Operations
- */
-
-/* Operations code */
-#define MTP_OP_GET_DEVICE_INFO            0x1001U
-#define MTP_OP_OPEN_SESSION               0x1002U
-#define MTP_OP_CLOSE_SESSION              0x1003U
-#define MTP_OP_GET_STORAGE_IDS            0x1004U
-#define MTP_OP_GET_STORAGE_INFO           0x1005U
-#define MTP_OP_GET_NUM_OBJECTS            0x1006U
-#define MTP_OP_GET_OBJECT_HANDLES         0x1007U
-#define MTP_OP_GET_OBJECT_INFO            0x1008U
-#define MTP_OP_GET_OBJECT                 0x1009U
-#define MTP_OP_GET_THUMB                  0x100AU
-#define MTP_OP_DELETE_OBJECT              0x100BU
-#define MTP_OP_SEND_OBJECT_INFO           0x100CU
-#define MTP_OP_SEND_OBJECT                0x100DU
-#define MTP_OP_FORMAT_STORE               0x100FU
-#define MTP_OP_RESET_DEVICE               0x1010U
-#define MTP_OP_GET_DEVICE_PROP_DESC       0x1014U
-#define MTP_OP_GET_DEVICE_PROP_VALUE      0x1015U
-#define MTP_OP_SET_DEVICE_PROP_VALUE      0x1016U
-#define MTP_OP_RESET_DEVICE_PROP_VALUE    0x1017U
-#define MTP_OP_TERMINATE_OPEN_CAPTURE     0x1018U
-#define MTP_OP_MOVE_OBJECT                0x1019U
-#define MTP_OP_COPY_OBJECT                0x101AU
-#define MTP_OP_GET_PARTIAL_OBJECT         0x101BU
-#define MTP_OP_INITIATE_OPEN_CAPTURE      0x101CU
-#define MTP_OP_GET_OBJECT_PROPS_SUPPORTED 0x9801U
-#define MTP_OP_GET_OBJECT_PROP_DESC       0x9802U
-#define MTP_OP_GET_OBJECT_PROP_VALUE      0x9803U
-#define MTP_OP_SET_OBJECT_PROP_VALUE      0x9804U
-#define MTP_OP_GET_OBJECT_PROPLIST        0x9805U
-#define MTP_OP_GET_OBJECT_PROP_REFERENCES 0x9810U
-#define MTP_OP_GETSERVICEIDS              0x9301U
-#define MTP_OP_GETSERVICEINFO             0x9302U
-#define MTP_OP_GETSERVICECAPABILITIES     0x9303U
-#define MTP_OP_GETSERVICEPROPDESC         0x9304U
-
-/* MTP response code */
-#define MTP_RESPONSE_OK                                    0x2001U
-#define MTP_RESPONSE_GENERAL_ERROR                         0x2002U
-#define MTP_RESPONSE_PARAMETER_NOT_SUPPORTED               0x2006U
-#define MTP_RESPONSE_INCOMPLETE_TRANSFER                   0x2007U
-#define MTP_RESPONSE_INVALID_STORAGE_ID                    0x2008U
-#define MTP_RESPONSE_INVALID_OBJECT_HANDLE                 0x2009U
-#define MTP_RESPONSE_DEVICEPROP_NOT_SUPPORTED              0x200AU
-#define MTP_RESPONSE_STORE_FULL                            0x200CU
-#define MTP_RESPONSE_ACCESS_DENIED                         0x200FU
-#define MTP_RESPONSE_STORE_NOT_AVAILABLE                   0x2013U
-#define MTP_RESPONSE_SPECIFICATION_BY_FORMAT_NOT_SUPPORTED 0x2014U
-#define MTP_RESPONSE_NO_VALID_OBJECT_INFO                  0x2015U
-#define MTP_RESPONSE_DEVICE_BUSY                           0x2019U
-#define MTP_RESPONSE_INVALID_PARENT_OBJECT                 0x201AU
-#define MTP_RESPONSE_INVALID_PARAMETER                     0x201DU
-#define MTP_RESPONSE_SESSION_ALREADY_OPEN                  0x201EU
-#define MTP_RESPONSE_TRANSACTION_CANCELLED                 0x201FU
-#define MTP_RESPONSE_INVALID_OBJECT_PROP_CODE              0xA801U
-#define MTP_RESPONSE_SPECIFICATION_BY_GROUP_UNSUPPORTED    0xA807U
-#define MTP_RESPONSE_OBJECT_PROP_NOT_SUPPORTED             0xA80AU
-
-/* MTP Object format codes */
-#define MTP_OBJ_FORMAT_UNDEFINED            0x3000U
-#define MTP_OBJ_FORMAT_ASSOCIATION          0x3001U
-#define MTP_OBJ_FORMAT_SCRIPT               0x3002U
-#define MTP_OBJ_FORMAT_EXECUTABLE           0x3003U
-#define MTP_OBJ_FORMAT_TEXT                 0x3004U
-#define MTP_OBJ_FORMAT_HTML                 0x3005U
-#define MTP_OBJ_FORMAT_DPOF                 0x3006U
-#define MTP_OBJ_FORMAT_AIFF                 0x3007U
-#define MTP_OBJ_FORMAT_WAV                  0x3008U
-#define MTP_OBJ_FORMAT_MP3                  0x3009U
-#define MTP_OBJ_FORMAT_AVI                  0x300AU
-#define MTP_OBJ_FORMAT_MPEG                 0x300BU
-#define MTP_OBJ_FORMAT_ASF                  0x300CU
-#define MTP_OBJ_FORMAT_DEFINED              0x3800U
-#define MTP_OBJ_FORMAT_EXIF_JPEG            0x3801U
-#define MTP_OBJ_FORMAT_TIFF_EP              0x3802U
-#define MTP_OBJ_FORMAT_FLASHPIX             0x3803U
-#define MTP_OBJ_FORMAT_BMP                  0x3804U
-#define MTP_OBJ_FORMAT_CIFF                 0x3805U
-#define MTP_OBJ_FORMAT_UNDEFINED_RESERVED0  0x3806U
-#define MTP_OBJ_FORMAT_GIF                  0x3807U
-#define MTP_OBJ_FORMAT_JFIF                 0x3808U
-#define MTP_OBJ_FORMAT_CD                   0x3809U
-#define MTP_OBJ_FORMAT_PICT                 0x380AU
-#define MTP_OBJ_FORMAT_PNG                  0x380BU
-#define MTP_OBJ_FORMAT_UNDEFINED_RESERVED1  0x380CU
-#define MTP_OBJ_FORMAT_TIFF                 0x380DU
-#define MTP_OBJ_FORMAT_TIFF_IT              0x380EU
-#define MTP_OBJ_FORMAT_JP2                  0x380FU
-#define MTP_OBJ_FORMAT_JPX                  0x3810U
-#define MTP_OBJ_FORMAT_UNDEFINED_FIRMWARE   0xB802U
-#define MTP_OBJ_FORMAT_WINDOWS_IMAGE_FORMAT 0xB881U
-#define MTP_OBJ_FORMAT_UNDEFINED_AUDIO      0xB900U
-#define MTP_OBJ_FORMAT_WMA                  0xB901U
-#define MTP_OBJ_FORMAT_OGG                  0xB902U
-#define MTP_OBJ_FORMAT_AAC                  0xB903U
-#define MTP_OBJ_FORMAT_AUDIBLE              0xB904U
-#define MTP_OBJ_FORMAT_FLAC                 0xB906U
-#define MTP_OBJ_FORMAT_UNDEFINED_VIDEO      0xB980U
-#define MTP_OBJ_FORMAT_WMV                  0xB981U
-#define MTP_OBJ_FORMAT_MP4_CONTAINER        0xB982U
-#define MTP_OBJ_FORMAT_MP2                  0xB983U
-#define MTP_OBJ_FORMAT_3GP_CONTAINER        0xB984U
-
-/*  MTP event codes*/
-#define MTP_EVENT_UNDEFINED               0x4000U
-#define MTP_EVENT_CANCELTRANSACTION       0x4001U
-#define MTP_EVENT_OBJECTADDED             0x4002U
-#define MTP_EVENT_OBJECTREMOVED           0x4003U
-#define MTP_EVENT_STOREADDED              0x4004U
-#define MTP_EVENT_STOREREMOVED            0x4005U
-#define MTP_EVENT_DEVICEPROPCHANGED       0x4006U
-#define MTP_EVENT_OBJECTINFOCHANGED       0x4007U
-#define MTP_EVENT_DEVICEINFOCHANGED       0x4008U
-#define MTP_EVENT_REQUESTOBJECTTRANSFER   0x4009U
-#define MTP_EVENT_STOREFULL               0x400AU
-#define MTP_EVENT_DEVICERESET             0x400BU
-#define MTP_EVENT_STORAGEINFOCHANGED      0x400CU
-#define MTP_EVENT_CAPTURECOMPLETE         0x400DU
-#define MTP_EVENT_UNREPORTEDSTATUS        0x400EU
-#define MTP_EVENT_OBJECTPROPCHANGED       0xC801U
-#define MTP_EVENT_OBJECTPROPDESCCHANGED   0xC802U
-#define MTP_EVENT_OBJECTREFERENCESCHANGED 0xC803U
-
-/* MTP device properties code*/
-#define MTP_DEV_PROP_UNDEFINED                      0x5000U
-#define MTP_DEV_PROP_BATTERY_LEVEL                  0x5001U
-#define MTP_DEV_PROP_FUNCTIONAL_MODE                0x5002U
-#define MTP_DEV_PROP_IMAGE_SIZE                     0x5003U
-#define MTP_DEV_PROP_COMPRESSION_SETTING            0x5004U
-#define MTP_DEV_PROP_WHITE_BALANCE                  0x5005U
-#define MTP_DEV_PROP_RGB_GAIN                       0x5006U
-#define MTP_DEV_PROP_F_NUMBER                       0x5007U
-#define MTP_DEV_PROP_FOCAL_LENGTH                   0x5008U
-#define MTP_DEV_PROP_FOCUS_DISTANCE                 0x5009U
-#define MTP_DEV_PROP_FOCUS_MODE                     0x500AU
-#define MTP_DEV_PROP_EXPOSURE_METERING_MODE         0x500BU
-#define MTP_DEV_PROP_FLASH_MODE                     0x500CU
-#define MTP_DEV_PROP_EXPOSURE_TIME                  0x500DU
-#define MTP_DEV_PROP_EXPOSURE_PROGRAM_MODE          0x500EU
-#define MTP_DEV_PROP_EXPOSURE_INDEX                 0x500FU
-#define MTP_DEV_PROP_EXPOSURE_BIAS_COMPENSATION     0x5010U
-#define MTP_DEV_PROP_DATETIME                       0x5011U
-#define MTP_DEV_PROP_CAPTURE_DELAY                  0x5012U
-#define MTP_DEV_PROP_STILL_CAPTURE_MODE             0x5013U
-#define MTP_DEV_PROP_CONTRAST                       0x5014U
-#define MTP_DEV_PROP_SHARPNESS                      0x5015U
-#define MTP_DEV_PROP_DIGITAL_ZOOM                   0x5016U
-#define MTP_DEV_PROP_EFFECT_MODE                    0x5017U
-#define MTP_DEV_PROP_BURST_NUMBER                   0x5018U
-#define MTP_DEV_PROP_BURST_INTERVAL                 0x5019U
-#define MTP_DEV_PROP_TIMELAPSE_NUMBER               0x501AU
-#define MTP_DEV_PROP_TIMELAPSE_INTERVAL             0x501BU
-#define MTP_DEV_PROP_FOCUS_METERING_MODE            0x501CU
-#define MTP_DEV_PROP_UPLOAD_URL                     0x501DU
-#define MTP_DEV_PROP_ARTIST                         0x501EU
-#define MTP_DEV_PROP_COPYRIGHT_INFO                 0x501FU
-#define MTP_DEV_PROP_SYNCHRONIZATION_PARTNER        0xD401U
-#define MTP_DEV_PROP_DEVICE_FRIENDLY_NAME           0xD402U
-#define MTP_DEV_PROP_VOLUME                         0xD403U
-#define MTP_DEV_PROP_SUPPORTEDFORMATSORDERED        0xD404U
-#define MTP_DEV_PROP_DEVICEICON                     0xD405U
-#define MTP_DEV_PROP_PLAYBACK_RATE                  0xD410U
-#define MTP_DEV_PROP_PLAYBACK_OBJECT                0xD411U
-#define MTP_DEV_PROP_PLAYBACK_CONTAINER             0xD412U
-#define MTP_DEV_PROP_SESSION_INITIATOR_VERSION_INFO 0xD406U
-#define MTP_DEV_PROP_PERCEIVED_DEVICE_TYPE          0xD407U
-
-/*
- * MTP Class specification Revision 1.1
- * Appendix B. Object Properties
- */
-
-/* MTP OBJECT PROPERTIES supported*/
-#define MTP_OB_PROP_STORAGE_ID                          0xDC01U
-#define MTP_OB_PROP_OBJECT_FORMAT                       0xDC02U
-#define MTP_OB_PROP_PROTECTION_STATUS                   0xDC03U
-#define MTP_OB_PROP_OBJECT_SIZE                         0xDC04U
-#define MTP_OB_PROP_ASSOC_TYPE                          0xDC05U
-#define MTP_OB_PROP_ASSOC_DESC                          0xDC06U
-#define MTP_OB_PROP_OBJ_FILE_NAME                       0xDC07U
-#define MTP_OB_PROP_DATE_CREATED                        0xDC08U
-#define MTP_OB_PROP_DATE_MODIFIED                       0xDC09U
-#define MTP_OB_PROP_KEYWORDS                            0xDC0AU
-#define MTP_OB_PROP_PARENT_OBJECT                       0xDC0BU
-#define MTP_OB_PROP_ALLOWED_FOLD_CONTENTS               0xDC0CU
-#define MTP_OB_PROP_HIDDEN                              0xDC0DU
-#define MTP_OB_PROP_SYSTEM_OBJECT                       0xDC0EU
-#define MTP_OB_PROP_PERS_UNIQ_OBJ_IDEN                  0xDC41U
-#define MTP_OB_PROP_SYNCID                              0xDC42U
-#define MTP_OB_PROP_PROPERTY_BAG                        0xDC43U
-#define MTP_OB_PROP_NAME                                0xDC44U
-#define MTP_OB_PROP_CREATED_BY                          0xDC45U
-#define MTP_OB_PROP_ARTIST                              0xDC46U
-#define MTP_OB_PROP_DATE_AUTHORED                       0xDC47U
-#define MTP_OB_PROP_DESCRIPTION                         0xDC48U
-#define MTP_OB_PROP_URL_REFERENCE                       0xDC49U
-#define MTP_OB_PROP_LANGUAGELOCALE                      0xDC4AU
-#define MTP_OB_PROP_COPYRIGHT_INFORMATION               0xDC4BU
-#define MTP_OB_PROP_SOURCE                              0xDC4CU
-#define MTP_OB_PROP_ORIGIN_LOCATION                     0xDC4DU
-#define MTP_OB_PROP_DATE_ADDED                          0xDC4EU
-#define MTP_OB_PROP_NON_CONSUMABLE                      0xDC4FU
-#define MTP_OB_PROP_CORRUPTUNPLAYABLE                   0xDC50U
-#define MTP_OB_PROP_PRODUCERSERIALNUMBER                0xDC51U
-#define MTP_OB_PROP_REPRESENTATIVE_SAMPLE_FORMAT        0xDC81U
-#define MTP_OB_PROP_REPRESENTATIVE_SAMPLE_SIZE          0xDC82U
-#define MTP_OB_PROP_REPRESENTATIVE_SAMPLE_HEIGHT        0xDC83U
-#define MTP_OB_PROP_REPRESENTATIVE_SAMPLE_WIDTH         0xDC84U
-#define MTP_OB_PROP_REPRESENTATIVE_SAMPLE_DURATION      0xDC85U
-#define MTP_OB_PROP_REPRESENTATIVE_SAMPLE_DATA          0xDC86U
-#define MTP_OB_PROP_WIDTH                               0xDC87U
-#define MTP_OB_PROP_HEIGHT                              0xDC88U
-#define MTP_OB_PROP_DURATION                            0xDC89U
-#define MTP_OB_PROP_RATING                              0xDC8AU
-#define MTP_OB_PROP_TRACK                               0xDC8BU
-#define MTP_OB_PROP_GENRE                               0xDC8CU
-#define MTP_OB_PROP_CREDITS                             0xDC8DU
-#define MTP_OB_PROP_LYRICS                              0xDC8EU
-#define MTP_OB_PROP_SUBSCRIPTION_CONTENT_ID             0xDC8FU
-#define MTP_OB_PROP_PRODUCED_BY                         0xDC90U
-#define MTP_OB_PROP_USE_COUNT                           0xDC91U
-#define MTP_OB_PROP_SKIP_COUNT                          0xDC92U
-#define MTP_OB_PROP_LAST_ACCESSED                       0xDC93U
-#define MTP_OB_PROP_PARENTAL_RATING                     0xDC94U
-#define MTP_OB_PROP_META_GENRE                          0xDC95U
-#define MTP_OB_PROP_COMPOSER                            0xDC96U
-#define MTP_OB_PROP_EFFECTIVE_RATING                    0xDC97U
-#define MTP_OB_PROP_SUBTITLE                            0xDC98U
-#define MTP_OB_PROP_ORIGINAL_RELEASE_DATE               0xDC99U
-#define MTP_OB_PROP_ALBUM_NAME                          0xDC9AU
-#define MTP_OB_PROP_ALBUM_ARTIST                        0xDC9BU
-#define MTP_OB_PROP_MOOD                                0xDC9CU
-#define MTP_OB_PROP_DRM_STATUS                          0xDC9DU
-#define MTP_OB_PROP_SUB_DESCRIPTION                     0xDC9EU
-#define MTP_OB_PROP_IS_CROPPED                          0xDCD1U
-#define MTP_OB_PROP_IS_COLOUR_CORRECTED                 0xDCD2U
-#define MTP_OB_PROP_IMAGE_BIT_DEPTH                     0xDCD3U
-#define MTP_OB_PROP_FNUMBER                             0xDCD4U
-#define MTP_OB_PROP_EXPOSURE_TIME                       0xDCD5U
-#define MTP_OB_PROP_EXPOSURE_INDEX                      0xDCD6U
-#define MTP_OB_PROP_TOTAL_BITRATE                       0xDE91U
-#define MTP_OB_PROP_BITRATE_TYPE                        0xDE92U
-#define MTP_OB_PROP_SAMPLE_RATE                         0xDE93U
-#define MTP_OB_PROP_NUMBER_OF_CHANNELS                  0xDE94U
-#define MTP_OB_PROP_AUDIO_BITDEPTH                      0xDE95U
-#define MTP_OB_PROP_SCAN_TYPE                           0xDE97U
-#define MTP_OB_PROP_AUDIO_WAVE_CODEC                    0xDE99U
-#define MTP_OB_PROP_AUDIO_BITRATE                       0xDE9AU
-#define MTP_OB_PROP_VIDEO_FOURCC_CODEC                  0xDE9BU
-#define MTP_OB_PROP_VIDEO_BITRATE                       0xDE9CU
-#define MTP_OB_PROP_FRAMES_PER_THOUSAND_SECONDS         0xDE9DU
-#define MTP_OB_PROP_KEYFRAME_DISTANCE                   0xDE9EU
-#define MTP_OB_PROP_BUFFER_SIZE                         0xDE9FU
-#define MTP_OB_PROP_ENCODING_QUALITY                    0xDEA0U
-#define MTP_OB_PROP_ENCODING_PROFILE                    0xDEA1U
-#define MTP_OB_PROP_DISPLAY_NAME                        0xDCE0U
-#define MTP_OB_PROP_BODY_TEXT                           0xDCE1U
-#define MTP_OB_PROP_SUBJECT                             0xDCE2U
-#define MTP_OB_PROP_PRIORITY                            0xDCE3U
-#define MTP_OB_PROP_GIVEN_NAME                          0xDD00U
-#define MTP_OB_PROP_MIDDLE_NAMES                        0xDD01U
-#define MTP_OB_PROP_FAMILY_NAME                         0xDD02U
-#define MTP_OB_PROP_PREFIX                              0xDD03U
-#define MTP_OB_PROP_SUFFIX                              0xDD04U
-#define MTP_OB_PROP_PHONETIC_GIVEN_NAME                 0xDD05U
-#define MTP_OB_PROP_PHONETIC_FAMILY_NAME                0xDD06U
-#define MTP_OB_PROP_EMAIL_PRIMARY                       0xDD07U
-#define MTP_OB_PROP_EMAIL_PERSONAL_1                    0xDD08U
-#define MTP_OB_PROP_EMAIL_PERSONAL_2                    0xDD09U
-#define MTP_OB_PROP_EMAIL_BUSINESS_1                    0xDD0AU
-#define MTP_OB_PROP_EMAIL_BUSINESS_2                    0xDD0BU
-#define MTP_OB_PROP_EMAIL_OTHERS                        0xDD0CU
-#define MTP_OB_PROP_PHONE_NUMBER_PRIMARY                0xDD0DU
-#define MTP_OB_PROP_PHONE_NUMBER_PERSONAL               0xDD0EU
-#define MTP_OB_PROP_PHONE_NUMBER_PERSONAL_2             0xDD0FU
-#define MTP_OB_PROP_PHONE_NUMBER_BUSINESS               0xDD10U
-#define MTP_OB_PROP_PHONE_NUMBER_BUSINESS_2             0xDD11U
-#define MTP_OB_PROP_PHONE_NUMBER_MOBILE                 0xDD12U
-#define MTP_OB_PROP_PHONE_NUMBER_MOBILE_2               0xDD13U
-#define MTP_OB_PROP_FAX_NUMBER_PRIMARY                  0xDD14U
-#define MTP_OB_PROP_FAX_NUMBER_PERSONAL                 0xDD15U
-#define MTP_OB_PROP_FAX_NUMBER_BUSINESS                 0xDD16U
-#define MTP_OB_PROP_PAGER_NUMBER                        0xDD17U
-#define MTP_OB_PROP_PHONE_NUMBER_OTHERS                 0xDD18U
-#define MTP_OB_PROP_PRIMARY_WEB_ADDRESS                 0xDD19U
-#define MTP_OB_PROP_PERSONAL_WEB_ADDRESS                0xDD1AU
-#define MTP_OB_PROP_BUSINESS_WEB_ADDRESS                0xDD1BU
-#define MTP_OB_PROP_INSTANT_MESSENGER_ADDRESS           0xDD1CU
-#define MTP_OB_PROP_INSTANT_MESSENGER_ADDRESS_2         0xDD1DU
-#define MTP_OB_PROP_INSTANT_MESSENGER_ADDRESS_3         0xDD1EU
-#define MTP_OB_PROP_POSTAL_ADDRESS_PERSONAL_FULL        0xDD1FU
-#define MTP_OB_PROP_POSTAL_ADDRESS_PERSONAL_LINE_1      0xDD20U
-#define MTP_OB_PROP_POSTAL_ADDRESS_PERSONAL_LINE_2      0xDD21U
-#define MTP_OB_PROP_POSTAL_ADDRESS_PERSONAL_CITY        0xDD22U
-#define MTP_OB_PROP_POSTAL_ADDRESS_PERSONAL_REGION      0xDD23U
-#define MTP_OB_PROP_POSTAL_ADDRESS_PERSONAL_POSTAL_CODE 0xDD24U
-#define MTP_OB_PROP_POSTAL_ADDRESS_PERSONAL_COUNTRY     0xDD25U
-#define MTP_OB_PROP_POSTAL_ADDRESS_BUSINESS_FULL        0xDD26U
-#define MTP_OB_PROP_POSTAL_ADDRESS_BUSINESS_LINE_1      0xDD27U
-#define MTP_OB_PROP_POSTAL_ADDRESS_BUSINESS_LINE_2      0xDD28U
-#define MTP_OB_PROP_POSTAL_ADDRESS_BUSINESS_CITY        0xDD29U
-#define MTP_OB_PROP_POSTAL_ADDRESS_BUSINESS_REGION      0xDD2AU
-#define MTP_OB_PROP_POSTAL_ADDRESS_BUSINESS_POSTAL_CODE 0xDD2BU
-#define MTP_OB_PROP_POSTAL_ADDRESS_BUSINESS_COUNTRY     0xDD2CU
-#define MTP_OB_PROP_POSTAL_ADDRESS_OTHER_FULL           0xDD2DU
-#define MTP_OB_PROP_POSTAL_ADDRESS_OTHER_LINE_1         0xDD2EU
-#define MTP_OB_PROP_POSTAL_ADDRESS_OTHER_LINE_2         0xDD2FU
-#define MTP_OB_PROP_POSTAL_ADDRESS_OTHER_CITY           0xDD30U
-#define MTP_OB_PROP_POSTAL_ADDRESS_OTHER_REGION         0xDD31U
-#define MTP_OB_PROP_POSTAL_ADDRESS_OTHER_POSTAL_CODE    0xDD32U
-#define MTP_OB_PROP_POSTAL_ADDRESS_OTHER_COUNTRY        0xDD33U
-#define MTP_OB_PROP_ORGANIZATION_NAME                   0xDD34U
-#define MTP_OB_PROP_PHONETIC_ORGANIZATION_NAME          0xDD35U
-#define MTP_OB_PROP_ROLE                                0xDD36U
-#define MTP_OB_PROP_BIRTHDATE                           0xDD37U
-#define MTP_OB_PROP_MESSAGE_TO                          0xDD40U
-#define MTP_OB_PROP_MESSAGE_CC                          0xDD41U
-#define MTP_OB_PROP_MESSAGE_BCC                         0xDD42U
-#define MTP_OB_PROP_MESSAGE_READ                        0xDD43U
-#define MTP_OB_PROP_MESSAGE_RECEIVED_TIME               0xDD44U
-#define MTP_OB_PROP_MESSAGE_SENDER                      0xDD45U
-#define MTP_OB_PROP_ACT_BEGIN_TIME                      0xDD50U
-#define MTP_OB_PROP_ACT_END_TIME                        0xDD51U
-#define MTP_OB_PROP_ACT_LOCATION                        0xDD52U
-#define MTP_OB_PROP_ACT_REQUIRED_ATTENDEES              0xDD54U
-#define MTP_OB_PROP_ACT_OPTIONAL_ATTENDEES              0xDD55U
-#define MTP_OB_PROP_ACT_RESOURCES                       0xDD56U
-#define MTP_OB_PROP_ACT_ACCEPTED                        0xDD57U
-#define MTP_OB_PROP_OWNER                               0xDD5DU
-#define MTP_OB_PROP_EDITOR                              0xDD5EU
-#define MTP_OB_PROP_WEBMASTER                           0xDD5FU
-#define MTP_OB_PROP_URL_SOURCE                          0xDD60U
-#define MTP_OB_PROP_URL_DESTINATION                     0xDD61U
-#define MTP_OB_PROP_TIME_BOOKMARK                       0xDD62U
-#define MTP_OB_PROP_OBJECT_BOOKMARK                     0xDD63U
-#define MTP_OB_PROP_BYTE_BOOKMARK                       0xDD64U
-#define MTP_OB_PROP_LAST_BUILD_DATE                     0xDD70U
-#define MTP_OB_PROP_TIME_TO_LIVE                        0xDD71U
-#define MTP_OB_PROP_MEDIA_GUID                          0xDD72U
-
-/* MTP storage type */
-#define MTP_STORAGE_UNDEFINED     0U
-#define MTP_STORAGE_FIXED_ROM     0x0001U
-#define MTP_STORAGE_REMOVABLE_ROM 0x0002U
-#define MTP_STORAGE_FIXED_RAM     0x0003U
-#define MTP_STORAGE_REMOVABLE_RAM 0x0004U
-
-/* MTP file system type */
-#define MTP_FILESYSTEM_UNDEFINED        0U
-#define MTP_FILESYSTEM_GENERIC_FLAT     0x0001U
-#define MTP_FILESYSTEM_GENERIC_HIERARCH 0x0002U
-#define MTP_FILESYSTEM_DCF              0x0003U
-
-/* MTP access capability */
-#define MTP_ACCESS_CAP_RW             0U /* read write */
-#define MTP_ACCESS_CAP_RO_WITHOUT_DEL 0x0001U
-#define MTP_ACCESS_CAP_RO_WITH_DEL    0x0002U
-
-/* MTP standard data types supported */
-#define MTP_DATATYPE_INT8    0x0001U
-#define MTP_DATATYPE_UINT8   0x0002U
-#define MTP_DATATYPE_INT16   0x0003U
-#define MTP_DATATYPE_UINT16  0x0004U
-#define MTP_DATATYPE_INT32   0x0005U
-#define MTP_DATATYPE_UINT32  0x0006U
-#define MTP_DATATYPE_INT64   0x0007U
-#define MTP_DATATYPE_UINT64  0x0008U
-#define MTP_DATATYPE_UINT128 0x000AU
-#define MTP_DATATYPE_STR     0xFFFFU
-
-/* MTP reading only or reading/writing */
-#define MTP_PROP_GET     0x00U
-#define MTP_PROP_GET_SET 0x01U
-
-#define MTP_SESSION_CLOSED 0x00
-#define MTP_SESSION_OPENED 0x01
-
-struct mtp_container_command {
-    uint32_t conlen;
-    uint16_t contype;
-    uint16_t code;
-    uint32_t trans_id;
-    uint32_t param1;
-    uint32_t param2;
-    uint32_t param3;
-    uint32_t param4;
-    uint32_t param5;
-} __PACKED;
-
-struct mtp_container_data {
-    uint32_t conlen;
-    uint16_t contype;
-    uint16_t code;
-    uint32_t trans_id;
-    uint8_t data[512];
-} __PACKED;
-
-struct mtp_container_response {
-    uint32_t conlen;
-    uint16_t contype;
-    uint16_t code;
-    uint32_t trans_id;
-} __PACKED;
-
-/*Length of template descriptor: 23 bytes*/
-#define MTP_DESCRIPTOR_LEN (9 + 7 + 7 + 7)
-
-// clang-format off
-#define MTP_DESCRIPTOR_INIT(bFirstInterface, out_ep, in_ep, int_ep, wMaxPacketSize, str_idx) \
-    /* Interface */                                                      \
-    0x09,                          /* bLength */                         \
-    USB_DESCRIPTOR_TYPE_INTERFACE, /* bDescriptorType */                 \
-    bFirstInterface,               /* bInterfaceNumber */                \
-    0x00,                          /* bAlternateSetting */               \
-    0x03,                          /* bNumEndpoints */                   \
-    USB_DEVICE_CLASS_MASS_STORAGE, /* bInterfaceClass */                 \
-    USB_MTP_SUB_CLASS,             /* bInterfaceSubClass */              \
-    USB_MTP_PROTOCOL,              /* bInterfaceProtocol */              \
-    str_idx,                       /* iInterface */                      \
-    0x07,                          /* bLength */                         \
-    USB_DESCRIPTOR_TYPE_ENDPOINT,  /* bDescriptorType */                 \
-    out_ep,                        /* bEndpointAddress */                \
-    0x02,                          /* bmAttributes */                    \
-    WBVAL(wMaxPacketSize),         /* wMaxPacketSize */                  \
-    0x00,                          /* bInterval */                       \
-    0x07,                          /* bLength */                         \
-    USB_DESCRIPTOR_TYPE_ENDPOINT,  /* bDescriptorType */                 \
-    in_ep,                         /* bEndpointAddress */                \
-    0x02,                          /* bmAttributes */                    \
-    WBVAL(wMaxPacketSize),         /* wMaxPacketSize */                  \
-    0x00,                          /* bInterval */                       \
-    0x07,                          /* bLength */                         \
-    USB_DESCRIPTOR_TYPE_ENDPOINT,  /* bDescriptorType */                 \
-    int_ep,                        /* bEndpointAddress */                \
-    0x03,                          /* bmAttributes */                    \
-    0x1c, 0x00,                    /* wMaxPacketSize */                  \
-    0x06                           /* bInterval */
-// clang-format on
-
-#endif /* USB_MTP_H */

+ 0 - 566
class/mtp/usbd_mtp.c

@@ -1,566 +0,0 @@
-/*
- * Copyright (c) 2022, sakumisu
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-#include "usbd_core.h"
-#include "usbd_mtp.h"
-#include "usbd_mtp_config.h"
-
-/* MTP Stage */
-enum Stage {
-    MTP_READ_COMMAND = 0,
-    MTP_DATA_OUT = 1,
-    MTP_DATA_IN = 2,
-    MTP_SEND_RESPONSE = 3,
-    MTP_WAIT_RESPONSE = 4,
-};
-
-USB_NOCACHE_RAM_SECTION struct usbd_mtp_priv {
-    USB_MEM_ALIGNX struct mtp_container_command con_command;
-    USB_MEM_ALIGNX struct mtp_container_data con_data;
-    USB_MEM_ALIGNX struct mtp_container_response con_response;
-    enum Stage stage;
-    uint8_t session_state;
-    uint32_t response_code;
-} g_usbd_mtp;
-
-/* Max USB packet size */
-#ifndef CONFIG_USB_HS
-#define MTP_BULK_EP_MPS 64
-#else
-#define MTP_BULK_EP_MPS 512
-#endif
-
-#define MTP_OUT_EP_IDX 0
-#define MTP_IN_EP_IDX  1
-#define MTP_INT_EP_IDX 2
-
-/* Describe EndPoints configuration */
-static struct usbd_endpoint mtp_ep_data[3];
-
-static int mtp_class_interface_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len)
-{
-    USB_LOG_DBG("MTP Class request: "
-                "bRequest 0x%02x\r\n",
-                setup->bRequest);
-
-    switch (setup->bRequest) {
-        case MTP_REQUEST_CANCEL:
-
-            break;
-        case MTP_REQUEST_GET_EXT_EVENT_DATA:
-
-            break;
-        case MTP_REQUEST_RESET:
-
-            break;
-        case MTP_REQUEST_GET_DEVICE_STATUS:
-
-            break;
-
-        default:
-            USB_LOG_WRN("Unhandled MTP Class bRequest 0x%02x\r\n", setup->bRequest);
-            return -1;
-    }
-
-    return 0;
-}
-
-static void usbd_mtp_send_response(uint32_t code)
-{
-    USB_LOG_DBG("Send response\r\n");
-
-    g_usbd_mtp.stage = MTP_WAIT_RESPONSE;
-
-    g_usbd_mtp.con_response.conlen = 12;
-    g_usbd_mtp.con_response.contype = MTP_CONTAINER_TYPE_RESPONSE;
-    g_usbd_mtp.con_response.code = code;
-    g_usbd_mtp.con_response.trans_id = g_usbd_mtp.con_command.trans_id;
-
-    usbd_ep_start_write(mtp_ep_data[MTP_IN_EP_IDX].ep_addr, (uint8_t *)&g_usbd_mtp.con_response, 12);
-}
-
-static void usbd_mtp_send_info(uint8_t *data, uint32_t len)
-{
-    USB_LOG_DBG("Send info\r\n");
-
-    g_usbd_mtp.stage = MTP_SEND_RESPONSE;
-
-    g_usbd_mtp.con_data.conlen = 12 + len;
-    g_usbd_mtp.con_data.contype = MTP_CONTAINER_TYPE_DATA;
-    g_usbd_mtp.con_data.code = MTP_RESPONSE_OK;
-    g_usbd_mtp.con_data.trans_id = g_usbd_mtp.con_command.trans_id;
-
-    memcpy(g_usbd_mtp.con_data.data, data, len);
-    usbd_ep_start_write(mtp_ep_data[MTP_IN_EP_IDX].ep_addr, (uint8_t *)&g_usbd_mtp.con_data, 12 + len);
-}
-
-static void usbd_mtp_get_device_info(void)
-{
-    struct mtp_device_info device_info;
-    uint16_t i;
-
-    device_info.StandardVersion = 100;
-    device_info.VendorExtensionID = 0x06;
-    device_info.VendorExtensionVersion = 100;
-    device_info.VendorExtensionDesc_len = (uint8_t)CONFIG_MTP_VEND_EXT_DESC_LEN;
-
-    for (i = 0; i < CONFIG_MTP_VEND_EXT_DESC_LEN; i++) {
-        device_info.VendorExtensionDesc[i] = VendExtDesc[i];
-    }
-
-    /* device supports one mode , standard mode */
-    device_info.FunctionalMode = 0x0000;
-
-    /* All supported operation */
-    device_info.OperationsSupported_len = CONFIG_MTP_SUPP_OP_LEN;
-    for (i = 0U; i < CONFIG_MTP_SUPP_OP_LEN; i++) {
-        device_info.OperationsSupported[i] = SuppOP[i];
-    }
-
-    /* event that are currently generated by the device*/
-    device_info.EventsSupported_len = CONFIG_MTP_SUPP_EVENTS_LEN;
-
-    for (i = 0U; i < CONFIG_MTP_SUPP_EVENTS_LEN; i++) {
-        device_info.EventsSupported[i] = SuppEvents[i];
-    }
-
-    device_info.DevicePropertiesSupported_len = CONFIG_MTP_SUPP_DEVICE_PROP_LEN;
-
-    for (i = 0U; i < CONFIG_MTP_SUPP_DEVICE_PROP_LEN; i++) {
-        device_info.DevicePropertiesSupported[i] = DevicePropSupp[i];
-    }
-
-    device_info.CaptureFormats_len = CONFIG_MTP_SUPP_CAPT_FORMAT_LEN;
-
-    for (i = 0U; i < CONFIG_MTP_SUPP_CAPT_FORMAT_LEN; i++) {
-        device_info.CaptureFormats[i] = SuppCaptFormat[i];
-    }
-
-    device_info.ImageFormats_len = CONFIG_MTP_SUPP_IMG_FORMAT_LEN; /* number of image formats that are supported by the device*/
-    for (i = 0U; i < CONFIG_MTP_SUPP_IMG_FORMAT_LEN; i++) {
-        device_info.ImageFormats[i] = SuppImgFormat[i];
-    }
-
-    device_info.Manufacturer_len = (uint8_t)CONFIG_MTP_MANUF_LEN;
-    for (i = 0U; i < CONFIG_MTP_MANUF_LEN; i++) {
-        device_info.Manufacturer[i] = Manuf[i];
-    }
-
-    device_info.Model_len = (uint8_t)CONFIG_MTP_MODEL_LEN;
-    for (i = 0U; i < CONFIG_MTP_MODEL_LEN; i++) {
-        device_info.Model[i] = Model[i];
-    }
-
-    device_info.DeviceVersion_len = (uint8_t)CONFIG_MTP_DEVICE_VERSION_LEN;
-    for (i = 0U; i < CONFIG_MTP_DEVICE_VERSION_LEN; i++) {
-        device_info.DeviceVersion[i] = DeviceVers[i];
-    }
-
-    device_info.SerialNumber_len = (uint8_t)CONFIG_MTP_SERIAL_NBR_LEN;
-    for (i = 0U; i < CONFIG_MTP_SERIAL_NBR_LEN; i++) {
-        device_info.SerialNumber[i] = SerialNbr[i];
-    }
-
-    usbd_mtp_send_info((uint8_t *)&device_info, sizeof(struct mtp_device_info));
-}
-
-static void usbd_mtp_open_session(void)
-{
-    usbd_mtp_send_response(MTP_RESPONSE_OK);
-}
-
-static void usbd_mtp_get_storage_ids(void)
-{
-    struct mtp_storage_id storage_id;
-
-    storage_id.StorageIDS_len = CONFIG_MTP_STORAGE_ID_LEN;
-    storage_id.StorageIDS[0] = MTP_STORAGE_ID;
-
-    usbd_mtp_send_info((uint8_t *)&storage_id, sizeof(struct mtp_storage_id));
-}
-
-static void usbd_mtp_get_storage_info(void)
-{
-    struct mtp_storage_info storage_info;
-
-    storage_info.StorageType = MTP_STORAGE_REMOVABLE_RAM;
-    storage_info.FilesystemType = MTP_FILESYSTEM_GENERIC_FLAT;
-    storage_info.AccessCapability = MTP_ACCESS_CAP_RW;
-    storage_info.MaxCapability = 0x0080DFA81A000000;    // todo
-    storage_info.FreeSpaceInBytes = 0x00007EEB0D000000; // todo
-    storage_info.FreeSpaceInObjects = 0xFFFFFFFFU;      /* not used */
-    storage_info.StorageDescription = 0U;
-    storage_info.VolumeLabel = 0U;
-
-    usbd_mtp_send_info((uint8_t *)&storage_info, sizeof(struct mtp_storage_info));
-}
-
-static void usbd_mtp_get_object_handles(void)
-{
-    struct mtp_object_handle object_handle;
-
-    // todo
-
-    usbd_mtp_send_info((uint8_t *)&object_handle, sizeof(struct mtp_object_handle));
-}
-
-static void usbd_mtp_get_object_info(void)
-{
-    struct mtp_object_info object_info;
-
-    object_info.Storage_id = MTP_STORAGE_ID;
-    object_info.ObjectFormat = 0;         // todo
-    object_info.ObjectCompressedSize = 0; //todo
-    object_info.ProtectionStatus = 0U;
-    object_info.ThumbFormat = MTP_OBJ_FORMAT_UNDEFINED;
-    object_info.ThumbCompressedSize = 0U;
-    object_info.ThumbPixWidth = 0U; /* not supported or not an image */
-    object_info.ThumbPixHeight = 0U;
-    object_info.ImagePixWidth = 0U;
-    object_info.ImagePixHeight = 0U;
-    object_info.ImageBitDepth = 0U;
-    object_info.ParentObject = 0; // todo
-    object_info.AssociationType = 0U;
-    object_info.AssociationDesc = 0U;
-    object_info.SequenceNumber = 0U;
-
-    /* we have to get this value before object_info.Filename */
-    object_info.Filename_len = sizeof(DefaultFileName);
-    memcpy(object_info.Filename, DefaultFileName, (uint32_t)object_info.Filename_len + 1U);
-
-    object_info.CaptureDate = 0U;
-    object_info.ModificationDate = 0U;
-    object_info.Keywords = 0U;
-
-    usbd_mtp_send_info((uint8_t *)&object_info, sizeof(struct mtp_object_info));
-}
-
-static void usbd_mtp_get_object_prop_desc(void)
-{
-    struct mtp_object_prop_desc object_prop_desc;
-
-    uint16_t undef_format = MTP_OBJ_FORMAT_UNDEFINED;
-    uint32_t storageid = MTP_STORAGE_ID;
-
-    switch (g_usbd_mtp.con_command.param1) /* switch obj prop code */
-    {
-        case MTP_OB_PROP_OBJECT_FORMAT:
-            object_prop_desc.ObjectPropertyCode = (uint16_t)(g_usbd_mtp.con_command.param1);
-            object_prop_desc.DataType = MTP_DATATYPE_UINT16;
-            object_prop_desc.GetSet = MTP_PROP_GET;
-            object_prop_desc.DefValue = (uint8_t *)&undef_format;
-            object_prop_desc.GroupCode = 0U;
-            object_prop_desc.FormFlag = 0U;
-            break;
-
-        case MTP_OB_PROP_STORAGE_ID:
-            object_prop_desc.ObjectPropertyCode = (uint16_t)(g_usbd_mtp.con_command.param1);
-            object_prop_desc.DataType = MTP_DATATYPE_UINT32;
-            object_prop_desc.GetSet = MTP_PROP_GET;
-            object_prop_desc.DefValue = (uint8_t *)&storageid;
-            object_prop_desc.GroupCode = 0U;
-            object_prop_desc.FormFlag = 0U;
-            break;
-
-        case MTP_OB_PROP_OBJ_FILE_NAME:
-            object_prop_desc.ObjectPropertyCode = (uint16_t)(g_usbd_mtp.con_command.param1);
-            object_prop_desc.DataType = MTP_DATATYPE_STR;
-            object_prop_desc.GetSet = MTP_PROP_GET;
-            object_prop_desc.DefValue = 0U;
-            object_prop_desc.GroupCode = 0U;
-            object_prop_desc.FormFlag = 0U;
-            break;
-
-        case MTP_OB_PROP_PARENT_OBJECT:
-            object_prop_desc.ObjectPropertyCode = (uint16_t)(g_usbd_mtp.con_command.param1);
-            object_prop_desc.DataType = MTP_DATATYPE_STR;
-            object_prop_desc.GetSet = MTP_PROP_GET;
-            object_prop_desc.DefValue = 0U;
-            object_prop_desc.GroupCode = 0U;
-            object_prop_desc.FormFlag = 0U;
-            break;
-
-        case MTP_OB_PROP_OBJECT_SIZE:
-            object_prop_desc.ObjectPropertyCode = (uint16_t)(g_usbd_mtp.con_command.param1);
-            object_prop_desc.DataType = MTP_DATATYPE_UINT64;
-            object_prop_desc.GetSet = MTP_PROP_GET;
-            object_prop_desc.DefValue = 0U;
-            object_prop_desc.GroupCode = 0U;
-            object_prop_desc.FormFlag = 0U;
-            break;
-
-        case MTP_OB_PROP_NAME:
-            object_prop_desc.ObjectPropertyCode = (uint16_t)(g_usbd_mtp.con_command.param1);
-            object_prop_desc.DataType = MTP_DATATYPE_STR;
-            object_prop_desc.GetSet = MTP_PROP_GET;
-            object_prop_desc.DefValue = NULL;
-            object_prop_desc.GroupCode = 0U;
-            object_prop_desc.FormFlag = 0U;
-            break;
-
-        case MTP_OB_PROP_PERS_UNIQ_OBJ_IDEN:
-            object_prop_desc.ObjectPropertyCode = (uint16_t)(g_usbd_mtp.con_command.param1);
-            object_prop_desc.DataType = MTP_DATATYPE_UINT128;
-            object_prop_desc.GetSet = MTP_PROP_GET;
-            object_prop_desc.DefValue = 0U;
-            object_prop_desc.GroupCode = 0U;
-            object_prop_desc.FormFlag = 0U;
-            break;
-
-        case MTP_OB_PROP_PROTECTION_STATUS:
-            object_prop_desc.ObjectPropertyCode = (uint16_t)(g_usbd_mtp.con_command.param1);
-            object_prop_desc.DataType = MTP_DATATYPE_UINT16;
-            object_prop_desc.GetSet = MTP_PROP_GET_SET;
-            object_prop_desc.DefValue = 0U;
-            object_prop_desc.GroupCode = 0U;
-            object_prop_desc.FormFlag = 0U;
-            break;
-
-        default:
-            break;
-    }
-    // todo
-    usbd_mtp_send_info((uint8_t *)&object_prop_desc, sizeof(struct mtp_object_prop_desc));
-}
-
-static void usbd_mtp_get_object_props_supported(void)
-{
-    struct mtp_object_props_support object_props_support;
-    uint32_t i;
-
-    object_props_support.ObjectPropCode_len = CONFIG_MTP_SUPP_OBJ_PROP_LEN;
-
-    for (i = 0U; i < CONFIG_MTP_SUPP_OBJ_PROP_LEN; i++) {
-        object_props_support.ObjectPropCode[i] = ObjectPropCode[i];
-    }
-    usbd_mtp_send_info((uint8_t *)&object_props_support, sizeof(struct mtp_object_props_support));
-}
-
-static void usbd_mtp_get_object_prop_list(void)
-{
-    struct mtp_object_prop_list object_prop_list;
-
-    uint16_t filename[255];
-    uint32_t storageid = MTP_STORAGE_ID;
-    uint32_t default_val = 0U;
-    uint32_t i;
-    uint16_t format;
-    uint64_t objsize;
-    uint32_t parent_proval;
-
-    object_prop_list.Properties_len = CONFIG_MTP_SUPP_OBJ_PROP_LEN;
-
-    for (i = 0U; i < CONFIG_MTP_SUPP_OBJ_PROP_LEN; i++) {
-        object_prop_list.Properties[i].ObjectHandle = g_usbd_mtp.con_command.param1;
-
-        switch (ObjectPropCode[i]) {
-            case MTP_OB_PROP_STORAGE_ID:
-                object_prop_list.Properties[i].PropertyCode = MTP_OB_PROP_STORAGE_ID;
-                object_prop_list.Properties[i].Datatype = MTP_DATATYPE_UINT32;
-                object_prop_list.Properties[i].propval = (uint8_t *)&storageid;
-                break;
-
-            case MTP_OB_PROP_OBJECT_FORMAT:
-                object_prop_list.Properties[i].PropertyCode = MTP_OB_PROP_OBJECT_FORMAT;
-                object_prop_list.Properties[i].Datatype = MTP_DATATYPE_UINT16;
-                object_prop_list.Properties[i].propval = (uint8_t *)&format;
-                break;
-
-            case MTP_OB_PROP_OBJ_FILE_NAME:
-                object_prop_list.Properties[i].PropertyCode = MTP_OB_PROP_OBJ_FILE_NAME;
-                object_prop_list.Properties[i].Datatype = MTP_DATATYPE_STR;
-                object_prop_list.Properties[i].propval = NULL;
-                break;
-
-            case MTP_OB_PROP_PARENT_OBJECT:
-                object_prop_list.Properties[i].PropertyCode = MTP_OB_PROP_PARENT_OBJECT;
-                object_prop_list.Properties[i].Datatype = MTP_DATATYPE_UINT32;
-                object_prop_list.Properties[i].propval = (uint8_t *)&parent_proval;
-                break;
-
-            case MTP_OB_PROP_OBJECT_SIZE:
-                object_prop_list.Properties[i].PropertyCode = MTP_OB_PROP_OBJECT_SIZE;
-                object_prop_list.Properties[i].Datatype = MTP_DATATYPE_UINT64;
-                object_prop_list.Properties[i].propval = (uint8_t *)&objsize;
-                break;
-
-            case MTP_OB_PROP_NAME:
-                object_prop_list.Properties[i].PropertyCode = MTP_OB_PROP_NAME;
-                object_prop_list.Properties[i].Datatype = MTP_DATATYPE_STR;
-                object_prop_list.Properties[i].propval = NULL;
-                break;
-
-            case MTP_OB_PROP_PERS_UNIQ_OBJ_IDEN:
-                object_prop_list.Properties[i].PropertyCode = MTP_OB_PROP_PERS_UNIQ_OBJ_IDEN;
-                object_prop_list.Properties[i].Datatype = MTP_DATATYPE_UINT128;
-                object_prop_list.Properties[i].propval = (uint8_t *)&g_usbd_mtp.con_command.param1;
-                break;
-
-            case MTP_OB_PROP_PROTECTION_STATUS:
-                object_prop_list.Properties[i].PropertyCode = MTP_OB_PROP_PROTECTION_STATUS;
-                object_prop_list.Properties[i].Datatype = MTP_DATATYPE_UINT16;
-                object_prop_list.Properties[i].propval = (uint8_t *)&default_val;
-                break;
-
-            default:
-                break;
-        }
-    }
-    // todo
-    usbd_mtp_send_info((uint8_t *)&object_prop_list, sizeof(struct mtp_object_prop_list));
-}
-
-static void usbd_mtp_get_device_prop_desc(void)
-{
-    struct mtp_device_prop_desc device_prop_desc;
-    uint32_t i;
-
-    device_prop_desc.DevicePropertyCode = MTP_DEV_PROP_DEVICE_FRIENDLY_NAME;
-    device_prop_desc.DataType = MTP_DATATYPE_STR;
-    device_prop_desc.GetSet = MTP_PROP_GET_SET;
-    device_prop_desc.DefaultValue_len = CONFIG_MTP_DEVICE_PROP_DESC_DEF_LEN;
-
-    for (i = 0U; i < (sizeof(DevicePropDefVal) / 2U); i++) {
-        device_prop_desc.DefaultValue[i] = DevicePropDefVal[i];
-    }
-
-    device_prop_desc.CurrentValue_len = CONFIG_MTP_DEVICE_PROP_DESC_CUR_LEN;
-
-    for (i = 0U; i < (sizeof(DevicePropCurDefVal) / 2U); i++) {
-        device_prop_desc.CurrentValue[i] = DevicePropCurDefVal[i];
-    }
-
-    device_prop_desc.FormFlag = 0U;
-
-    usbd_mtp_send_info((uint8_t *)&device_prop_desc, sizeof(struct mtp_device_prop_desc));
-}
-
-static int usbd_mtp_decode_command(struct mtp_container_command *command)
-{
-    printf("code:%04x\r\n", command->code);
-    switch (command->code) {
-        case MTP_OP_GET_DEVICE_INFO:
-            usbd_mtp_get_device_info();
-            break;
-        case MTP_OP_OPEN_SESSION:
-            usbd_mtp_open_session();
-            break;
-        case MTP_OP_CLOSE_SESSION:
-            break;
-        case MTP_OP_GET_STORAGE_IDS:
-            usbd_mtp_get_storage_ids();
-            break;
-        case MTP_OP_GET_STORAGE_INFO:
-            usbd_mtp_get_storage_info();
-            break;
-        case MTP_OP_GET_OBJECT_HANDLES:
-            usbd_mtp_get_object_handles();
-            break;
-        case MTP_OP_GET_OBJECT_INFO:
-            usbd_mtp_get_object_info();
-            break;
-        case MTP_OP_GET_OBJECT_PROP_REFERENCES:
-            break;
-        case MTP_OP_GET_OBJECT_PROPS_SUPPORTED:
-            usbd_mtp_get_object_props_supported();
-            break;
-        case MTP_OP_GET_OBJECT_PROP_DESC:
-            usbd_mtp_get_object_prop_desc();
-            break;
-        case MTP_OP_GET_OBJECT_PROPLIST:
-            usbd_mtp_get_object_prop_list();
-            break;
-        case MTP_OP_GET_OBJECT_PROP_VALUE:
-            break;
-        case MTP_OP_GET_DEVICE_PROP_DESC:
-            usbd_mtp_get_device_prop_desc();
-            break;
-        case MTP_OP_GET_OBJECT:
-            break;
-        case MTP_OP_SEND_OBJECT_INFO:
-            break;
-        case MTP_OP_SEND_OBJECT:
-            break;
-        case MTP_OP_DELETE_OBJECT:
-            break;
-
-        default:
-            break;
-    }
-    return 0;
-}
-
-static void usbd_mtp_bulk_out(uint8_t ep, uint32_t nbytes)
-{
-    switch (g_usbd_mtp.stage) {
-        case MTP_READ_COMMAND:
-            usbd_mtp_decode_command(&g_usbd_mtp.con_command);
-            break;
-        case MTP_DATA_OUT:
-            break;
-        default:
-            break;
-    }
-}
-
-static void usbd_mtp_bulk_in(uint8_t ep, uint32_t nbytes)
-{
-    printf("send:%d\r\n", nbytes);
-    switch (g_usbd_mtp.stage) {
-        case MTP_DATA_IN:
-            break;
-        case MTP_SEND_RESPONSE:
-            usbd_mtp_send_response(MTP_RESPONSE_OK);
-            break;
-        case MTP_WAIT_RESPONSE:
-            USB_LOG_DBG("Start reading command\r\n");
-            g_usbd_mtp.stage = MTP_READ_COMMAND;
-            usbd_ep_start_read(mtp_ep_data[MTP_OUT_EP_IDX].ep_addr, (uint8_t *)&g_usbd_mtp.con_command, MTP_BULK_EP_MPS);
-            break;
-
-        default:
-            break;
-    }
-}
-
-static void mtp_notify_handler(uint8_t event, void *arg)
-{
-    switch (event) {
-        case USBD_EVENT_RESET:
-            break;
-        case USBD_EVENT_CONFIGURED:
-            USB_LOG_DBG("Start reading command\r\n");
-            g_usbd_mtp.stage = MTP_READ_COMMAND;
-            usbd_ep_start_read(mtp_ep_data[MTP_OUT_EP_IDX].ep_addr, (uint8_t *)&g_usbd_mtp.con_command, MTP_BULK_EP_MPS);
-            break;
-
-        default:
-            break;
-    }
-}
-
-struct usbd_interface *usbd_mtp_init_intf(struct usbd_interface *intf,
-                                          const uint8_t out_ep,
-                                          const uint8_t in_ep,
-                                          const uint8_t int_ep)
-{
-    intf->class_interface_handler = mtp_class_interface_request_handler;
-    intf->class_endpoint_handler = NULL;
-    intf->vendor_handler = NULL;
-    intf->notify_handler = mtp_notify_handler;
-
-    mtp_ep_data[MTP_OUT_EP_IDX].ep_addr = out_ep;
-    mtp_ep_data[MTP_OUT_EP_IDX].ep_cb = usbd_mtp_bulk_out;
-    mtp_ep_data[MTP_IN_EP_IDX].ep_addr = in_ep;
-    mtp_ep_data[MTP_IN_EP_IDX].ep_cb = usbd_mtp_bulk_in;
-    mtp_ep_data[MTP_INT_EP_IDX].ep_addr = int_ep;
-    mtp_ep_data[MTP_INT_EP_IDX].ep_cb = NULL;
-
-    usbd_add_endpoint(&mtp_ep_data[MTP_OUT_EP_IDX]);
-    usbd_add_endpoint(&mtp_ep_data[MTP_IN_EP_IDX]);
-    usbd_add_endpoint(&mtp_ep_data[MTP_INT_EP_IDX]);
-
-    return intf;
-}

+ 0 - 24
class/mtp/usbd_mtp.h

@@ -1,24 +0,0 @@
-/*
- * Copyright (c) 2022, sakumisu
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-#ifndef USBD_MTP_H
-#define USBD_MTP_H
-
-#include "usb_mtp.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-struct usbd_interface *usbd_mtp_init_intf(struct usbd_interface *intf,
-                                          const uint8_t out_ep,
-                                          const uint8_t in_ep,
-                                          const uint8_t int_ep);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* USBD_MTP_H */

+ 0 - 179
class/mtp/usbd_mtp_config.h

@@ -1,179 +0,0 @@
-/*
- * Copyright (c) 2022, sakumisu
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-#ifndef USB_MTP_CONFIG_H
-#define USB_MTP_CONFIG_H
-
-#include "usb_mtp.h"
-
-static const uint16_t VendExtDesc[] = { 'm', 'i', 'c', 'r', 'o', 's', 'o', 'f', 't', '.', 'c', 'o', 'm', ':', ' ', '1', '.', '0', ';', ' ', 0 }; /* last 2 bytes must be 0*/
-
-static const uint16_t SuppOP[] = { MTP_OP_GET_DEVICE_INFO, MTP_OP_OPEN_SESSION, MTP_OP_CLOSE_SESSION,
-                                   MTP_OP_GET_STORAGE_IDS, MTP_OP_GET_STORAGE_INFO, MTP_OP_GET_NUM_OBJECTS,
-                                   MTP_OP_GET_OBJECT_HANDLES, MTP_OP_GET_OBJECT_INFO, MTP_OP_GET_OBJECT,
-                                   MTP_OP_DELETE_OBJECT, MTP_OP_SEND_OBJECT_INFO, MTP_OP_SEND_OBJECT,
-                                   MTP_OP_GET_DEVICE_PROP_DESC, MTP_OP_GET_DEVICE_PROP_VALUE,
-                                   MTP_OP_SET_OBJECT_PROP_VALUE, MTP_OP_GET_OBJECT_PROP_VALUE,
-                                   MTP_OP_GET_OBJECT_PROPS_SUPPORTED, MTP_OP_GET_OBJECT_PROPLIST,
-                                   MTP_OP_GET_OBJECT_PROP_DESC, MTP_OP_GET_OBJECT_PROP_REFERENCES };
-
-static const uint16_t SuppEvents[] = { MTP_EVENT_OBJECTADDED };
-
-static const uint16_t DevicePropSupp[] = { MTP_DEV_PROP_DEVICE_FRIENDLY_NAME, MTP_DEV_PROP_BATTERY_LEVEL };
-
-static const uint16_t SuppCaptFormat[] = { MTP_OBJ_FORMAT_UNDEFINED, MTP_OBJ_FORMAT_ASSOCIATION, MTP_OBJ_FORMAT_TEXT };
-
-static const uint16_t SuppImgFormat[] = { MTP_OBJ_FORMAT_UNDEFINED, MTP_OBJ_FORMAT_TEXT, MTP_OBJ_FORMAT_ASSOCIATION,
-                                          MTP_OBJ_FORMAT_EXECUTABLE, MTP_OBJ_FORMAT_WAV, MTP_OBJ_FORMAT_MP3,
-                                          MTP_OBJ_FORMAT_EXIF_JPEG, MTP_OBJ_FORMAT_MPEG, MTP_OBJ_FORMAT_MP4_CONTAINER,
-                                          MTP_OBJ_FORMAT_WINDOWS_IMAGE_FORMAT, MTP_OBJ_FORMAT_PNG, MTP_OBJ_FORMAT_WMA,
-                                          MTP_OBJ_FORMAT_WMV };
-
-static const uint16_t Manuf[] = { 'C', 'h', 'e', 'r', 'r', 'y', 'U', 'S', 'B', 0 }; /* last 2 bytes must be 0*/
-static const uint16_t Model[] = { 'C', 'h', 'e', 'r', 'r', 'y', 'U', 'S', 'B', 0 }; /* last 2 bytes must be 0*/
-static const uint16_t DeviceVers[] = { 'V', '1', '.', '0', '0', 0 };                /* last 2 bytes must be 0*/
-/*SerialNbr shall be 32 character hexadecimal string for legacy compatibility reasons */
-static const uint16_t SerialNbr[] = { '0', '0', '0', '0', '1', '0', '0', '0', '0', '1', '0', '0', '0', '0',
-                                      '1', '0', '0', '0', '0', '1', '0', '0', '0', '0', '1', '0', '0', '0',
-                                      '0', '1', '0', '0', 0 }; /* last 2 bytes must be 0*/
-
-static const uint16_t DefaultFileName[] = { 'N', 'e', 'w', ' ', 'F', 'o', 'l', 'd', 'e', 'r', 0 };
-
-static const uint16_t DevicePropDefVal[] = { 'C', 'h', 'e', 'r', 'r', 'y', 'U', 'S', 'B', 0 }; /* last 2 bytes must be 0*/
-static const uint16_t DevicePropCurDefVal[] = { 'C', 'h', 'e', 'r', 'r', 'y', 'U', 'S', 'B', 0 };
-
-/* required for all object format : storageID, objectFormat, ObjectCompressedSize,
-persistent unique object identifier, name*/
-static const uint16_t ObjectPropCode[] = { MTP_OB_PROP_STORAGE_ID, MTP_OB_PROP_OBJECT_FORMAT, MTP_OB_PROP_OBJECT_SIZE,
-                                           MTP_OB_PROP_OBJ_FILE_NAME, MTP_OB_PROP_PARENT_OBJECT, MTP_OB_PROP_NAME,
-                                           MTP_OB_PROP_PERS_UNIQ_OBJ_IDEN, MTP_OB_PROP_PROTECTION_STATUS };
-
-#define MTP_STORAGE_ID 0x00010001U /* SD card is inserted*/
-
-#define CONFIG_MTP_VEND_EXT_DESC_LEN        (sizeof(VendExtDesc) / 2U)
-#define CONFIG_MTP_SUPP_OP_LEN              (sizeof(SuppOP) / 2U)
-#define CONFIG_MTP_SUPP_EVENTS_LEN          (sizeof(SuppEvents) / 2U)
-#define CONFIG_MTP_SUPP_DEVICE_PROP_LEN     (sizeof(DevicePropSupp) / 2U)
-#define CONFIG_MTP_SUPP_CAPT_FORMAT_LEN     (sizeof(SuppCaptFormat) / 2U)
-#define CONFIG_MTP_SUPP_IMG_FORMAT_LEN      (sizeof(SuppImgFormat) / 2U)
-#define CONFIG_MTP_MANUF_LEN                (sizeof(Manuf) / 2U)
-#define CONFIG_MTP_MODEL_LEN                (sizeof(Model) / 2U)
-#define CONFIG_MTP_DEVICE_VERSION_LEN       (sizeof(DeviceVers) / 2U)
-#define CONFIG_MTP_SERIAL_NBR_LEN           (sizeof(SerialNbr) / 2U)
-#define CONFIG_MTP_SUPP_OBJ_PROP_LEN        (sizeof(ObjectPropCode) / 2U)
-#define CONFIG_MTP_DEVICE_PROP_DESC_DEF_LEN (sizeof(DevicePropDefVal) / 2U)
-#define CONFIG_MTP_DEVICE_PROP_DESC_CUR_LEN (sizeof(DevicePropCurDefVal) / 2U)
-#define CONFIG_MTP_STORAGE_ID_LEN           1
-#define CONFIG_MTP_OBJECT_HANDLE_LEN        100
-
-struct mtp_device_info {
-    uint16_t StandardVersion;
-    uint32_t VendorExtensionID;
-    uint16_t VendorExtensionVersion;
-    uint8_t VendorExtensionDesc_len;
-    uint16_t VendorExtensionDesc[CONFIG_MTP_VEND_EXT_DESC_LEN];
-    uint16_t FunctionalMode;
-    uint32_t OperationsSupported_len;
-    uint16_t OperationsSupported[CONFIG_MTP_SUPP_OP_LEN];
-    uint32_t EventsSupported_len;
-    uint16_t EventsSupported[CONFIG_MTP_SUPP_EVENTS_LEN];
-    uint32_t DevicePropertiesSupported_len;
-    uint16_t DevicePropertiesSupported[CONFIG_MTP_SUPP_DEVICE_PROP_LEN];
-    uint32_t CaptureFormats_len;
-    uint16_t CaptureFormats[CONFIG_MTP_SUPP_CAPT_FORMAT_LEN];
-    uint32_t ImageFormats_len;
-    uint16_t ImageFormats[CONFIG_MTP_SUPP_IMG_FORMAT_LEN];
-    uint8_t Manufacturer_len;
-    uint16_t Manufacturer[CONFIG_MTP_MANUF_LEN];
-    uint8_t Model_len;
-    uint16_t Model[CONFIG_MTP_MODEL_LEN];
-    uint8_t DeviceVersion_len;
-    uint16_t DeviceVersion[CONFIG_MTP_DEVICE_VERSION_LEN];
-    uint8_t SerialNumber_len;
-    uint16_t SerialNumber[CONFIG_MTP_SERIAL_NBR_LEN];
-} __PACKED;
-
-struct mtp_object_props_support {
-    uint32_t ObjectPropCode_len;
-    uint16_t ObjectPropCode[CONFIG_MTP_SUPP_OBJ_PROP_LEN];
-} __PACKED;
-
-struct mtp_device_prop_desc {
-    uint16_t DevicePropertyCode;
-    uint16_t DataType;
-    uint8_t GetSet;
-    uint8_t DefaultValue_len;
-    uint16_t DefaultValue[CONFIG_MTP_DEVICE_PROP_DESC_DEF_LEN];
-    uint8_t CurrentValue_len;
-    uint16_t CurrentValue[CONFIG_MTP_DEVICE_PROP_DESC_CUR_LEN];
-    uint8_t FormFlag;
-} __PACKED;
-
-struct mtp_storage_id {
-    uint32_t StorageIDS_len;
-    uint32_t StorageIDS[CONFIG_MTP_STORAGE_ID_LEN];
-} __PACKED;
-
-struct mtp_storage_info {
-    uint16_t StorageType;
-    uint16_t FilesystemType;
-    uint16_t AccessCapability;
-    uint64_t MaxCapability;
-    uint64_t FreeSpaceInBytes;
-    uint32_t FreeSpaceInObjects;
-    uint8_t StorageDescription;
-    uint8_t VolumeLabel;
-} __PACKED;
-
-struct mtp_object_handle {
-    uint32_t ObjectHandle_len;
-    uint32_t ObjectHandle[CONFIG_MTP_OBJECT_HANDLE_LEN];
-} __PACKED;
-
-struct mtp_object_info {
-    uint32_t Storage_id;
-    uint16_t ObjectFormat;
-    uint16_t ProtectionStatus;
-    uint32_t ObjectCompressedSize;
-    uint16_t ThumbFormat;
-    uint32_t ThumbCompressedSize;
-    uint32_t ThumbPixWidth;
-    uint32_t ThumbPixHeight;
-    uint32_t ImagePixWidth;
-    uint32_t ImagePixHeight;
-    uint32_t ImageBitDepth;
-    uint32_t ParentObject;
-    uint16_t AssociationType;
-    uint32_t AssociationDesc;
-    uint32_t SequenceNumber;
-    uint8_t Filename_len;
-    uint16_t Filename[255];
-    uint32_t CaptureDate;
-    uint32_t ModificationDate;
-    uint8_t Keywords;
-} __PACKED;
-
-struct mtp_object_prop_desc {
-    uint16_t ObjectPropertyCode;
-    uint16_t DataType;
-    uint8_t GetSet;
-    uint8_t *DefValue;
-    uint32_t GroupCode;
-    uint8_t FormFlag;
-} __PACKED;
-
-struct mtp_object_prop_element {
-    uint32_t ObjectHandle;
-    uint16_t PropertyCode;
-    uint16_t Datatype;
-    uint8_t *propval;
-} __PACKED;
-
-struct mtp_object_prop_list {
-    uint32_t Properties_len;
-    struct mtp_object_prop_element Properties[CONFIG_MTP_SUPP_OBJ_PROP_LEN];
-} __PACKED;
-
-#endif /* USB_MTP_CONFIG_H */

+ 0 - 90
class/mtp/usbh_mtp.c

@@ -1,90 +0,0 @@
-/*
- * Copyright (c) 2022, sakumisu
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-#include "usbh_core.h"
-#include "usbh_mtp.h"
-
-#define DEV_FORMAT "/dev/mtp"
-
-static int usbh_mtp_connect(struct usbh_hubport *hport, uint8_t intf)
-{
-    struct usbh_endpoint_cfg ep_cfg = { 0 };
-    struct usb_endpoint_descriptor *ep_desc;
-    int ret;
-
-    struct usbh_mtp *mtp_class = usb_malloc(sizeof(struct usbh_mtp));
-    if (mtp_class == NULL) {
-        USB_LOG_ERR("Fail to alloc mtp_class\r\n");
-        return -ENOMEM;
-    }
-
-    memset(mtp_class, 0, sizeof(struct usbh_mtp));
-    mtp_class->hport = hport;
-    mtp_class->intf = intf;
-
-    hport->config.intf[intf].priv = mtp_class;
-
-#ifdef CONFIG_USBHOST_MTP_NOTIFY
-    ep_desc = &hport->config.intf[intf].altsetting[0].ep[0].ep_desc;
-    usbh_hport_activate_epx(&mtp_class->intin, hport, ep_desc);
-#endif
-    for (uint8_t i = 0; i < hport->config.intf[intf + 1].altsetting[0].intf_desc.bNumEndpoints; i++) {
-        ep_desc = &hport->config.intf[intf + 1].altsetting[0].ep[i].ep_desc;
-
-        if (ep_desc->bEndpointAddress & 0x80) {
-            usbh_hport_activate_epx(&mtp_class->bulkin, hport, ep_desc);
-        } else {
-            usbh_hport_activate_epx(&mtp_class->bulkout, hport, ep_desc);
-        }
-    }
-
-    strncpy(hport->config.intf[intf].devname, DEV_FORMAT, CONFIG_USBHOST_DEV_NAMELEN);
-
-    USB_LOG_INFO("Register MTP Class:%s\r\n", hport->config.intf[intf].devname);
-
-    return ret;
-}
-
-static int usbh_mtp_disconnect(struct usbh_hubport *hport, uint8_t intf)
-{
-    int ret = 0;
-
-    struct usbh_mtp *mtp_class = (struct usbh_mtp *)hport->config.intf[intf].priv;
-
-    if (mtp_class) {
-        if (mtp_class->bulkin) {
-            usbh_pipe_free(mtp_class->bulkin);
-        }
-
-        if (mtp_class->bulkout) {
-            usbh_pipe_free(mtp_class->bulkout);
-        }
-
-        if (hport->config.intf[intf].devname[0] != '\0') {
-            USB_LOG_INFO("Unregister MTP Class:%s\r\n", hport->config.intf[intf].devname);
-        }
-
-        memset(mtp_class, 0, sizeof(struct usbh_mtp));
-        usb_free(mtp_class);
-    }
-
-    return ret;
-}
-
-static const struct usbh_class_driver mtp_class_driver = {
-    .driver_name = "mtp",
-    .connect = usbh_mtp_connect,
-    .disconnect = usbh_mtp_disconnect
-};
-
-CLASS_INFO_DEFINE const struct usbh_class_info mtp_class_info = {
-    .match_flags = USB_CLASS_MATCH_INTF_CLASS | USB_CLASS_MATCH_INTF_SUBCLASS | USB_CLASS_MATCH_INTF_PROTOCOL,
-    .class = USB_MTP_CLASS,
-    .subclass = USB_MTP_SUB_CLASS,
-    .protocol = USB_MTP_PROTOCOL,
-    .vid = 0x00,
-    .pid = 0x00,
-    .class_driver = &mtp_class_driver
-};

+ 0 - 30
class/mtp/usbh_mtp.h

@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2022, sakumisu
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-#ifndef USBH_MTP_H
-#define USBH_MTP_H
-
-#include "usb_mtp.h"
-
-struct usbh_mtp {
-    struct usbh_hubport *hport;
-
-    uint8_t intf;          /* interface number */
-    usbh_pipe_t bulkin;  /* BULK IN endpoint */
-    usbh_pipe_t bulkout; /* BULK OUT endpoint */
-#ifdef CONFIG_USBHOST_MTP_NOTIFY
-    usbh_pipe_t intin; /* Interrupt IN endpoint (optional) */
-#endif
-};
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* USBH_MTP_H */

+ 0 - 19
class/printer/usb_printer.h

@@ -1,19 +0,0 @@
-/*
- * Copyright (c) 2022, sakumisu
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-#ifndef USB_PRINTER_H
-#define USB_PRINTER_H
-
-#define PRINTER_SUBCLASS 0x01U
-
-#define PRINTER_REQUEST_GET_DEVICE_ID   0x00U
-#define PRINTER_REQUEST_GET_PORT_SATTUS 0x01U
-#define PRINTER_REQUEST_SOFT_RESET      0x02U
-
-#define PRINTER_STATUS_NO_ERROR    0x00U
-#define PRINTER_STATUS_SELECTED    0x08U
-#define PRINTER_STATUS_PAPER_EMPTY 0x10U
-
-#endif /* USB_PRINTER_H */

+ 0 - 61
class/printer/usbd_printer.c

@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2022, sakumisu
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-#include "usbd_core.h"
-#include "usbd_printer.h"
-
-struct usbd_printer_priv {
-    const uint8_t *device_id;
-    uint8_t device_id_len;
-    uint8_t port_status;
-} g_usbd_printer;
-
-static int printer_class_interface_request_handler(struct usb_setup_packet *setup, uint8_t **data, uint32_t *len)
-{
-    USB_LOG_DBG("Printer Class request: "
-                "bRequest 0x%02x\r\n",
-                setup->bRequest);
-
-    switch (setup->bRequest) {
-        case PRINTER_REQUEST_GET_DEVICE_ID:
-            memcpy(*data, g_usbd_printer.device_id, g_usbd_printer.device_id_len);
-            *len = g_usbd_printer.device_id_len;
-            break;
-        case PRINTER_REQUEST_GET_PORT_SATTUS:
-
-            break;
-        case PRINTER_REQUEST_SOFT_RESET:
-
-            break;
-        default:
-            USB_LOG_WRN("Unhandled Printer Class bRequest 0x%02x\r\n", setup->bRequest);
-            return -1;
-    }
-
-    return 0;
-}
-
-static void printer_notify_handler(uint8_t event, void *arg)
-{
-    switch (event) {
-        case USBD_EVENT_RESET:
-            break;
-
-        default:
-            break;
-    }
-}
-
-struct usbd_interface *usbd_printer_init_intf(struct usbd_interface *intf, const uint8_t *device_id, uint8_t device_id_len)
-{
-    intf->class_interface_handler = printer_class_interface_request_handler;
-    intf->class_endpoint_handler = NULL;
-    intf->vendor_handler = NULL;
-    intf->notify_handler = printer_notify_handler;
-
-    g_usbd_printer.device_id = device_id;
-    g_usbd_printer.device_id_len = device_id_len;
-    return intf;
-}

+ 0 - 22
class/printer/usbd_printer.h

@@ -1,22 +0,0 @@
-/*
- * Copyright (c) 2022, sakumisu
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-#ifndef USBD_PRINTER_H
-#define USBD_PRINTER_H
-
-#include "usb_printer.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* Init printer interface driver */
-struct usbd_interface *usbd_printer_init_intf(struct usbd_interface *intf, const uint8_t *device_id, uint8_t device_id_len);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* USBD_PRINTER_H */

+ 0 - 156
class/printer/usbh_printer.c

@@ -1,156 +0,0 @@
-/*
- * Copyright (c) 2022, sakumisu
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-#include "usbh_core.h"
-#include "usbh_printer.h"
-
-#define DEV_FORMAT "/dev/printer"
-
-static struct usbh_printer g_printer_class[CONFIG_USBHOST_MAX_PRINTER_CLASS];
-static uint32_t g_devinuse = 0;
-
-static struct usbh_printer *usbh_printer_class_alloc(void)
-{
-    int devno;
-
-    for (devno = 0; devno < CONFIG_USBHOST_MAX_PRINTER_CLASS; devno++) {
-        if ((g_devinuse & (1 << devno)) == 0) {
-            g_devinuse |= (1 << devno);
-            memset(&g_printer_class[devno], 0, sizeof(struct usbh_printer));
-            g_printer_class[devno].minor = devno;
-            return &g_printer_class[devno];
-        }
-    }
-    return NULL;
-}
-
-static void usbh_printer_class_free(struct usbh_printer *printer_class)
-{
-    int devno = printer_class->minor;
-
-    if (devno >= 0 && devno < 32) {
-        g_devinuse &= ~(1 << devno);
-    }
-    memset(printer_class, 0, sizeof(struct usbh_printer));
-}
-
-static int usbh_printer_get_device_id(struct usbh_printer *printer_class, uint8_t *buffer)
-{
-    struct usb_setup_packet *setup = &printer_class->hport->setup;
-    int ret;
-
-    setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE;
-    setup->bRequest = PRINTER_REQUEST_GET_DEVICE_ID;
-    setup->wValue = 0;
-    setup->wIndex = printer_class->intf;
-    setup->wLength = 256;
-
-    return usbh_control_transfer(printer_class->hport->ep0, setup, buffer);
-}
-
-static int usbh_printer_get_port_status(struct usbh_printer *printer_class, uint8_t *buffer)
-{
-    struct usb_setup_packet *setup = &printer_class->hport->setup;
-    int ret;
-
-    setup->bmRequestType = USB_REQUEST_DIR_IN | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE;
-    setup->bRequest = PRINTER_REQUEST_GET_PORT_SATTUS;
-    setup->wValue = 0;
-    setup->wIndex = printer_class->intf;
-    setup->wLength = 1;
-
-    return usbh_control_transfer(printer_class->hport->ep0, setup, buffer);
-}
-
-static int usbh_printer_soft_reset(struct usbh_printer *printer_class)
-{
-    struct usb_setup_packet *setup = &printer_class->hport->setup;
-    int ret;
-
-    setup->bmRequestType = USB_REQUEST_DIR_OUT | USB_REQUEST_CLASS | USB_REQUEST_RECIPIENT_INTERFACE;
-    setup->bRequest = PRINTER_REQUEST_SOFT_RESET;
-    setup->wValue = 0;
-    setup->wIndex = printer_class->intf;
-    setup->wLength = 0;
-
-    return usbh_control_transfer(printer_class->hport->ep0, setup, NULL);
-}
-
-static int usbh_printer_connect(struct usbh_hubport *hport, uint8_t intf)
-{
-    struct usbh_endpoint_cfg ep_cfg = { 0 };
-    struct usb_endpoint_descriptor *ep_desc;
-    int ret;
-
-    struct usbh_printer *printer_class = usbh_printer_class_alloc();
-    if (printer_class == NULL) {
-        USB_LOG_ERR("Fail to alloc printer_class\r\n");
-        return -ENOMEM;
-    }
-
-    printer_class->hport = hport;
-    printer_class->intf = intf;
-
-    hport->config.intf[intf].priv = printer_class;
-
-    for (uint8_t i = 0; i < hport->config.intf[intf + 1].altsetting[0].intf_desc.bNumEndpoints; i++) {
-        ep_desc = &hport->config.intf[intf + 1].altsetting[0].ep[i].ep_desc;
-
-        if (ep_desc->bEndpointAddress & 0x80) {
-            usbh_hport_activate_epx(&printer_class->bulkin, hport, ep_desc);
-        } else {
-            usbh_hport_activate_epx(&printer_class->bulkout, hport, ep_desc);
-        }
-    }
-
-    // uint8_t *device_id = usb_iomalloc(256);
-    // ret = usbh_printer_get_device_id(printer_class, device_id);
-    strncpy(hport->config.intf[intf].devname, DEV_FORMAT, CONFIG_USBHOST_DEV_NAMELEN);
-
-    USB_LOG_INFO("Register Printer Class:%s\r\n", hport->config.intf[intf].devname);
-
-    return 0;
-}
-
-static int usbh_printer_disconnect(struct usbh_hubport *hport, uint8_t intf)
-{
-    int ret = 0;
-
-    struct usbh_printer *printer_class = (struct usbh_printer *)hport->config.intf[intf].priv;
-
-    if (printer_class) {
-        if (printer_class->bulkin) {
-            usbh_pipe_free(printer_class->bulkin);
-        }
-
-        if (printer_class->bulkout) {
-            usbh_pipe_free(printer_class->bulkout);
-        }
-
-        if (hport->config.intf[intf].devname[0] != '\0') {
-            USB_LOG_INFO("Unregister Printer Class:%s\r\n", hport->config.intf[intf].devname);
-        }
-
-        usbh_printer_class_free(printer_class);
-    }
-
-    return ret;
-}
-
-static const struct usbh_class_driver printer_class_driver = {
-    .driver_name = "printer",
-    .connect = usbh_printer_connect,
-    .disconnect = usbh_printer_disconnect
-};
-
-CLASS_INFO_DEFINE const struct usbh_class_info printer_class_info = {
-    .match_flags = USB_CLASS_MATCH_INTF_CLASS | USB_CLASS_MATCH_INTF_SUBCLASS | USB_CLASS_MATCH_INTF_PROTOCOL,
-    .class = USB_DEVICE_CLASS_PRINTER,
-    .subclass = PRINTER_SUBCLASS,
-    .protocol = 0x00,
-    .vid = 0x00,
-    .pid = 0x00,
-    .class_driver = &printer_class_driver
-};

+ 0 - 28
class/printer/usbh_printer.h

@@ -1,28 +0,0 @@
-/*
- * Copyright (c) 2022, sakumisu
- *
- * SPDX-License-Identifier: Apache-2.0
- */
-#ifndef USBH_PRINTER_H
-#define USBH_PRINTER_H
-
-#include "usb_printer.h"
-
-struct usbh_printer {
-    struct usbh_hubport *hport;
-
-    uint8_t intf;          /* interface number */
-    uint8_t minor;
-    usbh_pipe_t bulkin;  /* BULK IN endpoint */
-    usbh_pipe_t bulkout; /* BULK OUT endpoint */
-};
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* USBH_PRINTER_H */