mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-03 21:20:31 -05: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()
							 |