mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-30 20:40:20 -04:00 
			
		
		
		
	
		
			
	
	
		
			114 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			114 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | #!/usr/bin/env python3 | ||
|  | """
 | ||
|  | PTT feature control | ||
|  | Switches a PTT Feature on/off with optional link to a LimeRFE feature | ||
|  | """
 | ||
|  | import sys | ||
|  | import traceback | ||
|  | import requests | ||
|  | import time | ||
|  | from optparse import OptionParser | ||
|  | 
 | ||
|  | base_url = "http://127.0.0.1:8091/sdrangel" | ||
|  | 
 | ||
|  | # ====================================================================== | ||
|  | def getInputOptions(): | ||
|  | 
 | ||
|  |     parser = OptionParser(usage="usage: %%prog [-t]\n") | ||
|  |     parser.add_option("-a", "--address", dest="address", help="Address and port. Default: 127.0.0.1:8091", metavar="ADDRESS", type="string") | ||
|  |     parser.add_option("-p", "--ptt-index", dest="ptt_index", help="Index of PTT feture", metavar="INTEGER", type="int") | ||
|  |     parser.add_option("-l", "--limerfe-index", dest="limerfe_index", help="Index of LimeRFE feture", metavar="INTEGER", type="int") | ||
|  |     parser.add_option("-t", "--transmit", dest="transmit", help="PTT on else off", action="store_true") | ||
|  | 
 | ||
|  |     (options, args) = parser.parse_args() | ||
|  | 
 | ||
|  |     if (options.address == None): | ||
|  |         options.address = "127.0.0.1:8091" | ||
|  | 
 | ||
|  |     return options | ||
|  | 
 | ||
|  | 
 | ||
|  | # ====================================================================== | ||
|  | def turn_ptt(options): | ||
|  |     if options.limerfe_index is not None: | ||
|  |         limerfe_url = f"{base_url}/featureset/feature/{options.limerfe_index}/actions" | ||
|  |         if options.transmit: | ||
|  |             limerfe_payload_rx = { | ||
|  |                 "featureType": "LimeRFE", | ||
|  |                 "LimeRFEActions": { | ||
|  |                     "setRx": 0 | ||
|  |                 } | ||
|  |             } | ||
|  |             r = requests.post(url=limerfe_url, json=limerfe_payload_rx) # switch off Rx | ||
|  |             print(f"LimeRFE switch off Rx {r.status_code}") | ||
|  |         else: | ||
|  |             limerfe_payload_tx = { | ||
|  |                 "featureType": "LimeRFE", | ||
|  |                 "LimeRFEActions": { | ||
|  |                     "setTx": 0 | ||
|  |                 } | ||
|  |             } | ||
|  |             r = requests.post(url=limerfe_url, json=limerfe_payload_tx) # switch off Tx | ||
|  |             print(f"LimeRFE switch off Tx {r.status_code}") | ||
|  |         time.sleep(0.2) | ||
|  | 
 | ||
|  |     ptt_payload = { | ||
|  |         "featureType": "SimplePTT", | ||
|  |         "SimplePTTActions": { | ||
|  |             "ptt": 1 if options.transmit else 0 | ||
|  |         } | ||
|  |     } | ||
|  |     ptt_url = f"{base_url}/featureset/feature/{options.ptt_index}/actions" | ||
|  |     r = requests.post(url=ptt_url, json=ptt_payload) | ||
|  |     print(f"SimplePTT post action {r.status_code}") | ||
|  | 
 | ||
|  |     if options.limerfe_index is not None: | ||
|  |         time.sleep(0.2) | ||
|  |         limerfe_url = f"{base_url}/featureset/feature/{options.limerfe_index}/actions" | ||
|  |         if options.transmit: | ||
|  |             limerfe_payload_tx = { | ||
|  |                 "featureType": "LimeRFE", | ||
|  |                 "LimeRFEActions": { | ||
|  |                     "setTx": 1 | ||
|  |                 } | ||
|  |             } | ||
|  |             r = requests.post(url=limerfe_url, json=limerfe_payload_tx) # switch on Tx | ||
|  |             print(f"LimeRFE switch on Tx {r.status_code}") | ||
|  |         else: | ||
|  |             limerfe_payload_rx = { | ||
|  |                 "featureType": "LimeRFE", | ||
|  |                 "LimeRFEActions": { | ||
|  |                     "setRx": 1 | ||
|  |                 } | ||
|  |             } | ||
|  |             for i in range(5): | ||
|  |                 r = requests.post(url=limerfe_url, json=limerfe_payload_rx) # switch on Rx | ||
|  |                 print(f"LimeRFE switch on Rx {r.status_code}") | ||
|  |                 if r.status_code // 100 == 2: | ||
|  |                     break | ||
|  |                 time.sleep(0.5) | ||
|  | 
 | ||
|  | 
 | ||
|  | # ====================================================================== | ||
|  | def main(): | ||
|  |     try: | ||
|  |         options = getInputOptions() | ||
|  | 
 | ||
|  |         global base_url | ||
|  |         base_url = "http://%s/sdrangel" % options.address | ||
|  | 
 | ||
|  |         if options.ptt_index is None: | ||
|  |             print("You must at least give the PTT feature index (-p option)") | ||
|  |             sys.exit(1) | ||
|  | 
 | ||
|  |         turn_ptt(options) | ||
|  | 
 | ||
|  |     except Exception as ex: | ||
|  |         tb = traceback.format_exc() | ||
|  |         print(tb, file=sys.stderr) | ||
|  | 
 | ||
|  | 
 | ||
|  | # ====================================================================== | ||
|  | if __name__ == "__main__": | ||
|  |     main() |