예제 #1
0
/*****************************************************************************
User interface
*****************************************************************************/
static int constant_flashlight_ioctl(MUINT32 cmd, MUINT32 arg)
{
    int i4RetValue = 0;
    int iFlashType = (int)FLASHLIGHT_NONE;

    switch(cmd)
    {
    	case FLASHLIGHTIOC_T_ENABLE :
		printk("xxxxxxxxxx enable arg = %d, width = %d xxxxxxxx\n", arg, strobe_width);
            if (arg && strobe_width) {
                //enable strobe watchDog timer.
                if(FL_Enable()){
                    printk("FL_Enable fail!\n");
                    goto strobe_ioctl_error;
                }
                g_strobe_On = TRUE;
           }
            else {
               if(FL_Disable()) {
                    printk("FL_Disable fail!\n");
                    goto strobe_ioctl_error;
                }
                g_strobe_On = FALSE;
            }
    		break;
        case FLASHLIGHTIOC_T_LEVEL:
					strobe_width = 100;
				if(1 == (int)arg || 12 == (int)arg || 20 == (int)arg)
					video_mode = 1;
				else
					video_mode = 0;
				printk("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF level:%d FFFFFFFFFF\n",(int)arg);		

				//PK_DBG("level:%d \n",(int)arg);
				if (arg > 0)
				{
					if(FL_dim_duty((kal_int8)arg-1)) {
						//PK_ERR("FL_dim_duty fail!\n");
						//i4RetValue = -EINVAL;
						goto strobe_ioctl_error;
					}
				}
            break;
        case FLASHLIGHTIOC_T_FLASHTIME:
            strobe_Timeus = (u32)arg;
            printk("strobe_Timeus:%d \n",(int)strobe_Timeus);
            break;
        case FLASHLIGHTIOC_T_STATE:
            strobe_eState = (eFlashlightState)arg;
            break;
        case FLASHLIGHTIOC_G_FLASHTYPE:
            iFlashType = FLASHLIGHT_LED_CONSTANT;
            if(copy_to_user((void __user *) arg , (void*)&iFlashType , _IOC_SIZE(cmd)))
            {
                printk("[strobe_ioctl] ioctl copy to user failed\n");
                return -EFAULT;
            }
            break;
         case FLASHLIGHTIOC_X_SET_FLASHLEVEL:
				strobe_width = arg;
                printk("level:%d \n",(int)arg);
	     break;
	case FLASHLIGHTIOC_ENABLE_STATUS:
//		printk("**********g_strobe_on = %d \n", g_strobe_On);
		copy_to_user((void __user *) arg , (void*)&g_strobe_On , sizeof(int));
		break;
	case FLASHLIGHT_TORCH_SELECT:
		printk("@@@@@@FLASHLIGHT_TORCH_SELECT@@@@@@\n");
		if (arg && strobe_width){
			TORCH_select();
			g_strobe_On = TRUE;
		}
		else {
			if(TORCH_Disable()) {
                   	 printk("FL_Disable fail!\n");
                    	goto strobe_ioctl_error;
                }
                g_strobe_On = FALSE;
            }
		
		break;
    	default :
			printk("No such command \n");
    		i4RetValue = -EPERM;
    		break;
    }

    return i4RetValue;

strobe_ioctl_error:
    printk("Error or ON state!\n");
    return -EPERM;
}
예제 #2
0
static int constant_flashlight_ioctl(MUINT32 cmd, MUINT32 arg)
{
    int i4RetValue = 0;
    int iFlashType = (int)FLASHLIGHT_NONE;

    //when ON state , only disable command is permitted.
    if ( (TRUE == g_strobe_On) && !((FLASHLIGHTIOC_T_ENABLE == cmd) && (0 == arg)) )

    {
        printk("[constant_flashlight]  is already ON OR check parameters!\n");
        return i4RetValue;
    }

    switch(cmd)
    {
    	case FLASHLIGHTIOC_T_ENABLE :
            if (arg && strobe_width) {
                //enable strobe watchDog timer.
                if(FL_Enable()){
                    printk("FL_Enable fail!\n");
                    goto strobe_ioctl_error;
                }
                g_strobe_On = TRUE;
            }
            else {
                if(FL_Disable()) {
                    printk("FL_Disable fail!\n");
                    goto strobe_ioctl_error;
                }
                g_strobe_On = FALSE;
            }
    		break;
        case FLASHLIGHTIOC_T_LEVEL:
            if(arg > 32)
				arg=32;

            strobe_width = arg;
            printk("level:%d \n",(int)arg);
            if (arg > 0)
            {
                if(FL_dim_duty((kal_int8)arg - 1)) {
                    //0(weak)~31(strong)
                    printk("FL_dim_duty fail!\n");
                    //i4RetValue = -EINVAL;
                    goto strobe_ioctl_error;
                }
            }
            break;
        case FLASHLIGHTIOC_T_FLASHTIME:
            strobe_Timeus = (u32)arg;
            printk("strobe_Timeus:%d \n",(int)strobe_Timeus);
            break;
        case FLASHLIGHTIOC_T_STATE:
            strobe_eState = (eFlashlightState)arg;
            break;
        case FLASHLIGHTIOC_G_FLASHTYPE:
            iFlashType = FLASHLIGHT_LED_CONSTANT;
            if(copy_to_user((void __user *) arg , (void*)&iFlashType , _IOC_SIZE(cmd)))
            {
                printk("[strobe_ioctl] ioctl copy to user failed\n");
                return -EFAULT;
            }
            break;
            
    	default :
			printk("No such command \n");
    		i4RetValue = -EPERM;
    		break;
    }

    return i4RetValue;

strobe_ioctl_error:
    printk("Error or ON state!\n");
    return -EPERM;
}