diff options
| author | Your Name <you@example.com> | 2026-02-09 01:22:02 +0000 |
|---|---|---|
| committer | Your Name <you@example.com> | 2026-02-09 01:22:02 +0000 |
| commit | a7598289a0c086ba20df346267ba087e6b35805c (patch) | |
| tree | 56f24f9101278f521501648e2635450c5edc97da /jjy.c | |
| parent | 6e75bcc7f8df65d4901b2918aafb501c6baefabe (diff) | |
| download | gen_msf-master.tar.gz gen_msf-master.tar.bz2 gen_msf-master.zip | |
Diffstat (limited to 'jjy.c')
| -rw-r--r-- | jjy.c | 123 |
1 files changed, 123 insertions, 0 deletions
@@ -0,0 +1,123 @@ +#include "project.h" + + +static void jjy_make_bits (UTC u, uint8_t *b) +{ + + bzero (b, 60); + + b[0]=2; + bcd_set (b, 1, 3, u.minute/10); + b[4]=0; + bcd_set (b, 5, 8, u.minute); + b[9]=2; + b[10]=0; + b[11]=0; + bcd_set (b, 12, 13, u.hour/10); + b[14]=0; + bcd_set (b, 15, 18, u.hour); + b[19]=2; + b[20]=0; + b[21]=0; + bcd_set (b, 22, 23, u.jday/100); + b[24]=0; + bcd_set (b, 25, 28, u.jday/10); + b[29]=2; + bcd_set (b, 30, 33, u.jday); + b[34]=0; + b[35]=0; + b[36] = !set_parity (b, 12, 18); + b[37] = !set_parity (b, 1, 8); + b[38]=0; //about to be summer time + b[39]=2; + b[40]=0; //in summer time + + bcd_set (b, 41, 48, u.year % 100); + b[49]=0; + + bcd_set (b, 50, 52, u.wday-1); + b[53]=0; //leap indicator + b[54]=0; //leap polarity + b[55]=0; + b[56]=0; + b[57]=0; + b[58]=0; + b[59]=2; + +} + +static void process_bits (uint8_t *b) +{ + UTC u; + +if (b[0]!=2) return; +if (b[4]) return; +if (b[9]!=2) return; +if (b[10]) return; +if (b[11]) return; +if (b[14]) return; +if (b[19]!=2) return; +if (b[20]) return; +if (b[21]) return; +if (b[24]) return; +if (b[29]!=2) return; +if (b[34]) return; +if (b[35]) return; +if (b[39]!=2) return; +if (b[59]!=2) return; + + if (check_parity (b, 12, 18, !b[36])) return; + if (check_parity (b, 1, 8, !b[37])) return; + + u.jday = bcd(b,22,23); + u.jday*=10; + u.jday += bcd(b,25,28); + u.jday*=10; + u.jday+=bcd(b,30,33); + u.year = bcd (b, 41, 48); + u.hour = bcd (b, 12, 13); + u.hour*=10; + u.hour += bcd (b, 15, 18); + u.minute = bcd (b, 1, 3); + u.minute*=10; + u.minute += bcd (b, 5, 8); + u.wday=bcd(b,50,52); + + u.second = 0; + u.nanosecond = 0; + + + + printf ("JJY: decoded %02d-%03d (DOW %d) %02d:%02d\r\n", u.year, u.jday,u.wday, u.hour, u.minute); +} + + + +void jjy_make_stream (uint8_t *v, UTC u) +{ + unsigned s; + uint8_t b[60]; + uint8_t *pb; + + jjy_make_bits (u, b); + process_bits ( b); + + bzero (v, 600); + + for (s = 0, pb = b; s < 60; ++s, v += 10, ++pb) { + memset(v,0,10); + switch(*pb) { + case 0: + memset(v+8,1,2); + break; + case 1: + memset(v+5,1,5); + break; + case 2: + memset(v+2,1,8); + break; + } + } +} + + |
