/*
 * 此测试程序用于控制pwm设备，对pwm的控制是通过配置占空比实现的，设置好所需要的高电平和低电平的所占的脉冲数目即可
 */
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <asm/ioctl.h>

#define CMD_PWM0_ON	_IO('c',0x01)
#define CMD_PWM1_ON 	_IO('c',0x02)
#define CMD_PWM2_ON	_IO('c',0x03)
#define CMD_PWM3_ON 	_IO('c',0x04)

int main(void) {
	int fd,i;
	unsigned int sel = 0;
//data[0]的值代表的是高电平脉冲所占的时钟数，data[1]的值代表的是低电平脉冲所占的时钟数
	unsigned int data[2] = {0x5f,0xa0};
	printf("cys: ready to open!\n");
	fd = open("/dev/ls1f-pwm",O_RDWR);
	if (fd != -1) {
	  printf("open ok!\n");
	  for(;;) {
		printf("Input the selected pwm number: ");
//共有四路pwm(pwm0...pwm3)，四路pwm可同时工作，也可选择使用其中任何一路
		scanf("%d", &sel);
		if (sel <0 || sel > 3)
		  break;
		switch(sel) {
		  case 0:
//在驱动中没有用到ioctl的第三个参数，故直接赋予0就可以啦
		    ioctl(fd, CMD_PWM0_ON, 0);
		    write(fd, data, sizeof(data) );
		    break;
		  case 1:
                    ioctl(fd, CMD_PWM1_ON, 0);
		    write(fd, data, sizeof(data) );
                    break;
		  case 2:
                    ioctl(fd, CMD_PWM2_ON, 0);
		    write(fd, data, sizeof(data) );
                    break;
		  case 3:
                    ioctl(fd, CMD_PWM3_ON, 0);
		    write(fd, data, sizeof(data) );
                    break;
		  default:
		    break;	  
		}
	  }
	} else {
		printf("Device open failure\n");
	}
	
	close(fd);
	return 0;
}
