#define jType_S_GNSS 3 #define jCommand_GNSS_location 0 #define jCommand_GNSS_date 1 #define jCommand_GNSS_time 2 #define jCommand_GNSS_speed 3 #define jCommand_GNSS_course 4 #define jCommand_GNSS_altitude 5 #define jCommand_GNSS_satellites 6 #define jCommand_GNSS_hdop 7 #define jCommand_GNSS_fail 0xff typedef struct{ byte type = jType_S_GNSS; byte command = jCommand_GNSS_location; byte isValid; double lat; double lng; }gnssLocData; typedef struct{ byte type = jType_S_GNSS; byte command = jCommand_GNSS_date; byte isValid; uint32_t value; uint16_t year; uint8_t month; uint8_t day; }gnssDateData; typedef struct{ byte type = jType_S_GNSS; byte command = jCommand_GNSS_time; byte isValid; uint32_t value; uint8_t hour; uint8_t minute; uint8_t second; uint8_t centisecond; }gnssTimeData; typedef struct{ byte type = jType_S_GNSS; byte command = jCommand_GNSS_speed; byte isValid; double mps; }gnssSpeedData; typedef struct{ byte type = jType_S_GNSS; byte command = jCommand_GNSS_course; byte isValid; double deg; }gnssCourseData; typedef struct{ byte type = jType_S_GNSS; byte command = jCommand_GNSS_altitude; byte isValid; double m; }gnssAltData; typedef struct{ byte type = jType_S_GNSS; byte command = jCommand_GNSS_satellites; byte isValid; uint32_t n; }gnssSatData; typedef struct{ byte type = jType_S_GNSS; byte command = jCommand_GNSS_hdop; byte isValid; double hdop; }gnssHdopData; typedef struct{ byte type = jType_S_GNSS; byte command = jCommand_GNSS_fail; }gnssFailData; #ifdef jGNSS #include TinyGPSPlus gps; void initGNSS(){ Serial2.begin(9600, SERIAL_8N1, 16, 17); } void GNSSLoop(){ while (Serial2.available() > 0) { int readd = Serial2.read(); gps.encode(readd); } } void GNSSradioTask(){ switch (jRCbuff[1]) { case jCommand_GNSS_location:{ gnssLocData data; data.isValid = gps.location.isValid()|(gps.location.isUpdated()<<1); data.lat = gps.location.lat(); data.lng = gps.location.lng(); jSendNRF(&data, sizeof(data)); }break; case jCommand_GNSS_date:{ gnssDateData data; data.isValid = gps.date.isValid()|(gps.date.isUpdated()<<1); data.value = gps.date.value(); data.year = gps.date.year(); data.month = gps.date.month(); data.day = gps.date.day(); jSendNRF(&data, sizeof(data)); }break; case jCommand_GNSS_time:{ gnssTimeData data; data.isValid = gps.time.isValid()|(gps.time.isUpdated()<<1); data.value = gps.time.value(); data.hour = gps.time.hour(); data.minute = gps.time.minute(); data.second = gps.time.second(); data.centisecond = gps.time.centisecond(); jSendNRF(&data, sizeof(data)); }break; case jCommand_GNSS_speed:{ gnssSpeedData data; data.isValid = gps.speed.isValid()|(gps.speed.isUpdated()<<1); data.mps = gps.speed.mps(); jSendNRF(&data, sizeof(data)); }break; case jCommand_GNSS_course:{ gnssCourseData data; data.isValid = gps.course.isValid()|(gps.course.isUpdated()<<1); data.deg = gps.course.deg(); jSendNRF(&data, sizeof(data)); }break; case jCommand_GNSS_altitude:{ gnssAltData data; data.isValid = gps.altitude.isValid()|(gps.altitude.isUpdated()<<1); data.m = gps.altitude.meters(); jSendNRF(&data, sizeof(data)); }break; case jCommand_GNSS_satellites:{ gnssSatData data; data.isValid = gps.satellites.isValid()|(gps.satellites.isUpdated()<<1); data.n = gps.satellites.value(); jSendNRF(&data, sizeof(data)); }break; case jCommand_GNSS_hdop:{ gnssHdopData data; data.isValid = gps.hdop.isValid()|(gps.hdop.isUpdated()<<1); data.hdop = gps.hdop.hdop(); jSendNRF(&data, sizeof(data)); }break; } } #else void initGNSS(){} void GNSSLoop(){} void GNSSradioTask(){ gnssFailData data; jSendNRF(&data, sizeof(data)); } #endif