1 /*************************************************************************** 2 * Copyright (c) 2024 Microsoft Corporation 3 * 4 * This program and the accompanying materials are made available under the 5 * terms of the MIT License which is available at 6 * https://opensource.org/licenses/MIT. 7 * 8 * SPDX-License-Identifier: MIT 9 **************************************************************************/ 10 11 /**************************************************************************/ 12 /**************************************************************************/ 13 /** */ 14 /** USBX Component */ 15 /** */ 16 /** Device PIMA Class */ 17 /** */ 18 /**************************************************************************/ 19 /**************************************************************************/ 20 21 #define UX_SOURCE_CODE 22 23 24 /* Include necessary system files. */ 25 26 #include "ux_api.h" 27 #include "ux_device_class_pima.h" 28 #include "ux_device_stack.h" 29 30 31 /**************************************************************************/ 32 /* */ 33 /* FUNCTION RELEASE */ 34 /* */ 35 /* ux_device_class_pima_data.c PORTABLE C */ 36 /* 6.1 */ 37 /* AUTHOR */ 38 /* */ 39 /* Chaoqiong Xiao, Microsoft Corporation */ 40 /* */ 41 /* DESCRIPTION */ 42 /* */ 43 /* This module contains all the data definition used by the PIMA */ 44 /* device class. */ 45 /* */ 46 /* INPUT */ 47 /* */ 48 /* OUTPUT */ 49 /* */ 50 /* CALLS */ 51 /* */ 52 /* None */ 53 /* */ 54 /* CALLED BY */ 55 /* */ 56 /* */ 57 /* RELEASE HISTORY */ 58 /* */ 59 /* DATE NAME DESCRIPTION */ 60 /* */ 61 /* 05-19-2020 Chaoqiong Xiao Initial Version 6.0 */ 62 /* 09-30-2020 Chaoqiong Xiao Modified comment(s), */ 63 /* resulting in version 6.1 */ 64 /* */ 65 /**************************************************************************/ 66 67 /* Define PIMA vendor extension descriptor. This is a regular string that needs to be put into unicode. */ 68 UCHAR _ux_device_class_pima_vendor_extension_descriptor[] = { 69 #ifdef UX_PIMA_WITH_MTP_SUPPORT 70 "microsoft.com: 1.0; microsoft.com/WMPPD: 11.0; microsoft.com/WMPPD: 10.0; microsoft.com/WMDRMPD: 10.1;" 71 #else 72 0 73 #endif 74 }; 75 76 /* Define PIMA supported operations. The last entry MUST be a zero. The DeviceInfoSet command 77 will parse this array and compute the number of functions supported and return it to the 78 host. */ 79 80 USHORT _ux_device_class_pima_supported_operations[] = { 81 82 UX_DEVICE_CLASS_PIMA_OC_GET_DEVICE_INFO, 83 UX_DEVICE_CLASS_PIMA_OC_OPEN_SESSION, 84 UX_DEVICE_CLASS_PIMA_OC_CLOSE_SESSION, 85 UX_DEVICE_CLASS_PIMA_OC_GET_STORAGE_IDS, 86 UX_DEVICE_CLASS_PIMA_OC_GET_STORAGE_INFO, 87 UX_DEVICE_CLASS_PIMA_OC_GET_NUM_OBJECTS, 88 UX_DEVICE_CLASS_PIMA_OC_GET_OBJECT_HANDLES, 89 UX_DEVICE_CLASS_PIMA_OC_GET_OBJECT_INFO, 90 UX_DEVICE_CLASS_PIMA_OC_GET_OBJECT, 91 UX_DEVICE_CLASS_PIMA_OC_GET_THUMB, 92 UX_DEVICE_CLASS_PIMA_OC_GET_PARTIAL_OBJECT, 93 UX_DEVICE_CLASS_PIMA_OC_DELETE_OBJECT, 94 UX_DEVICE_CLASS_PIMA_OC_SEND_OBJECT_INFO, 95 UX_DEVICE_CLASS_PIMA_OC_SEND_OBJECT, 96 UX_DEVICE_CLASS_PIMA_OC_INITIATE_CAPTURE, 97 UX_DEVICE_CLASS_PIMA_OC_FORMAT_STORE, 98 UX_DEVICE_CLASS_PIMA_OC_RESET_DEVICE, 99 #ifdef UX_PIMA_WITH_MTP_SUPPORT 100 UX_DEVICE_CLASS_PIMA_OC_GET_OBJECT_PROPS_SUPPORTED, 101 UX_DEVICE_CLASS_PIMA_OC_GET_OBJECT_PROP_DESC, 102 UX_DEVICE_CLASS_PIMA_OC_GET_OBJECT_PROP_VALUE, 103 UX_DEVICE_CLASS_PIMA_OC_SET_OBJECT_PROP_VALUE, 104 UX_DEVICE_CLASS_PIMA_OC_GET_OBJECT_REFERENCES, 105 UX_DEVICE_CLASS_PIMA_OC_SET_OBJECT_REFERENCES, 106 #endif 107 0 108 }; 109 110 111 /* Define PIMA supported events. The last entry MUST be a zero. The DeviceInfoSet command 112 will parse this array and compute the number of functions supported and return it to the 113 host. */ 114 115 USHORT _ux_device_class_pima_supported_events[] = { 116 117 UX_DEVICE_CLASS_PIMA_EC_CANCEL_TRANSACTION, 118 UX_DEVICE_CLASS_PIMA_EC_OBJECT_ADDED, 119 UX_DEVICE_CLASS_PIMA_EC_OBJECT_REMOVED, 120 UX_DEVICE_CLASS_PIMA_EC_STORE_ADDED, 121 UX_DEVICE_CLASS_PIMA_EC_STORE_REMOVED, 122 UX_DEVICE_CLASS_PIMA_EC_DEVICE_PROP_CHANGED, 123 UX_DEVICE_CLASS_PIMA_EC_OBJECT_INFO_CHANGED, 124 UX_DEVICE_CLASS_PIMA_EC_DEVICE_INFO_CHANGED, 125 UX_DEVICE_CLASS_PIMA_EC_REQUEST_OBJECT_TRANSFER, 126 UX_DEVICE_CLASS_PIMA_EC_STORE_FULL, 127 UX_DEVICE_CLASS_PIMA_EC_DEVICE_RESET, 128 UX_DEVICE_CLASS_PIMA_EC_STORAGE_INFO_CHANGED, 129 UX_DEVICE_CLASS_PIMA_EC_CAPTURE_COMPLETE, 130 UX_DEVICE_CLASS_PIMA_EC_UNREPORTED_STATUS, 131 0 132 }; 133 134 /* Define PIMA supported device properties. The last entry MUST be a zero. The DeviceInfoSet command 135 will parse this array and compute the number of functions supported and return it to the 136 host. For each declared device property, a dataset must be created in the application. 137 This table is used is the application has not defined any device properties. */ 138 USHORT _ux_device_class_pima_device_prop_supported[] = { 139 140 UX_DEVICE_CLASS_PIMA_DEV_PROP_UNDEFINED, 141 UX_DEVICE_CLASS_PIMA_DEV_PROP_BATTERY_LEVEL, 142 UX_DEVICE_CLASS_PIMA_DEV_PROP_FUNCTIONAL_MODE, 143 UX_DEVICE_CLASS_PIMA_DEV_PROP_IMAGE_SIZE, 144 UX_DEVICE_CLASS_PIMA_DEV_PROP_COMPRESSION_SETTING, 145 UX_DEVICE_CLASS_PIMA_DEV_PROP_WHITE_BALANCE, 146 UX_DEVICE_CLASS_PIMA_DEV_PROP_RGB_GAIN, 147 UX_DEVICE_CLASS_PIMA_DEV_PROP_F_NUMBER, 148 UX_DEVICE_CLASS_PIMA_DEV_PROP_FOCAL_LENGTH, 149 UX_DEVICE_CLASS_PIMA_DEV_PROP_FOCUS_DISTANCE, 150 UX_DEVICE_CLASS_PIMA_DEV_PROP_FOCUS_MODE, 151 UX_DEVICE_CLASS_PIMA_DEV_PROP_EXPOSURE_METERING_MODE, 152 UX_DEVICE_CLASS_PIMA_DEV_PROP_FLASH_MODE, 153 UX_DEVICE_CLASS_PIMA_DEV_PROP_EXPOSURE_TIME, 154 UX_DEVICE_CLASS_PIMA_DEV_PROP_EXPOSURE_PROGRAM_MODE, 155 UX_DEVICE_CLASS_PIMA_DEV_PROP_EXPOSURE_INDEX, 156 UX_DEVICE_CLASS_PIMA_DEV_PROP_EXPOSURE_BIAS_COMPENSATION, 157 UX_DEVICE_CLASS_PIMA_DEV_PROP_DATE_TIME, 158 UX_DEVICE_CLASS_PIMA_DEV_PROP_CAPTURE_DELAY, 159 UX_DEVICE_CLASS_PIMA_DEV_PROP_STILL_CAPTURE_MODE, 160 UX_DEVICE_CLASS_PIMA_DEV_PROP_CONTRAST, 161 UX_DEVICE_CLASS_PIMA_DEV_PROP_SHARPNESS, 162 UX_DEVICE_CLASS_PIMA_DEV_PROP_DIGITAL_ZOOM, 163 UX_DEVICE_CLASS_PIMA_DEV_PROP_EFFECT_MODE, 164 UX_DEVICE_CLASS_PIMA_DEV_PROP_BURST_NUMBER, 165 UX_DEVICE_CLASS_PIMA_DEV_PROP_BURST_INTERVAL, 166 UX_DEVICE_CLASS_PIMA_DEV_PROP_TIME_LAPSE_NUMBER, 167 UX_DEVICE_CLASS_PIMA_DEV_PROP_TIME_LAPSE_INTERVAL, 168 UX_DEVICE_CLASS_PIMA_DEV_PROP_FOCUS_METERING_MODE, 169 UX_DEVICE_CLASS_PIMA_DEV_PROP_UPLOAD_URL, 170 UX_DEVICE_CLASS_PIMA_DEV_PROP_ARTIST, 171 UX_DEVICE_CLASS_PIMA_DEV_PROP_COPYRIGHT_INFO, 172 #ifdef UX_PIMA_WITH_MTP_SUPPORT 173 UX_DEVICE_CLASS_PIMA_DEV_PROP_SYNCHRONIZATION_PARTNER, 174 UX_DEVICE_CLASS_PIMA_DEV_PROP_DEVICE_FRIENDLY_NAME, 175 UX_DEVICE_CLASS_PIMA_DEV_PROP_VOLUME, 176 UX_DEVICE_CLASS_PIMA_DEV_PROP_SUPPORTED_FORMATS_ORDERED, 177 UX_DEVICE_CLASS_PIMA_DEV_PROP_DEVICE_ICON, 178 UX_DEVICE_CLASS_PIMA_DEV_PROP_PLAYBACK_RATE, 179 UX_DEVICE_CLASS_PIMA_DEV_PROP_PLAYBACK_OBJECT, 180 UX_DEVICE_CLASS_PIMA_DEV_PROP_PLAYBACK_CONTAINER, 181 UX_DEVICE_CLASS_PIMA_DEV_PROP_SESSION_INITIATOR_VERSION_INFO, 182 UX_DEVICE_CLASS_PIMA_DEV_PROP_PERCEIVED_DEVICE_TYPE, 183 #endif 184 0 185 }; 186 187 /* Define PIMA supported capture formats. The last entry MUST be a zero. The DeviceInfoSet command 188 will parse this array and compute the number of functions supported and return it to the 189 host. 190 This table is used is the application has not defined any capture formats. */ 191 USHORT _ux_device_class_pima_supported_capture_formats[] = { 192 0 193 }; 194 195 /* Define PIMA supported image formats. The last entry MUST be a zero. The DeviceInfoSet command 196 will parse this array and compute the number of formats supported and return it to the 197 host. 198 This table is used is the application has not defined any capture formats. */ 199 USHORT _ux_device_class_pima_supported_image_formats[] = { 200 UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED, 201 UX_DEVICE_CLASS_PIMA_OFC_ASSOCIATION, 202 UX_DEVICE_CLASS_PIMA_OFC_SCRIPT, 203 UX_DEVICE_CLASS_PIMA_OFC_EXECUTABLE, 204 UX_DEVICE_CLASS_PIMA_OFC_TEXT, 205 UX_DEVICE_CLASS_PIMA_OFC_HTML, 206 UX_DEVICE_CLASS_PIMA_OFC_DPOF, 207 UX_DEVICE_CLASS_PIMA_OFC_AIFF, 208 UX_DEVICE_CLASS_PIMA_OFC_WAV, 209 UX_DEVICE_CLASS_PIMA_OFC_MP3, 210 UX_DEVICE_CLASS_PIMA_OFC_AVI, 211 UX_DEVICE_CLASS_PIMA_OFC_MPEG, 212 UX_DEVICE_CLASS_PIMA_OFC_ASF, 213 UX_DEVICE_CLASS_PIMA_OFC_DEFINED, 214 UX_DEVICE_CLASS_PIMA_OFC_EXIF_JPEG, 215 UX_DEVICE_CLASS_PIMA_OFC_TIFF_EP, 216 UX_DEVICE_CLASS_PIMA_OFC_FLASHPIX, 217 UX_DEVICE_CLASS_PIMA_OFC_BMP, 218 UX_DEVICE_CLASS_PIMA_OFC_CIFF, 219 UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED, 220 UX_DEVICE_CLASS_PIMA_OFC_GIF, 221 UX_DEVICE_CLASS_PIMA_OFC_JFIF, 222 UX_DEVICE_CLASS_PIMA_OFC_CD, 223 UX_DEVICE_CLASS_PIMA_OFC_PICT, 224 UX_DEVICE_CLASS_PIMA_OFC_PNG, 225 UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED, 226 UX_DEVICE_CLASS_PIMA_OFC_TIFF, 227 UX_DEVICE_CLASS_PIMA_OFC_TIFF_IT, 228 UX_DEVICE_CLASS_PIMA_OFC_JP2, 229 UX_DEVICE_CLASS_PIMA_OFC_JPX, 230 #ifdef UX_PIMA_WITH_MTP_SUPPORT 231 UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_FIRMWARE, 232 UX_DEVICE_CLASS_PIMA_OFC_WINDOWS_IMAGE_FORMAT, 233 UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_AUDIO, 234 UX_DEVICE_CLASS_PIMA_OFC_WMA, 235 UX_DEVICE_CLASS_PIMA_OFC_OGG, 236 UX_DEVICE_CLASS_PIMA_OFC_AAC, 237 UX_DEVICE_CLASS_PIMA_OFC_AUDIBLE, 238 UX_DEVICE_CLASS_PIMA_OFC_FLAC, 239 UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_VIDEO, 240 UX_DEVICE_CLASS_PIMA_OFC_WMV, 241 UX_DEVICE_CLASS_PIMA_OFC_MP4_CONTAINER, 242 UX_DEVICE_CLASS_PIMA_OFC_MP2, 243 UX_DEVICE_CLASS_PIMA_OFC_3GP_CONTAINER, 244 UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_COLLECTION, 245 UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_MULTIMEDIA_ALBUM, 246 UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_IMAGE_ALBUM, 247 UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_AUDIO_ALBUM, 248 UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_VIDEO_ALBUM, 249 UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_AUDIO_AND_VIDEO_PLAYLIST, 250 UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_CONTACT_GROUP, 251 UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_MESSAGE_FOLDER, 252 UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_CHAPTERED_PRODUCTION, 253 UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_AUDIO_PLAYLIST, 254 UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_VIDEO_PLAYLIST, 255 UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_MEDIACAST, 256 UX_DEVICE_CLASS_PIMA_OFC_WPL_PLAYLIST, 257 UX_DEVICE_CLASS_PIMA_OFC_M3U_PLAYLIST, 258 UX_DEVICE_CLASS_PIMA_OFC_MPL_PLAYLIST, 259 UX_DEVICE_CLASS_PIMA_OFC_ASX_PLAYLIST, 260 UX_DEVICE_CLASS_PIMA_OFC_PLS_PLAYLIST, 261 UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_DOCUMENT, 262 UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_DOCUMENT, 263 UX_DEVICE_CLASS_PIMA_OFC_XML_DOCUMENT, 264 UX_DEVICE_CLASS_PIMA_OFC_MICROSOFT_WORD_DOCUMENT, 265 UX_DEVICE_CLASS_PIMA_OFC_MHT_COMPILED_HTML_DOCUMENT, 266 UX_DEVICE_CLASS_PIMA_OFC_MICROSOFT_EXCEL_SPREADSHEET, 267 UX_DEVICE_CLASS_PIMA_OFC_MICROSOFT_POWERPOINT_PRESENTATION, 268 UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_MESSAGE, 269 UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_MESSAGE, 270 UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_CONTACT, 271 UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_CONTACT, 272 UX_DEVICE_CLASS_PIMA_OFC_VCARD2, 273 #endif 274 0 275 }; 276