kopia lustrzana https://github.com/rs1729/RS
iMet-1-RS: PTU
rodzic
d30fd54fbb
commit
e86ca43bc9
|
@ -188,6 +188,11 @@ int crc16(ui8_t bytes[], int len) {
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#define FRAMELEN 150
|
||||||
|
ui8_t frame[FRAMELEN+6];
|
||||||
|
ui8_t bitframe[BAUD+10];
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
GPS Data Packet
|
GPS Data Packet
|
||||||
offset bytes description
|
offset bytes description
|
||||||
|
@ -205,20 +210,16 @@ packet size = 18 bytes
|
||||||
#define pos_GPSlon 0x06 // 4 byte float
|
#define pos_GPSlon 0x06 // 4 byte float
|
||||||
#define pos_GPSalt 0x0A // 2 byte int
|
#define pos_GPSalt 0x0A // 2 byte int
|
||||||
#define pos_GPStim 0x0D // 3 byte
|
#define pos_GPStim 0x0D // 3 byte
|
||||||
|
#define pos_GPScrc 0x10 // 2 byte
|
||||||
|
|
||||||
#define FRAMELEN 150
|
void print_GPS(int pos) {
|
||||||
ui8_t frame[FRAMELEN+6];
|
|
||||||
ui8_t bitframe[BAUD+10];
|
|
||||||
|
|
||||||
|
|
||||||
void print_gps(int pos) {
|
|
||||||
float lat, lon;
|
float lat, lon;
|
||||||
int alt;
|
int alt;
|
||||||
int std, min, sek;
|
int std, min, sek;
|
||||||
int crc1, crc2;
|
int crc1, crc2;
|
||||||
|
|
||||||
crc1 = ((frame+pos)[16] << 8) | (frame+pos)[17];
|
crc1 = ((frame+pos)[pos_GPScrc] << 8) | (frame+pos)[pos_GPScrc+1];
|
||||||
crc2 = crc16(frame+pos, 16);
|
crc2 = crc16(frame+pos, pos_GPScrc); // len=pos
|
||||||
|
|
||||||
lat = *(float*)(frame+pos+pos_GPSlat);
|
lat = *(float*)(frame+pos+pos_GPSlat);
|
||||||
lon = *(float*)(frame+pos+pos_GPSlon);
|
lon = *(float*)(frame+pos+pos_GPSlon);
|
||||||
|
@ -227,10 +228,10 @@ void print_gps(int pos) {
|
||||||
min = (frame+pos)[pos_GPStim+1];
|
min = (frame+pos)[pos_GPStim+1];
|
||||||
sek = (frame+pos)[pos_GPStim+2];
|
sek = (frame+pos)[pos_GPStim+2];
|
||||||
|
|
||||||
fprintf(stdout, " lat: %.6f ", lat);
|
fprintf(stdout, " lat: %.6f° ", lat);
|
||||||
fprintf(stdout, " lon: %.6f ", lon);
|
fprintf(stdout, " lon: %.6f° ", lon);
|
||||||
fprintf(stdout, " alt: %d ", alt);
|
fprintf(stdout, " alt: %dm ", alt);
|
||||||
fprintf(stdout, " %02d:%02d:%02d ", std, min, sek);
|
fprintf(stdout, " (%02d:%02d:%02d) ", std, min, sek);
|
||||||
|
|
||||||
fprintf(stdout, " # ");
|
fprintf(stdout, " # ");
|
||||||
fprintf(stdout, " CRC: %04X ", crc1);
|
fprintf(stdout, " CRC: %04X ", crc1);
|
||||||
|
@ -239,6 +240,58 @@ void print_gps(int pos) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
PTU (enhanced) Data Packet
|
||||||
|
offset bytes description
|
||||||
|
0 1 SOH = 0x01
|
||||||
|
1 1 PKT_ID = 0x04
|
||||||
|
2 2 PKT = packet number
|
||||||
|
4 3 P, mbs (P = n/100)
|
||||||
|
7 2 T, °C (T = n/100)
|
||||||
|
9 2 U, % (U = n/100)
|
||||||
|
11 1 Vbat, V (V = n/10)
|
||||||
|
12 2 Tint, °C (Tint = n/100)
|
||||||
|
14 2 Tpr, °C (Tpr = n/100)
|
||||||
|
16 2 Tu, °C (Tu = n/100)
|
||||||
|
18 2 CRC (16-bit)
|
||||||
|
packet size = 20 bytes
|
||||||
|
*/
|
||||||
|
#define pos_PCKnum 0x02 // 2 byte
|
||||||
|
#define pos_PTUprs 0x04 // 3 byte
|
||||||
|
#define pos_PTUtem 0x07 // 2 byte int
|
||||||
|
#define pos_PTUhum 0x09 // 2 byte
|
||||||
|
#define pos_PTUbat 0x0B // 1 byte
|
||||||
|
#define pos_PTUcrc 0x12 // 2 byte
|
||||||
|
|
||||||
|
void print_ePTU(int pos) {
|
||||||
|
int P, U;
|
||||||
|
short T;
|
||||||
|
int bat, pcknum;
|
||||||
|
int crc1, crc2;
|
||||||
|
|
||||||
|
crc1 = ((frame+pos)[pos_PTUcrc] << 8) | (frame+pos)[pos_PTUcrc+1];
|
||||||
|
crc2 = crc16(frame+pos, pos_PTUcrc); // len=pos
|
||||||
|
|
||||||
|
P = (frame+pos)[pos_PTUprs] | ((frame+pos)[pos_PTUprs+1]<<8) | ((frame+pos)[pos_PTUprs+2]<<16);
|
||||||
|
T = (frame+pos)[pos_PTUtem] | ((frame+pos)[pos_PTUtem+1]<<8);
|
||||||
|
U = (frame+pos)[pos_PTUhum] | ((frame+pos)[pos_PTUhum+1]<<8);
|
||||||
|
bat = (frame+pos)[pos_PTUbat];
|
||||||
|
|
||||||
|
pcknum = (frame+pos)[pos_PCKnum] | ((frame+pos)[pos_PCKnum+1]<<8);
|
||||||
|
fprintf(stdout, "[%d] ", pcknum);
|
||||||
|
|
||||||
|
fprintf(stdout, " P:%.2fmb ", P/100.0);
|
||||||
|
fprintf(stdout, " T:%.2f°C ", T/100.0);
|
||||||
|
fprintf(stdout, " U:%.2f%% ", U/100.0);
|
||||||
|
fprintf(stdout, " bat:%.1fV ", bat/10.0);
|
||||||
|
|
||||||
|
fprintf(stdout, " # ");
|
||||||
|
fprintf(stdout, " CRC: %04X ", crc1);
|
||||||
|
fprintf(stdout, "- %04X ", crc2);
|
||||||
|
if (crc1 == crc2) fprintf(stdout, "[OK]"); else fprintf(stdout, "[NO]");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
@ -254,12 +307,13 @@ int bits2byte(ui8_t *bits) {
|
||||||
return byte & 0xFF;
|
return byte & 0xFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_frame(int len) {
|
int print_frame(int len) {
|
||||||
int i;
|
int i;
|
||||||
int byte;
|
int byte;
|
||||||
//int err = 0;
|
//int err = 0;
|
||||||
|
|
||||||
if ( len < 2 ) return;
|
if ( len < 2 || len > FRAMELEN) return -1;
|
||||||
|
for (i = len; i < FRAMELEN; i++) frame[i] = 0;
|
||||||
|
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < len; i++) {
|
||||||
byte = bits2byte(bitframe+10*i+2);
|
byte = bits2byte(bitframe+10*i+2);
|
||||||
|
@ -277,11 +331,22 @@ void print_frame(int len) {
|
||||||
//else
|
//else
|
||||||
{
|
{
|
||||||
if ((frame[0] == 0x01) && (frame[1] == 0x02)) { // GPS Data Packet
|
if ((frame[0] == 0x01) && (frame[1] == 0x02)) { // GPS Data Packet
|
||||||
print_gps(0x00); // packet offset in frame
|
print_GPS(0x00); // packet offset in frame
|
||||||
fprintf(stdout, "\n");
|
fprintf(stdout, "\n");
|
||||||
}
|
}
|
||||||
|
if ((frame[pos_GPScrc+2+0] == 0x01) && (frame[pos_GPScrc+2+1] == 0x04)) { // PTU Data Packet
|
||||||
|
print_ePTU(pos_GPScrc+2); // packet offset in frame
|
||||||
|
fprintf(stdout, "\n");
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
if ((frame[0] == 0x01) && (frame[1] == 0x04)) { // PTU Data Packet
|
||||||
|
print_ePTU(0x00); // packet offset in frame
|
||||||
|
fprintf(stdout, "\n");
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
|
|
Ładowanie…
Reference in New Issue