full imc raw format revision
This commit is contained in:
193
src/newmain.cpp
Normal file
193
src/newmain.cpp
Normal file
@@ -0,0 +1,193 @@
|
||||
//---------------------------------------------------------------------------//
|
||||
|
||||
#include <iostream>
|
||||
#include <filesystem>
|
||||
|
||||
#include "imc_key.hpp"
|
||||
#include "imc_block.hpp"
|
||||
#include "imc_raw.hpp"
|
||||
|
||||
//---------------------------------------------------------------------------//
|
||||
|
||||
const std::string gittag("TAGSTRING");
|
||||
const std::string githash("HASHSTRING");
|
||||
|
||||
//---------------------------------------------------------------------------//
|
||||
|
||||
// define type of key-value map object
|
||||
typedef std::map<std::string,std::string> optkeys;
|
||||
|
||||
optkeys parse_args(int argc, char* argv[], bool list_args = false)
|
||||
{
|
||||
if ( list_args )
|
||||
{
|
||||
std::cout<<"number of CLI-arguments: "<<argc<<"\n";
|
||||
for ( int i = 0; i < argc; i++ ) std::cout<<i<<": "<<argv[i]<<"\n";
|
||||
}
|
||||
|
||||
// declare empty key-value object
|
||||
optkeys prsdkeys;
|
||||
|
||||
// parse all CLI arguments
|
||||
for ( int i = 1; i < argc; i++ )
|
||||
{
|
||||
if ( std::string(argv[i]) == std::string("--showmeta")
|
||||
|| std::string(argv[i]) == std::string("-m") )
|
||||
{
|
||||
prsdkeys.insert(std::pair<std::string,std::string>("showmeta",argv[i]));
|
||||
}
|
||||
else if ( std::string(argv[i]) == std::string("--listgroups")
|
||||
|| std::string(argv[i]) == std::string("-g") )
|
||||
{
|
||||
prsdkeys.insert(std::pair<std::string,std::string>("listgroups",argv[i]));
|
||||
}
|
||||
else if ( std::string(argv[i]) == std::string("--listchannels")
|
||||
|| std::string(argv[i]) == std::string("-c") )
|
||||
{
|
||||
prsdkeys.insert(std::pair<std::string,std::string>("listchannels",argv[i]));
|
||||
}
|
||||
else if ( std::string(argv[i]) == std::string("--listblocks")
|
||||
|| std::string(argv[i]) == std::string("-b") )
|
||||
{
|
||||
prsdkeys.insert(std::pair<std::string,std::string>("listblocks",argv[i]));
|
||||
}
|
||||
else if ( std::string(argv[i]) == std::string("--filename")
|
||||
|| std::string(argv[i]) == std::string("-f") )
|
||||
{
|
||||
if ( i+1 == argc || argv[i+1][0] == '-' )
|
||||
{
|
||||
std::cerr<<"invalid or missing --filename argument\n";
|
||||
prsdkeys.insert(std::pair<std::string,std::string>("invalid","filename"));
|
||||
}
|
||||
else
|
||||
{
|
||||
prsdkeys.insert(std::pair<std::string,std::string>("filename",argv[i+1]));
|
||||
i = i + 1;
|
||||
}
|
||||
}
|
||||
else if ( std::string(argv[i]) == std::string("--help")
|
||||
|| std::string(argv[i]) == std::string("-h") )
|
||||
{
|
||||
prsdkeys.insert(std::pair<std::string,std::string>("help",argv[i]));
|
||||
}
|
||||
else if ( std::string(argv[i]) == std::string("--version")
|
||||
|| std::string(argv[i]) == std::string("-v") )
|
||||
{
|
||||
prsdkeys.insert(std::pair<std::string,std::string>("version",argv[i]));
|
||||
}
|
||||
else
|
||||
{
|
||||
// check for invalid arguments
|
||||
if ( argv[i][0] == '-' )
|
||||
{
|
||||
std::cerr<<"invalid or unkown argument: "<<argv[i]<<"\n";
|
||||
prsdkeys.insert(std::pair<std::string,std::string>("invalid",argv[i]));
|
||||
}
|
||||
// or missing filenames
|
||||
else if ( std::string(argv[i]).find(".raw") == std::string::npos )
|
||||
{
|
||||
std::cerr<<"doesn't look like a .raw file (make sure to include extension in filename!): "
|
||||
<<argv[i]<<"\n";
|
||||
prsdkeys.insert(std::pair<std::string,std::string>("invalid",argv[i]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return prsdkeys;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------//
|
||||
|
||||
void show_version()
|
||||
{
|
||||
std::cout<<"imctermite ["<<gittag<<"-g"<<githash<<"]"<<"\n";
|
||||
}
|
||||
|
||||
void show_usage()
|
||||
{
|
||||
std::cout<<"\n"
|
||||
<<"imctermite ["<<gittag<<"-g"<<githash<<"] (github.com/RecordEvolution/IMCtermite.git)"
|
||||
<<"\n\n"
|
||||
<<"Decode IMC raw files and dump data as *.csv"
|
||||
<<"\n\n"
|
||||
<<"Usage:\n\n"
|
||||
<<" imctermite <raw-file> [options]"
|
||||
<<"\n\n"
|
||||
<<"Options:"
|
||||
<<"\n\n"
|
||||
<<" -m, --showmeta show meta information about IMC dataset\n"
|
||||
<<" -g, --listgroups list channelgroups\n"
|
||||
<<" -c, --listchannels list channels\n"
|
||||
<<" -b, --listblocks list IMC key-blocks\n"
|
||||
<<"- f, --filename filename for csv output\n"
|
||||
<<" -h, --help show this help message \n"
|
||||
<<" -v, --version display version\n"
|
||||
<<"\n";
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------//
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
// parse CLI arguments
|
||||
optkeys cfgopts = parse_args(argc,argv);
|
||||
|
||||
// exit on any invalid arguments
|
||||
if ( cfgopts.count("invalid") > 0 ) return 1;
|
||||
|
||||
if ( cfgopts.count("version") == 1 )
|
||||
{
|
||||
show_version();
|
||||
}
|
||||
else if ( cfgopts.count("help") == 1 )
|
||||
{
|
||||
show_usage();
|
||||
}
|
||||
else
|
||||
{
|
||||
// check for at least one file argument
|
||||
if ( cfgopts.size() == (unsigned int)argc-1 )
|
||||
{
|
||||
std::cerr<<"no .raw file given => check --help for usage\n";
|
||||
return 1;
|
||||
}
|
||||
std::string rawfile(argv[1]);
|
||||
|
||||
// check existence of file
|
||||
std::filesystem::path rawpath = rawfile;
|
||||
if ( !std::filesystem::exists(rawpath) )
|
||||
{
|
||||
std::cerr<<"file does not exist: "<<rawfile<<"\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
// initialize "imc::raw" instance
|
||||
imc::raw imcraw;
|
||||
try {
|
||||
imcraw.set_file(rawfile);
|
||||
} catch (const std::exception& e ) {
|
||||
std::cerr<<"failed to open and parse raw-file: "<<e.what()<<"\n";
|
||||
return 1;
|
||||
}
|
||||
|
||||
// list blocks
|
||||
for ( imc::block blk: imcraw.blocks() )
|
||||
{
|
||||
std::cout<<blk.get_info()<<"\n";
|
||||
}
|
||||
}
|
||||
|
||||
// for ( std::map<std::string,imc::key>::iterator it = imc::keys.begin();
|
||||
// it != imc::keys.end(); ++it )
|
||||
// {
|
||||
// std::cout<<it->second.get_info()<<"\n";
|
||||
// }
|
||||
//
|
||||
// std::vector<unsigned char> buff;
|
||||
// imc::block blk(imc::keys.at("CF"),0,100,"data.raw",&buff);
|
||||
// std::cout<<blk.get_info()<<"\n";
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------//
|
92
src/raweater.cpp
Normal file
92
src/raweater.cpp
Normal file
@@ -0,0 +1,92 @@
|
||||
//---------------------------------------------------------------------------//
|
||||
|
||||
#include <iomanip>
|
||||
#include <iostream>
|
||||
#include "../lib/raweat.hpp"
|
||||
#include "../lib/rawmerge.hpp"
|
||||
|
||||
//---------------------------------------------------------------------------//
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
|
||||
if ( argc != 3 ) //or ( argc == 1 && std::string(argv[1]) == str::string("--help") )
|
||||
{
|
||||
std::cout<<"\n"<<"Usage: ./eatit INPUTFILE OUTPUTFILE"<<"\n"
|
||||
<<"Convert any file in imc-format .raw to plain text .csv"<<"\n"
|
||||
<<"Example: ./eatit Druck_THZ_DK.raw druck_thz_dk.csv"<<"\n\n";
|
||||
return 0;
|
||||
}
|
||||
|
||||
// get name/path of file from CLI argument
|
||||
std::string rawfile(argv[1]);
|
||||
|
||||
// declare instance of 'raw_eater' (and decode data)
|
||||
raw_eater eatraw; //rawfile,false);
|
||||
|
||||
// set file to be decoded
|
||||
eatraw.set_file(rawfile,true);
|
||||
|
||||
// do conversion
|
||||
eatraw.setup_and_conversion(false);
|
||||
|
||||
// eatraw.show_markers();
|
||||
|
||||
// std::cout<<"\n";
|
||||
// std::map<std::string,std::vector<unsigned char>> marks = eatraw.get_markers();
|
||||
// for ( auto mrk: marks )
|
||||
// {
|
||||
// // get data
|
||||
// std::vector<unsigned char> dat = eatraw.get_marker_data(mrk.first);
|
||||
//
|
||||
// // print marker name, length and data
|
||||
// std::cout<<mrk.first<<" : "<<dat.size()<<'\n';
|
||||
// std::cout<<std::setfill('-')<<std::setw(96)<<'\n'<<std::setfill(' ');
|
||||
// eatraw.show_hex(dat,32,512);
|
||||
// std::cout<<"\n";
|
||||
//
|
||||
// std::vector<std::string> segvec = eatraw.get_segment(mrk.first);
|
||||
// std::cout<<"number of elements in segment: "<<segvec.size()<<"\n\n";
|
||||
// //for ( auto el: segvec ) std::cout<<el<<"\n";
|
||||
// }
|
||||
|
||||
// get array of encoded data
|
||||
// std::vector<double> maindata = eatraw.get_data();
|
||||
// std::cout<<"\nsize of data array: "<<maindata.size()<<"\n\n";
|
||||
// for ( unsigned long int i = 0; i < 10; i++ ) std::cout<<mydata[i]<<"\n";
|
||||
|
||||
// write data in csv-file
|
||||
if ( eatraw.get_valid() )
|
||||
{
|
||||
eatraw.write_table(std::string(argv[2]),' ');
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout<<"=> invalid/corrupt .raw file\n";
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------//
|
||||
|
||||
// declare instance of 'raw_merger'
|
||||
raw_merger eatmea;
|
||||
|
||||
// add channels
|
||||
eatmea.add_channel(rawfile,false);
|
||||
eatmea.add_channel("smp/VehicleSpeed_HS.raw",false);
|
||||
// eatmea.add_channel("smp/Mercedes_E-Klasse-2019-08-08/Flex_StWhl_AnglSpd.raw",false);
|
||||
// eatmea.add_channel("smp/Rangerover_Evoque_F-RR534_2019-05-07/Temp_Disc_FR.raw",false);
|
||||
|
||||
// write merged table
|
||||
if ( eatmea.get_num_channels() > 0 )
|
||||
{
|
||||
eatmea.write_table_all("output/allchannels.csv",' ');
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cout<<"no valid channel added\n";
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------//
|
Reference in New Issue
Block a user