aboutsummaryrefslogtreecommitdiff
path: root/src/varicode_table.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/varicode_table.h')
-rw-r--r--src/varicode_table.h338
1 files changed, 338 insertions, 0 deletions
diff --git a/src/varicode_table.h b/src/varicode_table.h
new file mode 100644
index 0000000..c56fd20
--- /dev/null
+++ b/src/varicode_table.h
@@ -0,0 +1,338 @@
+//==========================================================================
+// 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 character 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
+};
+