#include <stdio.h>
#include <string.h>
#include <time.h>
#include <sys/time.h>
#include "freertos/FreeRTOS.h"
#include "freertos/timers.h"
#include "hodiny.h"
#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c-%c%c%c%c%c%c%c%c-%c%c%c%c%c%c%c%c-%c%c%c%c%c%c%c%c-%c%c%c%c%c%c%c%c-%c%c%c%c%c%c%c%c-%c%c%c%c%c%c%c%c-%c%c%c%c%c%c%c%c"
#define BYTE_TO_BINARY(uint64_t) \
((uint64_t) & 0x8000000000000000 ? '1' : '0'), \
((uint64_t) & 0x4000000000000000 ? '1' : '0'), \
((uint64_t) & 0x2000000000000000 ? '1' : '0'), \
((uint64_t) & 0x1000000000000000 ? '1' : '0'), \
((uint64_t) & 0x0800000000000000 ? '1' : '0'), \
((uint64_t) & 0x0400000000000000 ? '1' : '0'), \
((uint64_t) & 0x0200000000000000 ? '1' : '0'), \
((uint64_t) & 0x0100000000000000 ? '1' : '0'), \
((uint64_t) & 0x80000000000000 ? '1' : '0'), \
((uint64_t) & 0x40000000000000 ? '1' : '0'), \
((uint64_t) & 0x20000000000000 ? '1' : '0'), \
((uint64_t) & 0x10000000000000 ? '1' : '0'), \
((uint64_t) & 0x08000000000000 ? '1' : '0'), \
((uint64_t) & 0x04000000000000 ? '1' : '0'), \
((uint64_t) & 0x02000000000000 ? '1' : '0'), \
((uint64_t) & 0x01000000000000 ? '1' : '0'), \
((uint64_t) & 0x800000000000 ? '1' : '0'), \
((uint64_t) & 0x400000000000? '1' : '0'), \
((uint64_t) & 0x200000000000 ? '1' : '0'), \
((uint64_t) & 0x100000000000 ? '1' : '0'), \
((uint64_t) & 0x080000000000 ? '1' : '0'), \
((uint64_t) & 0x040000000000 ? '1' : '0'), \
((uint64_t) & 0x020000000000 ? '1' : '0'), \
((uint64_t) & 0x010000000000 ? '1' : '0'), \
((uint64_t) & 0x8000000000 ? '1' : '0'), \
((uint64_t) & 0x4000000000 ? '1' : '0'), \
((uint64_t) & 0x2000000000 ? '1' : '0'), \
((uint64_t) & 0x1000000000 ? '1' : '0'), \
((uint64_t) & 0x0800000000 ? '1' : '0'), \
((uint64_t) & 0x0400000000 ? '1' : '0'), \
((uint64_t) & 0x0200000000 ? '1' : '0'), \
((uint64_t) & 0x0100000000 ? '1' : '0'), \
((uint64_t) & 0x80000000 ? '1' : '0'), \
((uint64_t) & 0x40000000 ? '1' : '0'), \
((uint64_t) & 0x20000000 ? '1' : '0'), \
((uint64_t) & 0x10000000 ? '1' : '0'), \
((uint64_t) & 0x08000000 ? '1' : '0'), \
((uint64_t) & 0x04000000 ? '1' : '0'), \
((uint64_t) & 0x02000000 ? '1' : '0'), \
((uint64_t) & 0x01000000 ? '1' : '0'), \
((uint64_t) & 0x800000 ? '1' : '0'), \
((uint64_t) & 0x400000 ? '1' : '0'), \
((uint64_t) & 0x200000 ? '1' : '0'), \
((uint64_t) & 0x100000 ? '1' : '0'), \
((uint64_t) & 0x080000 ? '1' : '0'), \
((uint64_t) & 0x040000 ? '1' : '0'), \
((uint64_t) & 0x020000 ? '1' : '0'), \
((uint64_t) & 0x010000 ? '1' : '0'), \
((uint64_t) & 0x8000 ? '1' : '0'), \
((uint64_t) & 0x4000 ? '1' : '0'), \
((uint64_t) & 0x2000 ? '1' : '0'), \
((uint64_t) & 0x1000 ? '1' : '0'), \
((uint64_t) & 0x0800 ? '1' : '0'), \
((uint64_t) & 0x0400 ? '1' : '0'), \
((uint64_t) & 0x0200 ? '1' : '0'), \
((uint64_t) & 0x0100 ? '1' : '0'), \
((uint64_t) & 0x80 ? '1' : '0'), \
((uint64_t) & 0x40 ? '1' : '0'), \
((uint64_t) & 0x20 ? '1' : '0'), \
((uint64_t) & 0x10 ? '1' : '0'), \
((uint64_t) & 0x08 ? '1' : '0'), \
((uint64_t) & 0x04 ? '1' : '0'), \
((uint64_t) & 0x02 ? '1' : '0'), \
((uint64_t) & 0x01 ? '1' : '0')
void to_shift_registers(struct shift_registers *out, struct tm *in) {
out->datH[0] = 0;
out->datH[1] = 0;
out->datH[2] = 0;
if(in->tm_hour>23) return;
if(in->tm_min>59) return;
if(in->tm_sec>59) return;
uint8_t hour = (in->tm_hour>11)?(in->tm_hour-12):in->tm_hour;
int16_t x = (hour>0)?(((12-hour)*16)+1):1;
// printf("%d %d %d -- ", in->tm_hour, hour, x );
for(int c=0; c<3; c++,x=/*(x<64)?(0):*/(x-64)) {
out->datH[c] = (x<64)?((x<0)?(0):((uint64_t)1 << (x-1))):(0);
printf(BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(out->datH[c]));
}
x = (in->tm_sec==0)?(3):(60-in->tm_sec)*3+3+((in->tm_sec==0)?(0):(60-in->tm_sec))/5;
// printf("%d %d -- ", in->tm_sec, x );
for(int c=0; c<3; c++,x=/*(x<64)?(0):*/(x-64)) {
out->datH[c] = (x<64)?((x<0)?(0):((uint64_t)1 << (x-1))):(0);
printf(BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(out->datH[c]));
}
x = (in->tm_min==0)?(3):(60-in->tm_min)*3+3+((in->tm_min==0)?(0):(60-in->tm_min))/5;
// printf("%d %d -- ", in->tm_min, x );
for(int c=0; c<3; c++,x=/*(x<64)?(0):*/(x-64)) {
out->datH[c] = (x<64)?((x<0)?(0):((uint64_t)1 << (x-1))):(0);
printf(BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(out->datH[c]));
}
}
void app_main(void)
{
// uint8_t hour24 = 16;
// uint8_t hour = (hour24>11)?(hour24-12):hour24;
// uint8_t x = (hour>0)?(((12-hour)*16)+1):1;
// for(int i=0; i<24; i++) {
// hour = (i>11)?(i-12):i;
// x = (hour>0)?(((12-hour)*16)+1):1;
// printf("%d - %d - %d\n", hour24, hour, x);
// }
/*
struct shift_registers test;
struct tm timeinfo = { .tm_sec = 0, .tm_min=55, .tm_hour=0, .tm_mday=18, .tm_mon=12-1, .tm_year=2024-1900 };
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min++; if(timeinfo.tm_min>59) timeinfo.tm_min=0;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
timeinfo.tm_min=59;
to_shift_registers(&test,&timeinfo);
// printf("\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n"BYTE_TO_BINARY_PATTERN"\n", BYTE_TO_BINARY(test.datH[0]), BYTE_TO_BINARY(test.datH[1]), BYTE_TO_BINARY(test.datH[2])); fflush(stdout);
*/
uint64_t data = 0xC000000000000001;
bool rev = false;
for (int8_t i = 63; i >= 0; i--) {
if ((rev)?((data >> i) & 1):((data << i) & 0x8000000000000000)) {
printf("1");
} else {
printf("0");
}
printf("\n");
}
}