/******************************************************************************************* Function: mhb_ioctl Description: ioctrl function to /dev/motionhub, do open, close motion, or set interval and attribute to motion Data Accessed: no Data Updated: no Input: struct file *file, unsigned int cmd, unsigned long arg cmd indicates command, arg indicates parameter Output: no Return: result of ioctrl command, 0 successed, -ENOTTY failed *******************************************************************************************/ static long mhb_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { #ifdef MHB_LOG_ON printk(KERN_INFO "motionhub_channel mhb_ioctl cmd: [%d]\n", cmd); //printk(KERN_INFO "motionhub_channel mhb_ioctl arg: [%d]\n", arg); #endif switch(cmd) { case MHB_IOCTL_MOTION_START: break; case MHB_IOCTL_MOTION_STOP: break; case MHB_IOCTL_MOTION_ATTR_START: break; case MHB_IOCTL_MOTION_ATTR_STOP: break; default: printk(KERN_ERR"mhb_ioctl unknown cmd : %d\n", cmd); return -ENOTTY; } inputhub_route_cmd(ROUTE_MOTION_PORT,cmd,arg); return 0; }
/******************************************************************************************* Function: shb_ioctl Description: 定义/dev/sensorhub节点的ioctl函数,主要用于设置传感器命令和获取MCU是否存在 Data Accessed: 无 Data Updated: 无 Input: struct file *file, unsigned int cmd, unsigned long arg,cmd是命令码,arg是命令跟的参数 Output: 无 Return: 成功或者失败信息 *******************************************************************************************/ static long shb_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { void __user *argp = (void __user *)arg; /*begin huangwen 20120706*/ int sensorMcuMode; /*end huangwen 20120706*/ switch (cmd) { case SHB_IOCTL_APP_ENABLE_SENSOR: get_acc_calibrate_data(); get_mag_calibrate_data(); get_cap_prox_calibrate_data(); get_airpress_calibrate_data(); break; case SHB_IOCTL_APP_DISABLE_SENSOR: break; /*begin huangwen 20120706*/ case SHB_IOCTL_APP_GET_SENSOR_MCU_MODE: sensorMcuMode = getSensorMcuMode(); hwlog_info( "isSensorMcuMode [%d]\n", sensorMcuMode ); if (copy_to_user(argp, &sensorMcuMode, sizeof(sensorMcuMode))) return -EFAULT; return 0; break; /*end huangwen 20120706*/ case SHB_IOCTL_APP_DELAY_ACCEL: case SHB_IOCTL_APP_DELAY_LIGHT: case SHB_IOCTL_APP_DELAY_PROXI: case SHB_IOCTL_APP_DELAY_GYRO: case SHB_IOCTL_APP_DELAY_GRAVITY: case SHB_IOCTL_APP_DELAY_MAGNETIC: case SHB_IOCTL_APP_DELAY_ROTATESCREEN: case SHB_IOCTL_APP_DELAY_LINEARACCELERATE: case SHB_IOCTL_APP_DELAY_ORIENTATION: case SHB_IOCTL_APP_DELAY_ROTATEVECTOR: case SHB_IOCTL_APP_DELAY_PRESSURE: case SHB_IOCTL_APP_DELAY_TEMPERATURE: case SHB_IOCTL_APP_DELAY_RELATIVE_HUMIDITY: case SHB_IOCTL_APP_DELAY_AMBIENT_TEMPERATURE: case SHB_IOCTL_APP_DELAY_MCU_LABC: case SHB_IOCTL_APP_DELAY_HALL: case SHB_IOCTL_APP_DELAY_MAGNETIC_FIELD_UNCALIBRATED: case SHB_IOCTL_APP_DELAY_GAME_ROTATION_VECTOR: case SHB_IOCTL_APP_DELAY_GYROSCOPE_UNCALIBRATED: case SHB_IOCTL_APP_DELAY_SIGNIFICANT_MOTION: case SHB_IOCTL_APP_DELAY_STEP_DETECTOR: case SHB_IOCTL_APP_DELAY_STEP_COUNTER: case SHB_IOCTL_APP_DELAY_GEOMAGNETIC_ROTATION_VECTOR: case SHB_IOCTL_APP_DELAY_AIRPRESS: case SHB_IOCTL_APP_DELAY_HANDPRESS: case SHB_IOCTL_APP_DELAY_CAP_PROX: break; default: hwlog_err("shb_ioctl unknown cmd : %d\n", cmd); return -ENOTTY; } return inputhub_route_cmd(ROUTE_SHB_PORT,cmd,arg); }