From 20566df9ca292463ab280f1b5a5b895382e05c81 Mon Sep 17 00:00:00 2001 From: Mario Fink Date: Thu, 6 Feb 2020 16:24:20 +0000 Subject: [PATCH] initial commit --- README.md | 78 +++++++++++++++++++++++++ check_markers.sh | 12 ++++ eatit | Bin 0 -> 35040 bytes makefile | 14 +++++ src/main.cpp | 85 +++++++++++++++++++++++++++ src/raweat.hpp | 148 +++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 337 insertions(+) create mode 100644 README.md create mode 100755 check_markers.sh create mode 100755 eatit create mode 100644 makefile create mode 100644 src/main.cpp create mode 100644 src/raweat.hpp diff --git a/README.md b/README.md new file mode 100644 index 0000000..e5d6ffe --- /dev/null +++ b/README.md @@ -0,0 +1,78 @@ + +# raw_eater + +The _raw_eater_ package is used to parse files with extension `*.raw`, which +are usually binary files produced by the labsoftware _Famos_ to dump measurement +time series. + +## File Structure + +The binary `*.raw` file features a series of markers that indicate the starting +point of various blocks of information. Every markers is introduced by character +"|" = `0x 7c` followed by two uppercase letters, which characterize the type of +marker. The following markers are defined: + +1. CF (0x 43 46) +1. CK (0x 43 4b) +1. NO (0x 4e 4f) +1. CG (0x 43 47) +1. CD (0x 43 44) +1. NT (0x 4e 54) +1. CC (0x 43 43) +1. CP (0x 43 50) +1. CR (0x 43 52) +1. CN (0x 43 4e) +1. Cb (0x 43 62) +1. CS (0x 43 53) + +Each of these markers are followed by multiple commata (0x 2c) separated parameters +and are terminated by a semicolon `;` = 0x 3b, except for the sequence following +the data marker CS, that may have any number of 0x3b occurencies, while still +terminated by a semicolon at the very end of the file (since CS is the last marker +section in the file). The markers have the following meaning: + +- *CF* (mostly 4 parameters) + this marker is mostly just `|CF,2,1,1;` and hence I've got no fucking + idea what it actually means! +- *CK* (mostly 4 parameters) + same problem for this one: it always seems to be `|CK,1,3,1,1;` ... +- *NO* (mostly 6 parameters) + provides some info about the software package/device and its version that + produced the file, e.g. something like + `|NO,1,85,0,77,imc STUDIO 5.0 R3 (10.09.2015)@imc DEVICES 2.8R7 (26.8.2015)@imcDev__15190567,0,;` +- *CG* (mostly 5 parameters) + another one of these apparently useless markers, looks for instance like + `|CG,1,5,1,1,1;` +- *CD* (mostly 11 parameters) + since we're dealing with measured entities from the lab this markers contains + info about the measurement frequency, i.e. sample rate. For instance + `|CD,2, 63, 5.0000000000000001E-03,1,1,s,0,0,0, 0.0000000000000000E+00,1;` + indicates a measured entity every 0.005 seconds, i.e. a sample rate = 200Hz +- *NT* (mostly 8 parameters) + whatever ?!? for instance `|NT,1,16,1,1,1980,0,0,0.0;` + maybe it's the datatype ?? +- *CC* (mostly 4 parameters) + `|CC,1,3,1,1;` +- *CP* (mostly 10 parameters) + `|CP,1,16,1,4,7,32,0,0,1,0;` +- *CR* (mostly 8 parameters) + provides the _physical unit_ of the measured entity, maybe shows the + minimum and maximum value during the measurment, e.g. + `|CR,1,60,0, 1.0000000000000000E+00, 0.0000000000000000E+00,1,4,mbar;` +- *CN* (mostly 9 parameters) + gives the _name_ of the measured entity + `|CN,1,27,0,0,0,15,pressure_Vacuum,0,;` +- *Cb* (mostly 14 paramters) (optional?) + this one probably gives the minimum/maximum measured values!! + `|Cb,1,117,1,0,1,1,0,341288,0,341288,1,0.0000000000000000E+00,1.1781711390000000E+09,;` +- *CS* (mostly 4 parameters) + this markers announces the actual measurement data in binary format, + provide the number of values and the actual data, + e.g. `|CS,1, 341299, 1, ...data... ;` + +## Open Issues and question? + +- which parameter indicate(s) little vs. big endian? + + + diff --git a/check_markers.sh b/check_markers.sh new file mode 100755 index 0000000..f595321 --- /dev/null +++ b/check_markers.sh @@ -0,0 +1,12 @@ +##!/bin/bash/ + +dir=$1 + +#ls ${dir} | while read fn; do echo $fn; cat ${dir}$fn | grep -a "|[A-Z][A-Z]," -o | wc -l; done; + +#ls ${dir} | while read fn; do echo $fn; cat ${dir}$fn | grep -a "|[A-Z][A-Z]," -o; done; + +#ls ${dir} | while read fn; do echo $fn; cat ${dir}$fn | xxd | head -n10 | tail -n3; done; + +ls ${dir} | while read fn; do echo $fn; cat ${dir}$fn | grep -a "|[A-Z][a-zA-Z]," -o | wc -l; done; +ls ${dir} | while read fn; do echo $fn; cat ${dir}$fn | grep -a "|[A-Z][a-zA-Z]," -o; done; diff --git a/eatit b/eatit new file mode 100755 index 0000000000000000000000000000000000000000..20dc16fdca9ec7b8e917bbe7fc688e2a4b970fa1 GIT binary patch literal 35040 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 literal 0 HcmV?d00001 diff --git a/makefile b/makefile new file mode 100644 index 0000000..425e0f6 --- /dev/null +++ b/makefile @@ -0,0 +1,14 @@ + +RAW = ../raw/ + +SRC = src/ +EXE = eatit + +CCC = g++ +OPT = -O3 -Wall + +$(EXE) : $(SRC)main.cpp $(SRC)raweat.hpp + $(CCC) $(OPT) $< -o $@ + +clean : + rm -f $(EXE) diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..941958b --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,85 @@ +//---------------------------------------------------------------------------// + +#include "../src/raweat.hpp" + +//---------------------------------------------------------------------------// + +int main(int argc, char* argv[]) +{ + // path of filename provided ? + assert( argc > 1 && "please provide a filename and path" ); + + std::cout<<"number of CLI-arguments: "< +#include +#include +#include +#include +#include +#include + +//---------------------------------------------------------------------------// + +class raw_eater +{ + +private: + + // filename and path + std::string rawfile_; + + // raw buffer + std::vector rawdata_; + + // file format markers + std::map> markers_ = { + {"intro marker",{0x7c,0x43,0x46}}, + {"fileo marker",{0x7c,0x43,0x4b}}, + {"vendo marker",{0x7c,0x4e,0x4f}}, + {"param marker",{0x7c,0x43,0x47}}, + {"sampl marker",{0x7c,0x43,0x44}}, + {"typei marker",{0x7c,0x4e,0x54}}, + {"dimen marker",{0x7c,0x43,0x43}}, + {"datyp marker",{0x7c,0x43,0x50}}, + {"punit marker",{0x7c,0x43,0x52}}, + {"ename marker",{0x7c,0x43,0x4e}}, + {"minma marker",{0x7c,0x43,0x62}}, + {"datas marker",{0x7c,0x43,0x53}} + }; + + // data sections corresponding to markers + std::map> datasec_; + +public: + + // constructor + raw_eater(std::string rawfile) : rawfile_(rawfile) + { + // open file and put data in buffer + std::ifstream fin(rawfile.c_str(),std::ifstream::binary); + assert( fin.good() && "failed to open file" ); + try { + std::ifstream fin(rawfile.c_str(),std::ifstream::binary); + } + catch (std::ifstream::failure e) { + std::cerr<<"opening file " + rawfile + " failed"; + } + std::vector rawdata((std::istreambuf_iterator(fin)), + (std::istreambuf_iterator())); + rawdata_ = rawdata; + + // show size of buffer + std::cout<<"size of buffer "<> mrk : markers_ ) + { + assert( mrk.second.size() > 0 && "please don't defined any empty marker" ); + + // find marker's byte sequence in buffer + for ( unsigned long int idx = 0; idx < rawdata_.size(); idx++ ) + { + bool gotit = true; + for ( unsigned long int mrkidx = 0; mrkidx < mrk.second.size() && gotit; mrkidx ++ ) + { + if ( ! (mrk.second[mrkidx] == rawdata_[idx+mrkidx]) ) gotit = false; + } + + // if we got the marker, collect following bytes until end of marker byte 0x 3b + if ( gotit ) + { + // array of data associated to marker + std::vector markseq; + + if ( mrk.first != "datas marker" ) + { + // collect bytes until we find semicolon ";", i.e. 0x3b + int seqidx = 0; + while ( rawdata_[idx+seqidx] != 0x3b ) + { + markseq.push_back(rawdata_[idx+seqidx]); + seqidx++; + } + } + else + { + // make sure the data marker is actually the last and extends until end of file + //assert( TODO && "data marker doesn't appear to be the very last"); + + // that's the data itself + for ( unsigned long int didx = idx; didx < rawdata_.size()-1; didx++ ) + { + markseq.push_back(rawdata_[didx]); + } + } + } + } + } + + for (std::pair> mrk : markers_ ) + { + std::cout<