Library to allo USB PTP device to be hosted by the mbed platform

Dependents:   class_project_main

Files at this revision

API Documentation at this revision

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

PIMA15740/PIMAArray.h Show annotated file Show diff for this revision Revisions of this file
USBHostPTP.cpp Show annotated file Show diff for this revision Revisions of this file
USBHostPTP.h Show annotated file Show diff for this revision Revisions of this file
--- 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);
 
 };