UHSDR/UHSDR-active-devel/mchf-eclipse/drivers/freedv/varicode_table.h
2022-11-08 16:13:55 +01:00

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
};