Skip to content
Snippets Groups Projects
Select Git revision
  • 42b28396be1e24fc5118ca481d867e48e809bb0e
  • main default protected
  • blm_dev_chan
  • release/1.4.0 protected
  • widgets_draw
  • return_of_melodic_demo
  • task_cleanup
  • mixer2
  • dx/fb-save-restore
  • dx/dldldld
  • fpletz/flake
  • dx/jacksense-headset-mic-only
  • release/1.3.0 protected
  • fil3s-limit-filesize
  • allow-reloading-sunmenu
  • wifi-json-error-handling
  • app_text_viewer
  • shoegaze-fps
  • media_has_video_has_audio
  • fil3s-media
  • more-accurate-battery
  • v1.4.0
  • 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
35 results

mp_imu.c

Blame
  • mp_imu.c 1.83 KiB
    #include "st3m_imu.h"
    
    #include "py/builtin.h"
    #include "py/runtime.h"
    
    STATIC mp_obj_t mp_imu_acc_read(void) {
        static float x, y, z;
    
        // Will not overwrite old data if there is an error
        st3m_imu_read_acc_mps(&x, &y, &z);
    
        mp_obj_t items[3] = { mp_obj_new_float(x), mp_obj_new_float(y),
                              mp_obj_new_float(z) };
        return mp_obj_new_tuple(3, items);
    }
    
    STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_imu_acc_read_obj, mp_imu_acc_read);
    
    STATIC mp_obj_t mp_imu_gyro_read(void) {
        static float x, y, z;
    
        // Will not overwrite old data if there is an error
        st3m_imu_read_gyro_dps(&x, &y, &z);
    
        mp_obj_t items[3] = { mp_obj_new_float(x), mp_obj_new_float(y),
                              mp_obj_new_float(z) };
        return mp_obj_new_tuple(3, items);
    }
    
    STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_imu_gyro_read_obj, mp_imu_gyro_read);
    
    STATIC mp_obj_t mp_imu_pressure_read(void) {
        static float pressure, temperature;
    
        // Will not overwrite old data if there is an error
        st3m_imu_read_pressure(&pressure, &temperature);
    
        mp_obj_t items[] = { mp_obj_new_float(pressure),
                             mp_obj_new_float(temperature) };
        return mp_obj_new_tuple(2, items);
    }
    
    STATIC MP_DEFINE_CONST_FUN_OBJ_0(mp_imu_pressure_read_obj,
                                     mp_imu_pressure_read);
    
    STATIC const mp_rom_map_elem_t globals_table[] = {
        { MP_ROM_QSTR(MP_QSTR_acc_read), MP_ROM_PTR(&mp_imu_acc_read_obj) },
        { MP_ROM_QSTR(MP_QSTR_gyro_read), MP_ROM_PTR(&mp_imu_gyro_read_obj) },
        { MP_ROM_QSTR(MP_QSTR_pressure_read),
          MP_ROM_PTR(&mp_imu_pressure_read_obj) },
    };
    
    STATIC MP_DEFINE_CONST_DICT(globals, globals_table);
    
    const mp_obj_module_t mp_module_imu_user_cmodule = {
        .base = { &mp_type_module },
        .globals = (mp_obj_dict_t *)&globals,
    };
    
    MP_REGISTER_MODULE(MP_QSTR_imu, mp_module_imu_user_cmodule);