int parse_pscl_IP ( uchar_t *packet, ushort_t pkttype ) { int nsamp, yr, day, hr, min, sec, msec; ushort_t newtype; PktPar pack; char stime[64], key[64]; struct PsclPreHdr pkt; int dasid; /* Get parameters for current datatype */ newtype = PSCLIP; if( !get_packet( newtype, &pack) ) return -1; dasid = bcd2hex( &packet[4] , 4 ); Par.staid = dasid; Par.chan = -1; Par.packet = pack; Par.hdrtype = ( int )decode( pack.hdrtype ); memcpy( (char *) &pkt, packet, sizeof( struct PsclPreHdr )); yr = bcd2hex( pkt.year , 2 ); sprintf( (char *) &stime[0], "%02x%02x%02x%02x%02x%02x\0", pkt.bcdtime[0], pkt.bcdtime[1], pkt.bcdtime[2], pkt.bcdtime[3], pkt.bcdtime[4], pkt.bcdtime[5]); sscanf( (char *) &stime[0], "%3d%2d%2d%2d%3d", &day, &hr, &min, &sec, &msec); if( yr < 50 ) sprintf( (char *) &stime[0], "20%02d%03d:%02d:%02d:%02d.%03d\0", yr, day, hr, min, sec, msec); else sprintf( (char *) &stime[0], "19%02d%03d:%02d:%02d:%02d.%03d\0", yr, day, hr, min, sec, msec); Par.time = str2epoch( (char *) &stime[0] ); sprintf( &Par.packet.pkttype[0], "PSCLIP\0"); sprintf( (char *) &key[0], "%d", newtype ); setarr( RawPkts, (char *) &key[0], (char *) &Par.raw); return (int) pkttype; }
static void smu_parse_get_rtc_reply(struct smu_cmd_buf *cmd_buf, struct rtc_time *time) { time->tm_sec = bcd2hex(cmd_buf->data[0]); time->tm_min = bcd2hex(cmd_buf->data[1]); time->tm_hour = bcd2hex(cmd_buf->data[2]); time->tm_wday = bcd2hex(cmd_buf->data[3]); time->tm_mday = bcd2hex(cmd_buf->data[4]); time->tm_mon = bcd2hex(cmd_buf->data[5]) - 1; time->tm_year = bcd2hex(cmd_buf->data[6]) + 100; }
void mcp79410_get(struct mcp79410_time_t *time) { // register, unused... // seconds, minutes, hours, dow, date, month, year uint8_t data[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; twi_write_to(0x6f, data, 1, TWI_BLOCK, TWI_NO_STOP); twi_read_from(0x6f, data, 7, TWI_STOP); // it's not clear from the datasheet if the unused bits are 0 or undefined time->second = bcd2hex(data[0] & 0x7f); // bit 7 is the ST flag time->minute = bcd2hex(data[1]); time->hour = bcd2hex(data[2]); time->wday = bcd2hex(data[3] & 0x07); // bit 5 is OSCRUN, bit 4 is PWRFAIL, bit 3 is VBATEN time->mday = bcd2hex(data[4]); time->month = bcd2hex(data[5] & 0x1f); // bit 5 is LPYR time->year = 2000 + bcd2hex(data[6]); }
void ds1307_get(struct ds1307_time_t *time) { // register, unused... // seconds, minutes, hours, dow, date, month, year uint8_t data[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; twi_write_to(0x68, data, 1, TWI_BLOCK, TWI_NO_STOP); twi_read_from(0x68, data, 7, TWI_STOP); // it's not clear from the datasheet if the unused bits are 0 or undefined time->second = bcd2hex(data[1] & 0x7f); // bit 7 is the CH flag time->minute = bcd2hex(data[2]); time->hour = bcd2hex(data[3]); time->wday = data[4]; time->mday = bcd2hex(data[5]); time->month = bcd2hex(data[6]); time->year = 2000 + bcd2hex(data[7]); }
int parse_pscl_DP ( uchar_t *packet, ushort_t pkttype ) { double etime; Stream *stream, *strm_tim; ushort_t newtype ; int dasid, event, streamid, chan, pktnum; int nsamp, yr, day, hr, min, sec, msec; char dtype[2], ptype[64], key[64], skey[64], stime[64]; PktPar pack; int i; dasid = bcd2hex( &packet[4] , 4 ); pktnum = bcd2hex( &packet[14] , 4 ); event = bcd2hex( &packet[16], 4 ); streamid = bcd2hex( &packet[18], 2 ); streamid++; chan = bcd2hex( &packet[19], 2 ); chan++; nsamp = bcd2hex( &packet[20], 4 ); sprintf( (char *) &dtype[0], "%02x", packet[23] ); sprintf( skey, "%d_%d\0", dasid, streamid ); if( PsclSTRM == NULL ) return 0; stream = ( Stream *) getarr( PsclSTRM, (char *)&skey[0]); if( stream == NULL ) { complain( 0, "Can't get %s stream info\n", skey); hexdump( stderr, packet, 64 ); return 0; } if( stream->samprate <= 0 ) return 0; switch ( dtype[0] ) { case 'c': strcpy( (char *) &dtype[0], "c0"); if( stream->samprate >= 100 ) { sprintf( &ptype[0], "CPSCLHS\0"); newtype = CPSCLHS; } else { sprintf( &ptype[0], "CPSCLLS\0"); newtype = CPSCLLS; } break; case '1': strcpy( (char *) &dtype[0], "s2"); if( stream->samprate >= 100 ) { sprintf( &ptype[0], "PSCLHS\0"); newtype = PSCLHS; } else { sprintf( &ptype[0], "PSCLLS\0"); newtype = PSCLLS; } break; case '3': strcpy( (char *) &dtype[0], "s4"); if( stream->samprate >= 100 ) { sprintf( &ptype[0], "PSCLHS\0"); newtype = PSCLHS; } else { sprintf( &ptype[0], "PSCLLS\0"); newtype = PSCLLS; } break; default: complain( 0, "Can't recognize a PASSCAL data packet type. HS?LS?\n"); return -1; } Par.chan = chan; Par.staid = dasid; if( !get_packet( newtype, &pack) ) return -1; strcpy( &pack.datatype[0], &dtype[0]); strcpy( &pack.pkttype[0], &ptype[0]); pack.nsamp = nsamp; pack.nchan = 1; pack.srate = stream->samprate; Par.packet = pack; yr = bcd2hex( &packet[3] , 2 ); if(yr < 50) yr += 2000; else yr += 1900; sprintf( (char *) &stime[0], "%02x%02x%02x%02x%02x%02x\0", packet[6], packet[7], packet[8], packet[9], packet[10], packet[11]); sscanf( (char *) &stime[0], "%3d%2d%2d%2d%3d", &day, &hr, &min, &sec, &msec); sprintf( (char *) &stime[0], "%02d%03d:%02d:%02d:%02d.%03d\0", yr, day, hr, min, sec, msec); Par.time = str2epoch( (char *) &stime[0] ); sprintf( (char *) &key[0], "%d", newtype ); setarr( RawPkts, (char *) &key[0], (char *) &Par.raw); Par.hdrtype = ( int )decode( pack.hdrtype ); return (int) pkttype; }