static int inv_mpu_get_config(struct mldl_cfg *mldl_cfg, void *gyro_adapter, struct ext_slave_config __user *usr_config) { int retval = 0; struct ext_slave_config config; void *user_data; retval = copy_from_user(&config, usr_config, sizeof(config)); if (retval) return -EFAULT; user_data = config.data; if (config.len && config.data) { void *data; data = kmalloc(config.len, GFP_KERNEL); if (!data) return -ENOMEM; retval = copy_from_user(data, (void __user *)config.data, config.len); if (retval) { retval = -EFAULT; kfree(data); return retval; } config.data = data; } retval = gyro_get_config(gyro_adapter, mldl_cfg, &config); if (!retval) retval = copy_to_user((unsigned char __user *)user_data, config.data, config.len); kfree(config.data); return retval; }
void main(void) { //configuring P1OUT |= 0x04; // set P1.2 for debug P4DIR |= 0x20; // P4.5 as output (for debug) gina_init(); scheduler_init(); leds_init(); if (*(&eui64+3)==0x09) { // this is a GINA board (not a basestation) gyro_init(); large_range_accel_init(); magnetometer_init(); sensitive_accel_temperature_init(); } radio_init(); timer_init(); P1OUT &= ~0x04; // clear P1.2 for debug //check sensor configuration is right gyro_get_config(); large_range_accel_get_config(); magnetometer_get_config(); sensitive_accel_temperature_get_config(); //scheduler_push_task(ID_TASK_APPLICATION); scheduler_register_application_task(&task_application_imu_radio, 0, FALSE); scheduler_start(); }