mirror of
				https://github.com/cjcliffe/CubicSDR.git
				synced 2025-10-31 13:01:40 -04:00 
			
		
		
		
	Basic configuration file init and ppm value save/load test
This commit is contained in:
		
							parent
							
								
									4f2b9d93c3
								
							
						
					
					
						commit
						68d4627e99
					
				| @ -226,6 +226,7 @@ ENDIF (APPLE) | |||||||
| SET (cubicsdr_sources | SET (cubicsdr_sources | ||||||
|     src/CubicSDR.cpp |     src/CubicSDR.cpp | ||||||
| 	src/AppFrame.cpp | 	src/AppFrame.cpp | ||||||
|  | 	src/AppConfig.cpp | ||||||
| 	src/sdr/SDRThread.cpp | 	src/sdr/SDRThread.cpp | ||||||
| 	src/sdr/SDRPostThread.cpp | 	src/sdr/SDRPostThread.cpp | ||||||
| 	src/demod/DemodulatorPreThread.cpp | 	src/demod/DemodulatorPreThread.cpp | ||||||
| @ -267,6 +268,7 @@ SET (cubicsdr_headers | |||||||
| 	src/CubicSDRDefs.h | 	src/CubicSDRDefs.h | ||||||
|     src/CubicSDR.h |     src/CubicSDR.h | ||||||
| 	src/AppFrame.h | 	src/AppFrame.h | ||||||
|  | 	src/AppConfig.h | ||||||
| 	src/sdr/SDRThread.h | 	src/sdr/SDRThread.h | ||||||
| 	src/sdr/SDRPostThread.h | 	src/sdr/SDRPostThread.h | ||||||
| 	src/demod/DemodulatorPreThread.h | 	src/demod/DemodulatorPreThread.h | ||||||
|  | |||||||
							
								
								
									
										100
									
								
								src/AppConfig.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								src/AppConfig.cpp
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,100 @@ | |||||||
|  | #include "AppConfig.h" | ||||||
|  | 
 | ||||||
|  | std::string AppConfig::getConfigDir() { | ||||||
|  | 
 | ||||||
|  |     std::string dataDir = wxStandardPaths::Get().GetUserDataDir().ToStdString(); | ||||||
|  | 
 | ||||||
|  |     bool mkStatus = false; | ||||||
|  | 
 | ||||||
|  |     if (!wxDir::Exists(dataDir)) { | ||||||
|  |         mkStatus = wxDir::Make(dataDir); | ||||||
|  |     } else { | ||||||
|  |         mkStatus = true; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (!mkStatus) { | ||||||
|  |         std::cout << "Warning, unable to initialize user data directory." << std::endl; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return dataDir; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void AppConfig::setPPM(std::string device_serial, int ppm) { | ||||||
|  |     device_ppm[device_serial] = ppm; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int AppConfig::getPPM(std::string device_serial) { | ||||||
|  |     if (device_ppm.find(device_serial) == device_ppm.end()) { | ||||||
|  |         return 0; | ||||||
|  |     } | ||||||
|  |     return device_ppm[device_serial]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool AppConfig::save() { | ||||||
|  |     DataTree cfg; | ||||||
|  | 
 | ||||||
|  |     cfg.rootNode()->setName("cubicsdr_config"); | ||||||
|  |     DataNode *ppm_data = cfg.rootNode()->newChild("ppm"); | ||||||
|  | 
 | ||||||
|  |     std::map<std::string, int>::iterator device_ppm_i; | ||||||
|  |     for (device_ppm_i = device_ppm.begin(); device_ppm_i != device_ppm.end(); device_ppm_i++) { | ||||||
|  |         DataNode *ppm_ent = ppm_data->newChild("device"); | ||||||
|  |         ppm_ent->newChild("id")->element()->set(device_ppm_i->first); | ||||||
|  |         ppm_ent->newChild("value")->element()->set((int)device_ppm_i->second); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     std::string cfgFileDir = getConfigDir(); | ||||||
|  | 
 | ||||||
|  |     wxFileName cfgFile = wxFileName(cfgFileDir, "cubicsdr.xml"); | ||||||
|  |     std::string cfgFileName = cfgFile.GetFullPath(wxPATH_NATIVE).ToStdString(); | ||||||
|  | 
 | ||||||
|  |     if (!cfg.SaveToFileXML(cfgFileName)) { | ||||||
|  |         std::cout << "Error saving :: configuration file '" << cfgFileName << "' is not writable!" << std::endl; | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool AppConfig::load() { | ||||||
|  |     DataTree cfg; | ||||||
|  |     std::string cfgFileDir = getConfigDir(); | ||||||
|  | 
 | ||||||
|  |     wxFileName cfgFile = wxFileName(cfgFileDir, "cubicsdr.xml"); | ||||||
|  |     std::string cfgFileName = cfgFile.GetFullPath(wxPATH_NATIVE).ToStdString(); | ||||||
|  | 
 | ||||||
|  |     if (!cfgFile.Exists()) { | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (cfgFile.IsFileReadable()) { | ||||||
|  |         cfg.LoadFromFileXML(cfgFileName); | ||||||
|  |     } else { | ||||||
|  |         std::cout << "Error loading:: configuration file '" << cfgFileName << "' is not readable!" << std::endl; | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (cfg.rootNode()->hasAnother("ppm")) { | ||||||
|  |         device_ppm.clear(); | ||||||
|  | 
 | ||||||
|  |         DataNode *ppm_data = cfg.rootNode()->getNext("ppm"); | ||||||
|  | 
 | ||||||
|  |         while (ppm_data->hasAnother("device")) { | ||||||
|  |             DataNode *ppm_ent = ppm_data->getNext("device"); | ||||||
|  | 
 | ||||||
|  |             if (ppm_ent->hasAnother("id") && ppm_ent->hasAnother("value")) { | ||||||
|  |                 std::string deviceId(*ppm_ent->getNext("id")); | ||||||
|  |                 int ppmValue = *ppm_ent->getNext("value"); | ||||||
|  |                 setPPM(deviceId, ppmValue); | ||||||
|  |                 std::cout << "Loaded PPM for device '" << deviceId << "' at " << ppmValue << "ppm" << std::endl; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return true; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | bool AppConfig::reset() { | ||||||
|  | 
 | ||||||
|  |     return true; | ||||||
|  | } | ||||||
							
								
								
									
										21
									
								
								src/AppConfig.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/AppConfig.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | #pragma once | ||||||
|  | 
 | ||||||
|  | #include <wx/stdpaths.h> | ||||||
|  | #include <wx/dir.h> | ||||||
|  | #include <wx/filename.h> | ||||||
|  | 
 | ||||||
|  | #include "DataTree.h" | ||||||
|  | 
 | ||||||
|  | class AppConfig { | ||||||
|  | public: | ||||||
|  | 
 | ||||||
|  |     std::string getConfigDir(); | ||||||
|  | 
 | ||||||
|  |     void setPPM(std::string device_serial, int ppm); | ||||||
|  |     int getPPM(std::string device_serial); | ||||||
|  |     bool save(); | ||||||
|  |     bool load(); | ||||||
|  |     bool reset(); | ||||||
|  | private: | ||||||
|  |     std::map<std::string, int> device_ppm; | ||||||
|  | }; | ||||||
| @ -34,8 +34,20 @@ bool CubicSDR::OnInit() { | |||||||
|     chdir(path); |     chdir(path); | ||||||
| #endif | #endif | ||||||
|      |      | ||||||
|     if (!wxApp::OnInit()) |     if (!wxApp::OnInit()) { | ||||||
|         return false; |         return false; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     wxApp:SetAppName("cubicsdr"); | ||||||
|  | 
 | ||||||
|  |     config.setPPM("RTLBlah :: 00000001",11); | ||||||
|  |     config.setPPM("RTLBlah :: 00000002",12); | ||||||
|  |     config.save(); | ||||||
|  |     config.load(); | ||||||
|  | 
 | ||||||
|  |     std::cout << "test1: " << config.getPPM("RTLBlah :: 00000001") << std::endl; | ||||||
|  |     std::cout << "test2: " << config.getPPM("RTLBlah :: 00000002") << std::endl; | ||||||
|  |     std::cout << "test3: " << config.getPPM("foo") << std::endl; | ||||||
| 
 | 
 | ||||||
|     frequency = DEFAULT_FREQ; |     frequency = DEFAULT_FREQ; | ||||||
|     offset = 0; |     offset = 0; | ||||||
| @ -221,3 +233,8 @@ void CubicSDR::setDevice(int deviceId) { | |||||||
| int CubicSDR::getDevice() { | int CubicSDR::getDevice() { | ||||||
|     return sdrThread->getDeviceId(); |     return sdrThread->getDeviceId(); | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | AppConfig *CubicSDR::getConfig() { | ||||||
|  |     return &config; | ||||||
|  | } | ||||||
|  | |||||||
| @ -14,6 +14,7 @@ | |||||||
| #include "SDRPostThread.h" | #include "SDRPostThread.h" | ||||||
| #include "AudioThread.h" | #include "AudioThread.h" | ||||||
| #include "DemodulatorMgr.h" | #include "DemodulatorMgr.h" | ||||||
|  | #include "AppConfig.h" | ||||||
| 
 | 
 | ||||||
| #define NUM_DEMODULATORS 1 | #define NUM_DEMODULATORS 1 | ||||||
| 
 | 
 | ||||||
| @ -49,7 +50,10 @@ public: | |||||||
|     void bindDemodulator(DemodulatorInstance *demod); |     void bindDemodulator(DemodulatorInstance *demod); | ||||||
|     void removeDemodulator(DemodulatorInstance *demod); |     void removeDemodulator(DemodulatorInstance *demod); | ||||||
| 
 | 
 | ||||||
|  |     AppConfig *getConfig(); | ||||||
|  | 
 | ||||||
| private: | private: | ||||||
|  |     AppConfig config; | ||||||
|     PrimaryGLContext *m_glContext; |     PrimaryGLContext *m_glContext; | ||||||
|     std::vector<SDRDeviceInfo *> devs; |     std::vector<SDRDeviceInfo *> devs; | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user