kopia lustrzana https://github.com/rs1729/RS
Meisei RS-11G: serial number, frequency
rodzic
3a2366817a
commit
be6bc50542
|
@ -138,6 +138,36 @@ typedef struct {
|
||||||
RS_t RS;
|
RS_t RS;
|
||||||
} gpx_t;
|
} gpx_t;
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
static float f32e2(ui32_t num) {
|
||||||
|
ui32_t val;
|
||||||
|
float f;
|
||||||
|
/*
|
||||||
|
int i;
|
||||||
|
double e, s, m;
|
||||||
|
|
||||||
|
val = 0;
|
||||||
|
for (i=31;i>=24;i--) { val |= ((num>>i)&1)<<(i-24); }
|
||||||
|
e = (double)val-127-2; // exponent
|
||||||
|
|
||||||
|
val = 0;
|
||||||
|
for (i=22;i>= 0;i--) { val |= ((num>>i)&1)<<i; }
|
||||||
|
m = (double)val/(1<<23); // mantissa
|
||||||
|
|
||||||
|
s = (num>>23)&1 ? -1.0 : +1.0 ; // sign
|
||||||
|
|
||||||
|
f = s*(1+m)*pow(2,e);
|
||||||
|
*/
|
||||||
|
val = (num & 0x800000)<<8; // sign
|
||||||
|
val |= (num>>1) & 0x7F800000; // exponent
|
||||||
|
val |= num & 0x7FFFFF; // mantissa
|
||||||
|
|
||||||
|
memcpy(&f, &val, 4);
|
||||||
|
f /= 4.0; // e -= 127+2;
|
||||||
|
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
@ -602,14 +632,16 @@ int main(int argc, char **argv) {
|
||||||
jmpRS11:
|
jmpRS11:
|
||||||
if (reset_gpx) {
|
if (reset_gpx) {
|
||||||
memset(&gpx, sizeof(gpx), 0);
|
memset(&gpx, sizeof(gpx), 0);
|
||||||
sn = 0;
|
sn = -1;
|
||||||
|
freq = -1;
|
||||||
reset_gpx = 0;
|
reset_gpx = 0;
|
||||||
}
|
}
|
||||||
if (header_found % 2 == 1)
|
if (header_found % 2 == 1)
|
||||||
{
|
{
|
||||||
ui16_t w16[2];
|
ui16_t w16[2];
|
||||||
ui32_t w32;
|
ui32_t w32;
|
||||||
float *fcfg = (float *)&w32;
|
//float *fcfg = (float *)&w32;
|
||||||
|
float fw32;
|
||||||
|
|
||||||
val = bits2val(subframe_bits+HEADLEN, 16);
|
val = bits2val(subframe_bits+HEADLEN, 16);
|
||||||
counter = val & 0xFFFF;
|
counter = val & 0xFFFF;
|
||||||
|
@ -626,11 +658,17 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
w16[0] = bits2val(subframe_bits+HEADLEN+46*1 , 16);
|
w16[0] = bits2val(subframe_bits+HEADLEN+46*1 , 16);
|
||||||
w16[1] = bits2val(subframe_bits+HEADLEN+46*1+17, 16);
|
w16[1] = bits2val(subframe_bits+HEADLEN+46*1+17, 16);
|
||||||
w32 = (w16[1]<<16) | w16[0];
|
//w32 = (w16[1]<<16) | w16[0];
|
||||||
|
w32 = ( (w16[1]&0xFF00)>>8 | (w16[1]&0xFF)<<8 ) << 16
|
||||||
|
| ( (w16[0]&0xFF00)>>8 | (w16[0]&0xFF)<<8 );
|
||||||
|
fw32 = f32e2(w32);
|
||||||
|
|
||||||
if (err_blks == 0) // err_frm zu schwach
|
if (err_blks == 0) // err_frm zu schwach
|
||||||
{
|
{
|
||||||
if (counter % 0x10 == 0) { sn = w32; gpx.sn = sn; gpx._sn = w32; }
|
// SN
|
||||||
|
if (counter % 0x10 == 0) { sn = f32e2(w32); gpx.sn = f32e2(w32); gpx._sn = w32; }
|
||||||
|
// freq
|
||||||
|
if (counter % 64 == 15) { freq = 403700+fw32*100.0; gpx.fq = freq; }
|
||||||
}
|
}
|
||||||
|
|
||||||
if (counter % 2 == 1) {
|
if (counter % 2 == 1) {
|
||||||
|
@ -651,10 +689,11 @@ int main(int argc, char **argv) {
|
||||||
gpx.min = min;
|
gpx.min = min;
|
||||||
gpx.sek = (double)ms/1000.0;
|
gpx.sek = (double)ms/1000.0;
|
||||||
|
|
||||||
if (0 && option_jsn && err_blks==0 && gpx.frnr1-gpx.frnr==1) {
|
if (option_jsn && err_blks==0 && gpx.frnr1-gpx.frnr==1) {
|
||||||
char id_str[] = "xxxxxx\0\0\0\0\0\0";
|
char id_str[] = "xxxxxx\0\0\0\0\0\0";
|
||||||
if (gpx._sn > 0) {
|
//if (gpx._sn > 0) { sprintf(id_str, "%08x", gpx._sn); }
|
||||||
sprintf(id_str, "__%05d", gpx._sn & 0xFFFF); // last 5 digits?
|
if (gpx.sn > 0 && gpx.sn < 1e9) {
|
||||||
|
sprintf(id_str, "%.0f", gpx.sn);
|
||||||
}
|
}
|
||||||
printf("{ \"type\": \"%s\"", "MEISEI");
|
printf("{ \"type\": \"%s\"", "MEISEI");
|
||||||
printf(", \"frame\": %d, \"id\": \"RS11G-%s\", \"datetime\": \"%04d-%02d-%02dT%02d:%02d:%06.3fZ\", \"lat\": %.5f, \"lon\": %.5f, \"alt\": %.5f, \"vel_h\": %.5f, \"heading\": %.5f, \"vel_v\": %.5f",
|
printf(", \"frame\": %d, \"id\": \"RS11G-%s\", \"datetime\": \"%04d-%02d-%02dT%02d:%02d:%06.3fZ\", \"lat\": %.5f, \"lon\": %.5f, \"alt\": %.5f, \"vel_h\": %.5f, \"heading\": %.5f, \"vel_v\": %.5f",
|
||||||
|
@ -719,9 +758,22 @@ int main(int argc, char **argv) {
|
||||||
gpx.vD = velD;
|
gpx.vD = velD;
|
||||||
gpx.vV = velU;
|
gpx.vV = velU;
|
||||||
}
|
}
|
||||||
if (err_blks == 0 && counter%0x10==0 && gpx._sn > 0) { // gpx._sn>>16 = 0x5697 , 0x7297
|
/*
|
||||||
//fprintf(stdout, " : sn 0x%08x = %05d %d", gpx._sn, gpx._sn & 0xFFFF, (gpx._sn>>16) & 0xFFFF);
|
if (err_blks == 0 && counter%0x10==0 && gpx._sn > 0) {
|
||||||
fprintf(stdout, " : _sn %05d", gpx._sn & 0xFFFF);
|
if (option_verbose) {
|
||||||
|
fprintf(stdout, " : sn %.0f (0x%08x)", gpx.sn, gpx._sn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
if (option_verbose && err_blks == 0) {
|
||||||
|
if (sn > 0) {
|
||||||
|
printf(" : sn %.0f (0x%08x)", sn, gpx._sn);
|
||||||
|
sn = -1;
|
||||||
|
}
|
||||||
|
if (freq > 0) {
|
||||||
|
printf(" : fq %.0f", freq); // kHz
|
||||||
|
freq = -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
@ -732,7 +784,8 @@ int main(int argc, char **argv) {
|
||||||
jmpIMS:
|
jmpIMS:
|
||||||
if (reset_gpx) {
|
if (reset_gpx) {
|
||||||
memset(&gpx, sizeof(gpx), 0);
|
memset(&gpx, sizeof(gpx), 0);
|
||||||
sn = 0;
|
sn = -1;
|
||||||
|
freq = -1;
|
||||||
reset_gpx = 0;
|
reset_gpx = 0;
|
||||||
}
|
}
|
||||||
if (header_found % 2 == 1) { // 049DCE
|
if (header_found % 2 == 1) { // 049DCE
|
||||||
|
|
Ładowanie…
Reference in New Issue