OopsWare さんのプロフィールOopsWare's Blogブログリスト ツール ヘルプ
8月23日

回来看看

单位搬家后,换成了铁通宽带,不是一般的差,想用别的也没有。能打开blog也真的不容易了。
GooglePages又无法访问,恐怕以后再也用不成了,虽然有洋葱(Tor),但也不是个办法。SLODT给了块空间,还有数据库,不过全是空的,页面还的自己写。刚忙完一个PHP的项目,提到做网站就头痛。
休息、休息一下~
6月6日

GOOGLE 怎么了?

习惯了使用Google ToolBar,高效的搜索引擎,便捷的词组搜索按钮,已经成为我IE浏览器上不可缺少的功能,但这几天却怎么都打不开主页了。虽然国内域名可以用,但Toolbar的设置里唯独就没有google.cn 可选。郁闷了,卸载掉先。网上搜下原因,歪理一片,刨处那些敏感话题不考虑,仅说安全问题,呵呵,谁感说哪个三方的IE插件完全不存在类似问题呢?每个软件在安装前都有许可协议让你读,并经过你同样才装的。仅这点就比那些上上网就强制你装的XXX工具栏强的多,更有甚者,装上还就删不掉了。唉~无语~~~
5月30日

带 EQ 的 MP3Player v0.22 已经发布

在 MOTO 公布他的 EZX-SDK 之前,我想这应该是最终版本了吧。近两个月的时间,总算把这款播放器做的比较完善了。庆祝一下。
4月2日

给madplay加上了32段均衡器

libmad本身没有equalizer单元,但是提供了filter接口,留给开发者添加自己的filter,结合mpg123的做法,做了个32段均衡器加到madplay上了。听着效果还不错。哈哈。
在我的网上U盘的留言中,电童朋友说XMMS没有EQ,我开始还比较奇怪,细读XMMS的源码才发现,XMMS的EQ被注释掉了。 因为这个EQ是针对mpg123插件自己的,算法在frame decoding和samples synthesis之间处理,这种方式对其他解码器无效。也许XMMS打算通过DSP插件形式对所有格式音乐进行调音控制,而注释掉了这部分代码吧。
 
4月1日

MPEG Audio Decode(MAD) 编译通过

