void Synta::assembleResponse(char* dataPacket, char commandOrError, unsigned long responseData){ char replyLength = cmd.getLength(commandOrError,0); //get the number of data bytes for response //char tempStr[11]; if (replyLength == -1) { replyLength++; dataPacket[0] = errorChar; } else { dataPacket[0] = startOutChar; if (replyLength == 2) { Nibbler nibble = {responseData}; private_byteToHex(dataPacket+2,dataPacket+1,nibble); } else if (replyLength == 3) { DoubleNibbler nibble = {responseData}; nibbleToHex(dataPacket+3, nibble.low); nibbleToHex(dataPacket+2, nibble.mid); nibbleToHex(dataPacket+1, nibble.high); } else if (replyLength == 6) { Inter inter = Inter(responseData); private_byteToHex(dataPacket+6,dataPacket+5,inter.highByter.lowNibbler); private_byteToHex(dataPacket+4,dataPacket+3,inter.lowByter.highNibbler); private_byteToHex(dataPacket+2,dataPacket+1,inter.lowByter.lowNibbler); } } /* dataPacket++; switch (replyLength){ case -1: //error(dataPacket); //In otherwords, invalid command, so send error //return; break; case 0: //clearBuffer(dataPacket+1,sizeof(tempStr)); //empty temporary string break; case 2: byteToHex(dataPacket,responseData); break; case 3: intToHex(dataPacket,responseData); break; case 6: longToHex(dataPacket,responseData); break; }*/ dataPacket[(byte)replyLength + 1] = endChar; dataPacket[(byte)replyLength + 2] = 0; //success(dataPacket,tempStr,replyLength + 1); //compile response return; }
void printHist() { for (int i=0;i<sizeof(hist)/sizeof(hist[0]);++i) { if (!hist[i].empty()) { printf("Histogram for %d\n",i); for (std::map<std::string,int>::iterator j=hist[i].begin(),je=hist[i].end();j!=je;++j) { std::string s = j->first; std::string hexS; for (std::string::iterator si=s.begin(),sie=s.end();si!=sie;++si) { char byt = *si; unsigned char b = byt; hexS+=nibbleToHex(b/16); hexS+=nibbleToHex(b&15); } printf ("%s : %d\n",hexS.c_str(),j->second); } } } }
static void populateSerialNumberDescriptorData (void) { const uint8_t *UniqProcessorId = (uint8_t *) 0x1FFF7A10; const uint8_t UniqProcessorIdLen = 12; uint8_t *baseDdPtr = &serialNumberDescriptorData[2]; for(uint32_t i=0; i<UniqProcessorIdLen; i++) { *baseDdPtr++ = nibbleToHex(UniqProcessorId[i] >> 4); *baseDdPtr++ = 0; *baseDdPtr++ = nibbleToHex(UniqProcessorId[i]); *baseDdPtr++ = 0; } }
inline void private_byteToHex(char* lower, char* upper, Nibbler nibbler){ nibbleToHex(lower, nibbler.low); nibbleToHex(upper, nibbler.high); }