Starts of iMet support. No unique sonde ID is going to make this challenging.

pull/142/head
Mark Jessop 2019-03-16 18:13:09 +10:30
rodzic 6cb54614a9
commit 044466f5d9
2 zmienionych plików z 71 dodań i 3 usunięć

Wyświetl plik

@ -20,6 +20,9 @@ echo "Building M10 Demodulator."
cd ../m10/
g++ M10.cpp M10Decoder.cpp M10GeneralParser.cpp M10GtopParser.cpp M10TrimbleParser.cpp AudioFile.cpp -lm -o m10 -std=c++11
echo "Building iMet Demodulator."
cd ../imet/
gcc imet1rs_dft.c -lm -o imet1rs_dft
# Copy all necessary files into this directory.
echo "Copying files into auto_rx directory."
@ -29,5 +32,6 @@ cp ../demod/rs92ecc .
cp ../demod/rs41ecc .
cp ../demod/dfm09ecc .
cp ../m10/m10 .
cp ../imet/imet1rs_dft .
echo "Done!"

Wyświetl plik

@ -16,12 +16,34 @@ int option_verbose = 0, // ausfuehrliche Anzeige
option_raw = 0, // rohe Frames
option_rawbits = 0,
option_dft = 0,
option_json = 0,
wavloaded = 0;
// Bell202, 1200 baud (1200Hz/2200Hz), 8N1
#define BAUD_RATE 1200
typedef struct {
int frame;
int hour;
int min;
int sec;
float lat;
float lon;
int alt;
int sats;
float temp;
float pressure;
float humidity;
float batt;
int gps_valid;
int ptu_valid;
} json_output_data_t;
json_output_data_t json_data;
/* ------------------------------------------------------------------------------------ */
int sample_rate = 0, bits_sample = 0, channels = 0;
@ -343,13 +365,14 @@ packet size = 18 bytes
*/
#define pos_GPSlat 0x02 // 4 byte float
#define pos_GPSlon 0x06 // 4 byte float
#define pos_GPSsats 0x0C // 1 byte
#define pos_GPSalt 0x0A // 2 byte int
#define pos_GPStim 0x0D // 3 byte
#define pos_GPScrc 0x10 // 2 byte
void print_GPS(int pos) {
float lat, lon;
int alt;
int alt, sats;
int std, min, sek;
int crc1, crc2;
@ -359,6 +382,7 @@ void print_GPS(int pos) {
lat = *(float*)(byteframe+pos+pos_GPSlat);
lon = *(float*)(byteframe+pos+pos_GPSlon);
alt = ((byteframe+pos)[pos_GPSalt+1]<<8)+(byteframe+pos)[pos_GPSalt] - 5000;
sats = (byteframe+pos)[pos_GPSsats+0];
std = (byteframe+pos)[pos_GPStim+0];
min = (byteframe+pos)[pos_GPStim+1];
sek = (byteframe+pos)[pos_GPStim+2];
@ -367,11 +391,25 @@ void print_GPS(int pos) {
fprintf(stdout, " lat: %.6f° ", lat);
fprintf(stdout, " lon: %.6f° ", lon);
fprintf(stdout, " alt: %dm ", alt);
fprintf(stdout, " sats: %d ", sats);
fprintf(stdout, " # ");
fprintf(stdout, " CRC: %04X ", crc1);
fprintf(stdout, "- %04X ", crc2);
if (crc1 == crc2) fprintf(stdout, "[OK]"); else fprintf(stdout, "[NO]");
if (crc1 == crc2){
fprintf(stdout, "[OK]");
json_data.gps_valid = 1;
json_data.lat = lat;
json_data.lon = lon;
json_data.alt = alt;
json_data.sats = sats;
json_data.hour = std;
json_data.min = min;
json_data.sec = sek;
}else{
fprintf(stdout, "[NO]");
json_data.gps_valid = 0;
}
}
@ -423,10 +461,31 @@ void print_ePTU(int pos) {
fprintf(stdout, " # ");
fprintf(stdout, " CRC: %04X ", crc1);
fprintf(stdout, "- %04X ", crc2);
if (crc1 == crc2) fprintf(stdout, "[OK]"); else fprintf(stdout, "[NO]");
if (crc1 == crc2){
fprintf(stdout, "[OK]");
json_data.frame = pcknum;
json_data.ptu_valid = 1;
json_data.temp = T/100.0;
json_data.humidity = U/100.0;
json_data.batt = bat/10.0;
json_data.pressure = P/100.0;
}else{
fprintf(stdout, "[NO]");
json_data.ptu_valid = 0;
}
}
void print_JSON(){
if(json_data.gps_valid && json_data.ptu_valid){
printf("{ \"frame\": %d, \"id\": \"iMet\", \"datetime\": \"%02d:%02d:%02dZ\", \"lat\": %.5f, \"lon\": %.5f, \"alt\": %d, \"sats\": %d, \"temp\":%.2f, \"humidity\":%.2f, \"pressure\":%.2f, \"batt\":%.1f}\n", json_data.frame, json_data.hour, json_data.min, json_data.sec, json_data.lat, json_data.lon, json_data.alt, json_data.sats, json_data.temp, json_data.humidity, json_data.pressure, json_data.batt);
}
}
/* -------------------------------------------------------------------------- */
int print_frame(int len) {
@ -459,6 +518,8 @@ int print_frame(int len) {
if ((byteframe[pos_GPScrc+2+0] == 0x01) && (byteframe[pos_GPScrc+2+1] == 0x04)) { // PTU Data Packet
print_ePTU(pos_GPScrc+2); // packet offset in byteframe
fprintf(stdout, "\n");
if(option_json) print_JSON();
}
/*
if ((byteframe[0] == 0x01) && (byteframe[1] == 0x04)) { // PTU Data Packet
@ -511,6 +572,9 @@ int main(int argc, char *argv[]) {
else if ( (strcmp(*argv, "--rawbits") == 0) ) {
option_rawbits = 1;
}
else if ( (strcmp(*argv, "--json") == 0) ) {
option_json = 1;
}
else if ( (strcmp(*argv, "-d1") == 0) || (strcmp(*argv, "--dft1") == 0) ) {
option_dft = 1;
}