summaryrefslogtreecommitdiffstats
path: root/jjy.c
diff options
context:
space:
mode:
authorYour Name <you@example.com>2026-02-09 01:22:02 +0000
committerYour Name <you@example.com>2026-02-09 01:22:02 +0000
commita7598289a0c086ba20df346267ba087e6b35805c (patch)
tree56f24f9101278f521501648e2635450c5edc97da /jjy.c
parent6e75bcc7f8df65d4901b2918aafb501c6baefabe (diff)
downloadgen_msf-master.tar.gz
gen_msf-master.tar.bz2
gen_msf-master.zip
add jjy and wwvbHEADmaster
Diffstat (limited to 'jjy.c')
-rw-r--r--jjy.c123
1 files changed, 123 insertions, 0 deletions
diff --git a/jjy.c b/jjy.c
new file mode 100644
index 0000000..7776941
--- /dev/null
+++ b/jjy.c
@@ -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;
+ }
+ }
+}
+
+