示例#1
0
static int
gs_adi_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
	   unsigned long arg)
{

	int i;
	void __user *argp = (void __user *)arg;
	int accel_buf[3];
	short flag;

	switch (cmd) 
	{

		case ECS_IOCTL_APP_SET_AFLAG:     /*set open acceleration sensor flag*/
			if (copy_from_user(&flag, argp, sizeof(flag)))
				return -EFAULT;
				break;
		case ECS_IOCTL_APP_SET_DELAY:
			if (copy_from_user(&flag, argp, sizeof(flag)))
				return -EFAULT;
				break;
			default:
				break;
	}
	switch (cmd) 
	{
		case ECS_IOCTL_APP_SET_AFLAG:
			atomic_set(&a_flag, flag);
			break;
		case ECS_IOCTL_APP_GET_AFLAG:  /*get open acceleration sensor flag*/
			flag = atomic_read(&a_flag);
			break;
		case ECS_IOCTL_APP_SET_DELAY:
			if(flag)
				accel_delay = flag;
			else
				accel_delay = 10;   /*10ms*/
			break;
			
		case ECS_IOCTL_APP_GET_DELAY:
			flag = accel_delay;
			break;
			
		case ECS_IOCTL_READ_ACCEL_XYZ:
			for(i=0;i<3;i++)
				gs_adi_data_to_compass(accel_buf);
			break;
		default:
			break;
	}
	switch (cmd) 
	{
		case ECS_IOCTL_APP_GET_AFLAG:
			if (copy_to_user(argp, &flag, sizeof(flag)))
			return -EFAULT;
			
			break;

		
		case ECS_IOCTL_APP_GET_DELAY:
			if (copy_to_user(argp, &flag, sizeof(flag)))
			return -EFAULT;
			break;
			
	
		case ECS_IOCTL_READ_ACCEL_XYZ:
			if (copy_to_user(argp, &accel_buf, sizeof(accel_buf)))
				return -EFAULT;
			break;

		case ECS_IOCTL_READ_DEVICEID:
			if (copy_to_user(argp, adix_device_id, sizeof(adix_device_id)))
				return -EFAULT;
			break;
		default:
			break;
	}
	
	return 0;
}
static long
gs_adi_ioctl(struct file *file, unsigned int cmd,
	   unsigned long arg)
{

	int i;
	void __user *argp = (void __user *)arg;
	int accel_buf[3];
	/*BK4D01075, add  set delay interface for app , dingxifeng KF14049, 2009-6-10  begin*/
	short flag;

	switch (cmd) 
	{
/*BK4D01898, add  acc_flag for control G-sensor, dingxifeng KF14049, 2009-7-2  begin*/

		case ECS_IOCTL_APP_SET_AFLAG:     /*set open acceleration sensor flag*/
			if (copy_from_user(&flag, argp, sizeof(flag)))
				return -EFAULT;
				break;
		case ECS_IOCTL_APP_SET_DELAY:
			if (copy_from_user(&flag, argp, sizeof(flag)))
				return -EFAULT;
				break;
			default:
				break;
	}
	switch (cmd) 
	{
		case ECS_IOCTL_APP_SET_AFLAG:
			atomic_set(&a_flag, flag);
			break;
		case ECS_IOCTL_APP_GET_AFLAG:  /*get open acceleration sensor flag*/
			flag = atomic_read(&a_flag);
			break;
		case ECS_IOCTL_APP_SET_DELAY:
/*BK4D01637, the driver cant not use 0ms , dingxifeng KF14049, 2009-6-22 begin*/
			if(flag)
				accel_delay = flag;
			else
				accel_delay = 10;   /*10ms*/
/*BK4D01637, the driver cant not use 0ms , dingxifeng KF14049, 2009-6-22 end*/
			break;
			
		case ECS_IOCTL_APP_GET_DELAY:
			flag = accel_delay;
			break;
			
/*BK4D01075, add  set delay interface for app , dingxifeng KF14049, 2009-6-10  end*/
		case ECS_IOCTL_READ_ACCEL_XYZ:
			for(i=0;i<3;i++)
				gs_adi_data_to_compass(accel_buf);
			break;
		default:
			break;
	}
	switch (cmd) 
	{
		case ECS_IOCTL_APP_GET_AFLAG:
			if (copy_to_user(argp, &flag, sizeof(flag)))
			return -EFAULT;
			
			break;
/*BK4D01898, add  acc_flag for control G-sensor, dingxifeng KF14049, 2009-7-2  end*/

/*BK4D01075, add  set delay interface for app , dingxifeng KF14049, 2009-6-10  begin*/
		
		case ECS_IOCTL_APP_GET_DELAY:
			if (copy_to_user(argp, &flag, sizeof(flag)))
			return -EFAULT;
			break;
			
/*BK4D01075, add  set delay interface for app , dingxifeng KF14049, 2009-6-10  end*/
	
		case ECS_IOCTL_READ_ACCEL_XYZ:
			if (copy_to_user(argp, &accel_buf, sizeof(accel_buf)))
				return -EFAULT;
			break;

		case ECS_IOCTL_READ_DEVICEID:
			if (copy_to_user(argp, adix_device_id, sizeof(adix_device_id)))
				return -EFAULT;
			break;
		default:
			break;
	}
	
	return 0;
}