Library to allo USB PTP device to be hosted by the mbed platform
Dependents: class_project_main
Diff: PIMA15740/PIMAPropDescr.h
- 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,¤tValue); + 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; };