⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 btrmtdevmgr.cpp

📁 蓝牙
💻 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 + -