/* * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. * Copyright (C) 2016 Furrtek * * This file is part of PortaPack. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * 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; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, * Boston, MA 02110-1301, USA. */ #include "dcs.hpp" namespace dcs { const uint16_t dcs_parity[DCS_CODES_NB] = { 0b11000111010, // 0 0b01001001111, // 1 0b01010100101, // 2 0b11011010000, // 3 0b01101110001, // 4 0b11100000100, // 5 0b11111101110, // 6 0b01110011011, // 7 0b00011011001, // 8 0b10010101100, // 9 0b10001000110, // 10 0b00000110011, // 11 0b10110010010, // 12 0b00111100111, // 13 0b00100001101, // 14 0b10101111000, // 15 0b11110001001, // 16 0b01111111100, // 17 0b01100010110, // 18 0b11101100011, // 19 0b01011000010, // 20 0b11010110111, // 21 0b11001011101, // 22 0b01000101000, // 23 0b00101101010, // 24 0b10100011111, // 25 0b10111110101, // 26 0b00110000000, // 27 0b10000100001, // 28 0b00001010100, // 29 0b00010111110, // 30 0b10011001011, // 31 0b10101011100, // 32 0b00100101001, // 33 0b00111000011, // 34 0b10110110110, // 35 0b00000010111, // 36 0b10001100010, // 37 0b10010001000, // 38 0b00011111101, // 39 0b01110111111, // 40 0b11111001010, // 41 0b11100100000, // 42 0b01101010101, // 43 0b11011110100, // 44 0b01010000001, // 45 0b01001101011, // 46 0b11000011110, // 47 0b10011101111, // 48 0b00010011010, // 49 0b00001110000, // 50 0b10000000101, // 51 0b00110100100, // 52 0b10111010001, // 53 0b10100111011, // 54 0b00101001110, // 55 0b01000001100, // 56 0b11001111001, // 57 0b11010010011, // 58 0b01011100110, // 59 0b11101000111, // 60 0b01100110010, // 61 0b01111011000, // 62 0b11110101101, // 63 0b00011110110, // 64 0b10010000011, // 65 0b10001101001, // 66 0b00000011100, // 67 0b10110111101, // 68 0b00111001000, // 69 0b00100100010, // 70 0b10101010111, // 71 0b11000010101, // 72 0b01001100000, // 73 0b01010001010, // 74 0b11011111111, // 75 0b01101011110, // 76 0b11100101011, // 77 0b11111000001, // 78 0b01110110100, // 79 0b00101000101, // 80 0b10100110000, // 81 0b10111011010, // 82 0b00110101111, // 83 0b10000001110, // 84 0b00001111011, // 85 0b00010010001, // 86 0b10011100100, // 87 0b11110100110, // 88 0b01111010011, // 89 0b01100111001, // 90 0b11101001100, // 91 0b01011101101, // 92 0b11010011000, // 93 0b11001110010, // 94 0b01000000111, // 95 0b01110010000, // 96 0b11111100101, // 97 0b11100001111, // 98 0b01101111010, // 99 0b11011011011, // 100 0b01010101110, // 101 0b01001000100, // 102 0b11000110001, // 103 0b10101110011, // 104 0b00100000110, // 105 0b00111101100, // 106 0b10110011001, // 107 0b00000111000, // 108 0b10001001101, // 109 0b10010100111, // 110 0b00011010010, // 111 0b01000100011, // 112 0b11001010110, // 113 0b11010111100, // 114 0b01011001001, // 115 0b11101101000, // 116 0b01100011101, // 117 0b01111110111, // 118 0b11110000010, // 119 0b10011000000, // 120 0b00010110101, // 121 0b00001011111, // 122 0b10000101010, // 123 0b00110001011, // 124 0b10111111110, // 125 0b10100010100, // 126 0b00101100001, // 127 0b11111010111, // 128 0b01110100010, // 129 0b01101001000, // 130 0b11100111101, // 131 0b01010011100, // 132 0b11011101001, // 133 0b11000000011, // 134 0b01001110110, // 135 0b00100110100, // 136 0b10101000001, // 137 0b10110101011, // 138 0b00111011110, // 139 0b10001111111, // 140 0b00000001010, // 141 0b00011100000, // 142 0b10010010101, // 143 0b11001100100, // 144 0b01000010001, // 145 0b01011111011, // 146 0b11010001110, // 147 0b01100101111, // 148 0b11101011010, // 149 0b11110110000, // 150 0b01111000101, // 151 0b00010000111, // 152 0b10011110010, // 153 0b10000011000, // 154 0b00001101101, // 155 0b10111001100, // 156 0b00110111001, // 157 0b00101010011, // 158 0b10100100110, // 159 0b10010110001, // 160 0b00011000100, // 161 0b00000101110, // 162 0b10001011011, // 163 0b00111111010, // 164 0b10110001111, // 165 0b10101100101, // 166 0b00100010000, // 167 0b01001010010, // 168 0b11000100111, // 169 0b11011001101, // 170 0b01010111000, // 171 0b11100011001, // 172 0b01101101100, // 173 0b01110000110, // 174 0b11111110011, // 175 0b10100000010, // 176 0b00101110111, // 177 0b00110011101, // 178 0b10111101000, // 179 0b00001001001, // 180 0b10000111100, // 181 0b10011010110, // 182 0b00010100011, // 183 0b01111100001, // 184 0b11110010100, // 185 0b11101111110, // 186 0b01100001011, // 187 0b11010101010, // 188 0b01011011111, // 189 0b01000110101, // 190 0b11001000000, // 191 0b00100011011, // 192 0b10101101110, // 193 0b10110000100, // 194 0b00111110001, // 195 0b10001010000, // 196 0b00000100101, // 197 0b00011001111, // 198 0b10010111010, // 199 0b11111111000, // 200 0b01110001101, // 201 0b01101100111, // 202 0b11100010010, // 203 0b01010110011, // 204 0b11011000110, // 205 0b11000101100, // 206 0b01001011001, // 207 0b00010101000, // 208 0b10011011101, // 209 0b10000110111, // 210 0b00001000010, // 211 0b10111100011, // 212 0b00110010110, // 213 0b00101111100, // 214 0b10100001001, // 215 0b11001001011, // 216 0b01000111110, // 217 0b01011010100, // 218 0b11010100001, // 219 0b01100000000, // 220 0b11101110101, // 221 0b11110011111, // 222 0b01111101010, // 223 0b01001111101, // 224 0b11000001000, // 225 0b11011100010, // 226 0b01010010111, // 227 0b11100110110, // 228 0b01101000011, // 229 0b01110101001, // 230 0b11111011100, // 231 0b10010011110, // 232 0b00011101011, // 233 0b00000000001, // 234 0b10001110100, // 235 0b00111010101, // 236 0b10110100000, // 237 0b10101001010, // 238 0b00100111111, // 239 0b01111001110, // 240 0b11110111011, // 241 0b11101010001, // 242 0b01100100100, // 243 0b11010000101, // 244 0b01011110000, // 245 0b01000011010, // 246 0b11001101111, // 247 0b10100101101, // 248 0b00101011000, // 249 0b00110110010, // 250 0b10111000111, // 251 0b00001100110, // 252 0b10000010011, // 253 0b10011111001, // 254 0b00010001100, // 255 0b10111100000, // 256 0b00110010101, // 257 0b00101111111, // 258 0b10100001010, // 259 0b00010101011, // 260 0b10011011110, // 261 0b10000110100, // 262 0b00001000001, // 263 0b01100000011, // 264 0b11101110110, // 265 0b11110011100, // 266 0b01111101001, // 267 0b11001001000, // 268 0b01000111101, // 269 0b01011010111, // 270 0b11010100010, // 271 0b10001010011, // 272 0b00000100110, // 273 0b00011001100, // 274 0b10010111001, // 275 0b00100011000, // 276 0b10101101101, // 277 0b10110000111, // 278 0b00111110010, // 279 0b01010110000, // 280 0b11011000101, // 281 0b11000101111, // 282 0b01001011010, // 283 0b11111111011, // 284 0b01110001110, // 285 0b01101100100, // 286 0b11100010001, // 287 0b11010000110, // 288 0b01011110011, // 289 0b01000011001, // 290 0b11001101100, // 291 0b01111001101, // 292 0b11110111000, // 293 0b11101010010, // 294 0b01100100111, // 295 0b00001100101, // 296 0b10000010000, // 297 0b10011111010, // 298 0b00010001111, // 299 0b10100101110, // 300 0b00101011011, // 301 0b00110110001, // 302 0b10111000100, // 303 0b11100110101, // 304 0b01101000000, // 305 0b01110101010, // 306 0b11111011111, // 307 0b01001111110, // 308 0b11000001011, // 309 0b11011100001, // 310 0b01010010100, // 311 0b00111010110, // 312 0b10110100011, // 313 0b10101001001, // 314 0b00100111100, // 315 0b10010011101, // 316 0b00011101000, // 317 0b00000000010, // 318 0b10001110111, // 319 0b01100101100, // 320 0b11101011001, // 321 0b11110110011, // 322 0b01111000110, // 323 0b11001100111, // 324 0b01000010010, // 325 0b01011111000, // 326 0b11010001101, // 327 0b10111001111, // 328 0b00110111010, // 329 0b00101010000, // 330 0b10100100101, // 331 0b00010000100, // 332 0b10011110001, // 333 0b10000011011, // 334 0b00001101110, // 335 0b01010011111, // 336 0b11011101010, // 337 0b11000000000, // 338 0b01001110101, // 339 0b11111010100, // 340 0b01110100001, // 341 0b01101001011, // 342 0b11100111110, // 343 0b10001111100, // 344 0b00000001001, // 345 0b00011100011, // 346 0b10010010110, // 347 0b00100110111, // 348 0b10101000010, // 349 0b10110101000, // 350 0b00111011101, // 351 0b00001001010, // 352 0b10000111111, // 353 0b10011010101, // 354 0b00010100000, // 355 0b10100000001, // 356 0b00101110100, // 357 0b00110011110, // 358 0b10111101011, // 359 0b11010101001, // 360 0b01011011100, // 361 0b01000110110, // 362 0b11001000011, // 363 0b01111100010, // 364 0b11110010111, // 365 0b11101111101, // 366 0b01100001000, // 367 0b00111111001, // 368 0b10110001100, // 369 0b10101100110, // 370 0b00100010011, // 371 0b10010110010, // 372 0b00011000111, // 373 0b00000101101, // 374 0b10001011000, // 375 0b11100011010, // 376 0b01101101111, // 377 0b01110000101, // 378 0b11111110000, // 379 0b01001010001, // 380 0b11000100100, // 381 0b11011001110, // 382 0b01010111011, // 383 0b10000001101, // 384 0b00001111000, // 385 0b00010010010, // 386 0b10011100111, // 387 0b00101000110, // 388 0b10100110011, // 389 0b10111011001, // 390 0b00110101100, // 391 0b01011101110, // 392 0b11010011011, // 393 0b11001110001, // 394 0b01000000100, // 395 0b11110100101, // 396 0b01111010000, // 397 0b01100111010, // 398 0b11101001111, // 399 0b10110111110, // 400 0b00111001011, // 401 0b00100100001, // 402 0b10101010100, // 403 0b00011110101, // 404 0b10010000000, // 405 0b10001101010, // 406 0b00000011111, // 407 0b01101011101, // 408 0b11100101000, // 409 0b11111000010, // 410 0b01110110111, // 411 0b11000010110, // 412 0b01001100011, // 413 0b01010001001, // 414 0b11011111100, // 415 0b11101101011, // 416 0b01100011110, // 417 0b01111110100, // 418 0b11110000001, // 419 0b01000100000, // 420 0b11001010101, // 421 0b11010111111, // 422 0b01011001010, // 423 0b00110001000, // 424 0b10111111101, // 425 0b10100010111, // 426 0b00101100010, // 427 0b10011000011, // 428 0b00010110110, // 429 0b00001011100, // 430 0b10000101001, // 431 0b11011011000, // 432 0b01010101101, // 433 0b01001000111, // 434 0b11000110010, // 435 0b01110010011, // 436 0b11111100110, // 437 0b11100001100, // 438 0b01101111001, // 439 0b00000111011, // 440 0b10001001110, // 441 0b10010100100, // 442 0b00011010001, // 443 0b10101110000, // 444 0b00100000101, // 445 0b00111101111, // 446 0b10110011010, // 447 0b01011000001, // 448 0b11010110100, // 449 0b11001011110, // 450 0b01000101011, // 451 0b11110001010, // 452 0b01111111111, // 453 0b01100010101, // 454 0b11101100000, // 455 0b10000100010, // 456 0b00001010111, // 457 0b00010111101, // 458 0b10011001000, // 459 0b00101101001, // 460 0b10100011100, // 461 0b10111110110, // 462 0b00110000011, // 463 0b01101110010, // 464 0b11100000111, // 465 0b11111101101, // 466 0b01110011000, // 467 0b11000111001, // 468 0b01001001100, // 469 0b01010100110, // 470 0b11011010011, // 471 0b10110010001, // 472 0b00111100100, // 473 0b00100001110, // 474 0b10101111011, // 475 0b00011011010, // 476 0b10010101111, // 477 0b10001000101, // 478 0b00000110000, // 479 0b00110100111, // 480 0b10111010010, // 481 0b10100111000, // 482 0b00101001101, // 483 0b10011101100, // 484 0b00010011001, // 485 0b00001110011, // 486 0b10000000110, // 487 0b11101000100, // 488 0b01100110001, // 489 0b01111011011, // 490 0b11110101110, // 491 0b01000001111, // 492 0b11001111010, // 493 0b11010010000, // 494 0b01011100101, // 495 0b00000010100, // 496 0b10001100001, // 497 0b10010001011, // 498 0b00011111110, // 499 0b10101011111, // 500 0b00100101010, // 501 0b00111000000, // 502 0b10110110101, // 503 0b11011110111, // 504 0b01010000010, // 505 0b01001101000, // 506 0b11000011101, // 507 0b01110111100, // 508 0b11111001001, // 509 0b11100100011, // 510 0b01101010110 // 511 }; uint32_t dcs_word(uint32_t code) { code &= 511; return (dcs_parity[code] << 12) | (0b100 << 9) | code; } }