//-------------------------------------------------------------------------------------------------- uint8_t snprint_d8(char *buffer, size_t buf_size, uint8_t num){ uint8_t i, nchars; char str[3]; uint16_t bcd; i = 3; // max of 3 digits bcd = u8_to_bcd(num); do{ i -=1; str[i]=(bcd & 0x0F) + '0'; bcd >>= 4; }while(bcd != 0); nchars = 3-i; if(buf_size == 0) return(nchars); do{ *buffer = str[i]; i++; buffer++; if((3-i) == buf_size) return(nchars); }while(i<3); *buffer = 0; return(nchars); }
/* Get the current time (p.8) */ static m_uint64_t get_current_time(cpu_gen_t *cpu) { m_uint64_t res; struct tm *tmx; time_t ct; time(&ct); tmx = localtime(&ct); res = u8_to_bcd(tmx->tm_sec) << 8; res += u8_to_bcd(tmx->tm_min) << 16; res += u8_to_bcd(tmx->tm_hour) << 24; res += ((m_uint64_t)(u8_to_bcd(tmx->tm_wday))) << 32; res += ((m_uint64_t)(u8_to_bcd(tmx->tm_mday))) << 40; res += ((m_uint64_t)(u8_to_bcd(tmx->tm_mon+1))) << 48; res += ((m_uint64_t)(u8_to_bcd(tmx->tm_year))) << 56; return(res); }