RadioMenu

Czas wykorzystać prezentowane na blogu sposoby na wysyłkę komend CAT do portu szeregowego do czegoś sensownego. Pomysł był taki – podręczne menu „wyskakujące”, do szybkiej zmiany wybranych ustawień radia przy użyciu komend CAT.
Okienko ma być tzw. popup’em wyskakującym po naciśnięciu środkowego klawisza myszy (rolki) lub alternatywnie – kombinacji klawiszy: Ctrl + prawy klawisz myszy

Przykładowe funkcje  zawarte w menu:
– Ustawianie mocy;   Każdy użytkownik FTDX 3000 doceni ten pomysł na  ustawianie RF Power w radiu – nigdy więcej ciągłego kręcenia gałką ☺:

  – Szybka zmiana funkcji wskaźnika SWR/ALC:

 
 – np. predefiniowane ustawienia filtrów (np. ustawienie jednym kliknięciem Narrow + Roofing 300Hz + Contour ON)
I wiele innych, wg zapotrzebowania i dostępnych komend CAT

Zbudowanie prostego menu w AHK pokazane jest dość dobrze w przykładzie #2 w tym helpie, ale mam nadzieję, że prezentowany poniżej skrypt jest dość przejrzysty, a jego rozbudowa i dopasowanie do własnych celów nie powinno być trudne.
Procedura wysyłająca dane do portu była opisana w części dotyczącej komend CAT, samo wysyłanie danych do portu szeregowego – przy opisie SerialSend, a wymagania konfiguracyjne tutaj.
Gotowy skrypt poniżej.
A do pobrania jako ZIP – TUTAJ
Powodzenia!

SetWorkingDir %A_ScriptDir%
; RadioMenu - podręczne menu szybkich komend TRX
; opracowanie: SP6OPC    www.radiohotkey.pl
; komendy CAT użyte w skrypcie -> FTDX 3000
;
; Wywołanie menu:
; klik w środkowy klawisz myszy (rolka)  lub
; kombinacja klawisza Ctrl + prawy klawisz myszy
;
; Program SerialSend.exe ze strony https://batchloaf.wordpress.com/serialsend/ 
; umieść w tym samym katalogu na dysku, co prezentowany skrypt

; Procedura wysyłania dowolnego ciągu znaków do portu szeregowego
; z użyciem programiku SerialSend.exe:
wyslij(portc, br, komenda)
{
  RunWait %ComSpec% /c serialsend.exe /devnum %portc% /baudrate %br% %komenda%,,Hide
}

; wpisz poniżej numer portu COM dla CAT i używany przez Ciebie baudrate

port := 8
BR   := 19200  

;definicja menu - zobacz https://www.autohotkey.com/docs/commands/Menu.htm

Menu, SubmenuRadio, Add, SWR,   MHRadio
Menu, SubmenuRadio, Add, ALC,   MHRadio
Menu, SubmenuRadio, Add, Amper, MHRadio
Menu, SubmenuRadio, Add, Volt,  MHRadio

Menu, SubmenuPower, Add, 100W, MHPower
Menu, SubmenuPower, Add, 90W,  MHPower
Menu, SubmenuPower, Add, 75W,  MHPower
Menu, SubmenuPower, Add, 50W,  MHPower
Menu, SubmenuPower, Add, 30W,  MHPower
Menu, SubmenuPower, Add, 15W,  MHPower

Menu, SubmenuFilter, Add, Contour, 	MHFcont
Menu, SubmenuFilter, Add, APF,     	MHFapf
Menu, SubmenuFilter, Add, Normal,  	MHFnorm
Menu, SubmenuFilter, Add  ; separator
Menu, SubmenuFilter, Add, 300Hz, 	MHF300
Menu, SubmenuFilter, Add, 600Hz, 	MHF600
Menu, SubmenuFilter, Add, 3kHz,  	MHF3k
Menu, SubmenuFilter, Add, 6kHz,  	MHF6k
Menu, SubmenuPreset, Add, CW   Narrow+Contour, 	MHP1
Menu, SubmenuPreset, Add, CW   Normal, 		MHP11
Menu, SubmenuPreset, Add, CW   Wide, 		MHP12

;główne Menu

Menu, MyMenu, Add, PRESET, :SubmenuPreset
Menu, MyMenu, Add, Radio,  :SubmenuRadio
Menu, MyMenu, Add, Filters,:SubmenuFilter
Menu, MyMenu, Add, Power,  :SubmenuPower
Menu, MyMenu, Add
Menu, MyMenu, Add, Cancel
return 

; poniżej obsługa MenuHandler
; metoda 1
; wspólny MenuHandler i zmienna A_ThisMenuItem

MHPower:
switch A_ThisMenuItem
{
	case "100W": wyslij(port,BR,"PC100;")
	case "90W":  wyslij(port,BR,"PC090;")
	case "75W":  wyslij(port,BR,"PC075;")
	case "50W":  wyslij(port,BR,"PC050;")
	case "30W":  wyslij(port,BR,"PC030;")
	case "15W":  wyslij(port,BR,"PC015;")
}
return
MHRadio:
switch A_ThisMenuItem
{
	case "SWR":   wyslij(port,BR,"MS3;")
	case "ALC":   wyslij(port,BR,"MS1;")
	case "Amper": wyslij(port,BR,"MS4;")
	case "Volt":  wyslij(port,BR,"MS5;")
}
Return

; metoda 2 - dedykowane MenuHandler

MHP1:
	wyslij(port,BR,"MD07;NA01;CO0001;RF04;")
return
MHP11:
	wyslij(port,BR,"MD07;NA00;CO0000;RF05;")
return
MHP12:
	wyslij(port,BR,"MD07;NA00;CO0000;RF03;")
return
MHFcont:
	wyslij(port,BR,"CO0001;")
return
MHFapf:
	wyslij(port,BR,"CO0002;")
return
MHFnorm:
	wyslij(port,BR,"CO0000;")
return
MHF300:
	wyslij(port,BR,"RF05;")
return
MHF600:
	wyslij(port,BR,"RF04;")
return
MHF3k:
	wyslij(port,BR,"RF03;")
return
MHF6k:
	wyslij(port,BR,"RF02;")
return

Cancel:
;nic nie rób, tylko ukryj menu
Return 

^RButton::  ; Ctrl + prawy myszy  lub..
 MButton::  ; rolka, inaczej środkowy klawisz myszy ..
   Menu, MyMenu, Show  ; uruchomi nasze podręczne menu
Return

#Z::ExitApp   ; kombinacja Win-Z zakończy działanie skryptu

  Jeżeli nie pasuje Ci użyty w kodzie program serialsend.exe, skorzystaj z alternatywnej procedury wysyłającej dane do COM, opisanej przy okazji komend CAT