Skip to content
Snippets Groups Projects
Select Git revision
  • 07330905c07705ff0f0fa76ab1fae1251f77c758
  • main default protected
  • phhw
  • captouch-threshold
  • t
  • dos
  • test2
  • test
  • slewtest
  • simtest
  • view-think
  • vm-pending
  • media-buf
  • scope
  • passthrough
  • wave
  • vsync
  • dos-main-patch-50543
  • json-error
  • rahix/big-flow3r
  • pippin/media_framework
  • v1.3.0
  • v1.2.0
  • v1.2.0+rc1
  • v1.1.1
  • v1.1.0
  • v1.1.0+rc1
  • v1.0.0
  • v1.0.0+rc6
  • v1.0.0+rc5
  • v1.0.0+rc4
  • v1.0.0+rc3
  • v1.0.0+rc2
  • v1.0.0+rc1
34 results

overlays.py

Blame
  • Forked from flow3r / flow3r firmware
    Source project has a limited visibility.
    time.c 1.62 KiB
    #include <string.h>
    #include <time.h>
    #include <sys/time.h>
    #include <math.h>
    
    #include "misc.h"
    #include "mpconfig.h"
    #include "qstr.h"
    #include "obj.h"
    #include "runtime.h"
    
    static mp_obj_t mod_time_time() {
        return mp_obj_new_int((machine_int_t)time(NULL));
    }
    static MP_DEFINE_CONST_FUN_OBJ_0(mod_time_time_obj, mod_time_time);
    
    // Note: this is deprecated since CPy3.3, but pystone still uses it.
    static mp_obj_t mod_time_clock() {
    //    return mp_obj_new_int((machine_int_t)clock());
        // POSIX requires CLOCKS_PER_SEC equals 1000000, so that's what we assume
        // float cannot represent full range of int32 precisely, so we pre-divide
        // int to reduce resolution, and then actually do float division hoping
        // to preserve integer part resolution.
        return mp_obj_new_float((float)(clock() / 1000) / 1000.0);
    }
    static MP_DEFINE_CONST_FUN_OBJ_0(mod_time_clock_obj, mod_time_clock);
    
    static mp_obj_t mod_time_sleep(mp_obj_t arg) {
    #if MICROPY_ENABLE_FLOAT
        struct timeval tv;
        machine_float_t val = mp_obj_get_float(arg);
        double ipart;
        tv.tv_usec = round(modf(val, &ipart) * 1000000);
        tv.tv_sec = ipart;
        select(0, NULL, NULL, NULL, &tv);
    #else
        sleep(mp_obj_get_int(arg));
    #endif
        return mp_const_none;
    }
    static MP_DEFINE_CONST_FUN_OBJ_1(mod_time_sleep_obj, mod_time_sleep);
    
    void time_init() {
        mp_obj_t m = mp_obj_new_module(QSTR_FROM_STR_STATIC("time"));
        rt_store_attr(m, QSTR_FROM_STR_STATIC("time"), (mp_obj_t)&mod_time_time_obj);
        rt_store_attr(m, QSTR_FROM_STR_STATIC("clock"), (mp_obj_t)&mod_time_clock_obj);
        rt_store_attr(m, QSTR_FROM_STR_STATIC("sleep"), (mp_obj_t)&mod_time_sleep_obj);
    }