/**************************************************************************** 翻译: 施自成 QQ: 371977119 email: 371977119@qq.com */ /**************************************************************************** Copyright (C) Cambridge Silicon Radio Ltd. 2004-2008 Part of BlueLab 4.0.1-release FILE NAME spp_dev_inquire.h DESCRIPTION Handles inquiry procedures of spp dev A application */ /**************************************************************************** Header files */ #include "spp_dev_inquire.h" #include "spp_dev_store.h" #include "spp_dev_connect.h" #include <connection.h> #include <stdio.h> #include <bdaddr.h> #define CLASS_OF_DEVICE 0x1F00 /**************************************************************************** NAME sppDevInquire DESCRIPTION Start Spp inquiry process RETURNS void */ /* 查找蓝牙设备 */ void sppDevInquire(sppTaskData* app) { /* Turn off security */ /* 设定安全选项 void ConnectionSmRegisterIncomingService ( dm_protocol_id protocol_id, uint32 channel, dm_security_level security_level ) protocol_id: 协议类型 protocol_l2cap 或者 protocol_rfcomm typedef enum { protocol_l2cap, protocol_rfcomm, protocol_unknown } dm_protocol_id; channel: 通道号 security_level: 安全等级,包括下面这些值 typedef enum { secl_none, secl_in_authorisation, secl_in_authentication, secl_in_encryption, secl_out_authorisation, secl_out_authentication, secl_out_encryption, secl_in_connectionless, secl_level_unknown } dm_security_level; */ ConnectionSmRegisterIncomingService(protocol_rfcomm, 0x0001, secl_none); /* Write class of device */ /* 设置本设备的类型 void ConnectionWriteClassOfDevice ( uint32 cod ) cod: 类型号 */ ConnectionWriteClassOfDevice(CLASS_OF_DEVICE); /* Inquire to look for devB devices in inquiry scan mode */ /* 设置LED灯。。。 */ setSppState(sppDevInquiring); /* 搜索蓝牙设备 void ConnectionInquire ( Task theAppTask, uint32 inquiry_lap, uint8 max_responses, uint16 timeout, uint32 class_of_device ) inquiry_lap: 查询码,一般设为0x9E8B33 max_responses: 指定最多能返回几个设备 timeout: 超时设置,超时时间=time * 1.28 秒 class_of_device: 设备类型 查询结束后会发送 CL_DM_INQUIRE_RESULT 消息 */ ConnectionInquire(getAppTask(), 0x9E8B33, 0x9, 0x30, CLASS_OF_DEVICE); } /**************************************************************************** NAME sppDevInquiryComplete DESCRIPTION Spp Inquiry complete handler RETURNS void */ /* 查找完成 */ void sppDevInquiryComplete(sppTaskData* app) { if (BdaddrIsZero(&app->bd_addr)) { /* No remote device found, so must decide what to do now */ /* Restart Inquiry */ /* 没有搜到继续搜。。。 */ sppDevInquire(app); } else { /* Remote device found, so will now be trying to connect */ } } /**************************************************************************** NAME sppDevInquiryResult DESCRIPTION Spp Inquiry result handler RETURNS void */ /* 查询结果 */ void sppDevInquiryResult(sppTaskData* app, const CL_DM_INQUIRE_RESULT_T* res) { /* make sure device class returned is correct, and that we currently aren't trying to connect to another device */ if ((res->dev_class & CLASS_OF_DEVICE) && (BdaddrIsZero(&app->bd_addr))) { app->bd_addr = res->bd_addr; /* Cancel the inquiry */ /* 停止搜索 */ ConnectionInquireCancel(getAppTask()); /* Now try and connect to this device */ /* 终于要连接了。。。 */ sppDevConnect(app); } }