// ----------------------------------------------------------------------------- static void ProcessIncomingUBloxByte(uint8_t byte) { static size_t bytes_processed = 0, payload_length = 0; static uint8_t id, checksum_a, checksum_b; static uint8_t * data_buffer_ptr = NULL; switch (bytes_processed) { case 0: // Sync char 1 if (byte != UBX_SYNC_CHAR_1) goto RESET; break; case 1: // Sync char 2 if (byte != UBX_SYNC_CHAR_2) goto RESET; break; case 2: // Class (NAV) if (byte != UBX_CLASS_NAV) goto RESET; checksum_a = byte; checksum_b = byte; break; case 3: // ID id = byte; UpdateChecksum(byte, &checksum_a, &checksum_b); break; case 4: // Payload length (lower byte) if (byte > UBLOX_DATA_BUFFER_LENGTH) goto RESET; payload_length = byte; data_buffer_ptr = &data_buffer_[0]; case 5: // Payload length (upper byte should always be zero) UpdateChecksum(byte, &checksum_a, &checksum_b); break; default: // Payload or checksum if (bytes_processed < (6 + payload_length)) // Payload { *data_buffer_ptr++ = byte; UpdateChecksum(byte, &checksum_a, &checksum_b); } else if (bytes_processed == (6 + payload_length)) // Checksum A { if (byte != checksum_a) goto RESET; } else // Checksum B { if (byte == checksum_b) CopyUBloxMessage(id); goto RESET; } break; } bytes_processed++; return; RESET: bytes_processed = 0; }
void MMatchChannel::Tick(u64 nClock) { if (IsChecksumUpdateTime(nClock)) UpdateChecksum(nClock); m_SmartRefresh.UpdateCategory(nClock); if (GetObjCount() <= 0) m_nEmptyPeriod += MTICK_CHANNEL_RUN; else m_nEmptyPeriod = 0; m_nLastTick = nClock; }
//// MDataCheckNode //// MDataCheckNode::MDataCheckNode(BYTE* pData, unsigned int nLen) { static unsigned int s_nID = 0; m_nID = s_nID++; m_pData = pData; m_nLen = nLen; UpdateChecksum(); m_nLastChecksum = m_nChecksum; }
BOOL CDataIndex::Open(LPCTSTR DataFileName, BOOL UseStarts) { // construct index filename from data filename and read header, then verify checksum if (m_Valid) Close(); // create index for the given data file m_DataFileName = _T(DataFileName); // build index filename CFileSpec fs(DataFileName); fs.SetExt(".ldx"); // build cell starts filename CFileSpec ifs(DataFileName); ifs.SetExt(".ldi"); // open index file and read header m_FileHandle = fopen(fs.GetFullSpec(), "rb"); if (m_FileHandle) { if (ReadHeader()) { if (VerifyChecksum(DataFileName)) { m_Valid = TRUE; } else { fclose(m_FileHandle); m_Valid = FALSE; // check for old header checksum if (VerifyChecksum(DataFileName, TRUE)) { // update index and starts file headers UpdateChecksum(DataFileName); // this has to work since we have already opened the file m_FileHandle = fopen(fs.GetFullSpec(), "rb"); if (m_FileHandle) { ReadHeader(); m_Valid = TRUE; } } } } } // see if there is a starts file if (m_Valid && UseStarts) { FILE* f = fopen(ifs.GetFullSpec(), "rb"); if (f) { if (ReadHeader(f)) { if (VerifyChecksum(DataFileName)) { m_CellStarts = new long[m_Header.GridCellsAcross * m_Header.GridCellsUp]; if (m_CellStarts) { if (fread(m_CellStarts, sizeof(long), m_Header.GridCellsAcross * m_Header.GridCellsUp, f) == (unsigned int) (m_Header.GridCellsAcross * m_Header.GridCellsUp)) m_HaveStarts = TRUE; else delete [] m_CellStarts; } } } fclose(f); // re-read index file header...starts file header was read into m_Header ReadHeader(); } else { // could not read starts file...this is an error since UseStarts was TRUE if (m_FileHandle) fclose(m_FileHandle); m_Valid = FALSE; m_FileHandle = NULL; } } return(m_Valid); }
bool SdOsImageWriter::WriteData(DWORD dwOffset, const ByteVector& buffer) { UpdateChecksum(m_checksum, buffer); return m_sd->WriteData(dwOffset-0x80040000 + 2*m_sd->GetBlockSize(), buffer); }