# pragma once 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <QObject> 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <memory> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <map> 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <set> 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "tools/cabana/dbc/dbcfile.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								typedef  std : : set < int >  SourceSet ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  SourceSet  SOURCE_ALL  =  { - 1 } ; 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								const  int  INVALID_SOURCE  =  0xff ; 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								inline  bool  operator < ( const  std : : shared_ptr < DBCFile >  & l ,  const  std : : shared_ptr < DBCFile >  & r )  {  return  l . get ( )  <  r . get ( ) ;  } 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  DBCManager  :  public  QObject  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Q_OBJECT 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public : 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  DBCManager ( QObject  * parent )  :  QObject ( parent )  { } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ~ DBCManager ( )  { } 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  bool  open ( const  SourceSet  & sources ,  const  QString  & dbc_file_name ,  QString  * error  =  nullptr ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  bool  open ( const  SourceSet  & sources ,  const  QString  & name ,  const  QString  & content ,  QString  * error  =  nullptr ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  close ( const  SourceSet  & sources ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  close ( DBCFile  * dbc_file ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  closeAll ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  addSignal ( const  MessageId  & id ,  const  cabana : : Signal  & sig ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  updateSignal ( const  MessageId  & id ,  const  QString  & sig_name ,  const  cabana : : Signal  & sig ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  removeSignal ( const  MessageId  & id ,  const  QString  & sig_name ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  updateMsg ( const  MessageId  & id ,  const  QString  & name ,  uint32_t  size ,  const  QString  & node ,  const  QString  & comment ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  removeMsg ( const  MessageId  & id ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  QString  newMsgName ( const  MessageId  & id ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QString  newSignalName ( const  MessageId  & id ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  std : : map < uint32_t ,  cabana : : Msg >  & getMessages ( uint8_t  source ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cabana : : Msg  * msg ( const  MessageId  & id ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cabana : : Msg *  msg ( uint8_t  source ,  const  QString  & name ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  QStringList  signalNames ( ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  inline  int  dbcCount ( )  {  return  allDBCFiles ( ) . size ( ) ;  } 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  int  nonEmptyDBCCount ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  SourceSet  sources ( const  DBCFile  * dbc_file )  const ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  DBCFile  * findDBCFile ( const  uint8_t  source ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  inline  DBCFile  * findDBCFile ( const  MessageId  & id )  {  return  findDBCFile ( id . source ) ;  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std : : set < DBCFile  * >  allDBCFiles ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								signals : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  signalAdded ( MessageId  id ,  const  cabana : : Signal  * sig ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  signalRemoved ( const  cabana : : Signal  * sig ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  signalUpdated ( const  cabana : : Signal  * sig ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  msgUpdated ( MessageId  id ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  msgRemoved ( MessageId  id ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  DBCFileChanged ( ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  maskUpdated ( ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								private : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std : : map < int ,  std : : shared_ptr < DBCFile > >  dbc_files ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								DBCManager  * dbc ( ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								QString  toString ( const  SourceSet  & ss ) ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								inline  QString  msgName ( const  MessageId  & id )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  auto  msg  =  dbc ( ) - > msg ( id ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  msg  ?  msg - > name  :  UNTITLED ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}