マーキー コード変更部分 ドライバー
コード変更部分:
/*
功能:点亮第i个LED灯
参数:无符号整型变量iLed,表示第i个LED灯
返回值:无
*/
void AllLedOn(int iLed)
{
//读出端口M数据寄存器(S3C64XX_GPKDAT)值,修改并写回相关端口寄存器
//add your code here
unsigned int tmp;
tmp =readl(S3C64XX_GPMDAT);
tmp &= ~(0X1<<iLed);
printk("iLedOn---S3C64XX_GPMDAT=0X%0x\n",tmp);
writel(tmp,S3C64XX_GPMDAT);
}
/*
功能:熄灭第i个LED灯
参数:无符号整型变量iLed,表示第i个LED灯
返回值:无
*/
void AllLedOff(int iLed)
{
//读出端口M数据寄存器(S3C64XX_GPKDAT)值,修改并写回相关端口寄存器
//add your code here
unsigned int tmp;
tmp =readl(S3C64XX_GPMDAT);
tmp &= ~(0X1<<iLed);
tmp |= (0X1<<iLed);
printk("iLedOff---S3C64XX_GPMDAT=0X%0x\n",tmp);
writel(tmp,S3C64XX_GPMDAT);
}
static long s3c6410_led_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
int iLed;
switch(cmd)
{
case ON:
//开启LED跑马灯
AllLedOn(0x0);
for(iLed=0x1;iLed<6;iLed++){
AllLedOff(iLed-1);
AllLedOn(iLed);
sleep(500);
}
break;
case OFF:
//熄灭LED跑马灯
for(iLed=0x0;iLed<6;iLed++)
AllLedOff(iLed);
break;
}
}
アプリの変更セクション:
void main()
{
int fd,iLed;
fd=open("/dev/leddev" ,O_RDWR);
if(fd<0)
exit(1);
while(1)
{
//点亮LED跑马灯
ioctl(fd, ON);
}
close (fd);
}
または、ioctl および main 関数コードを次の形式 2 に変更します。(ON と OFF のドライバーコードは変更されません)
static long s3c6410_led_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
int iLed;
switch(cmd)
{
case ON:
//开启LED跑马灯
AllLedOn(arg);
case OFF:
AllLedOff(arg);
break;
}
}
フォーム 2 はアプリケーションに対応します。
void main()
{
int fd,iLed;
fd=open("/dev/leddev" ,O_RDWR);
if(fd<0)
exit(1);
while(1)
{
//点亮LED跑马灯
ioctl(fd,ON,0);
for(int i=0;i<6;i++)
{
ioctl(fd,ON,i);
ioctl(fd,OFF,i);
sleep(5);
}
}
close (fd);
}