├── .gitignore ├── LICENSE.txt ├── README.md ├── bulk.sh ├── callfiles └── README.md ├── clogger.cfg.sample ├── clogger.sh ├── contests ├── 13c.cfg ├── 7qp.cfg ├── arrl160.cfg ├── arrldx.cfg ├── arrlss.cfg ├── bigstew.cfg ├── coqp.cfg ├── cqdx.cfg ├── cqm.cfg ├── cqwpx.cfg ├── cqww.cfg ├── cwo.cfg ├── cwt.cfg ├── default.cfg ├── fd.cfg ├── foc.cfg ├── focbw.cfg ├── hpm.cfg ├── iaruhf.cfg ├── jidx.cfg ├── mm.cfg ├── mmccw.cfg ├── naqpcw.cfg ├── nasprint.cfg ├── raccw.cfg ├── rr.cfg ├── skccsks.cfg ├── skccwes.cfg ├── ubadx.cfg ├── wfd.cfg ├── winterfd.cfg ├── wwvnbs-cw.cfg ├── wwvnbs-ssb.cfg ├── yuri.cfg └── zombie.cfg └── debug /.gitignore: -------------------------------------------------------------------------------- 1 | keyer.py 2 | rigctl 3 | *.adi 4 | clogger.cfg 5 | logs/* 6 | debug 7 | callfiles/* 8 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Eric Tamme 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CLogger 2 | 3 | CLogger is a light weight contest logger that is primarily desgined to be used in CW contesting in conjunction with [CWkeyer](https://github.com/etamme/cwkeyer), as a very simple serial keying interface. 4 | 5 | It features: 6 | - Run, and search and pounce modes 7 | - Dynamic function key configuration 8 | - Call and exchange auto fills from callfile 9 | - Automatic DUPE checking 10 | - LOTW compatible ADIF output 11 | 12 | To Use: 13 | - Clone repo and [CWkeyer](https://github.com/etamme/cwkeyer) 14 | - Symlink keyer.py from cwkeyer into the clogger root directory 15 | - Copy clogger.cfg.sample to clogger.cfg 16 | - Configure via clogger.cfg 17 | - Configure applicable contest files 18 | - Update [Call History Files](https://n1mmwp.hamdocs.com/mmfiles/categories/callhistory/) as necessary 19 | 20 | ![demo](https://i.imgur.com/E5HjEoR.gif) 21 | 22 | ## cwkeyer and hamlib keyer 23 | cwkeyer works in a similar way to cwdaemon; by keying the transmitter via the RTS or DTR pins of the computer serial port. It does the timing of the cw characters in computer software. 24 | - Can work with any rig using a simple transistor and capacitor circuit connected to key port of the transceiver 25 | - Can also use the built-in serial ports of many rigs 26 | 27 | Hamlib is used to read frequency in CLogger, but it can also key the transmitter. It does this by sending text over the CAT protocol to the radio's built-in keyer. 28 | - One wire from the Rig to the computer for keying and CAT 29 | - Allows both CAT and CW keying over the same serial tty device without conflicts (only a single application accesses it) 30 | - Uses Rig's CPU for perfect timing 31 | - Keyer speed stays synced between CLogger and Rig 32 | - Works with WFView so can be used on the local computer for fully remote operation. 33 | - New feature of Hamlib; may not work properly before version 4.1. 34 | - Limited radios supported* 35 | 36 | *Several radios support sending CW with hamlib, but CLogger also makes use of the "morse_wait" command to correctly time the CQ repeat, and "stop_morse" command to immediately stop the keyer when ESC is pressed. The IC-7300 was the first radio to be supported with all 3 functions in hamlib. Note that if "morse_wait" is not implemented on your rig, you can set a longer cq interval and it should still be functional. 37 | 38 | ## WFView 39 | Example tested and working config connecting to WFView's pseudo TTY device with an IC-7300: 40 | 41 | ``` 42 | rig="3073" 43 | rigdevice="/home/pi/rig-pty1" 44 | keywithhamlib="true" 45 | rigoptions="" 46 | rigctl="/usr/local/bin/rigctl" #Compiled hamlib v4.1 47 | ``` 48 | -------------------------------------------------------------------------------- /bulk.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # load config elements 4 | source clogger.cfg 5 | source "$contest" 6 | myskcc="18144T" 7 | logfile="./logs/bulklog.adi" 8 | 9 | logqso() { 10 | echo "$dxcall" | tr '[:lower:]' '[:upper:]' >> "$logfile" 11 | echo " $band" | tr '[:lower:]' '[:upper:]' >> "$logfile" 12 | echo " $mhz" | tr '[:lower:]' '[:upper:]' >> "$logfile" 13 | echo " $mode" | tr '[:lower:]' '[:upper:]' >> "$logfile" 14 | echo " $date" | tr '[:lower:]' '[:upper:]' >> "$logfile" 15 | echo " $timeon" | tr '[:lower:]' '[:upper:]' >> "$logfile" 16 | echo " $decall" | tr '[:lower:]' '[:upper:]' >> "$logfile" 17 | echo " $sentrs" | tr '[:lower:]' '[:upper:]' >> "$logfile" 18 | echo " $recvrs" | tr '[:lower:]' '[:upper:]' >> "$logfile" 19 | echo " $comments" | tr '[:lower:]' '[:upper:]' >> "$logfile" 20 | if [ ! -z "$skcc" ] 21 | then 22 | echo " $skcc" | tr '[:lower:]' '[:upper:]' >> "$logfile" 23 | echo " $myskcc" | tr '[:lower:]' '[:upper:]' >> "$logfile" 24 | fi 25 | echo "" | tr '[:lower:]' '[:upper:]' >> "$logfile" 26 | } 27 | 28 | decall="KK0ECT" 29 | band="20M" 30 | mode="CW" 31 | timeon=$(date -u +%H%M) 32 | sentrs="599" 33 | recvrs="599" 34 | 35 | while true 36 | do 37 | clear 38 | timeon=$(date -u +%H%M) 39 | skcc="" 40 | dxcall="" 41 | read -e -i "$dxcall" -p "dxcall: " input 42 | dxcall="${input:-$dxcall}" 43 | worked="" 44 | worked=$(grep -i -A 9 $dxcall ./logs/complete_log.adi | grep 'CALL\|DATE\|COMMENT' | tail -3 | cut -d'>' -f2) 45 | if [ ! -z "$worked" ] 46 | then 47 | notify-send "$worked" 48 | fi 49 | read -e -i "$band" -p "band: " input 50 | band="${input:-$band}" 51 | read -e -i "$mhz" -p "mhz: " input 52 | mhz="${input:-$mhz}" 53 | date=$(date -u +"%Y%m%d") 54 | read -e -i "$date" -p "date: " input 55 | date="${input:-$date}" 56 | read -e -i "$timeon" -p "time: " input 57 | timeon="${input:-$timeon}" 58 | read -e -i "$sentrs" -p "sent rst: " input 59 | sentrs="${input:-$sentrs}" 60 | read -e -i "$recvrs" -p "recv rst: " input 61 | recvrs="${input:-$recvrs}" 62 | read -p "comment: " comments 63 | if [[ "$comments" == *"skcc"* ]]; then 64 | skcc=$(awk -F 'skcc' '{print $2}' <<< "$comments") 65 | skcc=$(echo "$skcc" | tr -d' ') 66 | fi 67 | logqso 68 | done 69 | -------------------------------------------------------------------------------- /callfiles/README.md: -------------------------------------------------------------------------------- 1 | Put your callfiles in this directory. 2 | 3 | I use [N1MM files](http://n1mm.hamdocs.com/tiki-list_file_gallery.php?galleryId=27) 4 | http://n1mm.hamdocs.com/tiki-list_file_gallery.php?galleryId=27 5 | 6 | And [supercheck partial](http://www.supercheckpartial.com/MASTER.SCP) 7 | http://www.supercheckpartial.com/MASTER.SCP 8 | 9 | -------------------------------------------------------------------------------- /clogger.cfg.sample: -------------------------------------------------------------------------------- 1 | #User Info 2 | #Once you update this, go check your contest files to make sure those exchanges are also correct! 3 | mycall="K8RDH" 4 | myname="ROB" 5 | mystate="OH" 6 | myskcc="22449" 7 | 8 | # you MUST include ONE contest config to set contest specific 9 | # variables. NOTE, anything set in the contest 10 | # config will override settings in this file 11 | contest="./contests/default.cfg" 12 | 13 | #LotW Info 14 | # The password on your LotW cert (if none, leave as "") 15 | certpass="" 16 | # LotW QTH Name 17 | lotw_station="Home" 18 | 19 | #Rig Info 20 | #rigctl device number (run rigctl -l to get a list) 21 | rig="373" 22 | #Rig Device Info 23 | userig="true" 24 | rigdevice="/dev/ttyUSB0" 25 | 26 | #CW Keyer 27 | usekeyer="true" 28 | #Change kewwithhamlib to true to key using hamlib rather than cwkeyer.sh for 29 | #rigs that support it (e.g., the IC-7300). 30 | keywithhamlib="false" 31 | #Change cwdevice if you have an external keyer. Otherwise, match radio 32 | cwdevice="/dev/ttyUSB0" 33 | 34 | # 35 | # DO NOT CHANGE THIS UNLESS YOU KNOW WHAT YOU ARE DOING 36 | # 37 | #additional options for rigctl 38 | rigoptions="--set-conf=dtr_state=OFF --set-conf=rts_state=OFF" 39 | 40 | # modes we are working - cw will use the keyer, any other mode will not 41 | # the array is zero indexed 42 | modes=("CW" "SSB" "FT8") 43 | mode_index=0 44 | mode=${modes[0]} 45 | 46 | # how you like to ask for a repeat 47 | myagn="?" 48 | 49 | # where is the rigctl command 50 | rigctl="./rigctl" 51 | 52 | # command to execute keyer 53 | keyer="python keyer.py" 54 | 55 | if [ -z ${station_call} ] 56 | then 57 | station_call="$mycall" 58 | fi 59 | 60 | if [ "$mode" != "CW" ] 61 | then 62 | usekeyer="false" 63 | cwdevice="" 64 | fi 65 | -------------------------------------------------------------------------------- /clogger.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # load config elements 4 | #source clogger.cfg 5 | source clogger.cfg 6 | source "$contest" 7 | clogger_version="1" 8 | 9 | # turn on or off verbose debug logs 10 | debugon="true" 11 | debuglog="./debug" 12 | echo "" > "$debuglog" 13 | 14 | # This function reads keys, including special function keys 15 | readkey() { 16 | debug "${FUNCNAME[0]}" 17 | local key settings 18 | settings=$(stty -g) # save terminal settings 19 | stty -icanon -echo min 0 # disable buffering/echo, allow read to poll 20 | dd count=1 > /dev/null 2>&1 # Throw away anything currently in the buffer 21 | stty min 1 # Don't allow read to poll anymore 22 | key=$(dd count=1 2> /dev/null) # do a single read(2) call 23 | stty "$settings" # restore terminal settings 24 | printf "%s" "$key" 25 | debug "rawkey: '$key'" 26 | } 27 | 28 | # Use tput to support portable multi char keypresses 29 | # TERM has to be set correctly for this to work. 30 | initkeys() { 31 | debug "${FUNCNAME[0]}" 32 | tput init 33 | f1=$(tput kf1) 34 | f2=$(tput kf2) 35 | f3=$(tput kf3) 36 | f4=$(tput kf4) 37 | f5=$(tput kf5) 38 | f6=$(tput kf6) 39 | f7=$(tput kf7) 40 | f8=$(tput kf8) 41 | f9=$(tput kf9) 42 | back=$(tput kbs) 43 | enter=$(tput nel) 44 | escape=$'\e' 45 | tab=$'\t' 46 | } 47 | 48 | # takes a single argument of the keyvalue (from readkey) 49 | # designed to be called using command substitution 50 | # e.g.: mappedkey=$(mapkey "$key") 51 | mapkey() { 52 | debug "${FUNCNAME[0]}" 53 | case "$1" in 54 | "$f1") echo "f1";; 55 | "$f2") echo "f2";; 56 | "$f3") echo "f3";; 57 | "$f4") echo "f4";; 58 | "$f5") echo "f5";; 59 | "$f6") echo "f6";; 60 | "$f7") echo "f7";; 61 | "$f8") echo "f8";; 62 | "$f9") echo "f9";; 63 | "$enter") echo "enter";; 64 | "$back") echo "back";; 65 | "$escape") echo "escape";; 66 | "$tab") echo "tab";; 67 | " ") echo "space";; 68 | *) 69 | if [[ "$1" =~ ^[[:alnum:]]*$ ]] || [[ "$1" =~ ^[[:punct:]]*$ ]] 70 | then 71 | echo "$1" 72 | fi 73 | ;; 74 | esac 75 | } 76 | 77 | debug() { 78 | if [[ "$debugon" == "true" ]] 79 | then 80 | echo "$1" >> "$debuglog" 81 | fi 82 | } 83 | 84 | # this expects the keyname as arg1, and the logmode as arg2 85 | # these functions are mapped in log.cfg in the function map section 86 | # if no function is found, the key appendbuff is called 87 | execfunc() { 88 | debug "${FUNCNAME[0]}" 89 | # create a named function based on the key and mode 90 | func="$2$1" 91 | debug "$func" 92 | if [[ "$func" =~ ^[[:alnum:]]*$ ]] && [ -n "$(type -t ${!func})" ] && [ "$(type -t ${!func})" = function ] 93 | then 94 | # when running the sendcq function, run it in background and capture the pid 95 | if [[ "${!func}" == "sendcq" ]] 96 | then 97 | setband 98 | ${!func} & 99 | cqpid=$! 100 | debug "sendcq cqpid: $cqpid" 101 | else 102 | ${!func} 103 | fi 104 | else 105 | debug "appendbuff $1" 106 | appendbuff "$1" 107 | fi 108 | } 109 | 110 | killcqpid() { 111 | debug "${FUNCNAME[0]}" 112 | if [[ ! -z "$cqpid" ]] 113 | then 114 | debug "kill -9 $cqpid" 115 | kill -9 $cqpid 116 | wait $pid 117 | cqpid="" 118 | fi 119 | } 120 | 121 | # open the key 122 | openkey() { 123 | debug "${FUNCNAME[0]}" 124 | $keyer -o -t "off" 125 | } 126 | 127 | # arg1: text arg2: async/sync (default to async) 128 | cwsend() { 129 | debug "${FUNCNAME[0]}" 130 | debug "$1 usekeyer=$usekeyer" 131 | debug "$mode" 132 | if [[ ! -z $1 ]] && [[ "$usekeyer" == "true" ]] && [[ "$mode" == "CW" ]] 133 | then 134 | debug "passed cwsend tests" 135 | lastaction="$1" 136 | drawlastaction 137 | if [[ "$keywithhamlib" != "true" ]] 138 | then 139 | debug "keying with cwkeyer" 140 | if [[ "$2" == "sync" ]] 141 | then 142 | debug "$keyer -w $speed -d $cwdevice -t \"$1\"" 143 | $keyer -w $speed -d $cwdevice -t "$1" 144 | else 145 | debug "$keyer -w $speed -d $cwdevice -t \"$1\" &" 146 | $keyer -w $speed -d $cwdevice -t "$1" & 147 | fi 148 | else 149 | debug "keying with hamlib" 150 | if [[ "$2" == "sync" ]] 151 | then 152 | rigcommand "b $1" 153 | rigcommand \wait_morse 154 | else 155 | rigcommand "b $1" 156 | fi 157 | fi 158 | fi 159 | } 160 | 161 | setwpm() { 162 | speed="$1" 163 | if [[ "$keywithhamlib" == "true" ]] 164 | then 165 | debug "$rigctl $rigoptions -m $rig -r $rigdevice L KEYSPD $1" 166 | rigcommand "L KEYSPD $1" 167 | fi 168 | clearbuff 169 | drawstatus 170 | } 171 | 172 | qrq() { 173 | debug "${FUNCNAME[0]}" 174 | speed="$(($speed+5))" 175 | setwpm $speed 176 | } 177 | qrs() { 178 | debug "${FUNCNAME[0]}" 179 | speed="$(($speed-5))" 180 | setwpm $speed 181 | } 182 | runqrq=qrq 183 | sandpqrq=qrq 184 | runqrs=qrs 185 | sandpqrs=qrs 186 | 187 | getcall() { 188 | debug "${FUNCNAME[0]}" 189 | local val=$(echo "$buff" | cut -d' ' -f1) 190 | echo "$val" 191 | } 192 | 193 | gete1() { 194 | debug "${FUNCNAME[0]}" 195 | local val=$(echo "$buff" | cut -d' ' -f2) 196 | echo "$val" 197 | } 198 | 199 | # these are the defined functions that you can map f1-f9 to for each mode 200 | sendbuff() { 201 | debug "${FUNCNAME[0]}" 202 | cwsend "$buff" 203 | } 204 | 205 | sendcq() { 206 | debug "${FUNCNAME[0]}" 207 | while true 208 | do 209 | cwsend "$mycq" "sync" 210 | debug "Sleeping $cqdelay seconds between CQ calls" 211 | sleep $cqdelay 212 | done 213 | } 214 | 215 | update_exchange(){ 216 | serial_length=${#serial} 217 | if [ "$serial_length" == 1 ] 218 | then 219 | temp_serial="TT$serial" 220 | elif [ "$serial_length" == 2 ] 221 | then 222 | temp_serial="T$serial" 223 | else 224 | temp_serial=$serial 225 | fi 226 | debug "temp_serial $temp_serial" 227 | debug "serial $serial" 228 | temp_exchange="${myexchange/SERIAL/$temp_serial}" 229 | } 230 | 231 | sendexchange() { 232 | update_exchange 233 | debug "${FUNCNAME[0]}" 234 | cwsend "$temp_exchange" 235 | } 236 | 237 | sendmycall() { 238 | setband 239 | debug "${FUNCNAME[0]}" 240 | cwsend "$mycall" 241 | } 242 | sendtu() { 243 | debug "${FUNCNAME[0]}" 244 | cwsend "TU" 245 | } 246 | sendagn() { 247 | debug "${FUNCNAME[0]}" 248 | cwsend "$myagn" 249 | } 250 | 251 | parse_rst() { 252 | 253 | # extract RST based on mode 254 | if [ "$mode" == "CW" ] 255 | then 256 | rsts=$(echo "$1" | grep -oP '(\d{3})' | tr "\n" " ") 257 | elif [ "$mode" == "FT8" ] 258 | then 259 | rsts=$(echo "$1" | grep -oP '(\-|\+)\d{1,2}' | tr "\n" " ") 260 | else 261 | rsts=$(echo "$1" | grep -oP '(\d{2})' | tr "\n" " ") 262 | fi 263 | 264 | # assign RST's based on whether you were running, or s&p 265 | if [ "logmode" == "run" ] 266 | then 267 | sentrs=$(echo "$1" | cut -d' ' -f3) 268 | recvrs=$(echo "$1" | cut -d' ' -f2) 269 | else 270 | sentrs=$(echo "$1" | cut -d' ' -f2) 271 | recvrs=$(echo "$1" | cut -d' ' -f3) 272 | fi 273 | } 274 | 275 | lotw_upload() { 276 | tqsl -p "$certpass" -d -u -a all -x -l "$lotw_station" "$logfile" 2>lotw_results.txt 277 | lotw_result=$(grep "Final Status:" lotw_results.txt) 278 | subbuff="$lotw_result" 279 | buff="" 280 | drawbuff 281 | drawsubmenu 282 | } 283 | 284 | logqso() { 285 | debug "${FUNCNAME[0]}" 286 | dxcall=$(echo "$buff" | cut -d' ' -f1) 287 | 288 | if [ ! -d "logs" ] 289 | then 290 | mkdir logs 291 | fi 292 | 293 | if [ -z "$dxcall" ] 294 | then 295 | return 296 | fi 297 | decall="$mycall" 298 | date=$(date -u +"%Y%m%d") 299 | timeon=$(date -u +%H%M) 300 | if [ "$parserst" == "true" ] 301 | then 302 | parse_rst "$buff" 303 | comments=$(echo "$buff" | cut -d' ' -f4- | tr -cd "[:print:]") 304 | else 305 | sentrs="599" 306 | recvrs="599" 307 | # strip non-printable chars from buffer when setting comments 308 | comments=$(echo "$buff" | cut -d' ' -f2- | tr -cd "[:print:]") 309 | fi 310 | if [[ "$comments" == *"skcc"* ]]; then 311 | skcc=$(awk -F 'skcc' '{print $2}' <<< "$comments") 312 | skcc=$(echo "$skcc" | tr -d ' ') 313 | else 314 | skcc="" 315 | fi 316 | if [[ ! -z "$contestname" ]] 317 | then 318 | comments="$comments - $contestname" 319 | fi 320 | debug "$comments" 321 | 322 | if [ ! -z "$freq" ] 323 | then 324 | mhz=$(bc <<< "scale = 4; ($khz/1000000)") 325 | fi 326 | 327 | echo "$dxcall" | tr '[:lower:]' '[:upper:]' >> "$logfile" 328 | echo " $band" | tr '[:lower:]' '[:upper:]' >> "$logfile" 329 | echo " $mhz" | tr '[:lower:]' '[:upper:]' >> "$logfile" 330 | echo " $mode" | tr '[:lower:]' '[:upper:]' >> "$logfile" 331 | echo " $date" | tr '[:lower:]' '[:upper:]' >> "$logfile" 332 | echo " $timeon" | tr '[:lower:]' '[:upper:]' >> "$logfile" 333 | echo " $station_call" | tr '[:lower:]' '[:upper:]' >> "$logfile" 334 | echo " $decall" | tr '[:lower:]' '[:upper:]' >> "$logfile" 335 | echo " $sentrs" | tr '[:lower:]' '[:upper:]' >> "$logfile" 336 | echo " $recvrs" | tr '[:lower:]' '[:upper:]' >> "$logfile" 337 | echo " $comments" | tr '[:lower:]' '[:upper:]' >> "$logfile" 338 | if [ ! -z "$skcc" ] && [ ! -z "$myskcc" ] 339 | then 340 | echo " $skcc" | tr '[:lower:]' '[:upper:]' >> "$logfile" 341 | echo " $myskcc" | tr '[:lower:]' '[:upper:]' >> "$logfile" 342 | fi 343 | echo "" | tr '[:lower:]' '[:upper:]' >> "$logfile" 344 | qsocount="$(($qsocount+1))" 345 | serial="$(($serial+1))" 346 | echo "QSO $qsocount" > "./.loginfo-$contestname" 347 | echo "SERIAL $serial" >> "./.loginfo-$contestname" 348 | dupe="false" 349 | lastaction="Logged $buff" 350 | drawlastaction 351 | clearbuff 352 | menu 353 | } 354 | 355 | send_tu_exchange_logqso() { 356 | debug "${FUNCNAME[0]}" 357 | update_exchange 358 | cwsend "TU $temp_exchange" 359 | logqso 360 | clearbuff 361 | } 362 | 363 | send_tu_serial_exchange_logqso() { 364 | debug "${FUNCNAME[0]}" 365 | update_exchange 366 | cwsend "TU $serial $temp_exchange" 367 | logqso 368 | clearbuff 369 | } 370 | 371 | send_call_exchange() { 372 | debug "${FUNCNAME[0]}" 373 | update_exchange 374 | local call=$(getcall) 375 | cwsend "$call $temp_exchange" 376 | } 377 | 378 | send_serial() { 379 | cwsend "$serial" 380 | } 381 | 382 | send_tu_logqso_cq() { 383 | debug "${FUNCNAME[0]}" 384 | cwsend "TU $mycq" 385 | logqso 386 | clearbuff 387 | } 388 | 389 | send_tu_logqso_mycall() { 390 | debug "${FUNCNAME[0]}" 391 | cwsend "TU $mycall" 392 | logqso 393 | clearbuff 394 | } 395 | 396 | send_tu_e1_logqso_cq() { 397 | debug "${FUNCNAME[0]}" 398 | local e1=$(gete1) 399 | cwsend "TU $e1 $mycq" 400 | logqso 401 | clearbuff 402 | } 403 | 404 | # switch between run and s&p 405 | toggle_run() { 406 | debug "${FUNCNAME[0]}" 407 | if [[ "$logmode" == "run" ]] 408 | then 409 | logmode="sandp" 410 | else 411 | logmode="run" 412 | fi 413 | clearbuff 414 | menu 415 | } 416 | 417 | # cycle through the list of modes available 418 | cycle_modes() { 419 | debug "${FUNCNAME[0]}" 420 | max_mode_index=${#modes[@]} 421 | max_mode_index=$((max_mode_index-1)) 422 | if [ "$mode_index" == "$max_mode_index" ] 423 | then 424 | mode_index=0 425 | else 426 | mode_index=$((mode_index+1)) 427 | fi 428 | mode="${modes[$mode_index]}" 429 | clearbuff 430 | menu 431 | } 432 | 433 | setband() { 434 | if [ "$userig" == "true" ] 435 | then 436 | # only lookup frequency and band information once per call 437 | if [ "$checked_band_for_current_call" == "false" ] 438 | then 439 | getfreq 440 | khz="$freq" 441 | getband "$freq" 442 | fi 443 | fi 444 | } 445 | 446 | # arg1 is call to check 447 | checkdupe() { 448 | debug "${FUNCNAME[0]}" 449 | if fgrep -qiF "$1" "$logfile" 450 | then 451 | if [ "$userig" == "true" ] 452 | then 453 | worked_bands=$(grep -iA3 "$1" "$logfile" | grep "BAND" | cut -d'>' -f2) 454 | worked=$(echo "$worked_bands" | grep "$band") 455 | if [ -z $worked ] 456 | then 457 | echo "false" 458 | else 459 | echo "true" 460 | fi 461 | else 462 | echo "true" 463 | fi 464 | else 465 | echo "false" 466 | fi 467 | } 468 | 469 | # 470 | # ------------ functions for special key bindings --------------- 471 | # enter, tab, backspace, escape, space 472 | # 473 | runcommand() { 474 | debug "${FUNCNAME[0]}" 475 | local prefix=$(echo "$1" | cut -d' ' -f1) 476 | if [[ "$prefix" == ":rig" ]] 477 | then 478 | local rigargs=$(echo "$1" | cut -d' ' -f2-) 479 | rigcommand "$rigargs" 480 | subbuff="$rigres" 481 | drawsubmenu 482 | else 483 | case "$prefix" in 484 | ":quit") echo "" && exit ;; 485 | ":serial") setserial $(echo "$1" | cut -d' ' -f2) ;; 486 | ":qrs") qrs ;; 487 | ":qrq") qrq ;; 488 | ":freq") setfreq $(echo "$1" | cut -d' ' -f2) ;; 489 | ":lotw") lotw_upload ;; 490 | ":wpm") setwpm $(echo "$1" | cut -d' ' -f2) ;; 491 | *) buff="unknown command $prefix" && drawbuff ;; 492 | esac 493 | fi 494 | } 495 | 496 | rigcommand() { 497 | debug "${FUNCNAME[0]}" 498 | rigctlcount=0 499 | if [[ "$userig" == "true" ]] 500 | then 501 | local arg1=$(echo "$1" | cut -d' ' -f1) 502 | #CW string might have spaces, and quotes don't pass correctly 503 | #so they are treated specially 504 | if [[ "$arg1" == "b" ]] #Sending CW 505 | then 506 | debug "Sending CW..." 507 | local send1=$(echo "$1" | sed 's/^b\ //g' | sed "s/'//g") 508 | debug "$rigctl $rigoptions -m $rig -r $rigdevice b '$send1'" 509 | for rigctlcount in {1..5} #try rigctl several times in case radio is busy. 510 | do 511 | $($rigctl $rigoptions -m $rig -r $rigdevice b "$send1") && break 512 | sleep 0.1 513 | done 514 | else #Anything but sending CW 515 | local send1=$(echo "$1" | sed "s/'//g") 516 | debug "$rigctl $rigoptions -m $rig -r $rigdevice $send1" 517 | for rigctlcount in {1..5} #try rigctl several times in case radio is busy 518 | do 519 | rigres=$($rigctl $rigoptions -m $rig -r $rigdevice $send1) && break 520 | sleep 0.1 521 | done 522 | fi 523 | debug "Rig command returned: $rigres; required attempts: $rigctlcount" 524 | if [[ "$keywithhamlib" != "true" ]]; then openkey; fi 525 | if [[ "$arg1" == "F" ]] 526 | then 527 | freq="$rigres" 528 | drawstatus 529 | fi 530 | if [[ "$arg1" == "l" ]] 531 | then 532 | speed="$rigres" 533 | drawstatus 534 | fi 535 | fi 536 | } 537 | # arg1 is serial 538 | setserial() { 539 | debug "${FUNCNAME[0]}" 540 | serial=$1 541 | drawstatus 542 | } 543 | 544 | # arg1 is frequency 545 | setfreq() { 546 | debug "${FUNCNAME[0]}" 547 | rigcommand "F $1" 548 | freq=$1 549 | drawstatus 550 | } 551 | 552 | getfreq() { 553 | debug "${FUNCNAME[0]}" 554 | rigcommand "f" 555 | freq=$(tr -dc '[[:print:]]' <<< "$rigres") 556 | freq=$(echo "$freq" | sed 's/[^0-9]*//g') 557 | } 558 | 559 | getkeyerspeed() { 560 | if [[ "$keywithhamlib" == "true" ]] 561 | then 562 | rigcommand 'l KEYSPD' 563 | debug "keyer is now $speed wpm" 564 | fi 565 | } 566 | 567 | getband() { 568 | declare -A regex_array 569 | regex_array=( ['6M']='^50[0-9]*$' ['10M']='^28[0-9]*$' ['12M']='^24[0-9]*$' ['15M']='^21[0-9]*$' ['17M']='^18[0-9]*$' ['20M']='^14[0-9]*$' ['30M']='^10[0-9]*$' ['40M']='^7[0-9]*$' ['80M']='^35[0-9]*$' ) 570 | 571 | for k in "${!regex_array[@]}" 572 | do 573 | if [[ $freq =~ ${regex_array[$k]} ]] 574 | then 575 | band=$k 576 | break 577 | fi 578 | done 579 | } 580 | 581 | 582 | # in both modes, enter simply sends what is in the buffer 583 | enter() { 584 | debug "${FUNCNAME[0]}" 585 | if [[ "${buff:0:1}" == ":" ]] 586 | then 587 | runcommand "$buff" 588 | else 589 | sendbuff 590 | fi 591 | } 592 | runenter=enter 593 | sandpenter=enter 594 | 595 | # kills any current keyer process to halt transmission 596 | escape() { 597 | debug "${FUNCNAME[0]}" 598 | pid="" 599 | pid=$(pgrep -f "$keyer") 600 | if [[ ! -z $pid ]] 601 | then 602 | kill -9 $pid 603 | wait $pid 604 | fi 605 | if [[ "$usekeyer" == "true" ]] 606 | then 607 | debug "$1 usekeyer=$usekeyer" 608 | if [[ "$keywithhamlib" != "true" ]] 609 | then 610 | openkey 611 | else 612 | rigcommand \stop_morse 613 | fi 614 | fi 615 | } 616 | runescape=escape 617 | sandpescape=escape 618 | 619 | # auto completes the first column of the callfile if there are multiple matches 620 | # if there is a single match, it pulls the exchange portion from the callfile 621 | tab() { 622 | debug "${FUNCNAME[0]}" 623 | local callbuff=$(echo "$buff" | tr " " "$delimeter") 624 | if [[ $(grep -i "$callbuff" "$callfile" | wc -l) -eq 1 ]] 625 | then 626 | # make certain to trim spaces, and any non-printable chars from autocompleted exchange 627 | local buffexchange=$(grep -i "^$callbuff" "$callfile" | cut -d"$delimeter" -f2- | tr "$delimeter" ' ' | sed -e 's/^[[:space:]]*//' | tr -cd "[:print:]") 628 | echo "grep -i \"$callbuff\" \"$callfile\" | cut -d\"$delimeter\" -f1)" >> debug 629 | local call=$(grep -i "$callbuff" "$callfile" | cut -d"$delimeter" -f1) 630 | buff="$call $buffexchange" 631 | subbuff="" 632 | echo "single: $callbuff" >> debug 633 | drawsubmenu 634 | drawbuff 635 | # if the contest file wants a space after for copying serial etc. append it 636 | if [[ "$appendspace" == "true" ]] 637 | then 638 | appendbuff " " 639 | fi 640 | else 641 | subbuff=$(grep -i "^$callbuff" "$callfile" | cut -d"$delimeter" -f1 | tr '\r\n' ' ') 642 | echo "mult: $callbuff" >> debug 643 | drawsubmenu 644 | fi 645 | } 646 | runtab=tab 647 | sandptab=tab 648 | 649 | # appends a space to the buffer 650 | space() { 651 | debug "${FUNCNAME[0]}" 652 | appendbuff " " 653 | } 654 | runspace=space 655 | sandpspace=space 656 | 657 | # remove a char from the buffer 658 | backspace() { 659 | debug "${FUNCNAME[0]}" 660 | 661 | if [[ ! -z "$buff" ]] 662 | then 663 | buff="${buff:0:-1}" 664 | if [[ "${#buff}" -ge "3" ]] 665 | then 666 | local call=$(echo "$buff" | cut -d' ' -f1) 667 | dupe=$(checkdupe "$call") 668 | else 669 | dupe="false" 670 | fi 671 | 672 | if [[ "$dupe" == "true" ]] 673 | then 674 | tput setaf 1 675 | fi 676 | 677 | tput el1 678 | tput cup $buffline 0 679 | echo -n ">$buff" 680 | tput sgr0 681 | fi 682 | setbuffcursor 683 | } 684 | runback="backspace" 685 | sandpback="backspace" 686 | 687 | # 688 | # ------------ drawing routines --------------- 689 | # 690 | 691 | # draw the main menu screen and calculate buffline 692 | menu() { 693 | debug "${FUNCNAME[0]}" 694 | clearscreen 695 | tput cup $menuline 0 696 | buffline=0 697 | drawstatus 698 | drawlastaction 699 | # build the function map for the menu 700 | for i in {1..9} 701 | do 702 | f="f$i" 703 | func="$logmode$f" 704 | if [ -n "$(type -t ${!func})" ] && [ "$(type -t ${!func})" = function ] 705 | then 706 | let buffline+=1 707 | echo -e "$f: ${!func}" 708 | fi 709 | done 710 | let buffline+=2 711 | drawsubmenu 712 | drawbuff 713 | } 714 | 715 | 716 | # takes a single argument of the line number to clear 717 | clearline() { 718 | debug "${FUNCNAME[0]}" 719 | tput cup $1 0 720 | tput el 721 | } 722 | 723 | drawlastaction() { 724 | debug "${FUNCNAME[0]}" 725 | tput sc 726 | clearline $lastactionline 727 | tput dim 728 | echo "Last action: $lastaction" 729 | tput sgr0 730 | tput rc 731 | } 732 | 733 | # takes a single argument of the text to append to buff 734 | appendbuff() { 735 | debug "${FUNCNAME[0]}" 736 | buff="$buff$1" 737 | tput el1 738 | 739 | if [[ "${#buff}" -ge "3" ]] 740 | then 741 | local call=$(echo "$buff" | cut -d' ' -f1) 742 | dupe=$(checkdupe "$call") 743 | fi 744 | 745 | if [[ "$dupe" == "true" ]] 746 | then 747 | tput setaf 1 748 | fi 749 | tput cup $buffline 0 750 | echo -n ">$buff" 751 | tput sgr0 752 | setbuffcursor 753 | } 754 | 755 | clearbuff() { 756 | debug "${FUNCNAME[0]}" 757 | buff="" 758 | drawbuff 759 | } 760 | 761 | clearscreen() { 762 | debug "${FUNCNAME[0]}" 763 | tput clear 764 | } 765 | 766 | drawbuff() { 767 | debug "${FUNCNAME[0]}" 768 | clearline $buffline 769 | tput cup $buffline 0 770 | echo -n ">$buff" 771 | tput sgr0 772 | setbuffcursor 773 | } 774 | 775 | drawstatus() { 776 | debug "${FUNCNAME[0]}" 777 | if [[ $(type -t get_mults) == "function" ]] 778 | then 779 | get_mults 780 | status="Mode: $mode $logmode Speed: $speed Freq: $freq Call: $mycall QSO: $qsocount Serial: $serial Mults: $mults" 781 | else 782 | status="Mode: $mode $logmode Speed: $speed Freq: $freq Call: $mycall QSO: $qsocount Serial: $serial" 783 | fi 784 | tput sc 785 | clearline $statusline 786 | tput bold 787 | echo "$status" 788 | tput sgr0 789 | tput rc 790 | } 791 | 792 | drawsubmenu() { 793 | debug "${FUNCNAME[0]}" 794 | tput sc 795 | let subline=$buffline+2 796 | tput cup $subline 0 797 | tput ed 798 | echo $subbuff 799 | tput rc 800 | } 801 | 802 | setbuffcursor() { 803 | debug "${FUNCNAME[0]}" 804 | tput cup $buffline $((${#buff}+1)) 805 | } 806 | # 807 | # ------------ main loop and script init --------------- 808 | # 809 | 810 | mainloop() { 811 | #redirect all stderr to dev null - this supressis killed pid messages etc. 812 | exec 2>/dev/null 813 | debug "${FUNCNAME[0]}" 814 | debug "my pid $BASHPID" 815 | debug "logfile: $logfile" 816 | if [ ! -f "$logfile" ]; then 817 | debug "no log found clearing loginfo" 818 | #remove loginfo file if no current log is found 819 | debug "removing ./.loginfo-$contestname" 820 | rm "./.loginfo-$contest" 821 | debug "creating logfile: $logfile" 822 | touch "$logfile" 823 | echo "1.00" >> "$logfile" 824 | echo "" >> "$logfile" 825 | fi 826 | band="" 827 | freq="" 828 | if [ "$userig" == "true" ] 829 | then 830 | getfreq 831 | getkeyerspeed 832 | fi 833 | khz="$freq" 834 | getband "$freq" 835 | buff="" 836 | subbuff="" 837 | lastaction="" 838 | dupe="false" 839 | statusline=0 840 | lastactionline=1 841 | menuline=2 842 | cqpid="" 843 | temp_exchange="$myexchange" 844 | if [ "$config_version" != "$clogger_version" ] 845 | then 846 | subbuff="WARNING - Mismatched configuration version" 847 | drawsubmenu 848 | drawbuff 849 | fi 850 | if [ "$userig" == "false" & "$keywithrig" == "true " ] 851 | then 852 | subbuff="WARNING - Mismatched userig and keywithrig configuration" 853 | drawsubmenu 854 | drawbuff 855 | fi 856 | menu 857 | while true 858 | do 859 | key=$(readkey) 860 | mappedkey=$(mapkey "$key") 861 | killcqpid 862 | execfunc "$mappedkey" "$logmode" 863 | done 864 | } 865 | 866 | 867 | # we MUST initialize our keycodes 868 | initkeys 869 | qsocount=0 870 | serial=1 871 | #set serial and log count based on loginfo 872 | if test -f "./.loginfo-$contestname"; then 873 | debug "getting qso count and serial from loginfo" 874 | qsocount=$(grep QSO ".loginfo-$contestname" | cut -d' ' -f2) 875 | serial=$(grep SERIAL ".loginfo-$contestname" | cut -d' ' -f2) 876 | fi 877 | # if we had a bogus loginfo, reset qso and serial counts 878 | if [ "$qsocount" == "" ] 879 | then 880 | qsocount=0 881 | serial=1 882 | fi 883 | # call our main loop 884 | mainloop 885 | -------------------------------------------------------------------------------- /contests/13c.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="13C" 5 | state="CO" 6 | 7 | # my exchange - again, you can use variables here defined above 8 | myexchange="$mycall 5NN $state" 9 | 10 | # my cq - you can use other variables defined above here 11 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 12 | mycq="CQ $mycall" 13 | cqdelay="2" 14 | 15 | # logfile 16 | logfile="./logs/$YEAR-$contestname.adi" 17 | 18 | # default log mode: run or sandp 19 | logmode="sandp" 20 | 21 | # mode we are working - CW will use the keyer, any other mode will not 22 | mode="CW" 23 | 24 | # how you like to ask for a repeat 25 | myagn="?" 26 | 27 | # file to use for autocompleting callls, and filling exchanges 28 | callfile="./callfiles/master.scp" 29 | 30 | # delimiter used to seperate fields in the callfile 31 | delimeter="," 32 | 33 | # default wpm speed 34 | speed="25" 35 | 36 | # function key configuration 37 | 38 | # multi function elements 39 | #send_tu_exchange_logqso 40 | #send_buff_exchange 41 | #send_tu_logqso_cq 42 | 43 | 44 | # run mode functions 45 | runf1="sendcq" 46 | runf2="send__exchange" 47 | runf3="send_tu_exchange_logqso_cq" 48 | runf4="send_exchange" 49 | runf5="send_agn_name" 50 | runf6="send_agn_yr" 51 | runf7="send_agn_state" 52 | runf8="logqso" 53 | runf9="toggle_run" 54 | runenter="sendbuff" 55 | 56 | # sandp mode functions 57 | sandpf1="sendmycall" 58 | sandpf2="send_tu_exchange_logqso" 59 | sandpf3="send_exchange" 60 | sandpf4="qrs" 61 | sandpf5="qrq" 62 | sandpf6="send_agn_state" 63 | sandpf7="sendtu" 64 | sandpf8="logqso" 65 | sandpf9="toggle_run" 66 | sandpenter="sendbuff" 67 | 68 | 69 | # --- special functions for this contest --- 70 | -------------------------------------------------------------------------------- /contests/7qp.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="7QP" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="5NN CO" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ 7QP $mycall" 12 | cqdelay="2" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/master.scp" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter="," 30 | 31 | # default wpm speed 32 | speed="30" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_coqp_exchange" 45 | runf3="send_tu_logqso_cq" 46 | runf4="" 47 | runf5="send_agn_name" 48 | runf6="send_agn_state" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_coqp_exchange_logqso" 57 | sandpf3="send_coqp_repeat_exchange" 58 | sandpf4="" 59 | sandpf5="send_agn_name" 60 | sandpf6="send_agn_state" 61 | sandpf7="sendtu" 62 | sandpf8="logqso" 63 | sandpf9="toggle_run" 64 | sandpenter="sendbuff" 65 | 66 | 67 | # --- special functions for this contest --- 68 | send_coqp_exchange() { 69 | local call=$(getcall) 70 | CWsend "$call $myexchange" 71 | } 72 | 73 | send_coqp_exchange_logqso() { 74 | local call=$(getcall) 75 | CWsend "$call $myexchange" 76 | logqso 77 | } 78 | 79 | send_coqp_repeat_exchange() { 80 | CWsend "$myname $mycounty" 81 | } 82 | 83 | send_agn_name() { 84 | CWsend "name ?" 85 | } 86 | 87 | send_agn_yr() { 88 | CWsend "yr ?" 89 | } 90 | 91 | send_agn_state() { 92 | CWsend "state ?" 93 | } 94 | -------------------------------------------------------------------------------- /contests/arrl160.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # my exchange - again, you can use variables here defined above 4 | myexchange="5NN CO" 5 | 6 | # my cq - you can use other variables defined above here 7 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 8 | mycq="CQ TEST $mycall" 9 | cqdelay="3" 10 | 11 | # logfile 12 | logfile="./logs/$YEAR-default.adi" 13 | 14 | # default log mode: run or sandp 15 | logmode="run" 16 | 17 | # mode we are working - CW will use the keyer, any other mode will not 18 | mode="CW" 19 | 20 | # how you like to ask for a repeat 21 | myagn="?" 22 | 23 | # file to use for autocompleting callls, and filling exchanges 24 | callfile="./callfiles/master.scp" 25 | # delimiter used to seperate fields in the callfile 26 | delimeter=" " 27 | 28 | # default wpm speed 29 | speed="30" 30 | 31 | # function key configuration 32 | 33 | # run mode functions 34 | runf1="sendcq" 35 | runf2="send_call_exchange" 36 | runf3="sendagn" 37 | runf4="send_tu_logqso_cq" 38 | runf5="qrs" 39 | runf6="qrq" 40 | runf7="sendtu" 41 | runf8="logqso" 42 | runf9="toggle_run" 43 | runenter="sendbuff" 44 | 45 | # sandp mode functions 46 | sandpf1="sendmycall" 47 | sandpf2="send_tu_exchange_logqso" 48 | sandpf3="sendagn" 49 | sandpf5="qrs" 50 | sandpf6="qrq" 51 | sandpf7="sendtu" 52 | sandpf8="logqso" 53 | sandpf9="toggle_run" 54 | sandpenter="sendbuff" 55 | -------------------------------------------------------------------------------- /contests/arrldx.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="ARRLDX" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="5NN CO" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ TEST $mycall" 12 | cqdelay="2.5" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/ARRLDXCW_USDX.txt" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter="," 30 | 31 | # default wpm speed 32 | speed="35" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendagn" 46 | runf4="send_tu_logqso_cq" 47 | runf5="qrs" 48 | runf6="qrq" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_tu_exchange_logqso" 57 | sandpf3="sendagn" 58 | sandpf5="qrs" 59 | sandpf6="qrq" 60 | sandpf7="sendtu" 61 | sandpf8="logqso" 62 | sandpf9="toggle_run" 63 | sandpenter="sendbuff" 64 | 65 | 66 | # --- special functions for this contest --- 67 | send_tu_name_logqso() { 68 | local e1=$(gete1) 69 | CWsend "TU $e1 $mycq" 70 | logqso 71 | clearbuff 72 | } 73 | -------------------------------------------------------------------------------- /contests/arrlss.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="ARRLSS" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="NR SERIAL B $mycall 17 CO" 8 | 9 | #whether to put a space after autocompleting the exchange 10 | appendspace="true" 11 | 12 | # my cq - you can use other variables defined above here 13 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 14 | mycq="CQ SS $mycall" 15 | cqdelay="3" 16 | 17 | # logfile 18 | logfile="./logs/$YEAR-$contestname.adi" 19 | 20 | # default log mode: run or sandp 21 | logmode="run" 22 | 23 | # mode we are working - CW will use the keyer, any other mode will not 24 | mode="CW" 25 | 26 | # how you like to ask for a repeat 27 | myagn="?" 28 | 29 | # file to use for autocompleting callls, and filling exchanges 30 | callfile="./callfiles/SSCW.txt" 31 | # delimiter used to seperate fields in the callfile 32 | delimeter="," 33 | 34 | # default wpm speed 35 | speed="30" 36 | 37 | # function key configuration 38 | 39 | # multi function elements 40 | #send_tu_exchange_logqso 41 | #send_buff_exchange 42 | #send_tu_logqso_cq 43 | 44 | 45 | # run mode functions 46 | runf1="sendcq" 47 | runf2="send_call_exchange" 48 | runf3="sendexchange" 49 | runf4="send_tu_logqso_cq" 50 | runf5="send_agn" 51 | runf8="logqso" 52 | runf9="toggle_run" 53 | runenter="sendbuff" 54 | 55 | # sandp mode functions 56 | sandpf1="sendmycall" 57 | sandpf2="send_tu_exchange_logqso" 58 | sandpf3="sendexchange" 59 | sandpf7="sendtu" 60 | sandpf8="logqso" 61 | sandpf9="toggle_run" 62 | sandpenter="sendbuff" 63 | 64 | 65 | # --- special functions for this contest --- 66 | get_mults(){ 67 | mults=$(grep COMMENT "$logfile" | cut -d'>' -f2 | cut -d' ' -f1 | sort | uniq | wc -l) 68 | } 69 | -------------------------------------------------------------------------------- /contests/bigstew.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="BIGSTEW" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="<-->DN70<++>" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ DE $mycall" 12 | cqdelay="4" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/master.scp" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter=" " 30 | 31 | # default wpm speed 32 | speed="30" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendagn" 46 | runf4="send_tu_logqso_cq" 47 | runf5="qrs" 48 | runf6="qrq" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_tu_exchange_logqso" 57 | sandpf3="sendagn" 58 | sandpf5="qrs" 59 | sandpf6="qrq" 60 | sandpf7="sendtu" 61 | sandpf8="logqso" 62 | sandpf9="toggle_run" 63 | sandpenter="sendbuff" 64 | 65 | 66 | # --- special functions for this contest --- 67 | send_tu_name_logqso() { 68 | local e1=$(gete1) 69 | CWsend "TU $e1 $mycq" 70 | logqso 71 | clearbuff 72 | } 73 | -------------------------------------------------------------------------------- /contests/coqp.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="COQP" 5 | 6 | mycounty="LAR" 7 | 8 | # my exchange - again, you can use variables here defined above 9 | myexchange="DE $mycall 5NN $myname $mycounty" 10 | 11 | # my cq - you can use other variables defined above here 12 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 13 | mycq="CQ COQP $mycall" 14 | cqdelay="3" 15 | 16 | # logfile 17 | logfile="./logs/$YEAR-$contestname.adi" 18 | 19 | # default log mode: run or sandp 20 | logmode="run" 21 | 22 | # mode we are working - CW will use the keyer, any other mode will not 23 | mode="CW" 24 | 25 | # how you like to ask for a repeat 26 | myagn="?" 27 | 28 | # file to use for autocompleting callls, and filling exchanges 29 | callfile="./callfiles/master.scp" 30 | # delimiter used to seperate fields in the callfile 31 | delimeter="," 32 | 33 | # default wpm speed 34 | speed="30" 35 | 36 | # function key configuration 37 | 38 | # multi function elements 39 | #send_tu_exchange_logqso 40 | #send_buff_exchange 41 | #send_tu_logqso_cq 42 | 43 | 44 | # run mode functions 45 | runf1="sendcq" 46 | runf2="send_coqp_exchange" 47 | runf3="send_tu_logqso_cq" 48 | runf4="" 49 | runf5="send_agn_name" 50 | runf6="send_agn_state" 51 | runf7="sendtu" 52 | runf8="logqso" 53 | runf9="toggle_run" 54 | runenter="sendbuff" 55 | 56 | # sandp mode functions 57 | sandpf1="sendmycall" 58 | sandpf2="send_coqp_exchange_logqso" 59 | sandpf3="send_coqp_repeat_exchange" 60 | sandpf4="" 61 | sandpf5="send_agn_name" 62 | sandpf6="send_agn_state" 63 | sandpf7="sendtu" 64 | sandpf8="logqso" 65 | sandpf9="toggle_run" 66 | sandpenter="sendbuff" 67 | 68 | 69 | # --- special functions for this contest --- 70 | send_coqp_exchange() { 71 | local call=$(getcall) 72 | CWsend "$call $myexchange" 73 | } 74 | 75 | send_coqp_exchange_logqso() { 76 | local call=$(getcall) 77 | CWsend "$call $myexchange" 78 | logqso 79 | } 80 | 81 | send_coqp_repeat_exchange() { 82 | CWsend "$myname $mycounty" 83 | } 84 | 85 | send_agn_name() { 86 | CWsend "name ?" 87 | } 88 | 89 | send_agn_yr() { 90 | CWsend "yr ?" 91 | } 92 | 93 | send_agn_state() { 94 | CWsend "state ?" 95 | } 96 | -------------------------------------------------------------------------------- /contests/cqdx.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="CQDX" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="5NN CO" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ CQ DX DE KK0ECT KK0ECT PSE K" 12 | cqdelay="5" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/master.scp" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter=" " 30 | 31 | # default wpm speed 32 | speed="30" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendagn" 46 | runf4="send_tu_logqso_cq" 47 | runf5="qrs" 48 | runf6="qrq" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_tu_exchange_logqso" 57 | sandpf3="sendagn" 58 | sandpf5="qrs" 59 | sandpf6="qrq" 60 | sandpf7="sendtu" 61 | sandpf8="logqso" 62 | sandpf9="toggle_run" 63 | sandpenter="sendbuff" 64 | 65 | 66 | # --- special functions for this contest --- 67 | send_tu_name_logqso() { 68 | local e1=$(gete1) 69 | CWsend "TU $e1 $mycq" 70 | logqso 71 | clearbuff 72 | } 73 | -------------------------------------------------------------------------------- /contests/cqm.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="CQM" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="5NN SERIAL" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ M KK0ECT" 12 | cqdelay="2.5" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/master.scp" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter=" " 30 | 31 | # default wpm speed 32 | speed="30" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendagn" 46 | runf4="send_tu_logqso_cq" 47 | runf5="qrs" 48 | runf6="qrq" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_tu_exchange_logqso" 57 | sandpf3="sendagn" 58 | sandpf5="qrs" 59 | sandpf6="qrq" 60 | sandpf7="sendtu" 61 | sandpf8="logqso" 62 | sandpf9="toggle_run" 63 | sandpenter="sendbuff" 64 | 65 | 66 | # --- special functions for this contest --- 67 | send_tu_name_logqso() { 68 | local e1=$(gete1) 69 | CWsend "TU $e1 $mycq" 70 | logqso 71 | clearbuff 72 | } 73 | -------------------------------------------------------------------------------- /contests/cqwpx.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="CQWPX" 5 | station_call="WW0WWV" 6 | 7 | 8 | # my exchange - again, you can use variables here defined above 9 | myexchange="5NN SERIAL " 10 | 11 | # my cq - you can use other variables defined above here 12 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 13 | mycq="CQ TEST WW0WWV" 14 | cqdelay="2.5" 15 | 16 | # logfile 17 | logfile="./logs/$YEAR-$contestname.adi" 18 | 19 | # default log mode: run or sandp 20 | logmode="run" 21 | 22 | # mode we are working - CW will use the keyer, any other mode will not 23 | mode="CW" 24 | 25 | # how you like to ask for a repeat 26 | myagn="?" 27 | 28 | # file to use for autocompleting callls, and filling exchanges 29 | callfile="./callfiles/master.scp" 30 | # delimiter used to seperate fields in the callfile 31 | delimeter="," 32 | 33 | # default wpm speed 34 | speed="30" 35 | 36 | # function key configuration 37 | 38 | # multi function elements 39 | #send_tu_exchange_logqso 40 | #send_buff_exchange 41 | #send_tu_logqso_cq 42 | 43 | 44 | # run mode functions 45 | runf1="sendcq" 46 | runf2="send_call_exchange" 47 | runf3="sendexchange" 48 | runf4="send_tu_logqso_cq" 49 | runf5="qrs" 50 | runf6="qrq" 51 | runf8="logqso" 52 | runf9="toggle_run" 53 | runenter="sendbuff" 54 | 55 | # sandp mode functions 56 | sandpf1="sendmycall" 57 | sandpf2="send_tu_exchange_logqso" 58 | sandpf3="sendexchange" 59 | sandpf7="sendtu" 60 | sandpf8="logqso" 61 | sandpf9="toggle_run" 62 | sandpenter="sendbuff" 63 | 64 | 65 | # --- special functions for this contest --- 66 | send_rr_exchange() { 67 | local call=$(getcall) 68 | CWsend "<++>$call $myexchange" 69 | } 70 | 71 | send_rr_exchange_logqso() { 72 | local call=$(getcall) 73 | CWsend "<++>$call $myexchange" 74 | logqso 75 | } 76 | 77 | 78 | send_agn_name() { 79 | CWsend "name ?" 80 | } 81 | 82 | send_agn_yr() { 83 | CWsend "yr ?" 84 | } 85 | 86 | send_agn_state() { 87 | CWsend "state ?" 88 | } 89 | -------------------------------------------------------------------------------- /contests/cqww.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # my exchange - again, you can use variables here defined above 4 | myexchange="TU 5NN 4" 5 | 6 | # my cq - you can use other variables defined above here 7 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 8 | mycq="CQ TEST $mycall" 9 | cqdelay="3" 10 | 11 | # logfile 12 | logfile="./logs/$YEAR-default.adi" 13 | 14 | # default log mode: run or sandp 15 | logmode="run" 16 | 17 | # mode we are working - CW will use the keyer, any other mode will not 18 | mode="CW" 19 | 20 | # how you like to ask for a repeat 21 | myagn="?" 22 | 23 | # file to use for autocompleting callls, and filling exchanges 24 | callfile="./callfiles/master.scp" 25 | # delimiter used to seperate fields in the callfile 26 | delimeter=" " 27 | 28 | # default wpm speed 29 | speed="30" 30 | 31 | # function key configuration 32 | 33 | # run mode functions 34 | runf1="sendcq" 35 | runf2="send_call_exchange" 36 | runf3="sendagn" 37 | runf4="send_tu_logqso_cq" 38 | runf5="qrs" 39 | runf6="qrq" 40 | runf7="sendtu" 41 | runf8="logqso" 42 | runf9="toggle_run" 43 | runenter="sendbuff" 44 | 45 | # sandp mode functions 46 | sandpf1="sendmycall" 47 | sandpf2="send_tu_exchange_logqso" 48 | sandpf3="sendagn" 49 | sandpf5="qrs" 50 | sandpf6="qrq" 51 | sandpf7="sendtu" 52 | sandpf8="logqso" 53 | sandpf9="toggle_run" 54 | sandpenter="sendbuff" 55 | -------------------------------------------------------------------------------- /contests/cwo.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="CWOPEN" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="$myname SERIAL" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ CWO $mycall" 12 | cqdelay="3" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/CWT.txt" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter="," 30 | 31 | # default wpm speed 32 | speed="35" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendagn" 46 | runf4="send_tu_logqso_mycall" 47 | runf5="qrs" 48 | runf6="qrq" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_tu_exchange_logqso" 57 | sandpf3="sendagn" 58 | sandpf5="qrs" 59 | sandpf6="qrq" 60 | sandpf7="sendtu" 61 | sandpf8="logqso" 62 | sandpf9="toggle_run" 63 | sandpenter="sendbuff" 64 | 65 | 66 | # --- special functions for this contest --- 67 | send_tu_name_logqso() { 68 | local e1=$(gete1) 69 | CWsend "TU $e1 $mycq" 70 | logqso 71 | clearbuff 72 | } 73 | -------------------------------------------------------------------------------- /contests/cwt.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="CWT" 5 | station_call="KK0ECT" 6 | 7 | # my exchange - again, you can use variables here defined above 8 | myexchange="$myname 2T66" 9 | 10 | # my cq - you can use other variables defined above here 11 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 12 | mycq="CWT $station_call" 13 | cqdelay="2.5" 14 | 15 | # logfile 16 | logfile="./logs/$YEAR-CWT.adi" 17 | 18 | # default log mode: run or sandp 19 | logmode="run" 20 | 21 | # mode we are working - CW will use the keyer, any other mode will not 22 | mode="CW" 23 | 24 | # how you like to ask for a repeat 25 | myagn="?" 26 | 27 | # file to use for autocompleting callls, and filling exchanges 28 | callfile="./callfiles/CWT.txt" 29 | # delimiter used to seperate fields in the callfile 30 | delimeter="," 31 | 32 | # default wpm speed 33 | speed="35" 34 | 35 | # function key configuration 36 | 37 | # multi function elements 38 | #send_tu_exchange_logqso 39 | #send_buff_exchange 40 | #send_tu_logqso_cq 41 | 42 | 43 | # run mode functions 44 | runf1="sendcq" 45 | runf2="send_call_exchange" 46 | runf3="sendagn" 47 | runf4="send_tu_e1_logqso_cq" 48 | runf5="qrs" 49 | runf6="qrq" 50 | runf7="cycle_modes" 51 | runf8="logqso" 52 | runf9="toggle_run" 53 | runenter="sendbuff" 54 | 55 | # sandp mode functions 56 | sandpf1="sendmycall" 57 | sandpf2="send_tu_exchange_logqso" 58 | sandpf3="sendagn" 59 | sandpf5="qrs" 60 | sandpf6="qrq" 61 | sandpf7="sendtu" 62 | sandpf8="logqso" 63 | sandpf9="toggle_run" 64 | sandpenter="sendbuff" 65 | 66 | 67 | # --- special functions for this contest --- 68 | send_tu_name_logqso() { 69 | local e1=$(gete1) 70 | CWsend "TU $e1 $mycq" 71 | logqso 72 | clearbuff 73 | } 74 | -------------------------------------------------------------------------------- /contests/default.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # my exchange - again, you can use variables here defined above 4 | myexchange="TU 5NN" 5 | 6 | # my cq - you can use other variables defined above here 7 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 8 | mycq="CQ CQ DE $mycall" 9 | cqdelay="3" 10 | 11 | # logfile 12 | logfile="./logs/$YEAR-default.adi" 13 | 14 | # default log mode: run or sandp 15 | logmode="run" 16 | 17 | # mode we are working - CW will use the keyer, any other mode will not 18 | mode="CW" 19 | 20 | # how you like to ask for a repeat 21 | myagn="?" 22 | 23 | # file to use for autocompleting callls, and filling exchanges 24 | callfile="./callfiles/master.scp" 25 | # delimiter used to seperate fields in the callfile 26 | delimeter=" " 27 | 28 | # default wpm speed 29 | speed="30" 30 | 31 | # should we parse RST from the comment, or log 599 32 | parserst="true" 33 | 34 | # function key configuration 35 | 36 | # run mode functions 37 | runf1="sendcq" 38 | runf2="send_call_exchange" 39 | runf3="sendagn" 40 | runf4="send_tu_logqso_cq" 41 | runf5="qrs" 42 | runf6="qrq" 43 | runf7="cycle_modes" 44 | runf8="logqso" 45 | runf9="toggle_run" 46 | runenter="sendbuff" 47 | 48 | # sandp mode functions 49 | sandpf1="sendmycall" 50 | sandpf2="send_tu_exchange_logqso" 51 | sandpf3="sendagn" 52 | sandpf5="qrs" 53 | sandpf6="qrq" 54 | sandpf7="cycle_modes" 55 | sandpf8="logqso" 56 | sandpf9="toggle_run" 57 | sandpenter="sendbuff" 58 | -------------------------------------------------------------------------------- /contests/fd.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="FD" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="2A CO" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ FD $mycall" 12 | cqdelay="3" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./FD_2020.txt" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter="," 30 | 31 | # default wpm speed 32 | speed="30" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendagn" 46 | runf4="send_tu_logqso_cq" 47 | runf5="qrs" 48 | runf6="qrq" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_tu_exchange_logqso" 57 | sandpf3="sendagn" 58 | sandpf5="qrs" 59 | sandpf6="qrq" 60 | sandpf7="sendtu" 61 | sandpf8="logqso" 62 | sandpf9="toggle_run" 63 | sandpenter="sendbuff" 64 | 65 | 66 | # --- special functions for this contest --- 67 | send_tu_name_logqso() { 68 | local e1=$(gete1) 69 | CWsend "TU $e1 $mycq" 70 | logqso 71 | clearbuff 72 | } 73 | -------------------------------------------------------------------------------- /contests/foc.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="FOC" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="5NN $myname" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ BW $mycall" 12 | cqdelay="2.5" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/CWT.txt" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter="," 30 | 31 | # default wpm speed 32 | speed="35" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendagn" 46 | runf4="send_tu_e1_logqso_cq" 47 | runf5="qrs" 48 | runf6="qrq" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_tu_exchange_logqso" 57 | sandpf3="sendagn" 58 | sandpf5="qrs" 59 | sandpf6="qrq" 60 | sandpf7="sendtu" 61 | sandpf8="logqso" 62 | sandpf9="toggle_run" 63 | sandpenter="sendbuff" 64 | 65 | 66 | # --- special functions for this contest --- 67 | send_tu_name_logqso() { 68 | local e1=$(gete1) 69 | CWsend "TU $e1 $mycq" 70 | logqso 71 | clearbuff 72 | } 73 | -------------------------------------------------------------------------------- /contests/focbw.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="CWT" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="5NN $myname" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ BW DE $mycall" 12 | cqdelay="4" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-CWT.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/CWT.txt" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter="," 30 | 31 | # default wpm speed 32 | speed="35" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendagn" 46 | runf4="send_tu_e1_logqso_cq" 47 | runf5="qrs" 48 | runf6="qrq" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_tu_exchange_logqso" 57 | sandpf3="sendagn" 58 | sandpf5="qrs" 59 | sandpf6="qrq" 60 | sandpf7="sendtu" 61 | sandpf8="logqso" 62 | sandpf9="toggle_run" 63 | sandpenter="sendbuff" 64 | 65 | 66 | # --- special functions for this contest --- 67 | send_tu_name_logqso() { 68 | local e1=$(gete1) 69 | CWsend "TU $e1 $mycq" 70 | logqso 71 | clearbuff 72 | } 73 | -------------------------------------------------------------------------------- /contests/hpm.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # my exchange - again, you can use variables here defined above 4 | myexchange="TU <++>5NN<--> CO" 5 | 6 | # my cq - you can use other variables defined above here 7 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 8 | mycq="CQ HPM $mycall/150 K" 9 | cqdelay="3" 10 | 11 | # logfile 12 | logfile="./logs/$YEAR-default.adi" 13 | 14 | # default log mode: run or sandp 15 | logmode="run" 16 | 17 | # mode we are working - CW will use the keyer, any other mode will not 18 | mode="CW" 19 | 20 | # how you like to ask for a repeat 21 | myagn="?" 22 | 23 | # file to use for autocompleting callls, and filling exchanges 24 | callfile="./callfiles/master.scp" 25 | # delimiter used to seperate fields in the callfile 26 | delimeter=" " 27 | 28 | # default wpm speed 29 | speed="30" 30 | 31 | # function key configuration 32 | 33 | # run mode functions 34 | runf1="sendcq" 35 | runf2="send_call_exchange" 36 | runf3="sendagn" 37 | runf4="send_tu_logqso_cq" 38 | runf5="qrs" 39 | runf6="qrq" 40 | runf7="sendtu" 41 | runf8="logqso" 42 | runf9="toggle_run" 43 | runenter="sendbuff" 44 | 45 | # sandp mode functions 46 | sandpf1="sendmycall" 47 | sandpf2="send_tu_exchange_logqso" 48 | sandpf3="sendagn" 49 | sandpf5="qrs" 50 | sandpf6="qrq" 51 | sandpf7="sendtu" 52 | sandpf8="logqso" 53 | sandpf9="toggle_run" 54 | sandpenter="sendbuff" 55 | -------------------------------------------------------------------------------- /contests/iaruhf.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | # contest name will be appended to exchange portion of the log 3 | contestname="IARUHF" 4 | 5 | # my exchange - again, you can use variables here defined above 6 | myexchange="5NN 7" 7 | 8 | # my cq - you can use other variables defined above here 9 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 10 | mycq="cq test $mycall" 11 | cqdelay="3" 12 | 13 | # logfile 14 | logfile="./logs/$YEAR-$contestname.adi" 15 | 16 | # default log mode: run or sandp 17 | logmode="run" 18 | 19 | # mode we are working - CW will use the keyer, any other mode will not 20 | mode="CW" 21 | 22 | # how you like to ask for a repeat 23 | myagn="?" 24 | 25 | # file to use for autocompleting callls, and filling exchanges 26 | callfile="./callfiles/IARU.txt" 27 | # delimiter used to seperate fields in the callfile 28 | delimeter="," 29 | 30 | # default wpm speed 31 | speed="35" 32 | 33 | # function key configuration 34 | 35 | # multi function elements 36 | #send_tu_exchange_logqso 37 | #send_buff_exchange 38 | #send_tu_logqso_cq 39 | 40 | 41 | # run mode functions 42 | runf1="sendcq" 43 | runf2="send_call_exchange" 44 | runf3="sendagn" 45 | runf4="send_tu_logqso_cq" 46 | runf5="qrs" 47 | runf6="qrq" 48 | runf7="sendtu" 49 | runf8="logqso" 50 | runf9="toggle_run" 51 | runenter="sendbuff" 52 | 53 | # sandp mode functions 54 | sandpf1="sendmycall" 55 | sandpf2="send_tu_exchange_logqso" 56 | sandpf3="sendagn" 57 | sandpf5="qrs" 58 | sandpf6="qrq" 59 | sandpf7="sendtu" 60 | sandpf8="logqso" 61 | sandpf9="toggle_run" 62 | sandpenter="sendbuff" 63 | -------------------------------------------------------------------------------- /contests/jidx.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="JIDX" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="5NN 4" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ JA $mycall" 12 | cqdelay="2.5" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/master.scp" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter="," 30 | 31 | # default wpm speed 32 | speed="35" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendagn" 46 | runf4="send_tu_e1_logqso_cq" 47 | runf5="qrs" 48 | runf6="qrq" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_tu_exchange_logqso" 57 | sandpf3="sendagn" 58 | sandpf5="qrs" 59 | sandpf6="qrq" 60 | sandpf7="sendtu" 61 | sandpf8="logqso" 62 | sandpf9="toggle_run" 63 | sandpenter="sendbuff" 64 | 65 | 66 | # --- special functions for this contest --- 67 | send_tu_name_logqso() { 68 | local e1=$(gete1) 69 | CWsend "TU $e1 $mycq" 70 | logqso 71 | clearbuff 72 | } 73 | -------------------------------------------------------------------------------- /contests/mm.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="CQMM" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="5NN NA" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ MM $mycall" 12 | cqdelay="4" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/CWT.txt" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter="," 30 | 31 | # default wpm speed 32 | speed="35" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendagn" 46 | runf4="send_tu_logqso_cq" 47 | runf5="qrs" 48 | runf6="qrq" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_tu_exchange_logqso" 57 | sandpf3="sendagn" 58 | sandpf5="qrs" 59 | sandpf6="qrq" 60 | sandpf7="sendtu" 61 | sandpf8="logqso" 62 | sandpf9="toggle_run" 63 | sandpenter="sendbuff" 64 | 65 | 66 | # --- special functions for this contest --- 67 | -------------------------------------------------------------------------------- /contests/mmccw.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="MMCHFCW" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="5NN SERIAL" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ MMC $mycall" 12 | cqdelay="3" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/master.scp" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter="," 30 | 31 | # default wpm speed 32 | speed="30" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendexchange" 46 | runf4="send_tu_logqso_cq" 47 | runf5="send_agn" 48 | runf8="logqso" 49 | runf9="toggle_run" 50 | runenter="sendbuff" 51 | 52 | # sandp mode functions 53 | sandpf1="sendmycall" 54 | sandpf2="send_tu_exchange_logqso" 55 | sandpf3="sendexchange" 56 | sandpf7="sendtu" 57 | sandpf8="logqso" 58 | sandpf9="toggle_run" 59 | sandpenter="sendbuff" 60 | 61 | 62 | # --- special functions for this contest --- 63 | send_rr_exchange() { 64 | local call=$(getcall) 65 | CWsend "<++>$call $myexchange" 66 | } 67 | 68 | send_rr_exchange_logqso() { 69 | local call=$(getcall) 70 | CWsend "<++>$call $myexchange" 71 | logqso 72 | } 73 | 74 | 75 | send_agn_name() { 76 | CWsend "name ?" 77 | } 78 | 79 | send_agn_yr() { 80 | CWsend "yr ?" 81 | } 82 | 83 | send_agn_state() { 84 | CWsend "state ?" 85 | } 86 | -------------------------------------------------------------------------------- /contests/naqpcw.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="NAQP" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="$myname CO" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ NA $mycall" 12 | cqdelay="2.5" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/NAQPCW.txt" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter="," 30 | 31 | # default wpm speed 32 | speed="35" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendagn" 46 | runf4="send_tu_e1_logqso_cq" 47 | runf5="qrs" 48 | runf6="qrq" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_tu_exchange_logqso" 57 | sandpf3="sendagn" 58 | sandpf5="qrs" 59 | sandpf6="qrq" 60 | sandpf7="sendtu" 61 | sandpf8="logqso" 62 | sandpf9="toggle_run" 63 | sandpenter="sendbuff" 64 | 65 | 66 | # --- special functions for this contest --- 67 | send_tu_name_logqso() { 68 | local e1=$(gete1) 69 | CWsend "TU $e1 $mycq" 70 | logqso 71 | clearbuff 72 | } 73 | -------------------------------------------------------------------------------- /contests/nasprint.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="NASPRINT" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="KK0ECT SERIAL ERIC CO" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ NA $mycall" 12 | cqdelay="3" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/master.scp" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter=" " 30 | 31 | # default wpm speed 32 | speed="35" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendagn" 46 | runf4="send_tu_logqso_cq" 47 | runf5="qrs" 48 | runf6="qrq" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_tu_exchange_logqso" 57 | sandpf3="sendagn" 58 | sandpf5="qrs" 59 | sandpf6="qrq" 60 | sandpf7="sendtu" 61 | sandpf8="logqso" 62 | sandpf9="toggle_run" 63 | sandpenter="sendbuff" 64 | 65 | 66 | # --- special functions for this contest --- 67 | send_tu_name_logqso() { 68 | local e1=$(gete1) 69 | CWsend "TU $e1 $mycq" 70 | logqso 71 | clearbuff 72 | } 73 | -------------------------------------------------------------------------------- /contests/raccw.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="RACCW" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="5NN SERIAL" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ rac $mycall" 12 | cqdelay="3" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/master.scp" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter="," 30 | 31 | # default wpm speed 32 | speed="30" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendexchange" 46 | runf4="send_tu_logqso_cq" 47 | runf5="send_agn" 48 | runf8="logqso" 49 | runf9="toggle_run" 50 | runenter="sendbuff" 51 | 52 | # sandp mode functions 53 | sandpf1="sendmycall" 54 | sandpf2="send_tu_exchange_logqso" 55 | sandpf3="sendexchange" 56 | sandpf7="sendtu" 57 | sandpf8="logqso" 58 | sandpf9="toggle_run" 59 | sandpenter="sendbuff" 60 | 61 | 62 | # --- special functions for this contest --- 63 | send_rr_exchange() { 64 | local call=$(getcall) 65 | CWsend "<++>$call $myexchange" 66 | } 67 | 68 | send_rr_exchange_logqso() { 69 | local call=$(getcall) 70 | CWsend "<++>$call $myexchange" 71 | logqso 72 | } 73 | 74 | 75 | send_agn_name() { 76 | CWsend "name ?" 77 | } 78 | 79 | send_agn_yr() { 80 | CWsend "yr ?" 81 | } 82 | 83 | send_agn_state() { 84 | CWsend "state ?" 85 | } 86 | -------------------------------------------------------------------------------- /contests/rr.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="RR" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="DE $mycall $myname 17 CO" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ RR $mycall" 12 | cqdelay="2" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="agn" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/master.scp" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter="," 30 | 31 | # default wpm speed 32 | speed="25" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_rr_exchange" 45 | runf3="send_tu_logqso_cq" 46 | runf4="send_exchange" 47 | runf5="send_agn_name" 48 | runf6="send_agn_yr" 49 | runf7="send_agn_state" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_rr_exchange_logqso" 57 | sandpf3="send_exchange" 58 | sandpf4="send_agn_name" 59 | sandpf5="send_agn_yr" 60 | sandpf6="send_agn_state" 61 | sandpf7="sendtu" 62 | sandpf8="logqso" 63 | sandpf9="toggle_run" 64 | sandpenter="sendbuff" 65 | 66 | 67 | # --- special functions for this contest --- 68 | send_rr_exchange() { 69 | local call=$(getcall) 70 | CWsend "<++>$call $myexchange" 71 | } 72 | 73 | send_rr_exchange_logqso() { 74 | local call=$(getcall) 75 | CWsend "$call $myexchange" 76 | logqso 77 | } 78 | 79 | 80 | send_agn_name() { 81 | CWsend "name ?" 82 | } 83 | 84 | send_agn_yr() { 85 | CWsend "yr ?" 86 | } 87 | 88 | send_agn_state() { 89 | CWsend "state ?" 90 | } 91 | -------------------------------------------------------------------------------- /contests/skccsks.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="SKCCSKS" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="5NN CO OP ERIC NR 18144" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ SKS $mycall" 12 | cqdelay="2" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="agn" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/SKCC.txt" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter="," 30 | 31 | # default wpm speed 32 | speed="21" 33 | 34 | use_keyer="false" 35 | # function key configuration 36 | 37 | # multi function elements 38 | #send_tu_exchange_logqso 39 | #send_buff_exchange 40 | #send_tu_logqso_cq 41 | 42 | 43 | # run mode functions 44 | runf1="sendcq" 45 | runf2="send_rr_exchange" 46 | runf3="send_tu_logqso_cq" 47 | runf4="send_exchange" 48 | runf5="send_agn_name" 49 | runf6="send_agn_yr" 50 | runf7="send_agn_state" 51 | runf8="logqso" 52 | runf9="toggle_run" 53 | runenter="sendbuff" 54 | 55 | # sandp mode functions 56 | sandpf1="sendmycall" 57 | sandpf2="send_rr_exchange_logqso" 58 | sandpf3="send_exchange" 59 | sandpf4="send_agn_name" 60 | sandpf5="send_agn_yr" 61 | sandpf6="send_agn_state" 62 | sandpf7="sendtu" 63 | sandpf8="logqso" 64 | sandpf9="toggle_run" 65 | sandpenter="sendbuff" 66 | 67 | 68 | # --- special functions for this contest --- 69 | send_rr_exchange() { 70 | local call=$(getcall) 71 | CWsend "<++>$call $myexchange" 72 | } 73 | 74 | send_rr_exchange_logqso() { 75 | local call=$(getcall) 76 | CWsend "$call $myexchange" 77 | logqso 78 | } 79 | 80 | 81 | send_agn_name() { 82 | CWsend "name ?" 83 | } 84 | 85 | send_agn_yr() { 86 | CWsend "yr ?" 87 | } 88 | 89 | send_agn_state() { 90 | CWsend "state ?" 91 | } 92 | -------------------------------------------------------------------------------- /contests/skccwes.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | YEAR=`date +%Y` 3 | # contest name will be appended to exchange portion of the log 4 | contestname="SKCCWES" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="5NN CO OP ERIC NR 18144" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ WES $mycall" 12 | cqdelay="2" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="agn" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/master.scp" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter="," 30 | 31 | # default wpm speed 32 | speed="19" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_rr_exchange" 45 | runf3="send_tu_logqso_cq" 46 | runf4="send_exchange" 47 | runf5="send_agn_name" 48 | runf6="send_agn_yr" 49 | runf7="send_agn_state" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_rr_exchange_logqso" 57 | sandpf3="send_exchange" 58 | sandpf4="send_agn_name" 59 | sandpf5="send_agn_yr" 60 | sandpf6="send_agn_state" 61 | sandpf7="sendtu" 62 | sandpf8="logqso" 63 | sandpf9="toggle_run" 64 | sandpenter="sendbuff" 65 | 66 | 67 | # --- special functions for this contest --- 68 | send_rr_exchange() { 69 | local call=$(getcall) 70 | CWsend "<++>$call $myexchange" 71 | } 72 | 73 | send_rr_exchange_logqso() { 74 | local call=$(getcall) 75 | CWsend "$call $myexchange" 76 | logqso 77 | } 78 | 79 | 80 | send_agn_name() { 81 | CWsend "name ?" 82 | } 83 | 84 | send_agn_yr() { 85 | CWsend "yr ?" 86 | } 87 | 88 | send_agn_state() { 89 | CWsend "state ?" 90 | } 91 | -------------------------------------------------------------------------------- /contests/ubadx.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="UBADX" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="5NN SERIAL" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ TEST KK0ECT" 12 | cqdelay="3" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/master.scp" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter=" " 30 | 31 | # default wpm speed 32 | speed="30" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendagn" 46 | runf4="send_tu_logqso_cq" 47 | runf5="qrs" 48 | runf6="qrq" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_tu_exchange_logqso" 57 | sandpf3="sendagn" 58 | sandpf5="qrs" 59 | sandpf6="qrq" 60 | sandpf7="sendtu" 61 | sandpf8="logqso" 62 | sandpf9="toggle_run" 63 | sandpenter="sendbuff" 64 | 65 | 66 | # --- special functions for this contest --- 67 | send_tu_name_logqso() { 68 | local e1=$(gete1) 69 | CWsend "TU $e1 $mycq" 70 | logqso 71 | clearbuff 72 | } 73 | -------------------------------------------------------------------------------- /contests/wfd.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="WFD" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="1H CO" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ FD $mycall" 12 | cqdelay="3" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/master.scp" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter=" " 30 | 31 | # default wpm speed 32 | speed="35" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendagn" 46 | runf4="send_tu_logqso_cq" 47 | runf5="qrs" 48 | runf6="qrq" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_tu_exchange_logqso" 57 | sandpf3="sendagn" 58 | sandpf5="qrs" 59 | sandpf6="qrq" 60 | sandpf7="sendtu" 61 | sandpf8="logqso" 62 | sandpf9="toggle_run" 63 | sandpenter="sendbuff" 64 | 65 | 66 | # --- special functions for this contest --- 67 | send_tu_name_logqso() { 68 | local e1=$(gete1) 69 | CWsend "TU $e1 $mycq" 70 | logqso 71 | clearbuff 72 | } 73 | -------------------------------------------------------------------------------- /contests/winterfd.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="WFD" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="1H CO" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="<+++>CQ WFD DE<---> $mycall" 12 | cqdelay="1.1" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-WFD.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/master.scp" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter=" " 30 | 31 | # default wpm speed 32 | speed="30" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendagn" 46 | runf4="send_tu_logqso_cq" 47 | runf5="qrs" 48 | runf6="qrq" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_tu_exchange_logqso" 57 | sandpf3="sendagn" 58 | sandpf5="qrs" 59 | sandpf6="qrq" 60 | sandpf7="sendtu" 61 | sandpf8="logqso" 62 | sandpf9="toggle_run" 63 | sandpenter="sendbuff" 64 | 65 | 66 | # --- special functions for this contest --- 67 | send_tu_name_logqso() { 68 | local e1=$(gete1) 69 | CWsend "TU $e1 $mycq" 70 | logqso 71 | clearbuff 72 | } 73 | -------------------------------------------------------------------------------- /contests/wwvnbs-cw.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="WWVNBS-CW" 5 | 6 | station_call="WW0WWV" 7 | 8 | # my exchange - again, you can use variables here defined above 9 | myexchange="5NN OP ERIC" 10 | 11 | # my cq - you can use other variables defined above here 12 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 13 | mycq="CQ CQ DE WW0WWV WW0WWV PSE K" 14 | cqdelay="2" 15 | 16 | # logfile 17 | logfile="./logs/$YEAR-$contestname.adi" 18 | 19 | # default log mode: run or sandp 20 | logmode="run" 21 | 22 | # mode we are working - CW will use the keyer, any other mode will not 23 | mode="CW" 24 | 25 | # how you like to ask for a repeat 26 | myagn="agn" 27 | 28 | # file to use for autocompleting callls, and filling exchanges 29 | callfile="./callfiles/master.scp" 30 | # delimiter used to seperate fields in the callfile 31 | delimeter="," 32 | 33 | # default wpm speed 34 | speed="30" 35 | 36 | # function key configuration 37 | 38 | # multi function elements 39 | #send_tu_exchange_logqso 40 | #send_buff_exchange 41 | #send_tu_logqso_cq 42 | 43 | 44 | # run mode functions 45 | runf1="sendcq" 46 | runf2="send_call_exchange" 47 | runf3="send_tu_e1_logqso_cq" 48 | runf4="send_exchange" 49 | runf5="qrs" 50 | runf6="qrq" 51 | runf7="" 52 | runf8="logqso" 53 | runf9="toggle_run" 54 | runenter="sendbuff" 55 | 56 | # sandp mode functions 57 | sandpf1="sendmycall" 58 | sandpf2="send_rr_exchange_logqso" 59 | sandpf3="send_exchange" 60 | sandpf4="send_agn_name" 61 | sandpf5="send_agn_yr" 62 | sandpf6="send_agn_state" 63 | sandpf7="sendtu" 64 | sandpf8="logqso" 65 | sandpf9="toggle_run" 66 | sandpenter="sendbuff" 67 | 68 | 69 | # --- special functions for this contest --- 70 | send_rr_exchange() { 71 | local call=$(getcall) 72 | CWsend "<++>$call $myexchange" 73 | } 74 | 75 | send_rr_exchange_logqso() { 76 | local call=$(getcall) 77 | CWsend "$call $myexchange" 78 | logqso 79 | } 80 | 81 | 82 | send_agn_name() { 83 | CWsend "name ?" 84 | } 85 | 86 | send_agn_yr() { 87 | CWsend "yr ?" 88 | } 89 | 90 | send_agn_state() { 91 | CWsend "state ?" 92 | } 93 | -------------------------------------------------------------------------------- /contests/wwvnbs-ssb.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="WWVNBS-SSB" 5 | contestmode="SSB" 6 | 7 | station_call="WW0WWV" 8 | 9 | # my exchange - again, you can use variables here defined above 10 | myexchange="5NN IN CO, OP ERIC ERIC HW?" 11 | 12 | # my cq - you can use other variables defined above here 13 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 14 | mycq="CQ CQ DE WW0WWV WW0WWV PSE K" 15 | cqdelay="2" 16 | 17 | # logfile 18 | logfile="./logs/$YEAR-$contestname.adi" 19 | 20 | # default log mode: run or sandp 21 | logmode="run" 22 | 23 | # mode we are working - CW will use the keyer, any other mode will not 24 | mode="CW" 25 | 26 | # how you like to ask for a repeat 27 | myagn="agn" 28 | 29 | # file to use for autocompleting callls, and filling exchanges 30 | callfile="./callfiles/master.scp" 31 | # delimiter used to seperate fields in the callfile 32 | delimeter="," 33 | 34 | # default wpm speed 35 | speed="25" 36 | 37 | # function key configuration 38 | 39 | # multi function elements 40 | #send_tu_exchange_logqso 41 | #send_buff_exchange 42 | #send_tu_logqso_cq 43 | 44 | 45 | # run mode functions 46 | runf1="sendcq" 47 | runf2="send_call_exchange" 48 | runf3="send_tu_logqso_cq" 49 | runf4="logqso" 50 | runf5="qrs" 51 | runf6="qrq" 52 | runf7="" 53 | runf8="logqso" 54 | runf9="toggle_run" 55 | runenter="sendbuff" 56 | 57 | # sandp mode functions 58 | sandpf1="sendmycall" 59 | sandpf2="send_rr_exchange_logqso" 60 | sandpf3="send_exchange" 61 | sandpf4="send_agn_name" 62 | sandpf5="send_agn_yr" 63 | sandpf6="send_agn_state" 64 | sandpf7="sendtu" 65 | sandpf8="logqso" 66 | sandpf9="toggle_run" 67 | sandpenter="sendbuff" 68 | 69 | 70 | # --- special functions for this contest --- 71 | send_rr_exchange() { 72 | local call=$(getcall) 73 | CWsend "<++>$call $myexchange" 74 | } 75 | 76 | send_rr_exchange_logqso() { 77 | local call=$(getcall) 78 | CWsend "$call $myexchange" 79 | logqso 80 | } 81 | 82 | 83 | send_agn_name() { 84 | CWsend "name ?" 85 | } 86 | 87 | send_agn_yr() { 88 | CWsend "yr ?" 89 | } 90 | 91 | send_agn_state() { 92 | CWsend "state ?" 93 | } 94 | -------------------------------------------------------------------------------- /contests/yuri.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="YURI" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="5NN 7" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ GC $mycall TEST" 12 | cqdelay="2.5" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/master.scp" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter="," 30 | 31 | # default wpm speed 32 | speed="35" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_call_exchange" 45 | runf3="sendagn" 46 | runf4="send_tu_logqso_cq" 47 | runf5="qrs" 48 | runf6="qrq" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_tu_exchange_logqso" 57 | sandpf3="sendagn" 58 | sandpf5="qrs" 59 | sandpf6="qrq" 60 | sandpf7="sendtu" 61 | sandpf8="logqso" 62 | sandpf9="toggle_run" 63 | sandpenter="sendbuff" 64 | 65 | 66 | # --- special functions for this contest --- 67 | send_tu_name_logqso() { 68 | local e1=$(gete1) 69 | CWsend "TU $e1 $mycq" 70 | logqso 71 | clearbuff 72 | } 73 | -------------------------------------------------------------------------------- /contests/zombie.cfg: -------------------------------------------------------------------------------- 1 | YEAR=`date +%Y` 2 | 3 | # contest name will be appended to exchange portion of the log 4 | contestname="ZOMBIE" 5 | 6 | # my exchange - again, you can use variables here defined above 7 | myexchange="5NN CO 970 ERIC" 8 | 9 | # my cq - you can use other variables defined above here 10 | # such as "$mycall" -- TODO for keyer.py use + or - to qrq or qrs 11 | mycq="CQ BOO DE $mycall" 12 | cqdelay="3" 13 | 14 | # logfile 15 | logfile="./logs/$YEAR-$contestname.adi" 16 | 17 | # default log mode: run or sandp 18 | logmode="run" 19 | 20 | # mode we are working - CW will use the keyer, any other mode will not 21 | mode="CW" 22 | 23 | # how you like to ask for a repeat 24 | myagn="?" 25 | 26 | # file to use for autocompleting callls, and filling exchanges 27 | callfile="./callfiles/master.scp" 28 | # delimiter used to seperate fields in the callfile 29 | delimeter="," 30 | 31 | # default wpm speed 32 | speed="20" 33 | 34 | # function key configuration 35 | 36 | # multi function elements 37 | #send_tu_exchange_logqso 38 | #send_buff_exchange 39 | #send_tu_logqso_cq 40 | 41 | 42 | # run mode functions 43 | runf1="sendcq" 44 | runf2="send_coqp_exchange" 45 | runf3="send_tu_logqso_cq" 46 | runf4="" 47 | runf5="send_agn_name" 48 | runf6="send_agn_state" 49 | runf7="sendtu" 50 | runf8="logqso" 51 | runf9="toggle_run" 52 | runenter="sendbuff" 53 | 54 | # sandp mode functions 55 | sandpf1="sendmycall" 56 | sandpf2="send_coqp_exchange_logqso" 57 | sandpf3="send_coqp_repeat_exchange" 58 | sandpf4="" 59 | sandpf5="send_agn_name" 60 | sandpf6="send_agn_state" 61 | sandpf7="sendtu" 62 | sandpf8="logqso" 63 | sandpf9="toggle_run" 64 | sandpenter="sendbuff" 65 | 66 | 67 | # --- special functions for this contest --- 68 | send_coqp_exchange() { 69 | local call=$(getcall) 70 | CWsend "$call $myexchange" 71 | } 72 | 73 | send_coqp_exchange_logqso() { 74 | local call=$(getcall) 75 | CWsend "$call $myexchange" 76 | logqso 77 | } 78 | 79 | send_coqp_repeat_exchange() { 80 | CWsend "$myname $mycounty" 81 | } 82 | 83 | send_agn_name() { 84 | CWsend "name ?" 85 | } 86 | 87 | send_agn_yr() { 88 | CWsend "yr ?" 89 | } 90 | 91 | send_agn_state() { 92 | CWsend "state ?" 93 | } 94 | -------------------------------------------------------------------------------- /debug: -------------------------------------------------------------------------------- 1 | 2 | initkeys 3 | mainloop 4 | my pid 35098 5 | no log found clearing loginfo 6 | logfile: ./logs/2020-default.adi 7 | getfreq 8 | rigcommand 9 | ./rigctl --set-conf=dtr_state=OFF --set-conf=rts_state=OFF -m 373 -r /dev/ttyUSB0 f 10 | openkey 11 | menu 12 | clearscreen 13 | drawstatus 14 | clearline 15 | drawlastaction 16 | clearline 17 | drawsubmenu 18 | drawbuff 19 | clearline 20 | readkey 21 | rawkey: 't' 22 | mapkey 23 | killcqpid 24 | execfunc 25 | runt 26 | appendbuff t 27 | appendbuff 28 | readkey 29 | rawkey: 'e' 30 | mapkey 31 | killcqpid 32 | execfunc 33 | rune 34 | appendbuff e 35 | appendbuff 36 | readkey 37 | rawkey: 's' 38 | mapkey 39 | killcqpid 40 | execfunc 41 | runs 42 | appendbuff s 43 | appendbuff 44 | checkdupe 45 | readkey 46 | rawkey: 't' 47 | mapkey 48 | killcqpid 49 | execfunc 50 | runt 51 | appendbuff t 52 | appendbuff 53 | checkdupe 54 | readkey 55 | rawkey: 'i' 56 | mapkey 57 | killcqpid 58 | execfunc 59 | runi 60 | appendbuff i 61 | appendbuff 62 | checkdupe 63 | readkey 64 | rawkey: 'g' 65 | mapkey 66 | killcqpid 67 | execfunc 68 | rung 69 | appendbuff g 70 | appendbuff 71 | checkdupe 72 | readkey 73 | rawkey: '' 74 | mapkey 75 | killcqpid 76 | execfunc 77 | runenter 78 | enter 79 | sendbuff 80 | cwsend 81 | testig usekeyer=true 82 | CW 83 | passed cwsend tests 84 | drawlastaction 85 | clearline 86 | python keyer.py -w 30 -d /dev/ttyUSB0 -t "testig" & 87 | readkey 88 | rawkey: '' 89 | mapkey 90 | killcqpid 91 | execfunc 92 | runescape 93 | escape 94 | usekeyer=true 95 | openkey 96 | readkey 97 | rawkey: '' 98 | mapkey 99 | killcqpid 100 | execfunc 101 | runback 102 | backspace 103 | checkdupe 104 | readkey 105 | rawkey: '' 106 | mapkey 107 | killcqpid 108 | execfunc 109 | runback 110 | backspace 111 | checkdupe 112 | readkey 113 | rawkey: '' 114 | mapkey 115 | killcqpid 116 | execfunc 117 | runback 118 | backspace 119 | checkdupe 120 | readkey 121 | rawkey: '' 122 | mapkey 123 | killcqpid 124 | execfunc 125 | runback 126 | backspace 127 | readkey 128 | rawkey: '' 129 | mapkey 130 | killcqpid 131 | execfunc 132 | runback 133 | backspace 134 | readkey 135 | rawkey: '' 136 | mapkey 137 | killcqpid 138 | execfunc 139 | runback 140 | backspace 141 | readkey 142 | rawkey: '' 143 | mapkey 144 | killcqpid 145 | execfunc 146 | runback 147 | backspace 148 | readkey 149 | rawkey: '' 150 | mapkey 151 | killcqpid 152 | execfunc 153 | runback 154 | backspace 155 | readkey 156 | rawkey: 'd' 157 | mapkey 158 | killcqpid 159 | execfunc 160 | rund 161 | appendbuff d 162 | appendbuff 163 | readkey 164 | rawkey: 'o' 165 | mapkey 166 | killcqpid 167 | execfunc 168 | runo 169 | appendbuff o 170 | appendbuff 171 | readkey 172 | rawkey: 'd' 173 | mapkey 174 | killcqpid 175 | execfunc 176 | rund 177 | appendbuff d 178 | appendbuff 179 | checkdupe 180 | readkey 181 | rawkey: 'o' 182 | mapkey 183 | killcqpid 184 | execfunc 185 | runo 186 | appendbuff o 187 | appendbuff 188 | checkdupe 189 | readkey 190 | rawkey: 'd' 191 | mapkey 192 | killcqpid 193 | execfunc 194 | rund 195 | appendbuff d 196 | appendbuff 197 | checkdupe 198 | readkey 199 | rawkey: 'o' 200 | mapkey 201 | killcqpid 202 | execfunc 203 | runo 204 | appendbuff o 205 | appendbuff 206 | checkdupe 207 | readkey 208 | rawkey: 'd' 209 | mapkey 210 | killcqpid 211 | execfunc 212 | rund 213 | appendbuff d 214 | appendbuff 215 | checkdupe 216 | readkey 217 | rawkey: 'o' 218 | mapkey 219 | killcqpid 220 | execfunc 221 | runo 222 | appendbuff o 223 | appendbuff 224 | checkdupe 225 | readkey 226 | rawkey: 'd' 227 | mapkey 228 | killcqpid 229 | execfunc 230 | rund 231 | appendbuff d 232 | appendbuff 233 | checkdupe 234 | readkey 235 | rawkey: 'o' 236 | mapkey 237 | killcqpid 238 | execfunc 239 | runo 240 | appendbuff o 241 | appendbuff 242 | checkdupe 243 | readkey 244 | rawkey: '' 245 | mapkey 246 | killcqpid 247 | execfunc 248 | runenter 249 | enter 250 | sendbuff 251 | cwsend 252 | dododododo usekeyer=true 253 | CW 254 | passed cwsend tests 255 | drawlastaction 256 | clearline 257 | python keyer.py -w 30 -d /dev/ttyUSB0 -t "dododododo" & 258 | readkey 259 | rawkey: '' 260 | mapkey 261 | killcqpid 262 | execfunc 263 | runescape 264 | escape 265 | usekeyer=true 266 | openkey 267 | readkey 268 | rawkey: '[15~' 269 | mapkey 270 | killcqpid 271 | execfunc 272 | runf5 273 | qrs 274 | drawstatus 275 | clearline 276 | readkey 277 | rawkey: '' 278 | mapkey 279 | killcqpid 280 | execfunc 281 | runback 282 | backspace 283 | checkdupe 284 | readkey 285 | rawkey: '' 286 | mapkey 287 | killcqpid 288 | execfunc 289 | runback 290 | backspace 291 | checkdupe 292 | readkey 293 | rawkey: '' 294 | mapkey 295 | killcqpid 296 | execfunc 297 | runback 298 | backspace 299 | checkdupe 300 | readkey 301 | rawkey: '' 302 | mapkey 303 | killcqpid 304 | execfunc 305 | runback 306 | backspace 307 | checkdupe 308 | readkey 309 | rawkey: '' 310 | mapkey 311 | killcqpid 312 | execfunc 313 | runback 314 | backspace 315 | checkdupe 316 | readkey 317 | rawkey: '' 318 | mapkey 319 | killcqpid 320 | execfunc 321 | runback 322 | backspace 323 | checkdupe 324 | readkey 325 | rawkey: '' 326 | mapkey 327 | killcqpid 328 | execfunc 329 | runback 330 | backspace 331 | checkdupe 332 | readkey 333 | rawkey: '' 334 | mapkey 335 | killcqpid 336 | execfunc 337 | runback 338 | backspace 339 | readkey 340 | rawkey: '' 341 | mapkey 342 | killcqpid 343 | execfunc 344 | runback 345 | backspace 346 | readkey 347 | rawkey: '' 348 | mapkey 349 | killcqpid 350 | execfunc 351 | runback 352 | backspace 353 | readkey 354 | rawkey: '' 355 | mapkey 356 | killcqpid 357 | execfunc 358 | runback 359 | backspace 360 | readkey 361 | rawkey: '' 362 | mapkey 363 | killcqpid 364 | execfunc 365 | runback 366 | backspace 367 | readkey 368 | rawkey: '' 369 | mapkey 370 | killcqpid 371 | execfunc 372 | runback 373 | backspace 374 | readkey 375 | rawkey: '' 376 | mapkey 377 | killcqpid 378 | execfunc 379 | runback 380 | backspace 381 | readkey 382 | --------------------------------------------------------------------------------