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

Dependents:   class_project_main

Committer:
jakowisp
Date:
Fri Aug 23 00:52:52 2013 +0000
Revision:
0:98cf19bcd828
Child:
1:71c0e9dc153d
Fix for a buffer overrun and refactored the Tranactoion code.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jakowisp 0:98cf19bcd828 1
jakowisp 0:98cf19bcd828 2 #include "mallocdebug.h"
jakowisp 0:98cf19bcd828 3
jakowisp 0:98cf19bcd828 4 class PIMAString {
jakowisp 0:98cf19bcd828 5 public:
jakowisp 0:98cf19bcd828 6
jakowisp 0:98cf19bcd828 7 PIMAString() {
jakowisp 0:98cf19bcd828 8 length=0;
jakowisp 0:98cf19bcd828 9 StringChars=NULL;
jakowisp 0:98cf19bcd828 10 vals=NULL;
jakowisp 0:98cf19bcd828 11 };
jakowisp 0:98cf19bcd828 12
jakowisp 0:98cf19bcd828 13 ~PIMAString() {
jakowisp 0:98cf19bcd828 14 if( StringChars !=NULL)
jakowisp 0:98cf19bcd828 15 free(StringChars);
jakowisp 0:98cf19bcd828 16 if(vals!=NULL)
jakowisp 0:98cf19bcd828 17 free(vals);
jakowisp 0:98cf19bcd828 18 };
jakowisp 0:98cf19bcd828 19
jakowisp 0:98cf19bcd828 20 int FillString(uint8_t *currentPtr) {
jakowisp 0:98cf19bcd828 21 setLength(*currentPtr);
jakowisp 0:98cf19bcd828 22 setStringChars((uint16_t *)(currentPtr+1));
jakowisp 0:98cf19bcd828 23 return 2*length +1;
jakowisp 0:98cf19bcd828 24 };
jakowisp 0:98cf19bcd828 25
jakowisp 0:98cf19bcd828 26
jakowisp 0:98cf19bcd828 27 char * getString() {
jakowisp 0:98cf19bcd828 28 if(vals!=NULL)
jakowisp 0:98cf19bcd828 29 free(vals);
jakowisp 0:98cf19bcd828 30 vals=(char *) malloc(sizeof(char)*(this->length+1));
jakowisp 0:98cf19bcd828 31 for(int i=0;i<this->length;i++)
jakowisp 0:98cf19bcd828 32 vals[i]=StringChars[i]; //NOTE: Truncates the uint16_t value.
jakowisp 0:98cf19bcd828 33 vals[length]='\0';
jakowisp 0:98cf19bcd828 34 return vals;
jakowisp 0:98cf19bcd828 35 }
jakowisp 0:98cf19bcd828 36
jakowisp 0:98cf19bcd828 37 uint8_t getLength() {
jakowisp 0:98cf19bcd828 38 return this->length;
jakowisp 0:98cf19bcd828 39 }
jakowisp 0:98cf19bcd828 40
jakowisp 0:98cf19bcd828 41 private:
jakowisp 0:98cf19bcd828 42 void setLength(uint8_t length) {
jakowisp 0:98cf19bcd828 43 if(length > this->length) {
jakowisp 0:98cf19bcd828 44 if( StringChars !=NULL)
jakowisp 0:98cf19bcd828 45 free(StringChars);
jakowisp 0:98cf19bcd828 46 StringChars = (uint16_t *) malloc(sizeof(uint16_t)*length);
jakowisp 0:98cf19bcd828 47 }
jakowisp 0:98cf19bcd828 48 this->length=length;
jakowisp 0:98cf19bcd828 49
jakowisp 0:98cf19bcd828 50 };
jakowisp 0:98cf19bcd828 51
jakowisp 0:98cf19bcd828 52 void setStringChars(uint16_t *buffer){
jakowisp 0:98cf19bcd828 53 if(buffer!=NULL && StringChars !=NULL)
jakowisp 0:98cf19bcd828 54 for(int i=0;i<this->length;i++)
jakowisp 0:98cf19bcd828 55 StringChars[i]=buffer[i];
jakowisp 0:98cf19bcd828 56 };
jakowisp 0:98cf19bcd828 57
jakowisp 0:98cf19bcd828 58
jakowisp 0:98cf19bcd828 59 uint8_t length;
jakowisp 0:98cf19bcd828 60 uint16_t *StringChars;
jakowisp 0:98cf19bcd828 61 char *vals;
jakowisp 0:98cf19bcd828 62
jakowisp 0:98cf19bcd828 63 };