void sendData(uint8_t *data, uint8_t length) { Serial.write(responseHeader); Serial.write((uint8_t*)&msg, sizeof(msg)); Serial.write(data, length); Serial.write(getCheckSum((uint8_t*)&msg, sizeof(msg)) ^ getCheckSum(data, length)); // The checksum is calculated from the length, command and the data Serial.println(); // Print carriage return and line feed as well, so it is easy to figure out the line ending in Java }
bool getData(uint8_t *data, uint8_t length) { if (Serial.readBytes(data, length) != length) // Read data into buffer return false; uint8_t checksum; if (Serial.readBytes(&checksum, sizeof(checksum)) != sizeof(checksum)) // Read the checksum return false; return (getCheckSum((uint8_t*)&msg, sizeof(msg)) ^ getCheckSum(data, length)) == checksum; // The checksum is calculated from the length, command and the data }
void CConfigData::vReadConfigFile() { UCHAR pCheckSum,fChecksum; if (getCheckSum(m_omStrCurrFileName ,& pCheckSum, &fChecksum)) { if (pCheckSum == fChecksum) { if (doDataStorageOperation(OPEN) == 0) { ProjectData sTempData; getProjectData(m_strCurrProjName, sTempData); if (sTempData.applicationUniqueId != BUSMASTER_UNIQUE_ID) { AfxMessageBox (_("The configuration file is not compatible"), MB_OK | MB_ICONERROR); doDataStorageOperation(CLOSE); } } else { AfxMessageBox (_("The configuration file is not valid"), MB_OK | MB_ICONERROR); doDataStorageOperation(CLOSE); } } else { AfxMessageBox (_("Configuration file changed outside the application"), MB_OK | MB_ICONERROR); } } }
QString MidiTable::dataChange(QString area, QString hex1, QString hex2, QString hex3, QString hex4, QString hex5) { QString sysxMsg; sysxMsg.append(getHeader(false)); if (area != "System") { area = "Structure"; sysxMsg.append(tempDataWrite); sysxMsg.append("00"); sysxMsg.append(hex1); sysxMsg.append(hex3); } else { area = "System"; sysxMsg.append(hex1); sysxMsg.append("00"); sysxMsg.append(hex2); sysxMsg.append(hex3); }; sysxMsg.append(hex4); sysxMsg.append(hex5); int dataSize = 0; bool ok; for(int i=checksumOffset;i<sysxMsg.size()-1;++i) { dataSize += sysxMsg.mid(i*2, 2).toInt(&ok, 16); }; sysxMsg.append(getCheckSum(dataSize)); sysxMsg.append(getFooter()); return sysxMsg; }
/* * checkMagic method * */ int LdMagic::checkMagic() { // // Check the patch-script. // if (m_tarfile != NULL) { char command[200]; sprintf(command, "%s/%s", TEMP_DIR, PATCH_DESCRIPT); if (loadFromFile(command) == 0) { char* p = getUpgrade(false); sprintf(command, "cd / ; tar -zx tmp/%s -f %s > /dev/null 2>&1", p, m_tarfile); if (system(command) != 512) { sprintf(command, "%s/%s", TEMP_DIR, p); if (getSize() == getFileSize(command) && getCksum() == getCheckSum(command)) return getType(); } } // clean up sprintf(command, "rm -f %s/%s", TEMP_DIR, PATCH_DESCRIPT); system(command); } return -1; }
/* saveToFile method * * @param filename -- saved file name * @param type -- upgrade type * @param upgrade -- upgrade batch file name * @return 0 - OK: otherwise Error */ int LdMagic::saveToFile(char*filename, int type, char* upgrade) { FILE *out = NULL; int rtn = -1; if (upgrade != NULL) setUpgrade(upgrade); else if (m_upgrade == NULL) setUpgrade(UPGRADE); m_size = getFileSize(m_upgrade); if (m_size > 0 && type >= U_DATA && type <= U_SYS) { m_type = type; m_cksum = getCheckSum(m_upgrade); out = fopen(filename, "w"); if (out) { fwrite((char*)&m_magic, sizeof(int), 1, out); fwrite((char*)&m_size, sizeof(int), 1, out); fwrite((char*)&m_type, sizeof(int), 1, out); fwrite((char*)&m_cksum, sizeof(int), 1, out); fprintf(out, "%s", m_upgrade); fclose(out); rtn = 0; } } return rtn; }
// src: http://timzaman.wordpress.com/code-c-arduino/checksum-xor-cpp/ // Validates the checksum on an (for instance NMEA) string // Returns 1 on valid checksum, 0 otherwise int validateChecksum(void) { char gotSum[2]; gotSum[0] = buffer[strlen(buffer) - 2]; gotSum[1] = buffer[strlen(buffer) - 1]; // Check that the checksums match up if ((16 * atoh(gotSum[0])) + atoh(gotSum[1]) == getCheckSum(buffer)) return 1; else return 0; }
int FillCRC(ISmartFrame *pISMartFrame) { unsigned short nCRC = 0; if (NULL == pISMartFrame) { return ReturnError; } nCRC = getCheckSum((const unsigned char *)&pISMartFrame->frameLength, 42, SMALL_END); nCRC = htons(nCRC); memcpy(&pISMartFrame->crc, &nCRC, 2); return ReturnSuccess; }
int CheckCRC(ISmartFrame *pISMartFrame) { unsigned short nCRC = 0; unsigned short nCRCFrame = 0; nCRC = getCheckSum((const unsigned char *)&pISMartFrame->frameLength, 42, SMALL_END); nCRCFrame = ntohs(pISMartFrame->crc); if (nCRC != nCRCFrame) { return ReturnError; } return ReturnSuccess; }
void RectifierParser::buildSimpleIssuedMessage(char cid, uint8_t address, char* info, uint8_t infoLength) { sendMessageLength_ = 0; sendMessage_[sendMessageLength_++] = (char)START_FRAME_BYTE; sendMessage_[sendMessageLength_++] = decToBcd(address); sendMessage_[sendMessageLength_++] = decToBcd(infoLength + 1); sendMessage_[sendMessageLength_++] = cid; memcpy(sendMessage_ + sendMessageLength_, info, infoLength); sendMessageLength_ += infoLength; uint8_t chksum = getCheckSum(sendMessage_ + 1, sendMessageLength_ - 1); sendMessage_[sendMessageLength_++] = decToBcd(chksum); sendMessage_[sendMessageLength_++] = (char)END_FRAME_BYTE; }
boolean IOToaster::sendResponse() { _response += _customResponse; _response += ("CRC" + getCheckSum(_response)); Serial.print("AT+CIPSEND=0,"); Serial.print(_response.length()); Serial.print("\r\n"); if (waitForSerial(">")){ // wait for > to send data. Serial.print(_response); return (waitForSerial("OK")); } else return false; }
QString MidiTable::patchRequest(int bank, int patch) { bool ok; QString addr1, addr2; if((bank != 0 && patch != 0) && bank <= bankTotalUser) { int patchOffset = (((bank - 1 ) * patchPerBank) + patch) - 1; if(bank > bankTotalUser) patchOffset += 87; int addrMaxSize = 128; int n = (int)(patchOffset / addrMaxSize); addr1 = QString::number(32 + n, 16).toUpper(); addr2 = QString::number(patchOffset - (addrMaxSize * n), 16).toUpper(); } else { addr1 = tempDataWrite; addr2 = "00"; }; if (addr1.length() < 2) addr1.prepend("0"); if (addr2.length() < 2) addr2.prepend("0"); QString hex1 = "00"; QString hex2 = "00"; QString sysxMsg; sysxMsg.append(getHeader(true)); sysxMsg.append(addr1); sysxMsg.append(addr2); sysxMsg.append(hex1); sysxMsg.append(hex2); sysxMsg.append(patchRequestDataSize); //(getSize()); int dataSize = 0; for(int i=checksumOffset;i<sysxMsg.size()-1;++i) { dataSize += sysxMsg.mid(i*2, 2).toInt(&ok, 16); }; sysxMsg.append(getCheckSum(dataSize)); sysxMsg.append(getFooter()); return sysxMsg; }
//! Haponov function void FileContextMenuExt::processSelectedFiles(std::wstring ws_name) { std::wstring atLast = ws_name; //------------------ //! Haponov: get a wstring with filename only - WO full path std::size_t found = atLast.find_last_of(L"/\\"); atLast = atLast.substr(found + 1); //------------------ //! Haponov: create file handle for further usage HANDLE hFile = CreateFile(ws_name.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { atLast = L"error opening file"; return; } //------------------- // Haponov: get a wstring with size of file DWORD dwFileSize = GetFileSize(hFile, NULL); std::wstring result_size = std::to_wstring(dwFileSize); // Haponov: put spaces into size - "размер в удобочитаемом виде" unsigned int curLength = result_size.length(); if (curLength > 3) { curLength -= 3; for (int i=3; curLength < result_size.length(); i += 4, curLength -= 3) { if (curLength > result_size.length() || !curLength) break; result_size.insert(result_size.end() - i, ' '); } } //------------------------ // Haponov: get a string with creation time of file wchar_t temp_forCreationTime[MAX_PATH]; if (!GetCreationTime(hFile, temp_forCreationTime, ARRAYSIZE(temp_forCreationTime))) return; std::wstring resultCreationTime(temp_forCreationTime); //------------------------- // Haponov: get a string with ala checksum DWORD checksum = getCheckSum(ws_name); std::wstring result_checkSum = std::to_wstring(checksum); //------------------------- // Haponov: create a resulting string for displaying atLast += L"; size: "; atLast += result_size; atLast += L" KB; creation time: "; atLast += resultCreationTime; atLast += L" checksum: "; atLast += result_checkSum; // Haponov: protect shared std::set<std::wstring> sortedFiles mu.lock(); sortedFiles.insert(atLast); mu.unlock(); return; }
void Radioino::sendResponse() { _response += ("CRC" + getCheckSum(_response)); Serial.println(_response); }
int buildAndSendUploadData(sendData_t *sendData) { unsigned short packageLength = 0; unsigned short msgLen = 0; unsigned char sendMsg[128]; uploadData_t updateData; struct tm time; // FILE *positionLogFd; // positionLogFd = fopen("positionLog.log", "a"); localtime_r(&(sendData->time), &time); printf("year: %d mon: %d day: %d hour: %d min: %d sec:%d\r\n" , time.tm_year%100, time.tm_mon + 1, time.tm_mday, time.tm_hour, time.tm_min, time.tm_sec); packageLength = sizeof(updateData.version) + sizeof(updateData.sessionId) + sizeof(updateData.checkLineStatus) + sizeof(updateData.reserve) + sizeof(updateData.motoType) + (strlen(getMotoId()) + 1) + //motoId sizeof(updateData.date) + sizeof(updateData.time) + sizeof(updateData.commandId) + sendData->dataLength; printf("upload package length = %u\r\n", packageLength); //updateData.startTag = htons(0x1AE6); updateData.startTag = (0x1AE6); //updateData.length = htons(packageLength); updateData.length = (packageLength); updateData.version = 0x12; updateData.sessionId = sendData->sessionId; updateData.checkLineStatus = 0; //updateData.reserve = htons(0x0000); updateData.reserve = (0x0000); updateData.motoType = 0x71; updateData.motoId = getMotoId(); updateData.date[0] = time.tm_year % 100; updateData.date[1] = time.tm_mon + 1; updateData.date[2] = time.tm_mday; updateData.time[0] = time.tm_hour; updateData.time[1] = time.tm_min; updateData.time[2] = time.tm_sec; updateData.commandId = sendData->commandAttr->commandId; updateData.data = sendData->data; updateData.checkSum = 0; memcpy(sendMsg + msgLen, &updateData.startTag, sizeof(updateData.startTag)); msgLen += sizeof(updateData.startTag); memcpy(sendMsg + msgLen, &updateData.length, sizeof(updateData.length)); msgLen += sizeof(updateData.length); memcpy(sendMsg + msgLen, &updateData.version, sizeof(updateData.version)); msgLen += sizeof(updateData.version); memcpy(sendMsg + msgLen, &updateData.sessionId, sizeof(updateData.sessionId)); msgLen += sizeof(updateData.sessionId); memcpy(sendMsg + msgLen, &updateData.checkLineStatus, sizeof(updateData.checkLineStatus)); msgLen += sizeof(updateData.checkLineStatus); memcpy(sendMsg + msgLen, &updateData.reserve, sizeof(updateData.reserve)); msgLen += sizeof(updateData.reserve); memcpy(sendMsg + msgLen, &updateData.motoType, sizeof(updateData.motoType)); msgLen += sizeof(updateData.motoType); memcpy(sendMsg + msgLen, updateData.motoId, strlen(updateData.motoId) + 1); msgLen += strlen(updateData.motoId) + 1; memcpy(sendMsg + msgLen, &updateData.date, sizeof(updateData.date)); msgLen += sizeof(updateData.date); memcpy(sendMsg + msgLen, &updateData.time, sizeof(updateData.time)); msgLen += sizeof(updateData.time); memcpy(sendMsg + msgLen, &updateData.commandId, sizeof(updateData.commandId)); msgLen += sizeof(updateData.commandId); memcpy(sendMsg + msgLen, updateData.data, sendData->dataLength); msgLen += sendData->dataLength; updateData.checkSum = getCheckSum((sendMsg + sizeof(updateData.startTag) + sizeof(updateData.length)), packageLength); memcpy(sendMsg + msgLen, &updateData.checkSum, sizeof(updateData.checkSum)); msgLen += sizeof(updateData.checkSum); // fwrite(sendMsg, 1, msgLen, positionLogFd); // fclose(positionLogFd); return send2Remote(sendMsg, msgLen); }