Pense-bête personnel Quelques infos et astuces au sujet du logiciel WinTest. N'a pas vocation à être diffusé |
La documentation Wintest est ici : https://docs.win-test.com/wiki/Main_Page
Enregistreur audio
Télécharger le codeur gratuit Lame : http://www.free-codecs.com/LAME_ACM_Codec_download.htm
Le décompacter dans un dossier C:\Lame
Enregistrez Sous Windows 10 :
En mode CMD administrateur :
C:\Windows\SysWOW64\rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 0 C:\LAME\LameACM.inf
Base de données contest REF
Télécharger le fichier REF.DTB : http://download.win-test.com/databases/
Le copier dans le dossier : C:\ProgramData\Win-Test\databases
Scripts LUA
La documentation est ici : http://download.win-test.com/v4/lua/LuaApiDoc.txt
Les constantes sont ici : http://download.win-test.com/v4/lua/constants.wts
Les scripts sont à placer dans le dossier scripts, chez moi : C:\ProgramData\Win-Test\scripts
Mes scripts :
OnBandChange.wts. A chaque changement de bande, on peut déclencher une action. Ici, on change la puissance par bande afin de s'adapter à la puissance d'excitation du PA et on envoie une commande personnalisée pour fonctionner avec mon script de DXcluster (voir mon Github).
Protocole UDP entre WT et WT-DXcluster
Ayant eu besoin de faire dialoguer avec WT un script Python que j'ai écrit pour envoyer des spots, j'ai eu à décortiquer le protocole utilisé par Wintest. (merci à F6FVY pour son aide)
La trame est envoyée avec un checksum propre à Wintest.
On fait la somme du contenu de la trame, on ne garde que l'octet de poids faible et on met le bit de poids le plus fort à 1
Par exemple, une trame :
La somme de "0x52 0x43 0x56 ......... 0x22" est : 0x121F
On garde l'octet de poids faible, donc 0x1F
on met le bit de poids fort à 1 : 0x1F | 0x80 = 0x9F
le checksum est donc toujours un octet compris entre 0x80 et 0xFF
on rajoute de checksum à la fin de la trame, soit : "0x52 0x43 0x56 ......... 0x22 0x9F"
En Python, la fonction que j'ai écrite :
#############################################
# calculate spot checksum
#############################################
def checksum(self,spot):
sum = 0 # sum of all char in string
for i in spot:
sum += ord(i) # sum in int10
sumMSB = (sum % 128) + 128 # get LSByte and force MSBit to 1
checksum = sumMSB.to_bytes(1,byteorder='big') # convert to bytes format to be added to frame
return checksum
Protocole UDP broadcast STATUS
Les trames sont de la forme : b'STATUS: "STN1" "STN2" 0 7 1 0 212900 "0" 0 "1" 214400 "TK5EP"\xd3\x00'
ce qui correspond à :
STATUS: "StationName" "ToStation" <StationFlags> <BandID> <ModeID><ActiveRadio> <FreqR1> <ManualFreqR1> <FreqR2> <ManualFreqR2> <PassFreq>"OpCallsign"
StationFlags :
STATION_RUN 0 // Default
STATION_RUN2 1 // Bit 0 : If set : RUN2, if not set RUN or RUN1
STATION_MULTI (1 << 1) // Bit 1 : 2 - If set : Multiplier station
STATION_SUPPORT (1 << 2) // Bit 2 : 4 - If set : Support
(inband) / Partner station
BandID:
2KM 0
160 1
80 2
40 3
30 4
20 5
17 6
15 7
12 8
10 9
50 10
70 11
144 12
220 13
432 14
900 15
1296 16
2300 17
3400 18
5700 19
10000 20
24000 21
47000 22
76000 23
120000 24
145000 25
241000 26
60 27
ModeID:
MODE_CW 0
MODE_SSB 1
MODE_RTTY 2
MODE_FM 3
MODE_PSK 4
MODE_PKT 5
MODE_FT8 6
MODE_FT4 7
ActiveRadio :
Radio_1 = 0
Radio_2 = 1
Les fréquences sont exprimées en centaines de Hz. Ex 14123.4 = 141234