Changed ID format

Changed Ptu to Trimble, the GPS chip
Changed GTop to Gtop
Added aux tag when the is aux data
pull/115/head
Viproz 2019-02-04 14:02:09 +01:00
rodzic bd188465bc
commit 5983d11362
9 zmienionych plików z 93 dodań i 86 usunięć

Wyświetl plik

@ -18,7 +18,7 @@ gcc dfm09dm_dft.c demod_dft.o -lm -o dfm09ecc -I../ecc/ -I../dfm
# Build M10 decoder
echo "Building M10 Demodulator."
cd ../m10/
g++ M10.cpp M10Decoder.cpp M10GeneralParser.cpp M10GTopParser.cpp M10PtuParser.cpp AudioFile.cpp -lm -o m10 -std=c++11
g++ M10.cpp M10Decoder.cpp M10GeneralParser.cpp M10GtopParser.cpp M10TrimbleParser.cpp AudioFile.cpp -lm -o m10 -std=c++11
# Copy all necessary files into this directory.

Wyświetl plik

@ -6,23 +6,23 @@
*/
#include "M10Decoder.h"
#include "M10GTopParser.h"
#include "M10PtuParser.h"
#include "M10GtopParser.h"
#include "M10TrimbleParser.h"
char M10Decoder::header[] = "10011001100110010100110010011001";
M10Decoder::M10Decoder() {
m10GTop = new M10GTopParser();
m10Ptu = new M10PtuParser();
m10Parser = m10GTop;
m10Gtop = new M10GtopParser();
m10Trimble = new M10TrimbleParser();
m10Parser = m10Gtop;
frameSamples = NULL;
audioFile = NULL;
}
M10Decoder::~M10Decoder() {
delete m10GTop;
delete m10Ptu;
delete m10Gtop;
delete m10Trimble;
if (frameSamples)
delete frameSamples;
@ -62,10 +62,10 @@ int M10Decoder::startDecode(std::string fname) {
supported = true;
switch (sondeType) {
case 0xAF02:
m10Parser = m10GTop;
m10Parser = m10Gtop;
break;
case 0x9F20:
m10Parser = m10Ptu;
m10Parser = m10Trimble;
break;
default:
supported = false;
@ -370,8 +370,8 @@ int M10Decoder::decodeMethodSign(double initialPos) {
void M10Decoder::setRaw(bool b) {
dispRaw = b;
m10GTop->setRaw(b);
m10Ptu->setRaw(b);
m10Gtop->setRaw(b);
m10Trimble->setRaw(b);
}
int M10Decoder::getNextBufferValue() {

Wyświetl plik

@ -49,8 +49,8 @@ protected:
void bits2bytes();
M10GeneralParser *m10Parser;
M10GeneralParser *m10GTop;
M10GeneralParser *m10Ptu;
M10GeneralParser *m10Gtop;
M10GeneralParser *m10Trimble;
AudioFile *audioFile;

Wyświetl plik

@ -1,5 +1,5 @@
/*
* File: M10GTop.cpp
* File: M10Gtop.cpp
* Author: Viproz
* Used code from rs1729
* Created on December 13, 2018, 4:39 PM
@ -19,19 +19,19 @@
#define pos_SN 0x5D // 2+3 byte
#define pos_Check (stdFLEN-1) // 2 byte*/
#include "M10GTopParser.h"
#include "M10GtopParser.h"
#include <ctime>
#include <string>
#include <sstream>
#include <iostream>
M10GTopParser::M10GTopParser() {
M10GtopParser::M10GtopParser() {
}
M10GTopParser::~M10GTopParser() {
M10GtopParser::~M10GtopParser() {
}
void M10GTopParser::changeData(std::array<unsigned char, DATA_LENGTH> data, bool good) {
void M10GtopParser::changeData(std::array<unsigned char, DATA_LENGTH> data, bool good) {
M10GeneralParser::changeData(data, good);
int i;
@ -49,7 +49,7 @@ void M10GTopParser::changeData(std::array<unsigned char, DATA_LENGTH> data, bool
date = val;
}
double M10GTopParser::getLatitude() {
double M10GtopParser::getLatitude() {
int i;
unsigned short bytes[4];
int val;
@ -62,7 +62,7 @@ double M10GTopParser::getLatitude() {
return val / 1e6;
}
double M10GTopParser::getLongitude() {
double M10GtopParser::getLongitude() {
int i;
unsigned short bytes[4];
int val;
@ -75,7 +75,7 @@ double M10GTopParser::getLongitude() {
return val / 1e6;
}
double M10GTopParser::getAltitude() {
double M10GtopParser::getAltitude() {
int i;
unsigned short bytes[4];
int val;
@ -89,31 +89,31 @@ double M10GTopParser::getAltitude() {
return val / 1e2;
}
int M10GTopParser::getDay() {
int M10GtopParser::getDay() {
return date / 10000;
}
int M10GTopParser::getMonth() {
int M10GtopParser::getMonth() {
return (date % 10000) / 100;
}
int M10GTopParser::getYear() {
int M10GtopParser::getYear() {
return date % 100 + 2000;
}
int M10GTopParser::getHours() {
int M10GtopParser::getHours() {
return time / 10000;
}
int M10GTopParser::getMinutes() {
int M10GtopParser::getMinutes() {
return (time % 10000) / 100;
}
int M10GTopParser::getSeconds() {
int M10GtopParser::getSeconds() {
return time % 100;
}
double M10GTopParser::getVerticalSpeed() {
double M10GtopParser::getVerticalSpeed() {
int i;
unsigned short bytes[2];
short vel16;
@ -124,7 +124,7 @@ double M10GTopParser::getVerticalSpeed() {
return vel16 / 1e2; // up
}
double M10GTopParser::getHorizontalSpeed() {
double M10GtopParser::getHorizontalSpeed() {
int i;
unsigned short bytes[2];
short vel16;
@ -143,7 +143,7 @@ double M10GTopParser::getHorizontalSpeed() {
return sqrt(vx * vx + vy * vy);
}
double M10GTopParser::getDirection() {
double M10GtopParser::getDirection() {
int i;
unsigned short bytes[2];
short vel16;
@ -165,27 +165,27 @@ double M10GTopParser::getDirection() {
return dir;
}
double M10GTopParser::getTemperature() {
double M10GtopParser::getTemperature() {
return 0;
}
double M10GTopParser::getHumidity() {
double M10GtopParser::getHumidity() {
return 0;
}
double M10GTopParser::getDp() {
double M10GtopParser::getDp() {
return 0;
}
std::string M10GTopParser::getSerialNumber() {
std::string M10GtopParser::getSerialNumber() {
int i;
unsigned byte;
unsigned short sn_bytes[5];
char SN[12];
char SN[18];
for (i = 0; i < 11; i++)
for (i = 0; i < 17; i++)
SN[i] = ' ';
SN[11] = '\0';
SN[17] = '\0';
for (i = 0; i < 5; i++) {
byte = frame_bytes[0x5D + i];
@ -193,14 +193,14 @@ std::string M10GTopParser::getSerialNumber() {
}
byte = sn_bytes[2];
sprintf(SN, "%1X%02u", (byte >> 4)&0xF, byte & 0xF);
sprintf(SN, "M10-G-%1X%02u", (byte >> 4)&0xF, byte & 0xF);
byte = sn_bytes[3] | (sn_bytes[4] << 8);
sprintf(SN + 3, " %1X %1u%04u", sn_bytes[0]&0xF, (byte >> 13)&0x7, byte & 0x1FFF);
sprintf(SN + 9, "-%1X-%1u%04u", sn_bytes[0]&0xF, (byte >> 13)&0x7, byte & 0x1FFF);
return SN;
}
std::string M10GTopParser::getdxlSerialNumber() {
std::string M10GtopParser::getdxlSerialNumber() {
int i;
unsigned byte;
unsigned short sn_bytes[5];
@ -236,7 +236,7 @@ std::string M10GTopParser::getdxlSerialNumber() {
return ids;
}
void M10GTopParser::printFrame() {
void M10GtopParser::printFrame() {
if (dispRaw) {
for (int i = 0; i < frameLength + 1; ++i) {
printf("%02X", frame_bytes[i]);
@ -276,7 +276,7 @@ void M10GTopParser::printFrame() {
//"\"temp\": %.1f "
"\"crc\": %d "
"}\n",
"GTop", frame, getSerialNumber().c_str(), getdxlSerialNumber().c_str(), getYear(), getMonth(), getDay(), getHours(), getMinutes(), getSeconds(), getLatitude(), getLongitude(),
"Gtop", frame, getSerialNumber().c_str(), getdxlSerialNumber().c_str(), getYear(), getMonth(), getDay(), getHours(), getMinutes(), getSeconds(), getLatitude(), getLongitude(),
getAltitude(), getHorizontalSpeed(), getDirection(), getVerticalSpeed()/*, getTemperature()*/, correctCRC);
}
}

Wyświetl plik

@ -1,5 +1,5 @@
/*
* File: M10GTop.h
* File: M10Gtop.h
* Author: Viproz
* Used code from rs1729
* Created on December 13, 2018, 4:39 PM
@ -14,10 +14,10 @@
#include <math.h>
#include "M10GeneralParser.h"
class M10GTopParser : public M10GeneralParser {
class M10GtopParser : public M10GeneralParser {
public:
M10GTopParser();
virtual ~M10GTopParser();
M10GtopParser();
virtual ~M10GtopParser();
virtual void changeData(std::array<unsigned char, DATA_LENGTH> data, bool good);
virtual double getLatitude();
virtual double getLongitude();

Wyświetl plik

@ -9,7 +9,7 @@
#include <sstream>
#include <iostream>
#include "M10GeneralParser.h"
#include "M10PtuParser.h"
#include "M10TrimbleParser.h"
M10GeneralParser::M10GeneralParser() {
}

Wyświetl plik

@ -1,5 +1,5 @@
/*
* File: M10GTop.cpp
* File: M10Gtop.cpp
* Author: Viproz
* Used code from rs1729
* Created on December 13, 2018, 4:39 PM
@ -19,21 +19,21 @@
#define pos_SN 0x5D // 2+3 byte
#define pos_Check (stdFLEN-1) // 2 byte*/
#include "M10PtuParser.h"
#include "M10TrimbleParser.h"
#include <string>
#include <sstream>
#include <iostream>
char M10PtuParser::similarData[] = "xxxx----------------------xxxxxxxxxxxxxxxxxxxxxxxxxxx---xxxxxxx--xxxx-----xx----xxxxx------xxxxxxx---";
char M10PtuParser::insertSpaces[] = "---xx-x-x-x---x---x---x---x-----x-x-----------x---x--x--x-----xx-x-x-x-xx-x-x-x-x----x---x-x-x----xxxx-x-------------x";
char M10TrimbleParser::similarData[] = "xxxx----------------------xxxxxxxxxxxxxxxxxxxxxxxxxxx---xxxxxxx--xxxx-----xx----xxxxx------xxxxxxx---";
char M10TrimbleParser::insertSpaces[] = "---xx-x-x-x---x---x---x---x-----x-x-----------x---x--x--x-----xx-x-x-x-xx-x-x-x-x----x---x-x-x----xxxx-x-------------x";
M10PtuParser::M10PtuParser() {
M10TrimbleParser::M10TrimbleParser() {
}
M10PtuParser::~M10PtuParser() {
M10TrimbleParser::~M10TrimbleParser() {
}
void M10PtuParser::changeData(std::array<unsigned char, DATA_LENGTH> data, bool good) {
void M10TrimbleParser::changeData(std::array<unsigned char, DATA_LENGTH> data, bool good) {
M10GeneralParser::changeData(data, good);
int i;
@ -64,7 +64,7 @@ void M10PtuParser::changeData(std::array<unsigned char, DATA_LENGTH> data, bool
gps2Date(week, time / 1000, &year, &month, &day);
}
double M10PtuParser::getLatitude() {
double M10TrimbleParser::getLatitude() {
int i;
unsigned byte;
unsigned short gpslat_bytes[4];
@ -83,7 +83,7 @@ double M10PtuParser::getLatitude() {
return gpslat / B60B60;
}
double M10PtuParser::getLongitude() {
double M10TrimbleParser::getLongitude() {
int i;
unsigned byte;
unsigned short gpslon_bytes[4];
@ -102,7 +102,7 @@ double M10PtuParser::getLongitude() {
return gpslon / B60B60;
}
double M10PtuParser::getAltitude() {
double M10TrimbleParser::getAltitude() {
int i;
unsigned byte;
unsigned short gpsalt_bytes[4];
@ -120,31 +120,31 @@ double M10PtuParser::getAltitude() {
return gpsalt / 1000.0;
}
int M10PtuParser::getDay() {
int M10TrimbleParser::getDay() {
return day;
}
int M10PtuParser::getMonth() {
int M10TrimbleParser::getMonth() {
return month;
}
int M10PtuParser::getYear() {
int M10TrimbleParser::getYear() {
return year;
}
int M10PtuParser::getHours() {
int M10TrimbleParser::getHours() {
return (time / 1000 % (24 * 3600)) / 3600;
}
int M10PtuParser::getMinutes() {
int M10TrimbleParser::getMinutes() {
return ((time / 1000 % (24 * 3600)) % 3600) / 60;
}
int M10PtuParser::getSeconds() {
int M10TrimbleParser::getSeconds() {
return (time / 1000 % (24 * 3600)) % 60;
}
double M10PtuParser::getVerticalSpeed() {
double M10TrimbleParser::getVerticalSpeed() {
int i;
unsigned byte;
unsigned short gpsVel_bytes[2];
@ -159,7 +159,7 @@ double M10PtuParser::getVerticalSpeed() {
return vel16 / ms2kn100;
}
double M10PtuParser::getHorizontalSpeed() {
double M10TrimbleParser::getHorizontalSpeed() {
int i;
unsigned byte;
unsigned short gpsVel_bytes[2];
@ -184,7 +184,7 @@ double M10PtuParser::getHorizontalSpeed() {
return sqrt(vx * vx + vy * vy);
}
double M10PtuParser::getDirection() {
double M10TrimbleParser::getDirection() {
int i;
unsigned byte;
unsigned short gpsVel_bytes[2];
@ -212,7 +212,7 @@ double M10PtuParser::getDirection() {
return dir;
}
double M10PtuParser::getTemperature() {
double M10TrimbleParser::getTemperature() {
// NTC-Thermistor Shibaura PB5-41E
// T00 = 273.15 + 0.0 , R00 = 15e3
// T25 = 273.15 + 25.0 , R25 = 5.369e3
@ -288,23 +288,23 @@ double M10PtuParser::getTemperature() {
return T - 273.15; // Celsius
}
double M10PtuParser::getHumidity() {
double M10TrimbleParser::getHumidity() {
return 0;
}
double M10PtuParser::getDp() {
double M10TrimbleParser::getDp() {
return 0;
}
std::string M10PtuParser::getSerialNumber() {
std::string M10TrimbleParser::getSerialNumber() {
int i;
unsigned byte;
unsigned short sn_bytes[5];
char SN[12];
char SN[18];
for (i = 0; i < 11; i++)
for (i = 0; i < 17; i++)
SN[i] = ' ';
SN[11] = '\0';
SN[17] = '\0';
for (i = 0; i < 5; i++) {
byte = frame_bytes[0x5D + i];
@ -312,14 +312,14 @@ std::string M10PtuParser::getSerialNumber() {
}
byte = sn_bytes[2];
sprintf(SN, "%1X%02u", (byte >> 4)&0xF, byte & 0xF);
sprintf(SN, "M10-T-%1X%02u", (byte >> 4)&0xF, byte & 0xF);
byte = sn_bytes[3] | (sn_bytes[4] << 8);
sprintf(SN + 3, " %1X %1u%04u", sn_bytes[0]&0xF, (byte >> 13)&0x7, byte & 0x1FFF);
sprintf(SN + 9, "-%1X-%1u%04u", sn_bytes[0]&0xF, (byte >> 13)&0x7, byte & 0x1FFF);
return SN;
}
std::string M10PtuParser::getdxlSerialNumber() {
std::string M10TrimbleParser::getdxlSerialNumber() {
int i;
unsigned byte;
unsigned short sn_bytes[5];
@ -355,7 +355,7 @@ std::string M10PtuParser::getdxlSerialNumber() {
return ids;
}
std::array<unsigned char, DATA_LENGTH> M10PtuParser::replaceWithPrevious(std::array<unsigned char, DATA_LENGTH> data) {
std::array<unsigned char, DATA_LENGTH> M10TrimbleParser::replaceWithPrevious(std::array<unsigned char, DATA_LENGTH> data) {
unsigned short valMax;
unsigned short posMax;
@ -386,7 +386,7 @@ std::array<unsigned char, DATA_LENGTH> M10PtuParser::replaceWithPrevious(std::ar
return data;
}
void M10PtuParser::printFrame() {
void M10TrimbleParser::printFrame() {
if (dispRaw) {
for (int i = 0; i < frameLength + 1; ++i) {
if (insertSpaces[i] == 'x')
@ -412,6 +412,12 @@ void M10PtuParser::printFrame() {
timeinfo.tm_isdst = 0;
frame = mktime(&timeinfo);
// Aux data tag if the payload lenght is long
std::string auxstr = "";
if(frame_bytes[0x00] != 0x64) {
auxstr = "\"aux\": -1, ";
}
// Decoder sensible to comma at the end, strict json
printf("{ "
@ -420,6 +426,7 @@ void M10PtuParser::printFrame() {
"\"id\": \"%s\", "
"\"dxlid\": \"%s\", "
"\"datetime\": \"%04d-%02d-%02dT%02d:%02d:%02dZ\", "
"%s" // Aux data
"\"lat\": %.5f, "
"\"lon\": %.5f, "
"\"alt\": %.2f, "
@ -429,7 +436,7 @@ void M10PtuParser::printFrame() {
"\"temp\": %.1f, "
"\"crc\": %d "
"}\n",
"Ptu", frame, getSerialNumber().c_str(), getdxlSerialNumber().c_str(), getYear(), getMonth(), getDay(), getHours(), getMinutes(), getSeconds(), getLatitude(), getLongitude(),
"Trimble", frame, getSerialNumber().c_str(), getdxlSerialNumber().c_str(), getYear(), getMonth(), getDay(), getHours(), getMinutes(), getSeconds(), auxstr.c_str(), getLatitude(), getLongitude(),
getAltitude(), getHorizontalSpeed(), getDirection(), getVerticalSpeed(), getTemperature(), correctCRC);
}
}
@ -439,7 +446,7 @@ void M10PtuParser::printFrame() {
* - Adapted from sci.astro FAQ.
* - Ignores UTC leap seconds.
*/
void M10PtuParser::gps2Date(long GpsWeek, long GpsSeconds, int *Year, int *Month, int *Day) {
void M10TrimbleParser::gps2Date(long GpsWeek, long GpsSeconds, int *Year, int *Month, int *Day) {
long GpsDays, Mjd;
long J, C, Y, M;

Wyświetl plik

@ -1,5 +1,5 @@
/*
* File: M10GTop.h
* File: M10Gtop.h
* Author: Viproz
* Used code from rs1729
* Created on December 13, 2018, 4:39 PM
@ -14,10 +14,10 @@
#include <math.h>
#include "M10GeneralParser.h"
class M10PtuParser : public M10GeneralParser {
class M10TrimbleParser : public M10GeneralParser {
public:
M10PtuParser();
virtual ~M10PtuParser();
M10TrimbleParser();
virtual ~M10TrimbleParser();
virtual void changeData(std::array<unsigned char, DATA_LENGTH> data, bool good);
virtual double getLatitude();
virtual double getLongitude();

Wyświetl plik

@ -2,7 +2,7 @@
## Radiosonde M10
#### Compile
`g++ -O M10.cpp M10Decoder.cpp M10GeneralParser.cpp M10GTopParser.cpp M10PtuParser.cpp -o m10`
`g++ -O M10.cpp M10Decoder.cpp M10GeneralParser.cpp M10GtopParser.cpp M10TrimbleParser.cpp -o m10`
#### Usage
`./m10 [options] filename`<br />