kopia lustrzana https://github.com/AlexandreRouma/SDRPlusPlus
				
				
				
			beginning of PlutoSDR context enumeration
							rodzic
							
								
									e6a02a3944
								
							
						
					
					
						commit
						31c9e5767e
					
				|  | @ -28,10 +28,6 @@ public: | |||
| 
 | ||||
|         // Load configuration
 | ||||
|         config.acquire(); | ||||
|         if (config.conf.contains("IP")) { | ||||
|             std::string _ip = config.conf["IP"]; | ||||
|             strcpy(&ip[3], _ip.c_str()); | ||||
|         } | ||||
|         if (config.conf.contains("sampleRate")) { | ||||
|             sampleRate = config.conf["sampleRate"]; | ||||
|         } | ||||
|  | @ -82,6 +78,12 @@ public: | |||
|         gainModes.define(2, "Slow Attack", "slow_attack"); | ||||
|         gainModes.define(3, "Hybrid", "hybrid"); | ||||
| 
 | ||||
|         // Enumerate devices
 | ||||
|         refresh(); | ||||
| 
 | ||||
|         // Select device
 | ||||
|         // TODO
 | ||||
| 
 | ||||
|         // Register source
 | ||||
|         handler.ctx = this; | ||||
|         handler.selectHandler = menuSelected; | ||||
|  | @ -128,6 +130,41 @@ private: | |||
|         return std::string(buf); | ||||
|     } | ||||
| 
 | ||||
|     void refresh() { | ||||
|         // Clear device list
 | ||||
|         devices.clear(); | ||||
| 
 | ||||
|         // Create scan context
 | ||||
|         iio_scan_context* sctx = iio_create_scan_context(NULL, 0); | ||||
|         if (!sctx) { | ||||
|             flog::error("Failed get scan context"); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|         // Enumerate devices
 | ||||
|         iio_context_info** ctxInfoList; | ||||
|         ssize_t count = iio_scan_context_get_info_list(sctx, &ctxInfoList); | ||||
|         if (count < 0) { | ||||
|             flog::error("Failed to enumerate contexts"); | ||||
|             return; | ||||
|         } | ||||
|         for (ssize_t i = 0; i < count; i++) { | ||||
|             iio_context_info* info = ctxInfoList[i]; | ||||
|             std::string desc = iio_context_info_get_description(info); | ||||
|             std::string uri = iio_context_info_get_uri(info); | ||||
| 
 | ||||
|             devices.define(uri, name, uri); | ||||
|         } | ||||
|         iio_context_info_list_free(ctxInfoList); | ||||
|          | ||||
|         // Destroy scan context
 | ||||
|         iio_scan_context_destroy(sctx); | ||||
|     } | ||||
| 
 | ||||
|     void select(const std::string& nuri) { | ||||
|         uri = nuri; | ||||
|     } | ||||
| 
 | ||||
|     static void menuSelected(void* ctx) { | ||||
|         PlutoSDRSourceModule* _this = (PlutoSDRSourceModule*)ctx; | ||||
|         core::setInputSampleRate(_this->sampleRate); | ||||
|  | @ -144,9 +181,9 @@ private: | |||
|         if (_this->running) { return; } | ||||
| 
 | ||||
|         // Open context
 | ||||
|         _this->ctx = iio_create_context_from_uri(_this->ip); | ||||
|         _this->ctx = iio_create_context_from_uri(_this->uri.c_str()); | ||||
|         if (_this->ctx == NULL) { | ||||
|             flog::error("Could not open pluto"); | ||||
|             flog::error("Could not open pluto ({})", _this->uri); | ||||
|             return; | ||||
|         } | ||||
| 
 | ||||
|  | @ -223,16 +260,13 @@ private: | |||
|         PlutoSDRSourceModule* _this = (PlutoSDRSourceModule*)ctx; | ||||
| 
 | ||||
|         if (_this->running) { SmGui::BeginDisabled(); } | ||||
|         SmGui::LeftLabel("IP"); | ||||
|         SmGui::FillWidth(); | ||||
|         if (SmGui::InputText(CONCAT("##_pluto_ip_", _this->name), &_this->ip[3], 16)) { | ||||
|             config.acquire(); | ||||
|             config.conf["IP"] = &_this->ip[3]; | ||||
|             config.release(true); | ||||
|         SmGui::ForceSync(); | ||||
|         if (SmGui::Combo("##plutosdr_dev_sel", &_this->devId, _this->devices.txt)) { | ||||
|             _this->select(_this->devices.value(_this->devId)); | ||||
|             // TODO: Save
 | ||||
|         } | ||||
| 
 | ||||
|         SmGui::LeftLabel("Samplerate"); | ||||
|         SmGui::FillWidth(); | ||||
|         if (SmGui::Combo(CONCAT("##_pluto_sr_", _this->name), &_this->srId, _this->samplerates.txt)) { | ||||
|             _this->sampleRate = _this->samplerates.value(_this->srId); | ||||
|             core::setInputSampleRate(_this->sampleRate); | ||||
|  | @ -240,6 +274,16 @@ private: | |||
|             config.conf["sampleRate"] = _this->sampleRate; | ||||
|             config.release(true); | ||||
|         } | ||||
| 
 | ||||
|         // Refresh button
 | ||||
|         SmGui::SameLine(); | ||||
|         SmGui::FillWidth(); | ||||
|         SmGui::ForceSync(); | ||||
|         if (SmGui::Button(CONCAT("Refresh##_pluto_refr_", _this->name))) { | ||||
|             _this->refresh(); | ||||
|             _this->select(_this->uri); | ||||
| 
 | ||||
|         } | ||||
|         if (_this->running) { SmGui::EndDisabled(); } | ||||
| 
 | ||||
|         SmGui::LeftLabel("Bandwidth"); | ||||
|  | @ -343,16 +387,19 @@ private: | |||
|     iio_channel* rxChan = NULL; | ||||
|     bool running = false; | ||||
| 
 | ||||
|     std::string uri = ""; | ||||
| 
 | ||||
|     double freq; | ||||
|     char ip[1024] = "ip:192.168.2.1"; | ||||
|     float sampleRate = 4000000; | ||||
|     int bandwidth = 0; | ||||
|     int gainMode = 0; | ||||
|     float gain = 0; | ||||
| 
 | ||||
|     int devId = 0; | ||||
|     int srId = 0; | ||||
|     int bwId = 0; | ||||
| 
 | ||||
|     OptionList<std::string, std::string> devices; | ||||
|     OptionList<int, double> samplerates; | ||||
|     OptionList<int, double> bandwidths; | ||||
|     OptionList<int, std::string> gainModes; | ||||
|  |  | |||
		Ładowanie…
	
		Reference in New Issue
	
	 AlexandreRouma
						AlexandreRouma