# include "tools/cabana/utils/export.h"
# include <QFile>
# include <QTextStream>
# include "tools/cabana/streams/abstractstream.h"
namespace utils {
void exportToCSV ( const QString & file_name , std : : optional < MessageId > msg_id ) {
QFile file ( file_name ) ;
if ( file . open ( QIODevice : : ReadWrite | QIODevice : : Truncate ) ) {
QTextStream stream ( & file ) ;
stream < < " time,addr,bus,data \n " ;
for ( auto e : msg_id ? can - > events ( * msg_id ) : can - > allEvents ( ) ) {
stream < < QString : : number ( can - > toSeconds ( e - > mono_time ) , ' f ' , 3 ) < < " , "
< < " 0x " < < QString : : number ( e - > address , 16 ) < < " , " < < e - > src < < " , "
< < " 0x " < < QByteArray : : fromRawData ( ( const char * ) e - > dat , e - > size ) . toHex ( ) . toUpper ( ) < < " \n " ;
}
}
}
void exportSignalsToCSV ( const QString & file_name , const MessageId & msg_id ) {
QFile file ( file_name ) ;
if ( auto msg = dbc ( ) - > msg ( msg_id ) ; msg & & msg - > sigs . size ( ) & & file . open ( QIODevice : : ReadWrite | QIODevice : : Truncate ) ) {
QTextStream stream ( & file ) ;
stream < < " time,addr,bus " ;
for ( auto s : msg - > sigs )
stream < < " , " < < s - > name ;
stream < < " \n " ;
for ( auto e : can - > events ( msg_id ) ) {
stream < < QString : : number ( can - > toSeconds ( e - > mono_time ) , ' f ' , 3 ) < < " , "
< < " 0x " < < QString : : number ( e - > address , 16 ) < < " , " < < e - > src ;
for ( auto s : msg - > sigs ) {
double value = 0 ;
s - > getValue ( e - > dat , e - > size , & value ) ;
stream < < " , " < < QString : : number ( value , ' f ' , s - > precision ) ;
}
stream < < " \n " ;
}
}
}
} // namespace utils