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
}
예제 #3
0
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);
        }
    }
}
예제 #4
0
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;
}
예제 #5
0
/*
 *	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;	
}
예제 #6
0
/*      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;
}
예제 #7
0
// 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;
}
예제 #8
0
파일: Protocol.c 프로젝트: BeanGu/package
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;
}
예제 #9
0
파일: Protocol.c 프로젝트: BeanGu/package
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;
}
예제 #10
0
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;
}
예제 #11
0
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;
}
예제 #12
0
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;
}
예제 #13
0
//! 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;
}
예제 #14
0
void Radioino::sendResponse()
{
	_response += ("CRC" + getCheckSum(_response));
	Serial.println(_response);
}
예제 #15
0
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);

}