QCC512x 与QCC302X 蓝牙系列量产必备:设备Debug端口枚举

    QCC512x 与QCC302X无论是基于ADK6.X,还是新的 ADK 架构,蓝牙系列量产所需应用,可以用BlueSuite3,当前安装的是BlueSuite 3.3.5,可以cd C:\Program Files (x86)\QTIL\BlueSuite 3.3.5 运用CMD 命令

cd C:\Program Files (x86)\QTIL\BlueSuite 3.3.5

详见:“ ADK6.X  通过 configcmd  命令查看并修改设备的相应信息

 

如果量产的话需要运用BlueSuite 库来写量产工具,可以参阅BlueSuite 安装路径下的文档,

 

蓝牙耳机与 PC 连接的 Debug端口可以分为 TRB 与 USB 。客户一般关注以下问题:

  • 电脑上连接几台耳机设备,(所谓一拖多,一台PC可以连接多台耳机)
  • 连接的 Debug端口是什么,TRB 还是 USB

 

此处用TestEngine 的库运用C语言程序来修改枚举设备Debug端口,可以统计出,连接的耳机数量,以及连接的Debug 端口

 

1、开发环境设置

开发环境:C++(Microsoft Visual Studio)

头文件:TestEngine.h

库文件:TestEngine.lib

运行环境:Windows 系统,TestEngine.dll 相关DLL,为了使得工具能够运行,
可以把TestEngine.dll 相关DLL所在文件夹路径:C:\Program Files (x86)\QTIL\BlueSuite 3.3.5,
设置成Path环境变量,这样工具程序就可以动态调用DLL相关库运行了。

 

2、开发流程

打开Microsoft Visual Studio 集成开发环境,新建à Win32-> console application,
输入Project名BT_Info_Mag,选择console application—>Empty project->Finish 确认。

添加 BT_Info_Mag.cpp,代码如下:详见附件源文件,登录即可下载

//BT_Info_Mag.cpp

#include "include\\testengine.h"
#include "include\\TestFlash.h"
#include "iostream"
#include"conio.h"
#include"Windows.h"
using namespace std;
#include "vector"

using namespace std;

#include

 

#define _Test_Engine_

vector split(const string &s, const string &seperator){

    vector result;

    typedef string::size_type string_size;

    string_size i = 0;

 

    while(i != s.size()){

         //找到字符串中首个不等于分隔符的字母;

         int flag = 0;

         while(i != s.size() && flag == 0){

             flag = 1;

             for(string_size x = 0; x < seperator.size(); ++x)

                  if(s[i] == seperator[x]){

                      ++i;

                      flag = 0;

                      break;

                  }

         }

 

         //找到又一个分隔符,将两个分隔符之间的字符串取出;

         flag = 0;

         string_size j = i;

         while(j != s.size() && flag == 0){

             for(string_size x = 0; x < seperator.size(); ++x)

                  if(s[j] == seperator[x]){

                      flag = 1;

                      break;

                  }

                  if(flag == 0)

                      ++j;

         }

         if(i != j){

             result.push_back(s.substr(i, j-i));

             i = j;

         }

    }

    return result;

}

 

 

int IGetAvailablePorts(vector& ports,vector& trans)

{

    int32 status;

    uint16 maxLen(256);

    uint16 count(0);

    char* portsStr = new char[maxLen];

    char* transStr = new char[maxLen];

    int k=0;

#if defined(_Test_Engine_)

    status = teGetAvailableDebugPorts(&maxLen, portsStr, transStr, &count);

    while( (status != TE_OK || count == 0))

#else

    status = flGetAvailablePorts(&maxLen, portsStr, transStr, &count);

    while( (status != TFL_OK || count == 0) )

#endif

    {

         k++;

         printf("teGetAvailableDebugPorts %d 次失败\r\n",k);

         Sleep(900);

#if defined(_Test_Engine_)

         status = teGetAvailableDebugPorts(&maxLen, portsStr, transStr, &count);

#else

         status = flGetAvailablePorts(&maxLen, portsStr, transStr, &count);

#endif

 

         if(k>=6){

             delete[] portsStr;

             delete[] transStr;

             return status&&count;

         }

 

    }

 

#if defined(_Test_Engine_)

    if( status != TE_OK && maxLen != 0 )

#else

    if( status != TFL_OK && maxLen != 0 )

#endif

 

    {

         // Not enough space - resize the storage

         delete[] portsStr;

         portsStr = new char[maxLen];

         delete[] transStr;

         transStr = new char[maxLen];

#if defined(_Test_Engine_)

         status = teGetAvailableDebugPorts(&maxLen, portsStr, transStr, &count);

#else

         status = flGetAvailablePorts(&maxLen, portsStr, transStr, &count);

#endif

 

    }

 

    ports=split( portsStr,(const std::string ) ","); // Use these for user selection (e.g. drop down list)

    trans=split( transStr, (const std::string )","); // Use these to open a transport

 

    delete[] portsStr;

    delete[] transStr;

#if defined(_Test_Engine_)

    return status&&count;

#else

    return !status&&count;

#endif

}

 

int main(int argc, char** argv){

 

    int32 status;//是否枚举出端口

    vector m_vPorts; // The human readable port strings (e.g. "USBDBG(100)")

    vector m_vTrans; // The transport option strings (e.g. "SPITRANS=USBDBG SPIPORT=1")

    status=IGetAvailablePorts(m_vPorts,m_vTrans);

    if(status){

         printf("DebugPorts:\n");

 

         int i=1;

         for(vector::iterator iter1=m_vPorts.begin(); iter1!=m_vPorts.end(); ++iter1 ){

             printf("DebugPorts %d :%s\r\n",i++,iter1->c_str());

         }

 

         printf("DebugPorts Trans:\n");

         i=1;

         for(vector::iterator iter1=m_vTrans.begin(); iter1!=m_vTrans.end(); ++iter1 ){

             printf("DebugPorts Trans %d :%s\r\n",i++,iter1->c_str());

         }

    }

 

}

然后把TestEngine.lib 添加进来,就可以编译通过





3、运行结果

QCC512x 与QCC302X 系列的板子,通过 USB 连上PC, 运行应用程序,能够成功枚举出,所有的 Debug 端口

把 #define _Test_Engine_  去掉,我们用的就是 TestFlash 的库,与 Test_Engine 类似,运行结果一样!


以上是本篇博文的全部内容,
大大通方案与博文,十分精彩,引人入胜,如果不在登录状态的看官,

大大通则视为“匆匆之过客”很快就“不见庐山真面目”了,

看的正过瘾啊!怎么会这样,急死人了,怎么办?

各位看官!不要着急!只需一个小小的动作而已:登录!

没账号咋办?  很简单,请扫描下面二维码注册


而且还附带小编联系方式,各位看官,如有疑问,
请在博文下方评论留言,或者私信给我,

收到之后会第一时间回复哦,想要了解更多内容,
请多多关注小编与大大通平台,
我们会不断分享最新的热点技术

技术文档

类型标题档案
硬件CPP file

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论