/* 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; }
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); } }