/*******************************************************************************************
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);

}