mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-30 12:30:20 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			114 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			114 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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()
 |