Library to allo USB PTP device to be hosted by the mbed platform
Dependents: class_project_main
Revision 4:9c6f5867f050, committed 2013-08-28
- Comitter:
- jakowisp
- Date:
- Wed Aug 28 03:25:53 2013 +0000
- Parent:
- 3:1fcb46ab18df
- Child:
- 5:728b5d58e135
- Commit message:
- Documentation and initial publishing;
Changed in this revision
--- a/PIMA15740/PIMAArray.h Fri Aug 23 23:34:05 2013 +0000 +++ b/PIMA15740/PIMAArray.h Wed Aug 28 03:25:53 2013 +0000 @@ -5,6 +5,7 @@ * @date 8/23/2013 * * mbed USBHostPTP Library(PIMA15740 Array definition) +* * @par Copyright: * Copyright (c) 2013 Dwayne Dilbeck * @par License:
--- a/USBHostPTP.cpp Fri Aug 23 23:34:05 2013 +0000 +++ b/USBHostPTP.cpp Wed Aug 28 03:25:53 2013 +0000 @@ -457,14 +457,14 @@ return Transaction(PIMA_OPERATION_CODE_GetStorageIDs, &flags, NULL, parser); } -uint16_t USBHostPTP::GetStorageInfo(uint32_t storage_id, void *parser) +uint16_t USBHostPTP::GetStorageInfo(uint32_t storage_id) { OperFlags flags = { 1, 0, 0, 1, 1, 0 }; uint32_t params[1]; params[0] = storage_id; - return Transaction(PIMA_OPERATION_CODE_GetStorageInfo, &flags, params, parser); + return Transaction(PIMA_OPERATION_CODE_GetStorageInfo, &flags, params, (void*)&USBHostPTP::ParseStorageInfoDataBlock); } uint16_t USBHostPTP::CopyObject(uint32_t handle, uint32_t storage_id, uint32_t parent, uint32_t *new_handle) @@ -679,6 +679,19 @@ #endif } +void USBHostPTP::ParseStorageInfoDataBlock(void *ptp,uint8_t *buffer,uint16_t length){ + uint8_t *ptr,*structptr; + USBHostPTP *obj=(USBHostPTP *)ptp; + + structptr=(uint8_t *) &(obj->storageInfo); + ptr=buffer; + for(int i=0;i<0x1a;i++) + structptr[i]=ptr[i]; + ptr+=0x1a; + ptr+=obj->storageInfo.storageDescription.FillString(ptr); + obj->storageInfo.volumeLabel.FillString(ptr); +} + bool USBHostPTP::IsCommandSupported(uint16_t opcode){ bool res=false; @@ -790,3 +803,4 @@ #endif +
--- a/USBHostPTP.h Fri Aug 23 23:34:05 2013 +0000 +++ b/USBHostPTP.h Wed Aug 28 03:25:53 2013 +0000 @@ -1,7 +1,16 @@ -/* mbed USBHostPTP Library - * Copyright (c) 2013 Dwayne Dilbeck - * This software is distributed under the terms of the GNU Lesser General Public License - */ +/** +* @file USBHostPTP.h +* @brief USBHostPTP class definition +* @author Dwayne Dilbeck +* @date 8/23/2013 +* +* mbed USBHostPTP Library +* +* @par Copyright: +* Copyright (c) 2013 Dwayne Dilbeck +* @par License: +* This software is distributed under the terms of the GNU Lesser General Public License +*/ #ifndef USBHOSTPTP_H @@ -37,7 +46,7 @@ /** * Define a set of flags to make calls to execute Operations a simple wrapper. - * This copied from the Circuits At Home Arduino Library to match thier format. + * This structure is copied from the 'Circuits At Home' Arduino Library to match thier format. */ struct OperFlags { @@ -79,45 +88,262 @@ * @return true if the operation was succesful */ bool CancelRequest(unsigned int TransactionID); + + /** + * DeviceResetRequest + * The Device Reset Request is used by the host to return the + * Still Image Capture Device to the Idle state after the Bulk-pipe + * has stalled. The request may also be used to clear any vendor specified suspend conditions. + * + * @param none + * + * @return true if the operation was succesful + */ bool DeviceResetRequest(void); - bool GetDeviceStatus(void); - bool GetExtendedEventData(void); + /** + * GetDeviceStatus + * This request is used by the host to retrieve information needed to + * clear halted endpoints that result from a device initiated data transfer cancellation. + * + * @param none + * + * @return true if the operation was succesful + */ + bool GetDeviceStatus(void); + + /** + * GetExtendedEventData + * The data stage transfers to the host extended information regarding + * an asynchronous event or vendor condition. + * + * @param none + * + * @return true if the operation was succesful + */ + bool GetExtendedEventData(void); + + ///Provide external access to deviceInfo DeviceInfoStruct deviceInfo; + ///provide external access to ObjectInfo ObjectInfoStruct objectInfo; - + ///provide external access to storageInfo + StorageInfoStruct storageInfo; + ///Provide a visible counter of bytes remaining during long transfers uint32_t dataLeftToTransfer; + ///Provide a visible value of total data to transfer during long transfers uint32_t totalDataToTransfer; - // Simple PTP operation which has no data stage. Any number of uint32_t params can be supplied. - uint16_t Operation(uint16_t opcode, uint8_t nparams = 0, uint32_t *params = NULL); + /** + * Simple PTP operation caller which has no data stage. Any number of uint32_t params can be supplied. + * + * @param opcode The operation to send to the device for execeution + * @param nparams The number of parameters being supplied for the operation + * @param params A pointer to the paratmers array to be used. + * + * @return A PTP response code + */ + uint16_t Operation(uint16_t opcode, uint8_t nparams = 0, uint32_t *params = NULL); + + /** + * Open a new session on the PTP device, this is required before any other operations besides GetDeviceInfo can be called. + * + * @param none + * @return A PTP response code + */ uint16_t OpenSession(); - uint16_t CloseSession(); + + /** + * Close the currently open session. The PIMA standard does not allow muliptl session to be open at a time. + * + * @param none + * @return A PTP response code + */ + uint16_t CloseSession(); + + /** + * This command get the device configuration information, including the operations, porperties, and events the divce supports. + * @param none + * @return A PTP response code + */ uint16_t GetDeviceInfo(); - + + /** + * Request a device power down. + * + * @param none + * @return A PTP response code + */ uint16_t PowerDown(); + + /** + * Execute a self test + * + * @param type (Optional) Specify the test to execute. + * @param none + * @return A PTP response code + */ uint16_t SelfTest(uint16_t type = 0); + + /** + * Get the number of objects stored on the device + * + * @param retval a pointer to a uint32_t value , this will be set by the function to return the value + * @param storage_id Provide a way to filter by storage ID. + * @param format Provide a way to filter by format. PTP devices are not required to support filtering by format + * @param assoc Provide a way to filter by association. PTP devices are not required to support filtering by association + * @return A PTP response code + */ uint16_t GetNumObjects(uint32_t *retval, uint32_t storage_id=0xffffffff, uint16_t format=0x0000, uint32_t assoc=0x0000); + + /** + * Get an array of file handles for the objects stored on the device + * + * @param storage_id Provide a way to filter by storage ID. + * @param format Provide a way to filter by format. PTP devices are not required to support filtering by format + * @param assoc Provide a way to filter by association. PTP devices are not required to support filtering by association + * @param parser A pointer to a function to handle the data returned from the device. If left in the default value of NULL the data is thrown away as it is recieved. + * @return A PTP response code + */ uint16_t GetObjectHandles(uint32_t storage_id=0xffffffff, uint16_t format=0x0000, uint16_t assoc=0x0000, void *parser=NULL); + + /** + * Get information about an object + * + * @param handle the file handle of the object to get information about. + * @return A PTP response code + */ uint16_t GetObjectInfo(uint32_t handle); + /** + * Ge a thumbnail for an object + * + * @param handle the file handle of the object. + * @param parser A pointer to a function to handle the data returned from the device. If left in the default value of NULL the data is thrown away as it is recieved. + * @return A PTP response code + */ uint16_t GetThumb(uint32_t handle, void *parser=NULL); + /** + * + * @param handle + * @param parser A pointer to a function to handle the data returned from the device. If left in the default value of NULL the data is thrown away as it is recieved. + * @return A PTP response code + */ uint16_t GetObject(uint32_t handle, void *parser=NULL); + /** + * + * @param parser A pointer to a function to handle the data returned from the device. If left in the default value of NULL the data is thrown away as it is recieved. + * @return A PTP response code + */ uint16_t GetStorageIDs(void *parser=NULL); - uint16_t GetStorageInfo(uint32_t storage_id, void *parser=NULL); + + /** + * Obtain inforamtion about a storge. + * + * @param storage_id + * @return A PTP response code + */ + uint16_t GetStorageInfo(uint32_t storage_id); + + /** + * + * @param handle + * @param storage_id + * @param parent + * @param new_handle + * @return A PTP response code + */ uint16_t CopyObject(uint32_t handle, uint32_t storage_id, uint32_t parent, uint32_t *new_handle); + /** + * + * @param handle + * @param format + * @return A PTP response code + */ uint16_t DeleteObject(uint32_t handle, uint16_t format); + /** + * + * @param handle + * @param attrib + * @return A PTP response code + */ uint16_t SetObjectProtection(uint32_t handle, uint16_t attrib); + /** + * + * @param handle + * @param storage_id + * @param parent + * @return A PTP response code + */ uint16_t MoveObject(uint32_t handle, uint32_t storage_id, uint32_t parent); + /** + * + * @param pcode + * @param parser A pointer to a function to handle the data returned from the device. If left in the default value of NULL the data is thrown away as it is recieved. + * @return A PTP response code + */ uint16_t GetDevicePropDesc(const uint16_t pcode, void *parser=NULL); + /** + * + * @param pcode + * @param parser A pointer to a function to handle the data returned from the device. If left in the default value of NULL the data is thrown away as it is recieved. + * @return A PTP response code + */ uint16_t GetDevicePropValue(const uint16_t pcode, void *parser=NULL); + /** + * + * @param pcode + * @param val + * @return A PTP response code + */ uint16_t SetDevicePropValue(uint16_t pcode, uint32_t val); + /** + * + * @param pcode + * @return A PTP response code + */ uint16_t ResetDevicePropValue(const uint16_t pcode); + /** + * + * @param storage_id + * @param fsformat + * @return A PTP response code + */ uint16_t FormatStore(uint32_t storage_id, uint32_t fsformat); + /** + * + * @param storage_id + * @param format + * @return A PTP response code + */ uint16_t InitiateCapture(uint32_t storage_id, uint16_t format); + /** + * + * @param storage_id + * @param format + * @return A PTP response code + */ uint16_t InitiateOpenCapture(uint32_t storage_id, uint16_t format); + + /** + * + * @param tran_id + * @return A PTP response code + */ uint16_t TerminateOpenCapture(uint32_t trans_id); + + /** + * Send the contents of the deviceInfo variable via serial communication + * @param none + * @return void + */ void DumpDeviceInfo(void); + + /** + * Send the contents of the objectInfo variable via serial communication + * @param none + * @return void + */ void DumpObjectInfo(void); protected: @@ -156,6 +382,7 @@ bool CheckEvent(void); static void ParseDeviceInfoDataBlock(void *ptp, uint8_t *buffer,uint16_t length); static void ParseObjectInfoDataBlock(void *ptp, uint8_t *buffer,uint16_t length); + static void ParseStorageInfoDataBlock(void *ptp, uint8_t *buffer,uint16_t length); uint16_t Transaction(uint16_t operationCode, OperFlags *flags, uint32_t *params = NULL, void *pVoid = NULL); };