diff options
author | root <root@lab.panaceas.james.local> | 2019-02-19 13:46:18 +0000 |
---|---|---|
committer | root <root@lab.panaceas.james.local> | 2019-02-19 13:46:18 +0000 |
commit | b3c6320899d6b27899ab3c67c745e8d3b29af3a2 (patch) | |
tree | 41dc7fc5d71a841a416d0d53923de5d1d44277e3 /app/util.c | |
parent | c84e85e0e9641b006a376fab456ac2efcfdb14e2 (diff) | |
download | clock-b3c6320899d6b27899ab3c67c745e8d3b29af3a2.tar.gz clock-b3c6320899d6b27899ab3c67c745e8d3b29af3a2.tar.bz2 clock-b3c6320899d6b27899ab3c67c745e8d3b29af3a2.zip |
working ethernet
Diffstat (limited to 'app/util.c')
-rw-r--r-- | app/util.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/app/util.c b/app/util.c new file mode 100644 index 0000000..ff35288 --- /dev/null +++ b/app/util.c @@ -0,0 +1,66 @@ +#include "project.h" + +int check_parity (uint8_t *d, unsigned s, unsigned e, uint8_t p) +{ + unsigned i; + + for (i = s; i <= e; ++i) + p ^= d[i]; + + return !p; +} + + +unsigned bcd (uint8_t *d, unsigned s, unsigned e) +{ + unsigned ret = 0, c, b, i; + + for (i = e, c = 1, b = 0; i >= s; --i, b++) { + + if (d[i]) ret += c; + + + switch (b & 3) { + case 0: + case 1: + case 2: + c <<= 1; + break; + + default: + c >>= 3; + c *= 10; + } + } + + return ret; +} + + + +unsigned le_bcd (uint8_t *d, unsigned s, unsigned e) +{ + unsigned ret = 0, c, b, i; + + for (i = s, c = 1, b = 0; i <= e; ++i, b++) { + + if (d[i]) ret += c; + + + switch (b & 3) { + case 0: + case 1: + case 2: + c <<= 1; + break; + + default: + c >>= 3; + c *= 10; + } + } + + return ret; +} + + |