715 double toc_bds, sqrtA;
716 uint32_t toe1, toe2, sow1, sow2, sow3;
717 int i, frn1, frn2, frn3;
720 frn1 =
getbitu(buff, i + 15, 3);
721 sow1 =
getbitu2(buff, i + 18, 8, i + 30, 12);
726 toc_bds =
getbitu2(buff, i + 73, 9, i + 90, 8) * 8.0;
727 eph_bds.
tgd[0] =
getbits(buff, i + 98, 10) * 0.1 * 1E-9;
728 eph_bds.
tgd[1] =
getbits2(buff, i + 108, 4, i + 120, 6) * 0.1 * 1E-9;
735 frn2 =
getbitu(buff, i + 15, 3);
736 sow2 =
getbitu2(buff, i + 18, 8, i + 30, 12);
745 toe1 =
getbitu(buff, i + 290, 2);
746 eph_bds.
A = sqrtA * sqrtA;
749 frn3 =
getbitu(buff, i + 15, 3);
750 sow3 =
getbitu2(buff, i + 18, 8, i + 30, 12);
751 toe2 =
getbitu2(buff, i + 42, 10, i + 60, 5);
762 if (frn1 != 1 || frn2 != 2 || frn3 != 3) {
763 trace(NULL, 3,
"decode_bds_d1_eph error: frn=%d %d %d\n", frn1, frn2, frn3);
766 if (sow2 != sow1 + 6 || sow3 != sow2 + 6) {
767 trace(NULL, 3,
"decode_bds_d1_eph error: sow=%d %d %d\n", sow1, sow2, sow3);
770 if (toc_bds != eph_bds.
toes) {
771 trace(NULL, 3,
"decode_bds_d1_eph error: toe=%.0f toc=%.0f\n", eph_bds.
toes, toc_bds);
775 if (eph_bds.
toes > sow1 + 302400.0) {
777 }
else if (eph_bds.
toes < sow1 - 302400.0) {
868 double toc_bds, sqrtA;
869 uint32_t f1p4, cucp5, ep6, cicp7, i0p8, OMGdp9, omgp10;
870 uint32_t sow1, sow3, sow4, sow5, sow6, sow7, sow8, sow9, sow10;
871 int i, f1p3, cucp4, ep5, cicp6, i0p7, OMGdp8, omgp9;
872 int pgn1, pgn3, pgn4, pgn5, pgn6, pgn7, pgn8, pgn9, pgn10;
874 trace(NULL, 4,
"decode_bds_d1_eph:\n");
877 pgn1 =
getbitu(buff, i + 42, 4);
878 sow1 =
getbitu2(buff, i + 18, 8, i + 30, 12);
883 toc_bds =
getbitu2(buff, i + 77, 5, i + 90, 12) * 8.0;
884 eph_bds.
tgd[0] =
getbits(buff, i + 102, 10) * 0.1 * 1E-9;
885 eph_bds.
tgd[1] =
getbits(buff, i + 120, 10) * 0.1 * 1E-9;
888 pgn3 =
getbitu(buff, i + 42, 4);
889 sow3 =
getbitu2(buff, i + 18, 8, i + 30, 12);
891 f1p3 =
getbits(buff, i + 132, 4);
894 pgn4 =
getbitu(buff, i + 42, 4);
895 sow4 =
getbitu2(buff, i + 18, 8, i + 30, 12);
896 f1p4 =
getbitu2(buff, i + 46, 6, i + 60, 12);
900 cucp4 =
getbits(buff, i + 120, 14);
903 pgn5 =
getbitu(buff, i + 42, 4);
904 sow5 =
getbitu2(buff, i + 18, 8, i + 30, 12);
905 cucp5 =
getbitu(buff, i + 46, 4);
908 ep5 =
getbits(buff, i + 124, 10);
911 pgn6 =
getbitu(buff, i + 42, 4);
912 sow6 =
getbitu2(buff, i + 18, 8, i + 30, 12);
913 ep6 =
getbitu2(buff, i + 46, 6, i + 60, 16);
914 sqrtA =
getbitu3(buff, i + 76, 6, i + 90, 22, i + 120, 4) *
P2_19;
915 cicp6 =
getbits(buff, i + 124, 10);
916 eph_bds.
A = sqrtA * sqrtA;
919 pgn7 =
getbitu(buff, i + 42, 4);
920 sow7 =
getbitu2(buff, i + 18, 8, i + 30, 12);
921 cicp7 =
getbitu2(buff, i + 46, 6, i + 60, 2);
923 eph_bds.
toes =
getbitu2(buff, i + 80, 2, i + 90, 15) * 8.0;
924 i0p7 =
getbits2(buff, i + 105, 7, i + 120, 14);
927 pgn8 =
getbitu(buff, i + 42, 4);
928 sow8 =
getbitu2(buff, i + 18, 8, i + 30, 12);
929 i0p8 =
getbitu2(buff, i + 46, 6, i + 60, 5);
932 OMGdp8 =
getbits2(buff, i + 109, 3, i + 120, 16);
935 pgn9 =
getbitu(buff, i + 42, 4);
936 sow9 =
getbitu2(buff, i + 18, 8, i + 30, 12);
937 OMGdp9 =
getbitu(buff, i + 46, 5);
939 omgp9 =
getbits2(buff, i + 99, 13, i + 120, 14);
942 pgn10 =
getbitu(buff, i + 42, 4);
943 sow10 =
getbitu2(buff, i + 18, 8, i + 30, 12);
944 omgp10 =
getbitu(buff, i + 46, 5);
948 if (pgn1 != 1 || pgn3 != 3 || pgn4 != 4 || pgn5 != 5 || pgn6 != 6 || pgn7 != 7 || pgn8 != 8 || pgn9 != 9 ||
950 trace(NULL, 3,
"decode_bds_d2 error: pgn=%d %d %d %d %d %d %d %d %d\n", pgn1, pgn3, pgn4, pgn5, pgn6, pgn7,
954 if (sow3 != sow1 + 6 || sow4 != sow3 + 3 || sow5 != sow4 + 3 || sow6 != sow5 + 3 || sow7 != sow6 + 3 ||
955 sow8 != sow7 + 3 || sow9 != sow8 + 3 || sow10 != sow9 + 3) {
956 trace(NULL, 3,
"decode_bds_d2 error: sow=%d %d %d %d %d %d %d %d %d\n", sow1, sow3, sow4, sow5, sow6, sow7,
960 if (toc_bds != eph_bds.
toes) {
961 trace(NULL, 3,
"decode_bds_d2 error: toe=%.0f toc=%.0f\n", eph_bds.
toes, toc_bds);
973 if (eph_bds.
toes > sow1 + 302400.0) {
975 }
else if (eph_bds.
toes < sow1 - 302400.0) {
1047 static const uint8_t xor_8bit[256] = {
1049 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0,
1050 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1,
1051 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1,
1052 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0,
1053 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0,
1054 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0,
1055 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0};
1056 static const uint8_t mask_hamming[][12] = {
1057 {0x55, 0x55, 0x5A, 0xAA, 0xAA, 0xAA, 0xB5, 0x55, 0x6A, 0xD8, 0x08},
1058 {0x66, 0x66, 0x6C, 0xCC, 0xCC, 0xCC, 0xD9, 0x99, 0xB3, 0x68, 0x10},
1059 {0x87, 0x87, 0x8F, 0x0F, 0x0F, 0x0F, 0x1E, 0x1E, 0x3C, 0x70, 0x20},
1060 {0x07, 0xF8, 0x0F, 0xF0, 0x0F, 0xF0, 0x1F, 0xE0, 0x3F, 0x80, 0x40},
1061 {0xF8, 0x00, 0x0F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xC0, 0x00, 0x80},
1062 {0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xE0, 0x00, 0x00, 0x01, 0x00},
1063 {0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00},
1064 {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8}};
1068 for (i = 0; i < 8; i++) {
1069 for (j = 0, cs = 0; j < 11; j++) {
1070 cs ^= xor_8bit[buff[j] & mask_hamming[i][j]];
1076 return n == 0 || (n == 2 && cs);