成功编译了libmad及madplay程序,到小i上一试,酷!128KBPS播放流畅,200K以上的偶尔会听到一点杂音(Green Day的那首Boulevard of Broken Dreams,http://mp3.baidu.com 上能搜到,7M多的那个,动态码率,平均219KBPS,4分20秒音乐,在小i下全速解码只需要35秒)。
 
# busybox time ./madplay -o /dev/null bbd.mp3
9984 frams decoded (0:04:20.8), +1.3 dB peak amplitud, 0 clipped sample
real  0m  35.51s
user 0m  33.14s
sys   0m  0.41s
 
就用这个解码库了,接下来就是研究怎么把mpg123的EQ加上来。
 
晕啊,过节了。编译出的命令行版madplay放 网络U盘 上了,不怕被骗的去试试吧。怕被骗就等明天咯 ^^
3月29日

MAD vs MPG123

试验了mpg123的解码方式,总不能在 PXA 271 CPU 上实时解压 128KBPS 44KHz 的 MP3。mpg123还是依赖浮点运算进行解码的,这也难为Intel xScale了,后来去找 iwMMXt 优化代码,在 Intel 主页找到一套 IPPs开发包,有 linux 版本,其中包含 MP3 解码库,可惜不是开源的。有网友提议参考 MPlayer,是啊,解DivX都可以,何况解MP3呢,结果找了一看,还是失望了。MPlayer的MP3库还是mpg123,晕啊~。其中有一些iwMMXt的优化单元,不过是处理图像写屏的,还是用不上。看IPPs文档时发现,MP3解码有两种方式,一种是基于浮点运算的,还有一种是基于整数的,于是网上狂搜一气,哈哈,终于被我找到了。 libmad (MPEG audio decoder library) ,先去试试这个解码器怎么样吧...
 
昨天看MFC上的新闻,发现 Nero 也出了款手机上的播放器 Nero ShowTime Mobile Beta2,连接到官网看了一下,好像是用在PPC上的。不过MFC上那张小i里用ShowTime放《超人总动员》的截图还是让我很吃惊的,不知道是不是有人恶搞PS出来虎人,还是却又这么个版本。
 
播放器的前台基本有个样子了,用的 EZX 开发包,支持皮肤,临时从 Nucleo 的 NUCLEO N-Log v2G BioSkin for WinAMP 基础上修改出一个做测试。至于解码单元,等确定 MAD 的解压性能再加上去吧。播放器前台程序会随时更新,有兴趣的可以到我的网络U盘上找找。
3月27日

通过蓝牙适配器连接E680i和PC

不管是Model模式还是大容量存储模式,E680i接上数据线就会冲电,虽然不清楚对电池有多大伤害,心里总是不舒服的。现在的蓝牙适配器也便宜了,通过蓝牙连接,省去了数据线何乐而不为呢?!下面就写写如何连接,我也是买了蓝牙适配器后刚摸索出来的,算是个傻瓜教程,等我用熟了后也许就懒的写了^^
首先在PC上装蓝牙适配器和驱动。我用的是CCK USB蓝牙适配器(¥50),驱动是IVT的BlueSoleil 1.6。装完驱动后,PC上会启N多的服务,基本都用不到,统统停掉就可以。手机上只需要一个串行端口服务。接下来启动手机上的蓝牙,搜索蓝牙设备(如果搜不到就重新插拔一下蓝牙适配器)。搜到计算机后,进行绑定,在手机上随便输入一个口令,确定后,PC上会弹出对话框,输入相同的口令后,绑定成功。这时PC上的IVT管理程序会显示出手机的图标,点图标邮件,刷新服务,会显示出手机提供的蓝牙服务,E680i只有两个,一个是串行端口服务,一个是对象交换服务。对象交换服务可以在PC和手机之间传文件,但是用起来不是很方便,比如要从手机上发文件给PC就要在我的收藏中找到文件,按住弹出菜单后选择“共享->蓝牙”。串行端口服务后面再说,正常情况下,最多的还是用Modem拨号上网,运行手机上的调制解调器,选择蓝牙,点击“被找”按钮,在PC的IVT控制台里的蓝牙拨号网络服务按钮变成可用,点击连接,手机上会有确认对话框,PC上显示 DUN 拨号,拨入号码为“*99***1#”,点击连接,PC就可以通过蓝牙进行GPRS拨号上网了。
串行端口服务是让手机与PC之间建立一个PPP的连接,想让手机与PC建立网上邻居访问和Telnet就需要通过这个服务。MFC上有些帖子是解释利用LeoPPP实现的(ccmove里也有),但是步骤非常繁琐,我仔细看过他的脚本,其实他的工具包里最复杂的东西还是那个显示对话框的Java程序,也许是LeoPPP的作者还没有EZX的开发包,没能写一个EZX的对话框应用程序(现在有了,想用的话可以去MFC找找),而是利用J2ME来做了,绕了好大的弯,让KVM去加载.jar程序来显示对话框。说实在的,真的没什么必要,只要手机上有Loader,并能运行.lin脚本就可以了,对话框显示不显示的都无所谓。
服务启动脚本: btppp_start.lin
 
#!/bin/bash
devname=`cat /tmp/bt_spp_devname`
for i in 1 2
do
if [ -c $devname ]
then
if [ ! -d /etc/ppp/peers ]
then
mkdir /etc/ppp/peers
fi
echo "$devname 115200 192.168.1.2:192.168.1.4  noauth crtscts local connect 'sleep 1; echo -n CLIENTSERVER' logfile /tmp/ppp.log" > /etc/ppp/peers/myhost
start-stop-daemon --start -m -p /var/run/btppp.pid -x /usr/bin/pppd -- call myhost
start-stop-daemon --start -c root -x /usr/sbin/inetd
start-stop-daemon --start -c root -x /usr/sbin/smbd
#/mmc/mmca1/Programs/led 2
#/mmc/mmca1/Programs/led 0
break
fi
#/diska/.system/QTDownLoad/leomsg/leomsg.sh "Connect Bluetooth Serial and press OK to continue..."
sleep 1
done
#/diska/.system/QTDownLoad/leomsg/leomsg.sh "PPP over BlueTooth started!"
exit
 
服务停止脚本: ppp_stop.lin
 
#!/bin/bash
start-stop-daemon --start -x /bin/kill -- `pidof pppd inetd smbd`
#/diska/.system/QTDownLoad/leomsg/leomsg.sh "PPP services stopped."
 
编辑这两个脚本文件放到手机上,里面注释掉的东西都是显示提示信息对话框的,当然想做的完善点可以根据需要再去掉注释,把相应的东西加上去。不建议再用那个 leomsg ,实在是太繁琐了,省事的话可以考虑用那个led程序(MFC上有,带源程序,可以让手机上的来电指示灯闪一下做个提示)。启动脚本主要是去检查当前的蓝牙串口连接,然后把IP地址绑上去,并启动Telnet服务(inetd)和网上邻居服务(smbd)。
有这两个脚本文件后。按照前面的步骤绑定蓝牙连接。刷新蓝牙服务,点击串行端口服务,并连接,手机上确认连接后,IVT控制台会显示COM?已连接的提示,记住这个串口号。手机上点击运行btppp_start.lin。在PC上网上邻居里,创建新的连接->设置该机连接->直接连接到其他计算机->来宾->“随便输入一个计算机名”->“选择设备为刚记录下来的串口号”->完成,修改属性中波特率为115200,尝试连接(用户名和口令为空),成功。此时,手机IP地址为192.168.1.2,PC地址为192.168.1.4。试试Telnet和网上邻居吧,你已经摆脱数据线的束缚了。这个是针对XP环境的方法,2000的连接方法我没试,可以参考LeoPPP里的README。
 
最后说说手机共享PC上网,E680可能用route add的方法就可以实现的,但是E680i对连接做了绑定,KVM和EZX程序必须走gprs连接才能上网,MFC上有帖子提供了一个mack的gprs fack方式让手机共享PC宽带上网的办法,相对比较复杂,而且需要下载一下工具,我这没空间,需要的可以自己去MFC上找,CCMOVE上也有几个贴在讲的很详细。通过这个工具,不单是上网,你的手机可以还可以访问PC上的资源,比如看PC上的电影,这对家里只有一台电脑,两个人争着用的情况是个不错的解决方案。当然了,这需要PC上启动NFS服务,然后把网络共享 mount 到手机的文件系统上去,我还没试出来。最好的思路是能把 smbmount 编译一个手机版本,直接把windows的共享 mount 到手机上,这样mack的fack也不用了,PC上也不必在启什么NFS服务咯。
 
蓝牙PPP拨通后,内网通过网关上网的朋友会发现PC不能上网了,解决办法很简单,打开刚创建的那个直接连接的属性,到“网络”页,双击TCP/IP协议,点击“高级”按钮,常规页上去掉“在远程网络上使用默认网关”选项,确定就可以了。
 
蓝牙的应用还是蛮广的,慢慢发掘...说不定哪天把蓝牙局域网服务写成EZX程序,就像使用手机上那个调制解调器一样简单。
 
 
 
3月25日

Bluetooth USB Dongle

今天买了USB蓝牙适配器,装电脑上,摆摊了手机跟PC的连线,一个字 “爽”~
3月21日

有点失望...

手机上测试了一下mpg123的解压速度,结果让人失望。用time命令(可以利用busybox中的time)测试mpg123播放一个44.1KHz立体声MP3 (4:20) 结果是 5 分 14 秒,降到22KHz时为 3 分 14 秒,这个结果实在是不能忍受,难道只能听 22KHz 的 MP3 了?!
解码单元还是必须优化的。利用 iwmmxt 指令?汇编语言上学时就没学好,唉,郁闷了……先放下,着手做前台界面去吧。
3月20日

E680 上的 Boomer(tm) 芯片

直接用编译过的 mpg123 在手机命令行下播放 MP3 时,音质很一般,根本没法跟预装的 RealPlayer 相比的,即时使用 eq 提升低音,也相差甚远。开始我怀疑是否 RealPlayer 自己做了低音提升,但是听收音机时,那些立体声的音乐节目低音也不错。看来并非软件做的(个人感觉软件均衡器不可能有这么好的效果),于是去查内核源码。在 e680-linux/devices/sound 目录下有个 ezx-e680.h 的头文件,里面定义了一组比较奇怪的函数 “boomer” ,去网上查了些相关资料,应该是一块 LM4857 芯片(3D功能的立体声音频子系统,电板上芯片有屏蔽罩,尚未确定)。看 ezx-a780.h 中就没有这些内容(有这两款手机的朋友可以帮忙比较一下)。E680上可以用这个头文件里定义的值去设置 /dev/mixer 来调音量,具体怎么设置 boomer 暂时还没试验出来。不过,可以先用 RealPlayer 放一段音乐,关闭后,在用命令行运行 mpg123 来放 mp3 ,效果明细提高(低音提升单元打开了?),哈哈....
 
虽然低音上去了,但高音有些衰减,中音也浑浊了。还不知道这个设备能不能控制...
 
编译好的 mpg123 在我的 网络U盘 上,有兴趣的朋友可以去下载一个试试
3月18日

MPG123 在交叉编译器下编译通过了

修改了一下 mpg123 的音频输出代码 audio_oss.c ,主要是能让E680i出能出声音。然后修改了一下Makefile(仿照 linux-m68k 复制出一个 linux-xscale 来,稍做修改),编译出 mpg123 复制上手机。哈哈运行咯,直接放 128kbs 44.1KHz 的 MP3 还是很卡,用"-2"参数强制降到22KHz,声音就连续了。mpg123自己带一个“equalize.dat”文件,是一个 32段立体声均衡设置文件。命令行可以把这这个文件挂上就有32段软均衡器咯。
虽然还不理想,但还是看到希望了!本想发到 ccmove 上去的,不知道今天怎么上传文件会出错。
现在的解码还是没有优化的,下一步就是尝试另外几个优化解码单元了。
3月15日

终于能播放声音了

    看了不少linux下直接写dsp设备播放声音的代码,其实在简单不过了,就是 open("/dev/dsp", O_WRONLY); 然后用 ioctl(); 设置一下设备的 Format、Channels 和 Rate ,然后就可以用 write(); 向设备上写音频数据就可以了。但是这代码在 E680i 上虽然不报错误,可就是不出声音。折腾了几天,最后发现 E680 的 Kernel Source 里,e680-linux/drivers/sound 目录下有些与 ezx 相关的 .h 头文件。另外参考了一下 MFC 上 audanalyzer 的代码,原来需要先打开 /dev/mixer 设备,用 ioctl(fd, SOUND_MIXER_WRITE_OUTSRC, &location); 设置一下输出设备的(不这样就不出声音,即使用SOUND_MIXER_READ_OUTSRC取出的值就是当前设备也不行)。
    终于可以播放 .wav 了,我的带 EQ 的 MP3 播放器迈出了第一步,哈哈。
3月13日

EZX 中捕获键盘消息

E680i上的Qt程序是在 Qt/Embedded 2.3.6 基础上扩展出来的,http://lsb.blogdns.net/ezx-devkit 上提供了一套 SDK 可以用来开发主持手机主题的软件。这几天一直在研究他带的 helloworld 程序,却发现虽然可以继承 keyPressEvent(),获得键盘消息,但是, accept() 这个消息后,事件仍然被桌面取得。比如,按下收音机按钮后,还是要启动收音机的。这在写游戏时会很麻烦的。今天尝试继承 qwsEvent() 成功了,可以捕获所有按键(包括摘机和挂机键)。代码如下:
bool MainWidget::qwsEvent(QWSEvent* e)
{
 if( e->type == QWSEvent::Key){
  
  lp->setNum( ((QWSKeyEvent*)e)->simpleData.keycode);
  
  return TRUE;
 } else
  return ZMainWidget::qwsEvent(e);
}

无线村协议

摩托、诺基亚和索爱联合推出了在手机上的即时通讯协议 - 无线村 (Wireless Village)。E680上也预装了基于这种协议的 IM 软件。这是通过HTTP协议传输XML数据的即时消息,从网上搜了些相关资料,有了大体的了解。但是国内一直没发现有提供 WV 服务的服务提供商,这个软件也就形同虚设了。也许是 MSN和QQ占据着国内IM最大的市场,WV没那么容易插足。但我有个想法,就是在自己的计算机上启动这样一个服务器端,让手机来连接,而服务端做代理去连接MSN和QQ。可能将来会有不错的市场吧,呵呵。只可惜手机上网(cmnet)的费用还是太高了,现在来做似乎不怎么现实。反不如直接做能够设置代理服务器的即时消息软件,从 cmwap 上透过代理上互联网(毕竟可以cmwap包月的)。

思维混乱,不知道从哪儿开始……

搭好了cygwin下的交叉编译环境后,就想着配合 EZX 的 SDK 做个手机上像样的应用程序,想法很多,实现起来却发现困难重重。
首先就是带 EQ 的 MP3 播放器,每个拥有E680(i)的朋友无不因为手机上的ReaPlayer没有调音台而遗憾吧。我很快就想到了 linux 下的 XMMS 播放器,找来源码看看,唉,MP3解码部分用的是mpg123的核心,解码单元除了 i586、MMX就是 3dnow。全是汇编代码,难道要用软解压?难道要字节写针对 xScale 的 无线 MMX 重写这部分,目前的水平还不够哦,先暂时放放吧。
做个热键抓屏的小应用应该不是问题吧,起一个新EZX项目,获取手机的键盘消息。晕,怎么基本的按键都屏蔽不掉啊(按下GAME_B键,就自动运行收音机了),更别说接管拍照按键了。忽然想起 ccmove 里的版主雨田的模拟器,这些按键都是可用的,跟他联系上,汗了,他用的 SDL(难怪他没给模拟器做前端) ....
找 SDL 资料的时候又找到了 DOS BOX 的源程序,呵呵,这东西如果移植到手机上,我那仙剑移植计划就不用做了,DOS版本的仙剑岂不是可以直接在手机上玩咯。
A1200推出后,很快有朋友贴出了A1200上的MSN软件,但在E680上运行不起来,用命令行加载,提示找不到qte和ezx的一些运行库,把手机里有的复制过来改名,还是少 messenger的一个 sdk 库,唉,这个也计划泡汤了。看了moto的linux在不断升级完善,难怪他一直不公开sdk,我想这也算一个原因吧。
......
思维混乱,还是先从基础知识入手,循序渐进吧...
3月9日

Moto E680i 手机 PDA 功能的核心电板

MOTO E680i 电板 PDA 功能部分, Intel xScale PXA271 芯片。312MHz 支持 MMX 的处理器应该能跑很强的软件的。
 
Intel® PXA271 processor: 312/416 MHz applications processor stacked with a 256Mb Intel StrataFlash® Wireless Memory and a 256 Mb Low Power SDRAM — 32 bit processor with 16 bit internal and 32 bit external memory bus
 
手机的 boot, root, language, setup, diska 都是存在这里面的,我想应该有什么办法修改一下这里的文件系统划分,比如 divvy 。当然了,能把 language 和 setup 的文件系统从 cramfs 改成 ext3 ,自己 DIY 手机就更方便咯。

庆祝在 MSN 的 BLOG 开通

最近 QQ 总不正常,才回来用继续使用 MSN Messenger。整理了一下这的空间,以后就用这个了,呵呵,自己庆祝一下!