//void writeSystemTime(struct timespec * p) //{ // assert(!clock_settime(CLOCK_REALTIME, p)); //} // Function for filling the packet structure void ModbusClientV1::fillTheCommonPacketHeader(RSPacket::PacketStruct & p, int cmd) { struct timespec time; time.tv_sec = 0x55; time.tv_nsec = 0x66; p.header.errorcode = 0; p.header.cmd = cmd; readSystemTime(&time); setPacketTime(p, time); }
void TankFile::readAndValidateHeader() { // Read in the header: fileHeader.productId = readFourCC(); fileHeader.tankId = readFourCC(); fileHeader.headerVersion = readU32(); fileHeader.dirsetOffset = readU32(); fileHeader.filesetOffset = readU32(); fileHeader.indexSize = readU32(); fileHeader.dataOffset = readU32(); fileHeader.productVersion = readProductVersion(); fileHeader.minimumVersion = readProductVersion(); fileHeader.priority = static_cast<TankFile::Priority>(readU32()); fileHeader.flags = readU32(); fileHeader.creatorId = readFourCC(); fileHeader.guid = readGuid(); fileHeader.indexCrc32 = readU32(); fileHeader.dataCrc32 = readU32(); fileHeader.utcBuildTime = readSystemTime(); readBytes(fileHeader.copyrightText, sizeof(fileHeader.copyrightText)); readBytes(fileHeader.buildText, sizeof(fileHeader.buildText)); readBytes(fileHeader.titleText, sizeof(fileHeader.titleText)); readBytes(fileHeader.authorText, sizeof(fileHeader.authorText)); fileHeader.descriptionText = readWNString(); // Optional debug printing: #if SIEGE_TANK_DEBUG SiegeLog("====== TANK HEADER FOR FILE: \"" << fileName << "\" ======"); SiegeLog("productId.........: " << fileHeader.productId); SiegeLog("tankId............: " << fileHeader.tankId); SiegeLog("headerVersion.....: " << versionWordToStr(fileHeader.headerVersion)); SiegeLog("dirsetOffset......: " << toHexa(fileHeader.dirsetOffset) << " (" << utils::formatMemoryUnit(fileHeader.dirsetOffset) << ")"); SiegeLog("filesetOffset.....: " << toHexa(fileHeader.filesetOffset) << " (" << utils::formatMemoryUnit(fileHeader.filesetOffset) << ")"); SiegeLog("indexSize.........: " << utils::formatMemoryUnit(fileHeader.indexSize)); SiegeLog("dataOffset........: " << toHexa(fileHeader.dataOffset) << " (" << utils::formatMemoryUnit(fileHeader.dataOffset) << ")"); SiegeLog("productVersion....: " << fileHeader.productVersion); SiegeLog("minimumVersion....: " << fileHeader.minimumVersion); SiegeLog("priority..........: " << priorityToString(fileHeader.priority)); SiegeLog("flags.............: " << fileHeader.flags); SiegeLog("creatorId.........: " << fileHeader.creatorId); SiegeLog("Guid..............: " << fileHeader.guid); SiegeLog("indexCrc32........: " << toHexa(fileHeader.indexCrc32)); SiegeLog("dataCrc32.........: " << toHexa(fileHeader.dataCrc32)); SiegeLog("utcBuildTime......: " << fileHeader.utcBuildTime); SiegeLog("copyrightText.....: " << toString(fileHeader.copyrightText)); SiegeLog("buildText.........: " << toString(fileHeader.buildText)); SiegeLog("titleText.........: " << toString(fileHeader.titleText)); SiegeLog("authorText........: " << toString(fileHeader.authorText)); SiegeLog("descriptionText...: " << toString(fileHeader.descriptionText)); SiegeLog("====== END TANK HEADER ======"); #endif // SIEGE_TANK_DEBUG // Fatal errors: if (fileHeader.productId != TankFile::ProductId) { SiegeThrow(TankFile::Error, "\"" << fileName << "\": Header product id doesn't match the expected value!"); } if (fileHeader.tankId != TankFile::TankId) { SiegeThrow(TankFile::Error, "\"" << fileName << "\": Header Tank id doesn't match the expected value!"); } // Warnings: if (fileHeader.creatorId != TankFile::CreatorIdGPG && fileHeader.creatorId != TankFile::CreatorIdUser) { SiegeWarn("Tank creator id is unknown: " << fileHeader.creatorId); } if (fileHeader.headerVersion != Header::ExpectedVersion) { SiegeWarn("Unknown Tank header version: " << fileHeader.headerVersion); } }