summaryrefslogtreecommitdiffstats
path: root/msf.c
diff options
context:
space:
mode:
Diffstat (limited to 'msf.c')
-rw-r--r--msf.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/msf.c b/msf.c
new file mode 100644
index 0000000..47e5188
--- /dev/null
+++ b/msf.c
@@ -0,0 +1,72 @@
+#include "project.h"
+
+
+
+
+static void msf_set_ident (uint8_t *i)
+{
+ i[0] = 0;
+ i[1] = 1;
+ i[2] = 1;
+ i[3] = 1;
+ i[4] = 1;
+ i[5] = 1;
+ i[6] = 1;
+ i[7] = 0;
+}
+
+
+
+
+
+void msf_make_bits (UTC u, uint8_t *a, uint8_t *b)
+{
+
+ bzero (a, 60);
+ bzero (b, 60);
+
+
+ a[0] = 1;
+ b[0] = 1;
+
+
+ bcd_set (a, 17, 24, u.year % 100);
+ bcd_set (a, 25, 29, u.month);
+ bcd_set (a, 30, 35, u.mday);
+ bcd_set (a, 36, 38, u.wday - 1);
+ bcd_set (a, 39, 44, u.hour);
+ bcd_set (a, 45, 51, u.minute);
+
+ msf_set_ident (&a[52]);
+
+
+ b[53] = 0; /* about to be BST */
+
+ b[54] = set_parity (a, 17, 24);
+ b[55] = set_parity (a, 25, 35);
+ b[56] = set_parity (a, 36, 38);
+ b[57] = set_parity (a, 39, 51);
+
+ b[58] = 0; /*BST vs GMT */
+
+}
+
+
+
+void msf_make_stream (uint8_t *v, uint8_t *a, uint8_t *b)
+{
+ unsigned s;
+ bzero (v, 600);
+
+ for (s = 0; s < 60; ++s, v += 10, ++a, ++b) {
+
+ if (!s)
+ memset (v, 1, 5);
+
+
+ v[0] = 1;
+ v[1] = *a;
+ v[2] = *b;
+ }
+}
+