kopia lustrzana https://github.com/projecthorus/radiosonde_auto_rx
Starts of iMet support. No unique sonde ID is going to make this challenging.
rodzic
6cb54614a9
commit
044466f5d9
|
@ -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!"
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue