diff --git a/demod/mod/mXXmod.c b/demod/mod/mXXmod.c index 920c773..6e44693 100644 --- a/demod/mod/mXXmod.c +++ b/demod/mod/mXXmod.c @@ -196,6 +196,8 @@ frame[0x44..0x45]: frame check #define pos_BlkChk 0x16 // 2 byte #define pos_Check (stdFLEN-1) // 2 byte +#define len_BlkChk 0x16 // frame[0x02..0x17] , incl. chk16 + #define ANSI_COLOR_RED "\x1b[31m" #define ANSI_COLOR_GREEN "\x1b[32m" @@ -458,7 +460,7 @@ static int update_checkM10(int c, ui8_t b) { } static int checkM10(ui8_t *msg, int len) { - int i, cs; + int i, cs; // msg[0] = len+1 cs = 0; for (i = 0; i < len; i++) { @@ -467,15 +469,15 @@ static int checkM10(ui8_t *msg, int len) { return cs & 0xFFFF; } - -static int blk_checkM10(int c0, ui8_t *msg, int len) { +// checkM10(frame, frame[0]-1) = blk_checkM10(frame[0], frame+1) +static int blk_checkM10(int len, ui8_t *msg) { int i, cs; - ui8_t pre = c0 & 0xFF; + ui8_t pre = len & 0xFF; // len(block+chk16) cs = 0; cs = update_checkM10(cs, pre); - for (i = 0; i < len; i++) { + for (i = 0; i < len-2; i++) { cs = update_checkM10(cs, msg[i]); } @@ -608,7 +610,7 @@ static int print_frame(gpx_t *gpx, int pos) { cs2 = checkM10(gpx->frame_bytes, pos_Check+gpx->auxlen); bc1 = (gpx->frame_bytes[pos_BlkChk] << 8) | gpx->frame_bytes[pos_BlkChk+1]; - bc2 = blk_checkM10(0x16, gpx->frame_bytes+2, pos_BlkChk-2); // len(essentialBlock) = 0x16 + bc2 = blk_checkM10(len_BlkChk, gpx->frame_bytes+2); // len(essentialBlock+chk16) = 0x16 if (gpx->option.raw) { diff --git a/m10/mXX_20180919.c b/m10/mXX_20180919.c index e3c6786..26d779f 100644 --- a/m10/mXX_20180919.c +++ b/m10/mXX_20180919.c @@ -484,21 +484,24 @@ frame[0x44..0x45]: frame check */ -#define stdFLEN 0x43 // pos[0]=0x43 -#define pos_GPSTOW 0x0F // 3 byte -#define pos_GPSlat 0x1C // 4 byte -#define pos_GPSlon 0x20 // 4 byte -#define pos_GPSalt 0x08 // 3 byte -#define pos_GPSweek 0x1A // 2 byte +#define stdFLEN 0x43 // pos[0]=0x43 +#define pos_GPSTOW 0x0F // 3 byte +#define pos_GPSlat 0x1C // 4 byte +#define pos_GPSlon 0x20 // 4 byte +#define pos_GPSalt 0x08 // 3 byte +#define pos_GPSweek 0x1A // 2 byte //Velocity East-North-Up (ENU) -#define pos_GPSvE 0x0B // 2 byte -#define pos_GPSvN 0x0D // 2 byte -#define pos_GPSvU 0x18 // 2 byte +#define pos_GPSvE 0x0B // 2 byte +#define pos_GPSvN 0x0D // 2 byte +#define pos_GPSvU 0x18 // 2 byte #define pos_Cnt 0x15 // 1 byte #define pos_BlkChk 0x16 // 2 byte #define pos_Check (stdFLEN-1) // 2 byte +#define len_BlkChk 0x16 // frame[0x02..0x17] , incl. chk16 + + #define ANSI_COLOR_RESET "\x1b[0m" #define col_GPSTOW "\x1b[38;5;27m" // 3 byte @@ -627,7 +630,7 @@ int get_GPSvel() { /* -------------------------------------------------------------------------- */ -static float get_Tntc0(ui8_t *frame, int csOK) { +float get_Tntc0(ui8_t *frame, int csOK) { // SMD ntc float Rs = 22.1e3; // P5.6=Vcc float R25 = 2.2e3;// 0.119e3; //2.2e3; @@ -703,7 +706,7 @@ int update_checkM10(int c, ui8_t b) { } int checkM10(ui8_t *msg, int len) { - int i, cs; + int i, cs; // msg[0] = len+1 cs = 0; for (i = 0; i < len; i++) { @@ -712,15 +715,15 @@ int checkM10(ui8_t *msg, int len) { return cs & 0xFFFF; } - -int blk_checkM10(int c0, ui8_t *msg, int len) { +// checkM10(frame, frame[0]-1) = blk_checkM10(frame[0], frame+1) +int blk_checkM10(int len, ui8_t *msg) { int i, cs; - ui8_t pre = c0 & 0xFF; + ui8_t pre = len & 0xFF; // len(block+chk16) cs = 0; cs = update_checkM10(cs, pre); - for (i = 0; i < len; i++) { + for (i = 0; i < len-2; i++) { cs = update_checkM10(cs, msg[i]); } @@ -826,7 +829,7 @@ void print_frame(int pos) { cs2 = checkM10(frame_bytes, pos_Check+auxlen); bc1 = (frame_bytes[pos_BlkChk] << 8) | frame_bytes[pos_BlkChk+1]; - bc2 = blk_checkM10(0x16, frame_bytes+2, pos_BlkChk-2); // len(essentialBlock) = 0x16 + bc2 = blk_checkM10(len_BlkChk, frame_bytes+2); // len(essentialBlock+chk16) = 0x16 if (option_raw) {