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

Dependents:   class_project_main

Revision:
11:3b072cf16df8
Parent:
10:fc1cb68fc91e
diff -r fc1cb68fc91e -r 3b072cf16df8 PIMA15740/PIMAPropDescr.h
--- a/PIMA15740/PIMAPropDescr.h	Wed Sep 18 01:48:07 2013 +0000
+++ b/PIMA15740/PIMAPropDescr.h	Mon Oct 07 04:45:55 2013 +0000
@@ -23,122 +23,125 @@
 
     
 
-   int FillPropDesc(uint8_t *currentPtr) {
+   int FillPropDesc(uint8_t *initialPtr) {
+     uint8_t *currentPtr = initialPtr;
+     
      devicePropertyCode = *((uint16_t *)currentPtr);
-     dataType = *((uint16_t *)(currentPtr+sizeof(uint16_t)));
-     getSet=*((uint8_t *)(currentPtr+2*sizeof(uint16_t)));
-     switch(dataType) {
-         case PIMA_DATATYPE_CODE_INT8:
-              factoryDefault.ptri8 = new DTS<int8_t>;
-              currentValue.ptri8   = new DTS<int8_t>;
-              break;
-         case PIMA_DATATYPE_CODE_UINT8:
-              factoryDefault.ptru8 = new DTS<uint8_t>;
-              currentValue.ptru8   = new DTS<uint8_t>;
-              break;
-         case PIMA_DATATYPE_CODE_INT16:
-              factoryDefault.ptri16 = new DTS<int16_t>;
-              currentValue.ptri16   = new DTS<int16_t>;
-              break;
-         case PIMA_DATATYPE_CODE_UINT16:
-              factoryDefault.ptru16 = new DTS<uint16_t>;
-              currentValue.ptru16   = new DTS<uint16_t>;
-              break;
-         case PIMA_DATATYPE_CODE_INT32:
-              factoryDefault.ptri32 = new DTS<int32_t>;
-              currentValue.ptri32   = new DTS<int32_t>;
-              break;
-         case PIMA_DATATYPE_CODE_UINT32:
-              factoryDefault.ptru32 = new DTS<uint32_t>;
-              currentValue.ptru32   = new DTS<uint32_t>;
-              break;
-         case PIMA_DATATYPE_CODE_INT64:
-              factoryDefault.ptri64 = new DTS<int64_t>;
-              currentValue.ptri64   = new DTS<int64_t>;
-              break;
-         case PIMA_DATATYPE_CODE_UINT64:
-              factoryDefault.ptru64 = new DTS<uint64_t>;
-              currentValue.ptru64   = new DTS<uint64_t>;
-              break;
-         case PIMA_DATATYPE_CODE_INT128:
-              break;
-         case PIMA_DATATYPE_CODE_UINT128:
-              break;
-         case PIMA_DATATYPE_CODE_AINT8:
-              factoryDefault.ptri8 = new PIMAArray<int8_t>;
-              currentValue.ptri8   = new PIMAArray<int8_t>;
-              break;
-         case PIMA_DATATYPE_CODE_AUINT8:
-              factoryDefault.ptri8 = new PIMAArray<uint8_t> ;
-              currentValue.ptri8   = new PIMAArray<uint8_t>;
-              break;
-         case PIMA_DATATYPE_CODE_AINT16:
-              factoryDefault.ptri8 = new DTS<PIMAArray<int8_t> >;
-              currentValue.ptri8   = new DTS<PIMAArray<int8_t> >;
-              break;
-         case PIMA_DATATYPE_CODE_AUINT16:
-              factoryDefault.ptri8 = new DTS<PIMAArray<int8_t> >;
-              currentValue.ptri8   = new DTS<PIMAArray<int8_t> >;
-              break;
-         case PIMA_DATATYPE_CODE_AINT32:
-              factoryDefault.ptri8 = new DTS<PIMAArray<int8_t> >;
-              currentValue.ptri8   = new DTS<PIMAArray<int8_t> >;
-              break;
-         case PIMA_DATATYPE_CODE_AUINT32:
-              factoryDefault.ptri8 = new DTS<PIMAArray<int8_t> >;
-              currentValue.ptri8   = new DTS<PIMAArray<int8_t> >;
-              break;
-         case PIMA_DATATYPE_CODE_AINT64:
-              factoryDefault.ptri8 = new DTS<PIMAArray<int8_t> >;
-              currentValue.ptri8   = new DTS<PIMAArray<int8_t> >;
-              break;
-         case PIMA_DATATYPE_CODE_AUINT64:
-              factoryDefault.ptri8 = new DTS<PIMAArray<int8_t> >;
-              currentValue.ptri8   = new DTS<PIMAArray<int8_t> >;
-              break;
-         case PIMA_DATATYPE_CODE_AINT128:
-              break;
-         case PIMA_DATATYPE_CODE_AUINT128:
-              break;
-         case PIMA_DATATYPE_CODE_STR:
-              factoryDefault.ptri8 = new DTS<PIMAString>;
-              currentValue.ptri8   = new DTS<PIMAString>;
-              break;
-         default:
-              break;
-     }
-     factoryDefault.fill(currentPtr);
-     currentValue.fill(currentPtr);
-     //(sizeof(TYPE)*numberOfElements) + 
-     return (sizeof(uint32_t)); //TODO: Finish Fill function.
+     currentPtr+=sizeof(uint16_t);
+     dataType = *((uint16_t *)(currentPtr));
+     currentPtr+=sizeof(uint16_t);
+     getSet=*((uint8_t *)(currentPtr));
+     currentPtr+=sizeof(uint8_t);
+     currentPtr+=ParseValue(currentPtr,&factoryDefault);
+     currentPtr+=ParseValue(currentPtr,&currentValue);
+     formFlag=*((uint8_t *)(currentPtr));
+     currentPtr+=sizeof(uint8_t);
+     
+     return (currentPtr-initialPtr); //TODO: Finish Fill function.
    }
 
 private:
+     unsigned int ParseValue(uint8_t *currentPtr, DTSUnion *DTSUnionIn){
+         unsigned int result;
+         switch(dataType) {
+             case PIMA_DATATYPE_CODE_INT8:
+                  result=fill<int8_t > ((void *)&(DTSUnionIn->signed8bitInt),currentPtr);
+                  break;
+             case PIMA_DATATYPE_CODE_UINT8:
+                  result=fill<uint8_t > ((void *)&(DTSUnionIn->unsigned8bitInt),currentPtr);
+                  break;
+             case PIMA_DATATYPE_CODE_INT16:
+                  result=fill<int16_t > ((void *)&(DTSUnionIn->signed16bitInt),currentPtr);
+                  break;
+             case PIMA_DATATYPE_CODE_UINT16:
+                  result=fill<uint16_t > ((void *)&(DTSUnionIn->unsigned16bitInt),currentPtr);
+                  break;
+             case PIMA_DATATYPE_CODE_INT32:
+                  result=fill<int32_t > ((void *)&(DTSUnionIn->signed32bitInt),currentPtr);
+                  break;
+             case PIMA_DATATYPE_CODE_UINT32:
+                  result=fill<uint32_t > ((void *)&(DTSUnionIn->signed32bitInt),currentPtr);
+                  break;
+             case PIMA_DATATYPE_CODE_INT64:
+                  result=fill<int64_t > ((void *)&(DTSUnionIn->signed64bitInt),currentPtr);
+                  break;
+             case PIMA_DATATYPE_CODE_UINT64:
+                  result=fill<uint64_t > ((void *)&(DTSUnionIn->signed64bitInt),currentPtr);
+                  break;
+             case PIMA_DATATYPE_CODE_INT128:
+                  break;
+             case PIMA_DATATYPE_CODE_UINT128:
+                  break;
+            case PIMA_DATATYPE_CODE_AINT8:
+                  DTSUnionIn->arraysigned8bitInt = new PIMAArray<int8_t> ;
+                  result=DTSUnionIn->arraysigned8bitInt->FillArray(currentPtr);
+                  break;
+             case PIMA_DATATYPE_CODE_AUINT8:
+                  DTSUnionIn->arrayunsigned8bitInt = new PIMAArray<uint8_t> ;
+                  result=DTSUnionIn->arrayunsigned8bitInt->FillArray(currentPtr);
+                  break;
+             case PIMA_DATATYPE_CODE_AINT16:
+                  DTSUnionIn->arraysigned16bitInt = new PIMAArray<int16_t> ;
+                  result=DTSUnionIn->arraysigned16bitInt->FillArray(currentPtr);
+                  break;
+             case PIMA_DATATYPE_CODE_AUINT16:
+                  DTSUnionIn->arrayunsigned16bitInt = new PIMAArray<uint16_t> ;
+                  result=DTSUnionIn->arrayunsigned16bitInt->FillArray(currentPtr);
+                  break;
+             case PIMA_DATATYPE_CODE_AINT32:
+                  DTSUnionIn->arraysigned32bitInt = new PIMAArray<int32_t> ;
+                  result=DTSUnionIn->arraysigned32bitInt->FillArray(currentPtr);
+                  break;
+             case PIMA_DATATYPE_CODE_AUINT32:
+                  DTSUnionIn->arrayunsigned32bitInt = new PIMAArray<uint32_t> ;
+                  result=DTSUnionIn->arrayunsigned32bitInt->FillArray(currentPtr);
+                  break;
+             case PIMA_DATATYPE_CODE_AINT64:
+                  DTSUnionIn->arraysigned64bitInt = new PIMAArray<int64_t> ;
+                  result=DTSUnionIn->arraysigned64bitInt->FillArray(currentPtr);
+                  break;
+             case PIMA_DATATYPE_CODE_AUINT64:
+                  DTSUnionIn->arrayunsigned64bitInt = new PIMAArray<uint64_t> ;
+                  result=DTSUnionIn->arrayunsigned64bitInt->FillArray(currentPtr);
+                  break;
+/*             case PIMA_DATATYPE_CODE_AINT128:
+                  break;
+             case PIMA_DATATYPE_CODE_AUINT128:
+                  break; 
+             case PIMA_DATATYPE_CODE_STR:
+                  DTSUnionIn->ptri8 = new DTS<PIMAString>;
+                  break; */
+             default:
+                  break;
+         }
+         return result;
+     }
+
+     template<class Type>
+     unsigned int fill(void *targetPtr,uint8_t *ptr){
+        Type temp;
+        
+        temp=*((Type *)ptr);
+        *((Type *)targetPtr)=temp;
+        
+        return sizeof(temp);
+     }
+     
      ///PIMA 15740:2000 Section 13, table 23
      uint16_t   devicePropertyCode;
      uint16_t   dataType;
      uint8_t    getSet;
-     typedef union DTSPTR {
-       DTS<int8_t> *ptri8;
-       DTS<uint8_t> *ptru8;
-       DTS<int16_t> *ptri16;
-       DTS<uint16_t> *ptru16;
-       DTS<int32_t> *ptri32;
-       DTS<uint32_t> *ptru32;
-       DTS<int64_t> *ptri64;
-       DTS<uint64_t> *ptru64;
-     } DTSPTR;
-     DTSPTR factoryDefault;
-     DTSPTR currentValue;
+     DTSUnion   factoryDefault;
+     DTSUnion   currentValue;
       
      uint8_t   formFlag;
      typedef union {
          struct {
-           DTSPTR minimumValue;
-           DTSPTR maximumValue;
-           DTSPTR stepSize;
+           DTSUnion minimumValue;
+           DTSUnion maximumValue;
+           DTSUnion stepSize;
          } rangeForm;
-         DTSPTR enumerationForm;
+         PIMAArray<DTSUnion> *enumerationForm;
       }  FORMS;
       FORMS FORM;     
 };