?? btrmtdevmgr.cpp
字號:
#include "btrmtdevmgr.h"#include "xlog.h"#include "btsocket.h"#include "scosocket.h"#include "bycmd.h"#include "global.h"#include "bthandsfree.h"BtSdkRemoteDevicePropertyStru RmtDevMgr::m_RmtDevInfo[MAX_REMOTE_DEV_NUM];int RmtDevMgr::m_nRmtDevNum = 0;sem_t RmtDevMgr::m_Sem;bool RmtDevMgr::m_bScanning = false;bool RmtDevMgr::Init(){ memset(m_RmtDevInfo, 0, sizeof(m_RmtDevInfo)); sem_init(&m_Sem, 0, 0); pthread_t t; return pthread_create(&t, NULL, RmtDevMgrThread, NULL) == 0;}void RmtDevMgr::Destroy(){ sem_destroy(&m_Sem);}BTDEVHDL RmtDevMgr::FindRmtDevByAddr(const BTUINT8* bd_addr){ if (!bd_addr) return BTSDK_INVALID_HANDLE; int i;// char tmp[128];// strcpy(tmp, bd_addr);// BTUINT8 a[BTSDK_BDADDR_LEN] = { 0 };// char* str = tmp;// char* token;// i = BTSDK_BDADDR_LEN - 1;// while ((str = strtok_r(str, ":", &token)) != NULL)// {// a[i] = (BTUINT8)strtol(str, NULL, 16);// // LOG(DEBUG, "%02x\n", a[i]);// str = token;// i--;// } for (i = 0; i < m_nRmtDevNum; i++) { // if (strcmp((char*)a, (char*)m_RmtDevInfo[i].bd_addr) == 0) if (memcmp(bd_addr, m_RmtDevInfo[i].bd_addr, sizeof(m_RmtDevInfo[i].bd_addr)) == 0) { LOG(DEBUG, "0x%08lx found\n", m_RmtDevInfo[i].dev_hdl); return m_RmtDevInfo[i].dev_hdl; } } return BTSDK_INVALID_HANDLE;}void RmtDevMgr::StartSearch(){ if (m_bScanning) return; m_bScanning = true; IpcPacket o(HF_SEARCHING); g_btSock.SendTo(o, BY_MAIN_PORT); Btsdk_StartDeviceDiscovery(0, 8, 8);}void RmtDevMgr::GetBtList(){ if (m_bScanning) return; m_bScanning = true; Btsdk_StartDeviceDiscovery(0, MAX_REMOTE_DEV_NUM, MAX_REMOTE_DEV_NUM);}void* RmtDevMgr::RmtDevMgrThread(void*){ BtSdkRemoteDevicePropertyStru info[MAX_REMOTE_DEV_NUM]; while (1) { if (sem_wait(&m_Sem) != 0) { LOG(DEBUG, "RmtDevMgrThread exit\n"); break; } memcpy(info, m_RmtDevInfo, sizeof(m_RmtDevInfo)); BtSdkRemoteDevicePropertyStru* p = NULL; IpcPacket o(BOX_CAMERA_FIND); o.Write32(m_nRmtDevNum); for (int i = 0; i < m_nRmtDevNum; i++) { p = &info[i]; Btsdk_GetRemoteDeviceClass(p->dev_hdl, &p->dev_class); if (Btsdk_GetRemoteDeviceName(p->dev_hdl, p->name, NULL) != BTSDK_OK) if (Btsdk_UpdateRemoteDeviceName(p->dev_hdl, p->name, NULL) != BTSDK_OK) strcpy((char*)p->name, "Unknown"); Btsdk_GetRemoteDeviceBDAddr(p->dev_hdl, p->bd_addr); LOG(DEBUG, "%s\t", (char*)p->name); for (int j = 5; j > 0; j--) { LOG(DEBUG, "%02x:", p->bd_addr[j]); } LOG(DEBUG, "%02x", p->bd_addr[0]); LOG(DEBUG, "\n"); // 藍牙列表 char addr[128] = { 0 }; sprintf(addr, "%02x:%02x:%02x:%02x:%02x:%02x", p->bd_addr[5], p->bd_addr[4], p->bd_addr[3], p->bd_addr[2], p->bd_addr[1], p->bd_addr[0]); o.WriteData((char*)p->name, strlen((char*)p->name)); o.WriteData(addr, strlen(addr)); } g_btSock.SendTo(o, 4020); memcpy(m_RmtDevInfo, info, sizeof(m_RmtDevInfo)); LOG(DEBUG, "Get remote devices info end\n"); // BTDEVHDL h = RmtDevMgr::FindRmtDevByAddr(g_hfDev.m_DevAddr); // if (h == BTSDK_INVALID_HANDLE) // { // LOG(DEBUG, "can not find the dev\n"); // IpcPacket o(HF_NOT_FOUND); // g_btSock.SendTo(o, BY_MAIN_PORT); // } // else // { // if (!g_hfDev.m_bAGConnected || !g_hfDev.m_bSppConnected) // { // LOG(DEBUG, "嘗試連接\n"); // IpcPacket o(HF_CONNETTING); // g_btSock.SendTo(o, BY_MAIN_PORT); // g_hfDev.m_hDev = h; // if (!g_hfDev.m_bAGConnected) // g_hfDev.ConnectAudioServer(); // if (!g_hfDev.m_bSppConnected) // g_hfDev.ConnectSPP(); // } // } usleep(250); // if (!BtDevice::m_bAGConnected || !BtDevice::m_bSppConnected) if (!g_hfDev.m_bSppConnected) { LOG(DEBUG, "重新掃描\n"); IpcPacket o(HF_CANNOT_CONNECT); g_btSock.SendTo(o, BY_MAIN_PORT); // RmtDevMgr::StartSearch(); } else { IpcPacket o(HF_CONNECTED); g_btSock.SendTo(o, BY_MAIN_PORT); } m_bScanning = false; } return 0;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -