+
+/**
+ * \brief Convert a string of hexadecimal digits into a byte stream
+ */
+int UnHex(Uint8 *Dest, size_t DestSize, const char *SourceString)
+{
+ int i;
+
+ for( i = 0; i < DestSize*2; i += 2 )
+ {
+ Uint8 val = 0;
+
+ if(SourceString[i] == '\0') break;
+
+ if('0' <= SourceString[i] && SourceString[i] <= '9')
+ val |= (SourceString[i]-'0') << 4;
+ else if('A' <= SourceString[i] && SourceString[i] <= 'F')
+ val |= (SourceString[i]-'A'+10) << 4;
+ else if('a' <= SourceString[i] && SourceString[i] <= 'f')
+ val |= (SourceString[i]-'a'+10) << 4;
+
+ if(SourceString[i+1] == '\0') break;
+
+ if('0' <= SourceString[i+1] && SourceString[i+1] <= '9')
+ val |= (SourceString[i+1] - '0');
+ else if('A' <= SourceString[i+1] && SourceString[i+1] <= 'F')
+ val |= (SourceString[i+1] - 'A' + 10);
+ else if('a' <= SourceString[i+1] && SourceString[i+1] <= 'f')
+ val |= (SourceString[i+1] - 'a' + 10);
+
+ Dest[i/2] = val;
+ }
+ return i/2;
+}
+
+Uint16 SwapEndian16(Uint16 Val)
+{
+ return ((Val&0xFF)<<8) | ((Val>>8)&0xFF);
+}
+Uint32 SwapEndian32(Uint32 Val)
+{
+ return ((Val&0xFF)<<24) | ((Val&0xFF00)<<8) | ((Val>>8)&0xFF00) | ((Val>>24)&0xFF);
+}