Example #1
0
static int AOTOMdev_ioctl(struct inode *Inode, struct file *File, unsigned int cmd, unsigned long arg)
{
    static int mode = 0;
    struct aotom_ioctl_data * aotom = (struct aotom_ioctl_data *) arg;
    int res = 0;

    dprintk(5, "%s > 0x%.8x\n", __func__, cmd);

    if (down_interruptible(&write_sem))
	return -ERESTARTSYS;

    switch (cmd) {
	case VFDSETMODE:
	    mode = aotom->u.mode.compat;
	    break;
	case VFDSETLED:
	{
	    if (mode_digit != DIGITNO) res = YWPANEL_VFD_SetLed(aotom->u.led.led_nr, aotom->u.led.on);
	    break;
	}
	case VFDICONDISPLAYONOFF:
	{
//	    printk("aotom -->> %d = %d\n", aotom->u.icon.icon_nr, aotom->u.icon.on);
	    if (mode_digit == DIGIT8) {
		res = aotomSetIcon(aotom->u.icon.icon_nr, aotom->u.icon.on);
	    }
	    if (mode_digit == DIGIT4) {
		switch (aotom->u.icon.icon_nr) {
//		    case 0:
//		    {
//			struct vfd_ioctl_data * vfd = (struct vfd_ioctl_data *) arg;
//			if (5 == vfd->length) {
//			    if ((0x1e & 0xf) == vfd->data[0]) {
//				res = YWPANEL_VFD_SetLed(0, vfd->data[4]);
//			    }
//			}
//			break;
//		    }
		    case 35:
			res = YWPANEL_VFD_SetLed(1, aotom->u.led.on);
			break;
		    default:
			break;
		}
	    }
	    mode = 0;
	    break;
	}
	case VFDSTANDBY:
	{
	    if (mode_digit != DIGITNO) {
		u32 uTime = 0;
		u32 uStandByKey = 0;
		u32 uPowerOnTime = 0;
		get_user(uTime, (int *) arg);
		//printk("uTime = %d\n", uTime);

		uPowerOnTime = YWPANEL_FP_GetPowerOnTime();
		//printk("1uPowerOnTime = %d\n", uPowerOnTime);

		YWPANEL_FP_SetPowerOnTime(uTime);

		uPowerOnTime = YWPANEL_FP_GetPowerOnTime();
		//printk("2uPowerOnTime = %d\n", uPowerOnTime);
#if 0
		uStandByKey = YWPANEL_FP_GetStandByKey(0);
		printk("uStandByKey = %d\n", uStandByKey);
		uStandByKey = YWPANEL_FP_GetStandByKey(1);
		printk("uStandByKey = %d\n", uStandByKey);
		uStandByKey = YWPANEL_FP_GetStandByKey(2);
		printk("uStandByKey = %d\n", uStandByKey);
		uStandByKey = YWPANEL_FP_GetStandByKey(3);
		printk("uStandByKey = %d\n", uStandByKey);
		uStandByKey = YWPANEL_FP_GetStandByKey(4);
		printk("uStandByKey = %d\n", uStandByKey);
#endif
		YWPANEL_FP_ControlTimer(true);
		YWPANEL_FP_SetCpuStatus(0x02);
	    }
	    break;
	}
	case VFDSETTIME:
	    res = aotomSetTime((char *) arg);
	    break;
	case VFDGETTIME:
	{
	    if (mode_digit != DIGITNO) {
		u32 uTime = 0;
		char cTime[5];
		uTime = YWPANEL_FP_GetTime();
		//printk("uTime = %d\n", uTime);
		put_user(uTime, (int *) arg);
	    }
	    break;
	}
	case VFDDISPLAYCHARS:
	    if (mode == 0) {
		if (copy_from_user(&vfd_data, (void *) arg, sizeof (vfd_data)))
		    return -EFAULT;
		if (vfd_data.length > sizeof (vfd_data.data))
		    vfd_data.length = sizeof (vfd_data.data);
		while ((vfd_data.length > 0) && (vfd_data.data[vfd_data.length - 1 ] == '\n'))
		    vfd_data.length--;
		res = run_draw_thread(&vfd_data);
	    }
	    mode = 0;
	    break;
	case VFDDISPLAYCLR:
	    vfd_data.length = 0;
	    res = run_draw_thread(&vfd_data);
	    break;
	case 0x5305:
	    if (mode_digit == DIGIT4) {
		dprintk(0, "unknown IOCTL 0x%x\n", cmd);
		mode = 0;
	    }
	    break;
	case VFDBRIGHTNESS:
	    if (mode_digit == DIGIT8) YWPANEL_VFD_SetBrightness(aotom->u.brightness.level);
	    break;
	case VFDGETWAKEUPMODE:
	case VFDDISPLAYWRITEONOFF:
	case 0x5401:
	    break;
	default:
	    dprintk(0, "unknown IOCTL 0x%x\n", cmd);
	    mode = 0;
	    break;
    }

    up(&write_sem);

    dprintk(5, "%s <\n", __func__);
    return res;
}
Example #2
0
static int AOTOMdev_ioctl(struct inode *Inode, struct file *File, unsigned int cmd, unsigned long arg)
{
	static int mode = 0;
	int res = -EINVAL;
	dprintk(5, "%s > 0x%.8x\n", __func__, cmd);

	if(down_interruptible (&write_sem))
		return -ERESTARTSYS;

	switch(cmd) {
	case VFDSETMODE:
	case VFDSETLED:
	case VFDICONDISPLAYONOFF:
	case VFDSETTIME:
	case VFDBRIGHTNESS:
	case VFDGETSTBYKEY:
	case VFDSETSTBYKEY:
	case VFDGETBLUEKEY:
	case VFDSETBLUEKEY:
		if (copy_from_user(&aotom_data, (void *) arg, sizeof(aotom_data)))
			return -EFAULT;
	}

	switch(cmd) {
	case VFDSETMODE:
		mode = aotom_data.u.mode.compat;
		break;
	case VFDSETLED:
		if (aotom_data.u.led.led_nr > -1 && aotom_data.u.led.led_nr < LED_MAX) {
			switch (aotom_data.u.led.on) {
			case LOG_OFF:
			case LOG_ON:
				res = YWPANEL_VFD_SetLed(aotom_data.u.led.led_nr, aotom_data.u.led.on);
				led_state[aotom_data.u.led.led_nr].state = aotom_data.u.led.on;
				break;
			default: // toggle for aotom_data.u.led.on * 10 ms
				flashLED(aotom_data.u.led.led_nr, aotom_data.u.led.on * 10);
				res = 0;
			}
		}
		break;
	case VFDBRIGHTNESS:
		if (aotom_data.u.brightness.level < 0)
			aotom_data.u.brightness.level = 0;
		else if (aotom_data.u.brightness.level > 7)
			aotom_data.u.brightness.level = 7;
		res = YWPANEL_VFD_SetBrightness(aotom_data.u.brightness.level);
		break;
	case VFDICONDISPLAYONOFF:
		switch (panel_version.DisplayInfo) {
		case YWPANEL_FP_DISPTYPE_LED:
			switch (aotom_data.u.icon.icon_nr) {
			case 0:
				res = YWPANEL_VFD_SetLed(LED_RED, aotom_data.u.icon.on);
				led_state[LED_RED].state = aotom_data.u.icon.on;
				break;
			case 35:
				res = YWPANEL_VFD_SetLed(LED_GREEN, aotom_data.u.icon.on);
				led_state[LED_GREEN].state = aotom_data.u.icon.on;
				break;
			case 46:
				led_state[LED_RED].state = aotom_data.u.icon.on;
				led_state[LED_GREEN].state = aotom_data.u.icon.on;
				YWPANEL_VFD_SetLed(LED_RED, aotom_data.u.icon.on);
				res = YWPANEL_VFD_SetLed(LED_GREEN, aotom_data.u.icon.on);
				break;
			}
			break;
			default:
			{
				int icon_nr = aotom_data.u.icon.icon_nr;
				if(icon_nr & ~0xff)
				{
					icon_nr >>= 8;
					switch (icon_nr)
					{
					case 0x11:
						icon_nr = 0x0E; //widescreen
						break;
					case 0x13:
						icon_nr = 0x0B; //CA
						break;
					case 0x15:
						icon_nr = 0x19; //mp3
						break;
					case 0x17:
						icon_nr = 0x1A; //ac3
						break;
					case 0x1A:
						icon_nr = 0x03; //play
						break;
					case 0x1e:
						icon_nr = 0x07; //record
						break;
					case 38:
						break; //cd part1
					case 39:
						break; //cd part2
					case 40:
						break; //cd part3
					case 41:
						break; //cd part4
					default:
						icon_nr = -1; //no additional symbols at the moment
						break;
					}
				}
				switch (icon_nr)
				{
				case 46:
					VFD_set_all_icons(aotom_data.u.icon.on);
					res = 0;
					case -1:
					break;
					default:
					res = aotomSetIcon(icon_nr, aotom_data.u.icon.on);
				}
			}
			mode = 0;
			break;
		}
		break;
	case VFDSETPOWERONTIME:
	{
		u32 uTime = 0;
		get_user(uTime, (int *) arg);
		YWPANEL_FP_SetPowerOnTime(uTime);
		res = 0;
		break;
	}
	case VFDPOWEROFF:
		clear_display();
		YWPANEL_FP_ControlTimer(true);
		YWPANEL_FP_SetCpuStatus(YWPANEL_CPUSTATE_STANDBY);
		res = 0;
		break;
	case VFDSTANDBY:
	{
		u32 uTime = 0;
		get_user(uTime, (int *) arg);
		YWPANEL_FP_SetPowerOnTime(uTime);
		clear_display();
		YWPANEL_FP_ControlTimer(true);
		YWPANEL_FP_SetCpuStatus(YWPANEL_CPUSTATE_STANDBY);
		res = 0;
		break;
	}
	case VFDSETTIME2:
	{
		u32 uTime = 0;
		res = get_user(uTime, (int *)arg);
		if (! res)
		{
			res = YWPANEL_FP_SetTime(uTime);
			YWPANEL_FP_ControlTimer(true);
		}
		break;
	}
	case VFDSETTIME:
		res = aotomSetTime(aotom_data.u.time.time);
		break;
	case VFDGETTIME:
	{
		u32 uTime = 0;
		uTime = YWPANEL_FP_GetTime();
		//printk("uTime = %d\n", uTime);
		res = put_user(uTime, (int *) arg);
		break;
	}
	case VFDDISPLAYCHARS:
		if (mode == 0)
		{
			if (copy_from_user(&vfd_data, (void *) arg, sizeof(vfd_data)))
				return -EFAULT;
			if (vfd_data.length > sizeof(vfd_data.data))
				vfd_data.length = sizeof(vfd_data.data);
			while ((vfd_data.length > 0) && (vfd_data.data[vfd_data.length - 1 ] == '\n'))
				vfd_data.length--;
				res = run_draw_thread(&vfd_data);
		} else
			mode = 0;
		break;
	case VFDDISPLAYCLR:
		vfd_data.length = 0;
		res = run_draw_thread(&vfd_data);
		break;
	case VFDGETWAKEUPMODE:
	case VFDDISPLAYWRITEONOFF:
		res = 0;
		break;
	case VFDGETSTARTUPSTATE:
	{
		YWPANEL_STARTUPSTATE_t State;
		if (YWPANEL_FP_GetStartUpState(&State))
			res = put_user(State, (int *) arg);
		break;
	}
	case VFDSETLOOPSTATE:
	{
		YWPANEL_LOOPSTATE_t State = YWPANEL_LOOPSTATE_UNKNOWN;
		res = get_user(State, (int *)arg);
		if (!res)
			res = YWPANEL_FP_SetLoopState(State);
		break;
	}
	case VFDGETLOOPSTATE:
	{
		YWPANEL_LOOPSTATE_t State;
		if (YWPANEL_FP_GetLoopState(&State))
			res = put_user(State, (int *) arg);
		break;
	}
	case VFDGETVERSION:
	{
		YWPANEL_Version_t panel_version;
		memset(&panel_version, 0, sizeof(YWPANEL_Version_t));
		if (YWPANEL_FP_GetVersion(&panel_version))
			res = put_user (panel_version.DisplayInfo, (int *)arg);
		break;
	}
	case VFDGETBLUEKEY:
	case VFDGETSTBYKEY:
	{
		if (YWPANEL_FP_GetKey(cmd == VFDGETBLUEKEY, aotom_data.u.key.key_nr, &aotom_data.u.key.key))
			res = copy_to_user((void *) arg, &aotom_data, sizeof(aotom_data));
		break;
	}
	case VFDSETBLUEKEY:
	case VFDSETSTBYKEY:
		res = !YWPANEL_FP_SetKey(cmd == VFDSETBLUEKEY, aotom_data.u.key.key_nr, aotom_data.u.key.key);
		break;
	default:
		printk("VFD/AOTOM: unknown IOCTL 0x%x\n", cmd);
	case 0x5305:
	case 0x5401:
		mode = 0;
		break;
	}
Example #3
0
static int AOTOMdev_ioctl(struct inode *Inode, struct file *File, unsigned int cmd, unsigned long arg)
{
	int icon_nr = 0;
	static int mode = 0;
	int res = -EINVAL;
	dprintk(5, "%s > 0x%.8x\n", __func__, cmd);

	if(down_interruptible (&write_sem))
		return -ERESTARTSYS;

	switch(cmd) {
	case VFDSETMODE:
	case VFDSETLED:
	case VFDICONDISPLAYONOFF:
	case VFDSETTIME:
	case VFDBRIGHTNESS:
		if (copy_from_user(&aotom_data, (void *) arg, sizeof(aotom_data)))
			return -EFAULT;
	}

	switch(cmd) {
	case VFDSETMODE:
		mode = aotom_data.u.mode.compat;
		break;
	case VFDSETLED:
#if defined(SPARK) || defined(SPARK7162)
		if (aotom_data.u.led.led_nr > -1 && aotom_data.u.led.led_nr < LED_MAX) {
			switch (aotom_data.u.led.on) {
			case LOG_OFF:
			case LOG_ON:
				res = YWPANEL_VFD_SetLed(aotom_data.u.led.led_nr, aotom_data.u.led.on);
				led_state[aotom_data.u.led.led_nr].state = aotom_data.u.led.on;
				break;
			default: // toggle (for aotom_data.u.led.on * 10) ms
				flashLED(aotom_data.u.led.led_nr, aotom_data.u.led.on * 10);
			}
		}
#endif
		break;
	case VFDBRIGHTNESS:
		if (aotom_data.u.brightness.level < 0)
			aotom_data.u.brightness.level = 0;
		else if (aotom_data.u.brightness.level > 7)
			aotom_data.u.brightness.level = 7;
		res = YWPANEL_VFD_SetBrightness(aotom_data.u.brightness.level);
		break;
	case VFDICONDISPLAYONOFF:
	{
#if defined(SPARK)
		switch (aotom_data.u.icon.icon_nr) {
		case 0:
			res = YWPANEL_VFD_SetLed(LED_RED, aotom_data.u.icon.on);
			led_state[LED_RED].state = aotom_data.u.icon.on;
			break;
		case 35:
			res = YWPANEL_VFD_SetLed(LED_GREEN, aotom_data.u.icon.on);
			led_state[LED_GREEN].state = aotom_data.u.icon.on;
			break;
		default:
			break;
		}
#endif
#if defined(SPARK7162)
		icon_nr = aotom_data.u.icon.icon_nr;
		//e2 icons workarround
		//printk("icon_nr = %d\n", icon_nr);
		if (icon_nr >= 256) {
			icon_nr = icon_nr / 256;
			switch (icon_nr) {
			case 0x11:
				icon_nr = 0x0E; //widescreen
				break;
			case 0x13:
				icon_nr = 0x0B; //CA
				break;
			case 0x15:
				icon_nr = 0x19; //mp3
				break;
			case 0x17:
				icon_nr = 0x1A; //ac3
				break;
			case 0x1A:
				icon_nr = 0x03; //play
				break;
			case 0x1e:
				icon_nr = 0x07; //record
				break;
			case 38:
				break; //cd part1
			case 39:
				break; //cd part2
			case 40:
				break; //cd part3
			case 41:
				break; //cd part4
			default:
				icon_nr = 0; //no additional symbols at the moment
				break;
			}
		}
		if (aotom_data.u.icon.on != 0)
			aotom_data.u.icon.on = 1;
		if (icon_nr > 0 && icon_nr <= 45 )
			res = aotomSetIcon(icon_nr, aotom_data.u.icon.on);
		if (icon_nr == 46){
			switch (aotom_data.u.icon.on){
			case 1:
				VFD_set_all_icons();
				res = 0;
				break;
			case 0:
				VFD_clear_all_icons();
				res = 0;
				break;
			default:
				break;
			}
		}
#endif
		mode = 0;
		break;
	}

	case VFDSTANDBY:
	{
#if defined(SPARK) || defined(SPARK7162)
		u32 uTime = 0;
		get_user(uTime, (int *) arg);

		YWPANEL_FP_SetPowerOnTime(uTime);

		clear_display();
		YWPANEL_FP_ControlTimer(true);
		YWPANEL_FP_SetCpuStatus(YWPANEL_CPUSTATE_STANDBY);
		res = 0;
#endif
		break;
	}
	case VFDSETTIME2:
	{
		u32 uTime = 0;
		res = get_user(uTime, (int *)arg);
		if (! res)
		{
			res = YWPANEL_FP_SetTime(uTime);
			YWPANEL_FP_ControlTimer(true);
		}
		break;
	}
	case VFDSETTIME:
		res = aotomSetTime(aotom_data.u.time.time);
		break;
	case VFDGETTIME:
	{
#if defined(SPARK) || defined(SPARK7162)
		u32 uTime = 0;
		uTime = YWPANEL_FP_GetTime();
		//printk("uTime = %d\n", uTime);
		res = put_user(uTime, (int *) arg);
#endif
		break;
	}
	case VFDGETWAKEUPMODE:
		break;
	case VFDDISPLAYCHARS:
		if (mode == 0)
		{
			if (copy_from_user(&vfd_data, (void *) arg, sizeof(vfd_data)))
				return -EFAULT;
			if (vfd_data.length > sizeof(vfd_data.data))
				vfd_data.length = sizeof(vfd_data.data);
			while ((vfd_data.length > 0) && (vfd_data.data[vfd_data.length - 1 ] == '\n'))
				vfd_data.length--;
				res = run_draw_thread(&vfd_data);
		} else
			mode = 0;
		break;
	case VFDDISPLAYWRITEONOFF:
		break;
	case VFDDISPLAYCLR:
		vfd_data.length = 0;
		res = run_draw_thread(&vfd_data);
		break;
#if defined(SPARK)
	case 0x5305:
		res = 0;
		break;
#endif
	case 0x5401:
		res = 0;
		break;
	case VFDGETSTARTUPSTATE:
	{
		YWPANEL_STARTUPSTATE_t State;
		if (YWPANEL_FP_GetStartUpState(&State))
			res = put_user(State, (int *) arg);
		break;
	}
	case VFDGETVERSION:
	{
		YWPANEL_Version_t panel_version;
		memset(&panel_version, 0, sizeof(YWPANEL_Version_t));
		if (YWPANEL_FP_GetVersion(&panel_version))
			res = put_user (panel_version.DisplayInfo, (int *)arg);
		break;
	}

	default:
		printk("VFD/AOTOM: unknown IOCTL 0x%x\n", cmd);
		mode = 0;
		break;
	}

	up(&write_sem);

	dprintk(5, "%s <\n", __func__);
	return res;
}