书城都市那些年一起疯狂过的程序员
30129400000059

第59章 长风破浪会有时,直挂云帆济沧海

SH团队的不合作态度让客户的投诉逐渐增多,即使是客户反映得很迫切的问题,要他们加班去解决也是很难的。

商总决定,要逐步逼他们交出SDK的核心代码。

这种操作必须循序渐进,不能让对方有所察觉。

比如说客户反映U盘读取的兼容性有问题,我们就要求SH负责这一块的王工开放USB部分驱动代码给我们。

“你们要看USB驱动干什么,这样,elber,你先把USBdisk部分的SDK看完吧。”

SDK没有什么内容,大部分都是封装在他们的库函数里,我很快就看完了,回复邮件道

“王工,Usbdisk的sdk部分我已经看完了,我看了我接下来的任务是改善读写性能,接下来是否看驱动?驱动代码我没有呀?暂时我只能先下bushound抓抓usb数据看看。”

王工很快就回复道

“这两天你先学习学习USB协议文档,搞清楚USB设备工作的基本流程,其次,再仔细研究一下我们SOC所采用的USBCtl的spec。完了,出一个简单的文档描述一下我们USBCtl是如何工作的。”

这种要求不能算不合理,但是提出来的话即使觉得浪费时间,我也只能照做,很快整理了一篇学习文档发了过去。

“数据整理得不错,但USBCtl一块,太粗。

这样,你自己按照自己的理解,写一个基本的device框架出来,独立的project,

只要做到很简单的一点:

在PC上能识别出来你的device设备,你的prject能够正常应答PC发出的request!

工作在中断模式下。”

还是不提开放驱动给我们的事情,我们就在这样的往复中增加着无谓的内耗,客户那边的问题一点也没解决。

我从外包公司出来,一直都是做黑盒子,客户给到你的代码基本都不是核心的部分,不过现在大家都是一家公司,没见过一个公司的人这么搞的。

他们不肯开放代码的原因,我分析,倒不是怕我们掌握了之后可以撇开他们,以SH团队骄横傲慢的态度,估计也不会认为我们有吃下核心代码的野心和实力了。

自负如秦始皇,也没有想到自己一手搭建的帝国,会毁在当年看到他出巡时不可一世的场面时,说出“彼可取而代之也”的平民项羽手里,如果当时亲耳听到,也不过付之一笑吧。

他们所享受的,只是高高在上把我们耍的团团转的感觉,当然,把核心的代码掌握在手里,使得公司离不开他们,也是目的之一。

我们遇到问题请教时,经常碰到的回复是

“这种问题都没搞清楚,怎么通过面试的啊?”

“你做这行几年了?”

“有问题先自己想想啊,这么简单的问题都来问我。”

我们被骂得狗血淋头,也只能骂不还口,真有点勾践卧薪尝胆的味道。

让我们气愤的是,资深如商总,他们有时候也敢用教训的语气说话,实在太不像话。

我们都见识过商总百科全书般的实力,只是商总天生的绿色性格,为人低调。

最近公司的事情逐步走向正轨,SH团队的代码逐步被我们蚕食。

是的,我用了蚕食这两个字。

但是对于蓝牙协议这一块,王工迟迟压着不肯放手。

客户那边屡次投诉我们的蓝牙兼容性问题,商总急的连连催促王工,无奈对方却总是不紧不慢。

于是商总提出要搞免提协议,也就是在之前的蓝牙协议可以放音乐的基础上,支持客户打电话。

王工在电话里哇哇大叫,不可能的,芯片空间就这么大,怎么可能再放免提协议。

“为什么放不下?可以overlay啊。”

“这个你不懂,反正实现不了就是了。”

商总苦口婆心道“这样,小王,你说一下大概结构,我们商量一下有没有办法嘛。”

“这个跟你说不清楚。”

“压缩一下总可以的,要不代码给我们,我们来试试。”商总适时地将了他一军。

无奈,王工来了个缓兵之计:“要不,让elber先研究一下蓝牙协议栈,回头再开会讨论吧。”

我只得拿着厚厚的蓝牙协议啃了起来,有之前搞红外协议的基础,看蓝牙协议并不难,只不过没有具体操作,很多东西还很模糊。

我把心得记下来,用邮件发给王工。

一个礼拜后,王工电话打了过来,像面试一样问我。

——你知道立体声是什么链路吗

——sco

——sco链路是什么特点

——sco和acl分别是同步和异步链路,其他不清楚了

——要实现Handsfree的profile,还需要什么层的协议

——rfcomm

王工见难不倒我,又问我具体免提协议实现的方法。

——我想还是用开源协议栈做裁剪,网上我找到了一些开源的蓝牙协议栈,我分别调查了一下

——你的理解还比较肤浅,想移植开源的协议栈过来根本不可能的,空间不够的,得重头写。

我没有回答,看着商总。

商总把话题接过来道:“这样,王工,你把代码发过来,可以让elber试试,行不行再说,好吧。”

王工这才把他的代码发了过来。

我和商总看了他写的代码,差点吐血,没有注释不说,有一个函数居然写了五百多行,而且其中的变量名毫无可读性,类似“temp”这种变量,除了自己别人恐怕很难看懂,这在程序员中间是大忌。

好在商总经验丰富,很多地方连猜带蒙,猜出个大概。

就在这样的条件下,我们开始了蓝牙免提协议的移植,一开始的过程是痛苦的。

我们手头没有没有sniffer抓包工具,没有PTS协议测试设备,没有专门的测试人员,没有完整的测试用例,只能用身边的手机去一台台测兼容性,当然和大公司的方法没有可比性,属于游击队打法,但是在资源有限的情况下,只能从权,事实上,没有sniffer,还是有丰富的手段去debug,比如用bushound去抓串口数据,比如用android的蓝牙调试工具hcidump分析协议等等。

毛主席教导我们自己动手丰衣足食,小米加步枪可以战胜坦克飞机。

王工还没有走出校园里那种单打独斗的局面,结果代码架构上和兼容性上遇到了很多问题,最后剪不断理还乱。

他所说的空间不够,其实还是架构的问题,商总很快就解决了这个问题,我则把工作重心放在蓝牙协议本身,通过文档和开源协议栈很快拼凑出一套可以用的代码来。

所谓文无第一,武无第二,技术领域更是如此。

我们工程师一辈子要学的技术是很多的,这是一个活到老学到老的行业,好的大学可以决定你有一个好的起点,然而真正的实力都是在工作中慢慢沉淀下来的。

三国演义中的诸葛亮,之所以不真实,鲁迅说“诸葛多智近乎妖”,是因为忽略了一个基本的事实,诸葛亮不可能一出山就那么牛,历史上的诸葛亮出来后的官衔是军师中郎将,并不是多高的一个职位,相当于我们大学毕业后在企业中担任一个中层干部,在多年的工作中成长后,直到白帝城托孤后的丞相生涯,才到达一个事业巅峰。

大学毕业的人,智商都在100以上,谁也不比谁笨多少,如果别人一周工作5*8小时,你问问自己能否7*16?

如果做不到,是否要在效率上做点文章,利用好上班的八个小时的时间?

华为的同学上厕所都是用跑的,这就是讲究效率的工作状态。

我想,即使才华如诸葛亮,也是需要持续不断的努力的,机会,只眷顾有准备的人。

看到我们做出来的协议成功运作,王工一脸不可置信的表情。

我笑笑,其实他怎么看我们,不重要。

重要的是,接下来的工作,应该会好开展一些了。

都是程序员,程序员何苦为难程序员。