void irsdkDiskServer::logHeaderToIBT() { if(file) fclose(file); char path[MAX_PATH]; // changed 07/07/2014 - Thorsten Kuypers //initPathStr(path, MAX_PATH); //strncpy_s(path, MAX_PATH, dataLogPath, strlen(dataLogPath)); localHeader.tickRate = irsdkServer::sampleRate; sprintf_s(path, MAX_PATH, "%s\\%s-", irsdkDiskServer::dataLogPath, irsdkDiskServer::dataLogFileName); t_time = time(NULL); file = openUniqueFile(path, "ibt", t_time, true); if(file) { int offset = 0; // reset diskSubHeaderOffset = 0; diskLastLap = -1; // main header //****FixMe, no need to clone localHeader? memcpy(&diskHeader, &localHeader, sizeof(diskHeader)); offset += sizeof(diskHeader); //****FixMe, is this nessisary? diskHeader.sessionInfoLen = (int)strlen(sessionStr); // sub header is written out at end of session memset(&diskSubHeader, 0, sizeof(diskSubHeader)); diskSubHeader.sessionStartDate = t_time; diskSubHeaderOffset = offset; offset += sizeof(diskSubHeader); // pointer to var definitions diskHeader.varHeaderOffset = offset; offset += diskHeader.numVars * sizeof(irsdk_varHeader); // pointer to session info string diskHeader.sessionInfoOffset = offset; offset += diskHeader.sessionInfoLen; // pointer to start of buffered data diskHeader.numBuf = 1; diskHeader.varBuf[0].bufOffset = offset; fwrite(&diskHeader, 1, sizeof(diskHeader), file); fwrite(&diskSubHeader, 1, sizeof(diskSubHeader), file); fwrite(&localVarHeader, 1, diskHeader.numVars * sizeof(irsdk_varHeader), file); fwrite(sessionStr, 1, diskHeader.sessionInfoLen, file); if(ftell(file) != diskHeader.varBuf[0].bufOffset) printf("ERROR: file pointer mismach: %d != %d\n", ftell(file), diskHeader.varBuf[0].bufOffset); } }
void irsdkDiskServer::logHeaderToCSV() { if(file) fclose(file); char path[MAX_PATH]; initPathStr(path, MAX_PATH); t_time = time(NULL); file = openUniqueFile(path, "csv", t_time, false); if(file) { // remove trailing ... from string char *pStr = strstr(sessionStr, "..."); if(pStr) *pStr = '\0'; // and write the whole thing out fputs(sessionStr, file); // reserve space for entrys that will be filled in later fprintf(file, "SessionLogInfo:\n"); // get file open time as a string char tstr[512]; tm tm_time; localtime_s(&tm_time, &t_time); strftime(tstr, 512, " %Y-%m-%d %H:%M:%S", &tm_time); tstr[512-1] = '\0'; fprintf(file, " SessionStartDate: %s\n", tstr); fprintf(file, " SessionStartTime: "); startTimeOffset = fileReserveSpace(file); startTime = -1.0; fprintf(file, " SessionEndTime: "); endTimeOffset = fileReserveSpace(file); endTime = -1.0; fprintf(file, " SessionLapCount: "); lapCountOffset = fileReserveSpace(file); lapCount = 0; lastLap = -1; fprintf(file, " SessionRecordCount: "); recordCountOffset = fileReserveSpace(file); recordCount = 0; fprintf(file, "...\n"); // dump the var names for(int i=0; i<localHeader.numVars; i++) { const irsdk_varHeader *rec = &localVarHeader[i]; if(rec->type != irsdk_char && rec->count > 1) { for(int j=0; j<rec->count; j++) fprintf(file, "%s_%d, ", rec->name, j+1); } else fprintf(file, "%s, ", rec->name); } fprintf(file, "\n"); // dump the var descriptions for(int i=0; i<localHeader.numVars; i++) { const irsdk_varHeader *rec = &localVarHeader[i]; int count = (rec->type != irsdk_char && rec->count > 1) ? rec->count : 1; for(int j=0; j<count; j++) fprintf(file, "%s, ", rec->desc); } fprintf(file, "\n"); // dump the var units for(int i=0; i<localHeader.numVars; i++) { const irsdk_varHeader *rec = &localVarHeader[i]; int count = (rec->type != irsdk_char && rec->count > 1) ? rec->count : 1; for(int j=0; j<count; j++) fprintf(file, "%s, ", rec->unit); } fprintf(file, "\n"); // dump the var data type for(int i=0; i<localHeader.numVars; i++) { const irsdk_varHeader *rec = &localVarHeader[i]; int count = (rec->type != irsdk_char && rec->count > 1) ? rec->count : 1; for(int j=0; j<count; j++) { switch(rec->type) { case irsdk_char: fprintf(file, "string, "); break; case irsdk_bool: fprintf(file, "boolean, "); break; case irsdk_int: fprintf(file, "integer, "); break; case irsdk_bitField: fprintf(file, "bitfield, "); break; case irsdk_float: fprintf(file, "float, "); break; case irsdk_double: fprintf(file, "double, "); break; default: fprintf(file, "unknown, "); break; } } } fprintf(file, "\n"); } }