Ejemplo n.º 1
0
static bool osdFormatRtcDateTime(char *buffer)
{
    dateTime_t dateTime;
    if (!rtcGetDateTime(&dateTime)) {
        buffer[0] = '\0';

        return false;
    }

    dateTimeFormatLocalShort(buffer, &dateTime);

    return true;
}
Ejemplo n.º 2
0
bool srxlFrameGpsStat(sbuf_t *dst, timeUs_t currentTimeUs)
{
    UNUSED(currentTimeUs);
    uint32_t timeBcd;
    uint16_t speedKnotsBcd, speedTmp;
    uint8_t numSatBcd, altitudeHighBcd;
    bool timeProvided = false;

    if (!featureIsEnabled(FEATURE_GPS) || !STATE(GPS_FIX) || gpsSol.numSat < 6) {
        return false;
    }

    // Number of sats and altitude (high bits)
    numSatBcd = (gpsSol.numSat > 99) ? dec2bcd(99) : dec2bcd(gpsSol.numSat);
    altitudeHighBcd = dec2bcd(gpsSol.llh.altCm / 100000);

    // Speed (knots)
    speedTmp = gpsSol.groundSpeed * 1944 / 1000;
    speedKnotsBcd = (speedTmp > 9999) ? dec2bcd(9999) : dec2bcd(speedTmp);

#ifdef USE_RTC_TIME
    dateTime_t dt;
    // RTC
    if (rtcHasTime()) {
        rtcGetDateTime(&dt);
        timeBcd = dec2bcd(dt.hours);
        timeBcd = timeBcd << 8;
        timeBcd = timeBcd | dec2bcd(dt.minutes);
        timeBcd = timeBcd << 8;
        timeBcd = timeBcd | dec2bcd(dt.seconds);
        timeBcd = timeBcd << 4;
        timeBcd = timeBcd | dec2bcd(dt.millis / 100);
        timeProvided = true;
    }
#endif
    timeBcd = (timeProvided) ? timeBcd : SPEKTRUM_TIME_UNKNOWN;

    // SRXL frame
    sbufWriteU8(dst, SRXL_FRAMETYPE_GPS_STAT);
    sbufWriteU8(dst, SRXL_FRAMETYPE_SID);
    sbufWriteU16(dst, speedKnotsBcd);
    sbufWriteU32(dst, timeBcd);
    sbufWriteU8(dst, numSatBcd);
    sbufWriteU8(dst, altitudeHighBcd);
    sbufFill(dst, STRU_TELE_GPS_STAT_EMPTY_FIELDS_VALUE, STRU_TELE_GPS_STAT_EMPTY_FIELDS_COUNT);

    return true;
}