2008年11月30日星期日

BTX初建

作者: Sam(甄峰) sam_code@hotmail.com

1. 因为BTX是Sam设计的整个架构的基础,需要非常稳定。所以Sam决定每个接口都经过大量测试。
1.1. 单独的接口测试,包括[in]参数的边界测试,超出范围测试,[out]参数的参数为空,buffer不足够测试等。接口多次调用测试。
1.2. 多个接口组合测试,各个接口的各种常规和非常规组合测试。有意使用错误组合和参数测试。


2. BTX的具体实现:
2.1 BTX_Rel BTX_Init(uint16_t dev_id)
这个function 将 USB Bluetooth Dongle up起来。类似#hciconfig hci0 up
需要测试:
2.1.1. Bluetooth driver, protocol没有insmod时的反应。
2.1.2. Bluetooth USB Dongle没有插入时的反应。
2.1.3. 参数dev_id=0 (第一个USB Dongle) 和 dev_id = 1(第二个USB Dongle)时的反应。
2.1.4. 各种状况下 /proc/uid/fd/下察看终端。看是否有该释放的handle而没有释放的情况发生。注[1]。
常见的问题:打开hci socket后,遇到error,没有关闭socket就推出function.这样就会遗留一个socket.

2.2 BTX_Rel BTX_GetLocalDeviceInfo(uint16_t dev_id, bdaddr_t* pBdaddr, char* pBdName)
这个function的到本地Bluetooth 信息,包括 bdaddr, device name等。如果返回值不为BTX_SUCCESS。则说明Bluetooth USB Dongle没有Ready.
需要测试:
2.2.1:参数dev_id=0和dev_id=1时。
2.2.2:参数pBdaddr,pBdName没有分配实际的内存时,会出现Segmentation fault
Sam虽然在function 实现中添加了if(pBdaddr == NULL pBdName == NULL)...
但如果使用时不讲pBdaddr初始化为NULL。则它还是有一个值的。还是会造成Segmentation fault.这个问题等待未来解决。
2.2.3: 在调用此函数之前没有调用 BTX_Init():会返回BTX_DONGLE_NO_READY。但用perror()输出protocol未insmod.

2.3 BTX_Rel BTX_Scan_Device(uint16_t dev_id, unsigned int* pNum_rsp, bdaddr_t** ppBdaddr, uint16_t time);




注[1]:
在所有涉及到打开句柄或者socket的程序中,都应该察看 /proc/uid/fd中的信息。察看是否正常建立和销毁了句柄。

没有评论: