代码框架优化

来源:互联网 发布:网络液晶广告屏厂家 编辑:程序博客网 时间:2024/05/29 09:01

     先前在客户即将量产的时候,碰到一个MTP的bug,最终发现是系统在发送opensession的请求太快,使用的是usb hardware 的NAK retry 方式,也就是当USB controller接收到NAK 时,usb controller 会等待一段时间,再次发送请求,对于full  speed 就是发送一个OUT packet,然后就是DATA 部分,如果发送得太频繁,会使得手机端比较繁忙,从而无法快速的回复opensession的请求,针对这样的问题,采取的措施就是使用software nak retry的方式,但是在修改代码的时候,出现了问题。

     USB driver 在写code的时候,并没有专门提供sw nak retry 和 hw nak retry 的API来让上层AP来调用,必须在usb driver层来修改,但是这样子却带来了致命的影响,不仅仅MTP协议会走usb,还有mass storage,还有IPOD设备都会使用usb 的driver部分,这样子一旦修改底层部分,将会给MASS STORAGE, MTP,PTP, IPOD (HID/AUDIO) 都会出现影响,从而给产品带来不可估计的bug。

   那么针对这样的问题,如何解决,从而可以避免单个协议的bug修改,也不会影响其它的部分呢,这样子,系统才有可能越来越稳定。

  在修改的时候,有两个比较好的选择,提供专门的API 给AP调用,另外一个就是使用宏框住(其实代码会变得很丑)。

 下图是个人的一些见解,底层驱动仅仅提供基本的能力,在策略上,不要加任何限制,每个协议有不同的需求,具体上层AP需要使用什么策略,让AP层去做,因为一旦底层driver层提供了一些策略,上层AP要要变动就比较困难,而且牵一发而动全身。




0 0
原创粉丝点击