339 lines
7.6 KiB
C
339 lines
7.6 KiB
C
//==========================================================================
|
|
// Name: varicode_table.h
|
|
// Purpose: Varicode look up table
|
|
// Created: Nov 24, 2012
|
|
// Authors: Clint Turner, KA7OEI, Peter Martinez, G3PLX
|
|
//
|
|
// License:
|
|
//
|
|
// This program is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License version 2.1,
|
|
// as published by the Free Software Foundation. This program is
|
|
// distributed in the hope that it will be useful, but WITHOUT ANY
|
|
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
|
// License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program; if not, see <http://www.gnu.org/licenses/>.
|
|
//
|
|
//==========================================================================
|
|
|
|
/* The following table defines the PKS31 varicode. There are 128 entries,
|
|
corresponding to ASCII characters 0-127 with two bytes for each entry. The bits
|
|
for the varicode are to be shifted out MSB-first for both bytes, with the first byte
|
|
in the table being the first one to be sent.
|
|
|
|
More than one zero in sequence signifies the end of the character (i.e.
|
|
two zeroes are the intercharacter sequence, so at least two zeroes should always be
|
|
sent before the next character is sent.
|
|
|
|
This file is constructed with information from the article "PSK31 Fundamentals"
|
|
by Peter Martinez, G3PLX by Clint Turner, KA7OEI
|
|
*/
|
|
unsigned char const varicode_table1[256] = {
|
|
0b10101010,
|
|
0b11000000, // 0 NUL
|
|
0b10110110,
|
|
0b11000000, // 1 SOH
|
|
0b10111011,
|
|
0b01000000, // 2 STX
|
|
0b11011101,
|
|
0b11000000, // 3 ETX
|
|
0b10111010,
|
|
0b11000000, // 4 EOT
|
|
0b11010111,
|
|
0b11000000, // 5 ENQ
|
|
0b10111011,
|
|
0b11000000, // 6 ACK
|
|
0b10111111,
|
|
0b01000000, // 7 BEL
|
|
0b10111111,
|
|
0b11000000, // 8 BS
|
|
0b11101111,
|
|
0b00000000, // 9 HT
|
|
0b11101000,
|
|
0b00000000, // 10 LF
|
|
0b11011011,
|
|
0b11000000, // 11 VT
|
|
0b10110111,
|
|
0b01000000, // 12 FF
|
|
0b11111000,
|
|
0b00000000, // 13 CR
|
|
0b11011101,
|
|
0b01000000, // 14 SO
|
|
0b11101010,
|
|
0b11000000, // 15 SI
|
|
0b10111101,
|
|
0b11000000, // 16 DLE
|
|
0b10111101,
|
|
0b01000000, // 17 DC1
|
|
0b11101011,
|
|
0b01000000, // 18 DC2
|
|
0b11101011,
|
|
0b11000000, // 19 DC3
|
|
0b11010110,
|
|
0b11000000, // 20 DC4
|
|
0b11011010,
|
|
0b11000000, // 21 NAK
|
|
0b11011011,
|
|
0b01000000, // 22 SYN
|
|
0b11010101,
|
|
0b11000000, // 23 ETB
|
|
0b11011110,
|
|
0b11000000, // 24 CAN
|
|
0b11011111,
|
|
0b01000000, // 25 EM
|
|
0b11101101,
|
|
0b11000000, // 26 SUB
|
|
0b11010101,
|
|
0b01000000, // 27 ESC
|
|
0b11010111,
|
|
0b01000000, // 28 FS
|
|
0b11101110,
|
|
0b11000000, // 29 GS
|
|
0b10111110,
|
|
0b11000000, // 30 RS
|
|
0b11011111,
|
|
0b11000000, // 31 US
|
|
0b10000000,
|
|
0b00000000, // 32 SP
|
|
0b11111111,
|
|
0b10000000, // 33 !
|
|
0b10101111,
|
|
0b10000000, // 34 "
|
|
0b11111010,
|
|
0b10000000, // 35 #
|
|
0b11101101,
|
|
0b10000000, // 36 $
|
|
0b10110101,
|
|
0b01000000, // 37 %
|
|
0b10101110,
|
|
0b11000000, // 38 &
|
|
0b10111111,
|
|
0b10000000, // 39 '
|
|
0b11111011,
|
|
0b00000000, // 40 (
|
|
0b11110111,
|
|
0b00000000, // 41 )
|
|
0b10110111,
|
|
0b10000000, // 42 *
|
|
0b11101111,
|
|
0b10000000, // 43 +
|
|
0b11101010,
|
|
0b00000000, // 44 ,
|
|
0b11010100,
|
|
0b00000000, // 45 -
|
|
0b10101110,
|
|
0b00000000, // 46 .
|
|
0b11010111,
|
|
0b10000000, // 47 /
|
|
0b10110111,
|
|
0b00000000, // 48 0
|
|
0b10111101,
|
|
0b00000000, // 49 1
|
|
0b11101101,
|
|
0b00000000, // 50 2
|
|
0b11111111,
|
|
0b00000000, // 51 3
|
|
0b10111011,
|
|
0b10000000, // 52 4
|
|
0b10101101,
|
|
0b10000000, // 53 5
|
|
0b10110101,
|
|
0b10000000, // 54 6
|
|
0b11010110,
|
|
0b10000000, // 55 7
|
|
0b11010101,
|
|
0b10000000, // 56 8
|
|
0b11011011,
|
|
0b10000000, // 57 9
|
|
0b11110101,
|
|
0b00000000, // 58 :
|
|
0b11011110,
|
|
0b10000000, // 59 ;
|
|
0b11110110,
|
|
0b10000000, // 60 <
|
|
0b10101010,
|
|
0b00000000, // 61 =
|
|
0b11101011,
|
|
0b10000000, // 62 >
|
|
0b10101011,
|
|
0b11000000, // 63 ?
|
|
0b10101111,
|
|
0b01000000, // 64 @
|
|
0b11111010,
|
|
0b00000000, // 65 A
|
|
0b11101011,
|
|
0b00000000, // 66 B
|
|
0b10101101,
|
|
0b00000000, // 67 C
|
|
0b10110101,
|
|
0b00000000, // 68 D
|
|
0b11101110,
|
|
0b00000000, // 69 E
|
|
0b11011011,
|
|
0b00000000, // 70 F
|
|
0b11111101,
|
|
0b00000000, // 71 G
|
|
0b10101010,
|
|
0b10000000, // 72 H
|
|
0b11111110,
|
|
0b00000000, // 73 I
|
|
0b11111110,
|
|
0b10000000, // 74 J
|
|
0b10111110,
|
|
0b10000000, // 75 K
|
|
0b11010111,
|
|
0b00000000, // 76 L
|
|
0b10111011,
|
|
0b00000000, // 77 M
|
|
0b11011101,
|
|
0b00000000, // 78 N
|
|
0b10101011,
|
|
0b00000000, // 79 O
|
|
0b11010101,
|
|
0b00000000, // 80 P
|
|
0b11101110,
|
|
0b10000000, // 81 Q
|
|
0b10101111,
|
|
0b00000000, // 82 R
|
|
0b11011110,
|
|
0b00000000, // 83 S
|
|
0b11011010,
|
|
0b00000000, // 84 T
|
|
0b10101011,
|
|
0b10000000, // 85 U
|
|
0b11011010,
|
|
0b10000000, // 86 V
|
|
0b10101110,
|
|
0b10000000, // 87 W
|
|
0b10111010,
|
|
0b10000000, // 88 X
|
|
0b10111101,
|
|
0b10000000, // 89 Y
|
|
0b10101011,
|
|
0b01000000, // 90 Z
|
|
0b11111011,
|
|
0b10000000, // 91 [
|
|
0b11110111,
|
|
0b10000000, // 92 "\"
|
|
0b11111101,
|
|
0b10000000, // 93 ]
|
|
0b10101111,
|
|
0b11000000, // 94 ^
|
|
0b10110110,
|
|
0b10000000, // 95 _ (underline)
|
|
0b10110111,
|
|
0b11000000, // 96 `
|
|
0b10110000,
|
|
0b00000000, // 97 a
|
|
0b10111110,
|
|
0b00000000, // 98 b
|
|
0b10111100,
|
|
0b00000000, // 99 c
|
|
0b10110100,
|
|
0b00000000, // 100 d
|
|
0b11000000,
|
|
0b00000000, // 101 e
|
|
0b11110100,
|
|
0b00000000, // 102 f
|
|
0b10110110,
|
|
0b00000000, // 103 g
|
|
0b10101100,
|
|
0b00000000, // 104 h
|
|
0b11010000,
|
|
0b00000000, // 105 i
|
|
0b11110101,
|
|
0b10000000, // 106 j
|
|
0b10111111,
|
|
0b00000000, // 107 k
|
|
0b11011000,
|
|
0b00000000, // 108 l
|
|
0b11101100,
|
|
0b00000000, // 109 m
|
|
0b11110000,
|
|
0b00000000, // 110 n
|
|
0b11100000,
|
|
0b00000000, // 111 o
|
|
0b11111100,
|
|
0b00000000, // 112 p
|
|
0b11011111,
|
|
0b10000000, // 113 q
|
|
0b10101000,
|
|
0b00000000, // 114 r
|
|
0b10111000,
|
|
0b00000000, // 115 s
|
|
0b10100000,
|
|
0b00000000, // 116 t
|
|
0b11011100,
|
|
0b00000000, // 117 u
|
|
0b11110110,
|
|
0b00000000, // 118 v
|
|
0b11010110,
|
|
0b00000000, // 119 w
|
|
0b11011111,
|
|
0b00000000, // 120 x
|
|
0b10111010,
|
|
0b00000000, // 121 y
|
|
0b11101010,
|
|
0b10000000, // 122 z
|
|
0b10101101,
|
|
0b11000000, // 123 {
|
|
0b11011101,
|
|
0b10000000, // 124 |
|
|
0b10101101,
|
|
0b01000000, // 125 }
|
|
0b10110101,
|
|
0b11000000, // 126 ~
|
|
0b11101101,
|
|
0b01000000, // 127 (del)
|
|
};
|
|
|
|
// This code was used on FDMDV version 1, and is more compact that Code 1, but only covers a subset
|
|
// of the ASCII cahacter set
|
|
|
|
char const varicode_table2[] = {
|
|
|
|
' ' ,0b11000000,
|
|
13 ,0b01000000, // CR, end of message
|
|
'=' ,0b10000000,
|
|
'1' ,0b11110000,
|
|
'2' ,0b01110000,
|
|
'3' ,0b10110000,
|
|
'4' ,0b11010000,
|
|
'5' ,0b01010000,
|
|
'6' ,0b10010000,
|
|
'7' ,0b11100000,
|
|
'8' ,0b01100000,
|
|
'9' ,0b10100000,
|
|
'a' ,0b11111100,
|
|
'b' ,0b01111100,
|
|
'c' ,0b10111100,
|
|
'd' ,0b11011100,
|
|
'e' ,0b01011100,
|
|
'f' ,0b10011100,
|
|
'g' ,0b11101100,
|
|
'h' ,0b01101100,
|
|
'i' ,0b10101100,
|
|
'j' ,0b11110100,
|
|
'k' ,0b01110100,
|
|
'l' ,0b10110100,
|
|
'm' ,0b11010100,
|
|
'n' ,0b01010100,
|
|
'o' ,0b10010100,
|
|
'p' ,0b11100100,
|
|
'q' ,0b01100100,
|
|
'r' ,0b10100100,
|
|
's' ,0b11111000,
|
|
't' ,0b01111000,
|
|
'u' ,0b10111000,
|
|
'v' ,0b11011000,
|
|
'w' ,0b01011000,
|
|
'x' ,0b10011000,
|
|
'y' ,0b11101000,
|
|
'z' ,0b01101000,
|
|
'0' ,0b10101000
|
|
};
|
|
|