Example #1
0
void draw_thread(void *arg)
{
  struct vfd_ioctl_data *data;
  struct vfd_ioctl_data draw_data;
  unsigned char buf[17];
  int count = 0;
  int pos = 0;


  data = (struct vfd_ioctl_data *)arg;

  draw_data.length = data->length;
  memset(draw_data.data, 0, sizeof(draw_data.data));
  memcpy(draw_data.data,data->data,data->length);

  thread_stop = 0;

  count = utf8_len(&draw_data.data[0], draw_data.length);

  if(count > mode_digit)
  {
    while(pos < draw_data.length)
    {
       if(kthread_should_stop())
       {
    	   thread_stop = 1;
    	   return;
       }

       clear_display();
       memset(buf,0, sizeof(buf));
       int countb = utf8_count(&draw_data.data[pos], draw_data.length - pos, 8);
       memcpy(buf, &draw_data.data[pos], countb);
       YWPANEL_VFD_ShowString(buf);
       msleep(200);
       if (draw_data.data[pos] > 128)
       {
           pos += 2;
       } else {
           pos += 1;
       }
    }
  }

  if(count > 0)
  {
      clear_display();
      memset(buf,0, sizeof(buf));
      int countb = utf8_count(&draw_data.data[0], draw_data.length, 8);
      memcpy(buf, draw_data.data, countb);
      YWPANEL_VFD_ShowString(buf);
  }
  else VFD_clr();

  thread_stop = 1;
}
Example #2
0
static int __init aotom_init_module(void)
{
	int i;
	
	dprintk(5, "%s >\n", __func__);

	printk("Fulan front panel driver\n");

//	sema_init(&display_sem,1);
	sema_init(&button_sem, 1);
	if(YWPANEL_VFD_Init(&mode_digit)) {
		printk("unable to init module\n");
		return -1;
	}

	VFD_clr();
	if(button_dev_init() != 0)
		return -1;

	if (register_chrdev(VFD_MAJOR,"VFD",&vfd_fops))
		printk("unable to get major %d for VFD\n",VFD_MAJOR);

	sema_init(&write_sem, 1);
//	sema_init(&key_mutex, 1);

	for (i = 0; i < LASTMINOR; i++)
	    sema_init(&FrontPanelOpen[i].sem, 1);

	own_proc_dir = create_proc_entry(NAME_DIR, S_IFDIR | S_IRWXUGO, NULL);
	if (own_proc_dir == NULL ) {
	    printk(KERN_ERR "can't create /proc/%s\n", NAME_DIR);
	    return -ENOMEM;
	}
	dprintk(5, "Create /proc/%s\n", NAME_DIR);
	own_proc_dir->gid =0 ;
	
	own_proc_node=create_proc_entry(NAME_NODE, S_IFREG | S_IRUGO | S_IWUGO, own_proc_dir);
	if (own_proc_node == NULL ) {
	    printk(KERN_ERR "can't create /proc/%s/%s\n", NAME_DIR, NAME_NODE);
	    return -ENOMEM;
	}
	dprintk(5, "Create /proc/%s/%s\n", NAME_DIR, NAME_NODE);
	own_proc_node->uid = 0;
	own_proc_node->gid =0 ;
	
	own_proc_node->read_proc=proc_node_read;
	
	dprintk(5, "%s <\n", __func__);
	return 0;
}
Example #3
0
static int __init aotom_init_module(void)
{
	int i;

	dprintk(5, "%s >\n", __func__);

	printk("Fulan front panel driver\n");

	if(YWPANEL_VFD_Init()) {
		printk("unable to init module\n");
		return -1;
	}

	VFD_clr();

	if(button_dev_init() != 0)
		return -1;

	if (register_chrdev(VFD_MAJOR,"VFD",&vfd_fops))
		printk("unable to get major %d for VFD\n",VFD_MAJOR);
	
	if (pm_power_off)
		printk("pm_power_off hook already applied! Do not register anything\n");
	else
		pm_power_off = 	aotom_standby;
	
	sema_init(&write_sem, 1);
	sema_init(&receive_sem, 1);
	sema_init(&draw_thread_sem, 1);

	for (i = 0; i < LASTMINOR; i++) {
		FrontPanelOpen[i].open_count = 0;
		FrontPanelOpen[i].minor = i;
	}

	for (i = 0; i < LASTLED; i++) {
		led_state[i].state = LOG_OFF;
		led_state[i].period = 0;
		led_state[i].stop = 1;
		sema_init(&led_state[i].led_sem, 0);
		led_state[i].led_task = kthread_run(led_thread, (void *) i, "led_thread");
	}


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

	return 0;
}