111 lines
2.2 KiB
C
111 lines
2.2 KiB
C
#include "app_utils.h"
|
|
#include <math.h>
|
|
#include "utils.h"
|
|
#include "wm_crypto_hard.h"
|
|
|
|
static uint32_t millis_cnt = 0;
|
|
|
|
uint32_t millis(void)
|
|
{
|
|
return millis_cnt;
|
|
}
|
|
|
|
void millis_run_cb(void *arg)
|
|
{
|
|
millis_cnt++;
|
|
}
|
|
|
|
void us_delay(uint32_t us)
|
|
{
|
|
struct tls_timer_cfg timer_config =
|
|
{
|
|
.is_repeat = false,
|
|
.unit = TLS_TIMER_UNIT_US,
|
|
.timeout = 0xFFFFFFFF,
|
|
};
|
|
|
|
uint8_t timer_id = tls_timer_create(&timer_config);
|
|
|
|
if(WM_TIMER_ID_INVALID == timer_id) return;
|
|
|
|
tls_timer_start(timer_id);
|
|
|
|
// Perform a blocking delay
|
|
while(tls_timer_read(timer_id) < us);
|
|
|
|
tls_timer_destroy(timer_id);
|
|
}
|
|
|
|
void ms_delay(uint32_t ms)
|
|
{
|
|
struct tls_timer_cfg timer_config =
|
|
{
|
|
.is_repeat = false,
|
|
.unit = TLS_TIMER_UNIT_MS,
|
|
.timeout = 0xFFFFFFFF,
|
|
};
|
|
|
|
uint8_t timer_id = tls_timer_create(&timer_config);
|
|
|
|
if(WM_TIMER_ID_INVALID == timer_id) return;
|
|
|
|
tls_timer_start(timer_id);
|
|
|
|
// Perform a blocking delay
|
|
while(tls_timer_read(timer_id) < ms);
|
|
|
|
tls_timer_destroy(timer_id);
|
|
}
|
|
|
|
uint32_t random_gen_6_digit(void)
|
|
{
|
|
unsigned char random_buf[6] = {0};
|
|
uint32_t output_num = 0;
|
|
|
|
tls_crypto_random_init(0x19031998, CRYPTO_RNG_SWITCH_16);
|
|
tls_crypto_random_bytes(random_buf, sizeof random_buf);
|
|
tls_crypto_random_stop();
|
|
|
|
for(uint8_t i = 0; i < sizeof random_buf; i++)
|
|
{
|
|
// Ensures the last digit is not 0
|
|
if(i == (sizeof random_buf) - 1 && random_buf[i] % 10 == 0)random_buf[i]++;
|
|
output_num += (random_buf[i] % 10) * pow(10, i);
|
|
}
|
|
|
|
return output_num;
|
|
}
|
|
|
|
void time_date_to_tm(const char *time_date, struct tm *time)
|
|
{
|
|
if(!time_date) return;
|
|
|
|
/* Months are on three letters :
|
|
Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
|
|
*/
|
|
const char *MONTHS[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
|
|
const unsigned long int MONTHS_CNT = sizeof(MONTHS)/sizeof(*MONTHS);
|
|
char month[4];
|
|
time->tm_mon = 0;
|
|
|
|
sscanf(time_date, "%d:%d:%d %s %d %d",
|
|
&time->tm_hour,
|
|
&time->tm_min,
|
|
&time->tm_sec,
|
|
month,
|
|
&time->tm_mday,
|
|
&time->tm_year);
|
|
|
|
for(unsigned long int i = 0; i < MONTHS_CNT; i++)
|
|
{
|
|
if(strcasecmp(MONTHS[i], month) == 0)
|
|
{
|
|
time->tm_mon = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
// Adjust year value
|
|
time->tm_year -= 1900;
|
|
}
|