static ssize_t spi_write(struct file*filp,const char*buf,size_t
count,loff_t*f_ops)
{
unsigned int tmp=0;
get_user(tmp,(char*)buf);/*获取CYWUSB6934中寄存器地址*/
while((readl(SPSTA1) & 0x1)==0);
writel(tmp,SPTDAT1);/*向寄存器中写预置数据*/
while((readl(SPSTA1) & 0x1)==0);
tmp=readl(SPRDAT1);/*再次从读出的数据才是有用数据*/
put_user(tmp,(char*)buf);
return 0;
}
(3)驱动中的ioctl( )函数通过改变I/O输出电平的高低控制CYWUSB6934的PD(Power Down)口。该端口电平为低时可以使无线芯片工作在休眠状态,以达到省电的目的。其代码如下:
3.2 智能点播界面
当手持智能无线多媒体终端接收到由地址码无线发射机发出的地址码时,将其存储在数据寄存器中,主控芯片通过SPI接口读取该地址码信息,并以此为指针搜索对应的、预存在SD存储卡中的音视频文件,并按需调用终端中的音视频播放器解码播放。
软件界面有2个按钮,左边是自动播放按钮,右边是手动播放按钮。在用户启动点播软件时,终端处于自动播放状态,而自动播放按钮是当用户进行手动播放后,如需要再让其进行自动播放时使用此按钮。当用户点下手动播放按钮时,会立即终止自动播放,弹出文件选择菜单,手动选择需要播放的文件。
智能点播软件需要解决的是底层数据和上层应用程序的连接问题。而对地址码的判断是对底层进行操作,需调用C程序,则用户界面程序使用一个自定义的data外部变量,作为上层界面程序与底层应用程序的桥梁。为了使程序能准确地调用播放器,这里还设立了一个消息机制,定时查询CYWUSB6934的数据寄存器。一旦收到数据,就改变消息参数,上层界面程序查询到这个参数改变后,便立即调用播放器。