public:radio:radio_database:ic-r75
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
public:radio:radio_database:ic-r75 [12/07/22 21:42 BST] – [4. Further Reading] john | public:radio:radio_database:ic-r75 [06/03/25 06:49 GMT] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 2: | Line 2: | ||
- | ====== IC-R75 ====== | + | ====== |
- | ===== - Details ===== | + | ===== Details ===== |
- | ===== - Repairs / Mods ===== | + | ===== Repairs / Mods ===== |
* -5V DC/DC converter | * -5V DC/DC converter | ||
- | * capacitor failures | + | * various |
* "Turn Off" fault - due to overheating of 13V regulator | * "Turn Off" fault - due to overheating of 13V regulator | ||
Line 17: | Line 17: | ||
* Improve heatsinking of regulator IC to chassis | * Improve heatsinking of regulator IC to chassis | ||
- | ===== - Remote Control ===== | + | ===== Remote Control ===== |
+ | |||
+ | {{ : | ||
* connected to '' | * connected to '' | ||
Line 68: | Line 71: | ||
Remote control is achieved via a SSH connection to shack '' | Remote control is achieved via a SSH connection to shack '' | ||
- | ===== - Further Reading ===== | + | |
+ | ===== Documentation ===== | ||
+ | |||
+ | * {{ : | ||
+ | * {{ : | ||
+ | |||
+ | |||
+ | |||
+ | ===== | ||
* Python code for the remote control at '' | * Python code for the remote control at '' | ||
- | * server.py | + | ==== server.py |
+ | |||
+ | ++++ Code.... | | ||
<code python> | <code python> | ||
Line 286: | Line 299: | ||
</ | </ | ||
- | * '' | + | ++++ |
+ | ==== icom.py | ||
+ | |||
+ | ++++ Code ... | | ||
<code python> | <code python> | ||
Line 295: | Line 311: | ||
#sport = " | #sport = " | ||
sport = "/ | sport = "/ | ||
- | sbaud = 19200 | + | sbaud = 9600 |
lock = threading.Lock() | lock = threading.Lock() | ||
Line 638: | Line 654: | ||
</ | </ | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | ==== conf.py ==== | ||
+ | |||
+ | ++++ Code .... | | ||
+ | |||
+ | <code python> | ||
+ | # header | ||
+ | preamble = " | ||
+ | controller = " | ||
+ | |||
+ | # commands/ | ||
+ | set_freq_cmd = " | ||
+ | set_mode_cmd = " | ||
+ | get_freq_cmd = " | ||
+ | get_mode_cmd = " | ||
+ | get_smeter_cmd = " | ||
+ | get_swr_cmd = " | ||
+ | digi_off_cmd = " | ||
+ | |||
+ | set_pre_cmd = " | ||
+ | |||
+ | set_pre_off = " | ||
+ | set_pre_on = " | ||
+ | |||
+ | set_att_cmd = " | ||
+ | set_att_on = " | ||
+ | set_att_off = " | ||
+ | |||
+ | ptt_on_cmd = " | ||
+ | ptt_off_cmd = " | ||
+ | |||
+ | pwr_cmd = " | ||
+ | |||
+ | # end of message | ||
+ | eom = " | ||
+ | |||
+ | # controller responses | ||
+ | ack = " | ||
+ | nak = " | ||
+ | |||
+ | a1 = " | ||
+ | n1 = " | ||
+ | cal1 = ( 25, 1, 36, 47, 31, 18, 34, 35 ) | ||
+ | |||
+ | a2 = " | ||
+ | # a2 = " | ||
+ | n2 = " | ||
+ | cal2 = ( 27, 28, 58, 10, 14, 14, 35, 42 ) | ||
+ | |||
+ | n3 = " | ||
+ | |||
+ | n4 = " | ||
+ | </ | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | |||
+ | ==== client.py ==== | ||
+ | |||
+ | ++++ Code .... | | ||
+ | |||
+ | <code python> | ||
+ | __author__ = ' | ||
+ | # client to work with server_oo.py | ||
+ | # | ||
+ | |||
+ | # # v0.1 | ||
+ | |||
+ | import socket | ||
+ | |||
+ | try: | ||
+ | import readline | ||
+ | except ImportError: | ||
+ | pass | ||
+ | |||
+ | import threading | ||
+ | import time | ||
+ | |||
+ | |||
+ | HOST, PORT = " | ||
+ | |||
+ | smlog = " | ||
+ | log_active = [] | ||
+ | |||
+ | |||
+ | def make_con(): | ||
+ | global sock | ||
+ | sock = socket.socket(socket.AF_INET, | ||
+ | sock.connect((HOST, | ||
+ | |||
+ | |||
+ | def get_rnum(): | ||
+ | global num | ||
+ | global radios | ||
+ | |||
+ | names = connect(" | ||
+ | |||
+ | radios = names.split() | ||
+ | num = len(radios) | ||
+ | return num | ||
+ | |||
+ | |||
+ | def get_rname(i): | ||
+ | r = radios[i] | ||
+ | return r | ||
+ | |||
+ | |||
+ | def list_radios(): | ||
+ | num = get_rnum() | ||
+ | global radio | ||
+ | print " | ||
+ | for i in range(0, num): | ||
+ | r = get_rname(i) | ||
+ | print "Radio %d is %s" % (i + 1, r) | ||
+ | |||
+ | |||
+ | def get_lradio(): | ||
+ | num = get_rnum() | ||
+ | |||
+ | lradio = raw_input(" | ||
+ | |||
+ | if not lradio: | ||
+ | print " | ||
+ | return False | ||
+ | elif int(lradio) > num: | ||
+ | print " | ||
+ | return False | ||
+ | |||
+ | else: | ||
+ | |||
+ | return lradio | ||
+ | |||
+ | |||
+ | def set_radio(): | ||
+ | num = get_rnum() | ||
+ | # global radio | ||
+ | global radio_num | ||
+ | global rname | ||
+ | print "There are currently %d radios connected." | ||
+ | for i in range(0, num): | ||
+ | r = get_rname(i) | ||
+ | print "Radio %d is %s" % (i + 1, r) | ||
+ | |||
+ | radio = raw_input(" | ||
+ | try: | ||
+ | if not radio: | ||
+ | print " | ||
+ | return False, False | ||
+ | |||
+ | elif int(radio) > num: | ||
+ | print " | ||
+ | return False, False | ||
+ | except ValueError: | ||
+ | print " | ||
+ | return False, False | ||
+ | |||
+ | else: | ||
+ | radio_num = "" | ||
+ | rname = get_rname(int(radio) - 1) | ||
+ | return radio_num, rname | ||
+ | |||
+ | |||
+ | def prompt(): | ||
+ | print "" | ||
+ | print "The available commands are:" | ||
+ | print " | ||
+ | print " | ||
+ | print " | ||
+ | print " | ||
+ | print " | ||
+ | print " | ||
+ | print " | ||
+ | print " | ||
+ | print " | ||
+ | print " | ||
+ | print "poff : Set Pre-amp Off" | ||
+ | print "gatt : Get Attn" | ||
+ | print "aton : Set Attn On" | ||
+ | print " | ||
+ | print " | ||
+ | print "sync : Sync freq/mode on two radios" | ||
+ | print " | ||
+ | print " | ||
+ | print " | ||
+ | print "" | ||
+ | |||
+ | |||
+ | def start(): | ||
+ | global radio_num | ||
+ | global rname | ||
+ | global sock | ||
+ | |||
+ | data = raw_input(rname + " > " | ||
+ | if len(data.split()) > 1: | ||
+ | print "only one command at a time please" | ||
+ | start() | ||
+ | |||
+ | elif data == " | ||
+ | list_radios() | ||
+ | start() | ||
+ | elif data == " | ||
+ | |||
+ | radio_num, rname = set_radio() | ||
+ | |||
+ | while not radio_num: | ||
+ | radio_num, rname = set_radio() | ||
+ | |||
+ | start() | ||
+ | |||
+ | elif data == " | ||
+ | print "Radio selected is %s" % rname | ||
+ | start() | ||
+ | |||
+ | elif data == " | ||
+ | mode = connect(" | ||
+ | print "%s replied: %s" % (rname, mode) | ||
+ | start() | ||
+ | |||
+ | elif data == " | ||
+ | smode = raw_input(" | ||
+ | mode = connect(" | ||
+ | print "%s replied: %s" % (rname, mode) | ||
+ | start() | ||
+ | |||
+ | elif data == " | ||
+ | freq = connect(" | ||
+ | print "%s replied: %s kHz" % (rname, freq) | ||
+ | start() | ||
+ | |||
+ | elif data == " | ||
+ | sfreq = raw_input(" | ||
+ | freq = connect(" | ||
+ | print "%s replied: %s" % (rname, freq) | ||
+ | start() | ||
+ | |||
+ | elif data == " | ||
+ | smeter = connect(" | ||
+ | print "%s replied: %sdBm" % (rname, smeter) | ||
+ | start() | ||
+ | |||
+ | elif data == " | ||
+ | preamp = connect(" | ||
+ | print "%s replied: %s" % (rname, preamp) | ||
+ | start() | ||
+ | |||
+ | elif data == " | ||
+ | preamp = connect(" | ||
+ | print "%s replied: %s" % (rname, preamp) | ||
+ | start() | ||
+ | |||
+ | elif data == " | ||
+ | preamp = connect(" | ||
+ | print "%s replied: %s" % (rname, preamp) | ||
+ | start() | ||
+ | |||
+ | elif data == " | ||
+ | preamp = connect(" | ||
+ | print "%s replied: %s" % (rname, preamp) | ||
+ | start() | ||
+ | |||
+ | elif data == " | ||
+ | att = connect(" | ||
+ | print "%s replied: %s" % (rname, att) | ||
+ | start() | ||
+ | |||
+ | elif data == " | ||
+ | att = connect(" | ||
+ | print "%s replied: %s" % (rname, att) | ||
+ | start() | ||
+ | |||
+ | elif data == " | ||
+ | get_all() | ||
+ | start() | ||
+ | |||
+ | |||
+ | elif data == " | ||
+ | fname = raw_input(" | ||
+ | if fname == "": | ||
+ | fname = smlog | ||
+ | # check file is valid | ||
+ | try: | ||
+ | f = open(fname, ' | ||
+ | f.close() | ||
+ | except IOError: | ||
+ | print " | ||
+ | start() | ||
+ | |||
+ | list_radios() | ||
+ | |||
+ | lradio = get_lradio() | ||
+ | |||
+ | while not lradio: | ||
+ | lradio = get_lradio() | ||
+ | |||
+ | rname = get_rname(int(lradio) - 1) | ||
+ | if lradio in log_active: | ||
+ | print " | ||
+ | else: | ||
+ | tlog = int(raw_input(" | ||
+ | p = threading.Thread(target=log, | ||
+ | p.setDaemon(True) | ||
+ | p.start() | ||
+ | log_active.append(lradio) | ||
+ | start() | ||
+ | |||
+ | elif data == " | ||
+ | sync_result = sync() | ||
+ | print sync_result | ||
+ | start() | ||
+ | |||
+ | |||
+ | elif data == " | ||
+ | prompt() | ||
+ | start() | ||
+ | |||
+ | |||
+ | elif data == " | ||
+ | rx = connect(" | ||
+ | print " | ||
+ | |||
+ | else: | ||
+ | prompt() | ||
+ | start() | ||
+ | |||
+ | |||
+ | def get_all(): | ||
+ | num = get_rnum() | ||
+ | global radio | ||
+ | print "There are currently %d radios connected." | ||
+ | print " | ||
+ | for i in range(0, num): | ||
+ | r = get_rname(i) | ||
+ | n = "" | ||
+ | freq = connect(" | ||
+ | mode = connect(" | ||
+ | smeter = connect(" | ||
+ | preamp = connect(" | ||
+ | att = connect(" | ||
+ | |||
+ | print " | ||
+ | print " | ||
+ | print "Mode: %s" % mode | ||
+ | print " | ||
+ | print "%s : %s " % (preamp, att) | ||
+ | print " | ||
+ | |||
+ | print "" | ||
+ | |||
+ | |||
+ | def log(p, t, f): | ||
+ | print " | ||
+ | tlog = t | ||
+ | sradio = get_rname(int(p) - 1) | ||
+ | |||
+ | sr = "" | ||
+ | while True: | ||
+ | try: | ||
+ | frequency = connect(" | ||
+ | smeter = connect(" | ||
+ | mode = connect(" | ||
+ | write_file(f, | ||
+ | time.sleep(tlog) | ||
+ | finally: | ||
+ | pass | ||
+ | |||
+ | |||
+ | def get_mradio(): | ||
+ | num = get_rnum() | ||
+ | |||
+ | mradio = raw_input(" | ||
+ | |||
+ | if not mradio: | ||
+ | print " | ||
+ | return False | ||
+ | elif int(mradio) > num: | ||
+ | print " | ||
+ | return False | ||
+ | |||
+ | else: | ||
+ | |||
+ | return mradio | ||
+ | |||
+ | |||
+ | def get_sradio(): | ||
+ | num = get_rnum() | ||
+ | sradio = raw_input(" | ||
+ | |||
+ | if not sradio: | ||
+ | print " | ||
+ | return False | ||
+ | elif int(sradio) > num: | ||
+ | print " | ||
+ | return False | ||
+ | |||
+ | else: | ||
+ | |||
+ | return sradio | ||
+ | |||
+ | |||
+ | def sync(): | ||
+ | num = get_rnum() | ||
+ | print "" | ||
+ | print "Set SLAVE to the same Frequency and Mode as MASTER.\r\n" | ||
+ | print " | ||
+ | for i in range(0, num): | ||
+ | r = get_rname(i) | ||
+ | print "%d is %s" % (i + 1, r) | ||
+ | |||
+ | mradio = get_mradio() | ||
+ | while not mradio: | ||
+ | mradio = get_mradio() | ||
+ | |||
+ | sradio = get_sradio() | ||
+ | while not sradio: | ||
+ | sradio = get_sradio() | ||
+ | sr = "" | ||
+ | mr = "" | ||
+ | mfreq = connect(" | ||
+ | mmode = connect(" | ||
+ | |||
+ | sfreq = connect(" | ||
+ | smode = connect(" | ||
+ | |||
+ | return (sfreq + " | ||
+ | |||
+ | |||
+ | # Try to send and receive in one-go, to prevent the logging thread and the main prog | ||
+ | # getting the wrong receive data | ||
+ | |||
+ | def connect(data): | ||
+ | try: | ||
+ | lock.acquire() | ||
+ | global sock | ||
+ | sock.sendall(data + " | ||
+ | received = sock.recv(2048) | ||
+ | finally: | ||
+ | lock.release() | ||
+ | |||
+ | return received | ||
+ | |||
+ | |||
+ | def write_file(fname, | ||
+ | filename = fname | ||
+ | f = open(filename, | ||
+ | timenow = time.strftime(" | ||
+ | log = " " | ||
+ | f.write(log) | ||
+ | f.close() | ||
+ | |||
+ | |||
+ | make_con() | ||
+ | |||
+ | lock = threading.Lock() | ||
+ | get_all() | ||
+ | print " | ||
+ | radio_num, rname = set_radio() | ||
+ | while not radio_num: | ||
+ | radio_num, rname = set_radio() | ||
+ | |||
+ | prompt() | ||
+ | start() | ||
+ | |||
+ | </ | ||
+ | |||
+ | ++++ | ||
+ | |||
==== Page Info ==== | ==== Page Info ==== | ||
Line 646: | Line 1130: | ||
- | {{tag> | + | {{tag> |
public/radio/radio_database/ic-r75.1657658556.txt.gz · Last modified: 06/03/25 06:49 GMT (external edit)