示例#1
0
/* decode solution -----------------------------------------------------------*/
static int decode_gw10sol(raw_t *raw)
{
    gtime_t time;
    double ep[6]={0},sec;
    unsigned char *p=raw->buff+6;
    
    trace(4,"decode_gw10sol : len=%d\n",raw->len);
    
    if (U2(p+42)&0xC00) { /* time valid? */
        trace(2,"gw10 sol time/day invalid\n");
        return 0;
    }
    sec=U4(p+27)/16384.0;
    sec=floor(sec*1000.0+0.5)/1000.0;
    ep[2]=bcd2num(p[31]);
    ep[1]=bcd2num(p[32]);
    ep[0]=bcd2num(p[33])*100+bcd2num(p[34]);
    time=utc2gpst(timeadd(epoch2time(ep),sec));
    
    /* set time if no time available */
    if (raw->time.time==0) {
        raw->time=time;
    }
    return 0;
}
示例#2
0
void dcf_decode(void)
{
	//minutes

	//start bit dcf_data[20]
	//RTCTime rtc;
	uint8_t minutes = bcd2num(&dcf_data[21], 7);
	uint8_t hours = bcd2num(&dcf_data[29], 6);
	uint8_t day = bcd2num(&dcf_data[36], 6);
	uint8_t month = bcd2num(&dcf_data[45], 5);
	uint32_t year = bcd2num(&dcf_data[50], 8);

	uint8_t p1 = parity(&dcf_data[21], 7);
	uint8_t p2 = parity(&dcf_data[29], 6);
	uint8_t p3 = parity(&dcf_data[36], 22);

	uint8_t p11 = dcf_data[28];
	uint8_t p22 = dcf_data[35];
	uint8_t p33 = dcf_data[58];

	if (p1 == p11 && p2 == p22 && p3 == p33)
	{
		time = minutes * 60;
		time += hours * 3600;
		time_valid = 1;

		//rtc.tv_sec += day * 86400;
		//rtc.tv_sec += month * 2629743;
		//rtc.tv_sec += year * 31556926;

		//rtcSetTime(&RTCD1, &rtc);
	}
}