VC 蓝牙通信。。。

梦境传说 2012-07-31 01:52:03
用VC开发的蓝牙通信:

1. 蓝牙设备搜索,并将搜索到得地址显示到Listbox中。

2. PC机和硬件设备通过蓝牙连接好后,将发送开始采集指令。

3. 点击断开按钮,PC机与硬件设备断开连接。

望CSDN的高手们帮忙看看,我的第一步已经实现,可以搜索到硬件设备的蓝牙地址。
现在就卡住在,我怎么发送指令,(即发送指令的函数,VC中有关蓝牙封装好的类)

望高手们帮忙看看。。。谢谢!


下面是C#部分代码:
 private NetworkStream _peerStream;   //C#中NetworkStream, 用VC中哪个类代替

//数据接收函数---------------------------
private void RecvThreadProc(object state)
{
try
{
while (_peerStream.DataAvailable)
{
_peerStream.Read(new byte[1024], 0, 1024);
}

_peerStream.Write(new byte[] {0xfe, 0xb7 + 1, 0xa0}, 0, 3); //开始发送指令

SaveIndexInfoTop();

_currentState = State.Working;
UpdateStateUI();


while (_isRunning) //运行中
{
var bytes = new byte[1024];
int len = _peerStream.Read(bytes, 0, 1024); //从流中读取缓冲字节数组
if (len == 0)
throw new IOException("Link Lost");
for (int i = 0; i < len; i++)
{
_recvqueue.Enqueue(bytes[i]);
}

while (_recvqueue.Count >= 22)
{
if (_recvqueue.Dequeue() != 0xe0)
{
break;
}

byte dataCountLoLo = _recvqueue.Dequeue();
byte dataCountLoHi = _recvqueue.Dequeue();
byte dataCountHiLo = _recvqueue.Dequeue();
byte dataCountHiHi = _recvqueue.Dequeue();
var framecount =
(uint)((dataCountHiHi << 24) + (dataCountHiLo << 16) + (dataCountLoHi << 8) + dataCountLoLo);

var checksum = (byte)(dataCountLoLo + dataCountLoHi + dataCountHiLo + dataCountHiHi);

var channeltmp = new int[8];
for (int i = 0; i < 8; i++)
{
byte tmpL = _recvqueue.Dequeue();
byte tmpH = _recvqueue.Dequeue();
checksum = (byte) (checksum + tmpL + tmpH);

//Console.WriteLine("{0}",checksum);
//Console.WriteLine("{0}", tmpL);
//Console.WriteLine("{0}", tmpH);

channeltmp[i] = (tmpH << 8) + tmpL;
}
if (_recvqueue.Dequeue() != checksum)
{
break;
}

var channel = new int[6];
channel[0] = channeltmp[2];
channel[1] = channeltmp[0];
channel[2] = channeltmp[3];
channel[3] = channeltmp[1];
channel[4] = channeltmp[5];
channel[5] = channeltmp[4];

lock (_channelqueue)
{
while (framecount - _frameRecvCount - 1 > 0)
{
_channelqueue.Enqueue(null);
_frameRecvCount++;
}
_channelqueue.Enqueue(channel);
_frameRecvCount++;
_channelEvent.Set();
}

if (framecount%_samplingFreq == 0)
{
_peerStream.Write(new byte[] {0xfe, 0xb7 + 1, 0xa3}, 0, 3); //breath cmd
}
}
}
_peerStream.Write(new byte[] {0xfe, 0xb7 + 1, 0xa1}, 0, 3); //停止发送指令
_channelEvent.Set();
_calcStopEvent.WaitOne();
SaveIndexInfoBottom("User stop");
_currentState = State.Idle;
Invoke(new Action(UpdateStateUI));
}
catch (Exception ex)
{
LinkLost();
MessageBox.Show(ex.Message);
}
}



现在怎么把C#这段蓝牙通信发送给硬件设备的指令并采集数据上来。 怎么转化为VC代码。
...全文
470 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
vnking 2013-06-14
  • 打赏
  • 举报
回复
如何知道蓝牙搜索上的服务。
MFCJCK 2012-08-03
  • 打赏
  • 举报
回复
没有报酬,几乎没人帮你做这样的体力活的~~
梦境传说 2012-08-03
  • 打赏
  • 举报
回复
没人啊! 望高手看看!
梦境传说 2012-08-01
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
http://www.pudn.com/downloads137/sourcecode/windows/network/detail587994.html
梦境传说 2012-07-31
  • 打赏
  • 举报
回复
望,高手们帮忙看看!
梦境传说 2012-07-31
  • 打赏
  • 举报
回复
能发个工程示例吗? 谢谢! QQ: 785800523@qq.com
pig357 2012-07-31
  • 打赏
  • 举报
回复
MSCOMM32.OCX操作串口

//打开串口
m_mscommctl.put__CommPort(com); //选择COM
m_mscommctl.put_InBufferSize(10240); //接收缓冲区
m_mscommctl.put_OutBufferSize(10240); //发送缓冲区
m_mscommctl.put_InputMode(1); //以二进制方式读写数据
m_mscommctl.put_Settings(_T("9600,N,8,1")); //波特率9600无检验位,8个数据位,1个停止位
m_mscommctl.put_InputLen(0); //设置当前接收区数据长度为0,表示全部读取
m_mscommctl.put_RThreshold(1024); //接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
m_mscommctl.put_SThreshold(4096);
if (!m_mscommctl.get_PortOpen())
{
m_mscommctl.put_PortOpen(TRUE);
}

//发送数据
CByteArray aa;
aa.RemoveAll();
aa.SetSize(len);
for(int i =0; i < len; i++)
aa.SetAt(i, buf[i]);
m_mscommctl.put_Output(COleVariant(aa));

AppendContent(1, mf.ToCString("Send OK ! bytes = %d", len - 1));

//接收数据
if (m_mscommctl.get_CommEvent() == 2) //事件值为2表示接受缓冲区内有字符
{
VARIANT variant_inp = m_mscommctl.get_Input(); ////读缓冲区
COleSafeArray safearray_inp = variant_inp;
len = safearray_inp.GetOneDimSize(); //有效数据长度
BYTE rxdata[2048]; //设置BYTE数组
mf.ClearArray(rxdata, 2048, (BYTE)'\0');
for(LONG i = 0; i < len; i++)
{
safearray_inp.GetElement(&i, rxdata + i); //转换为BYTE型数组
}
AppendContent(1, mf.ToCString("接收%d字节: ", len), FALSE);
AppendContent(1, (char*)rxdata);
m_countnum[1] += len;
UpdateCountNum();
}
梦境传说 2012-07-31
  • 打赏
  • 举报
回复
C#中用这个:

private NetworkStream _peerStream; //C#中NetworkStream, 用VC中哪个类代替
_peerStream.Write(new byte[] {0xfe, 0xb7 + 1, 0xa0}, 0, 3); //开始发送指令


我现在不知道在VC中用什么? 发送指令

3个16进制数是规定的。这个不用管。
fronz 2012-07-31
  • 打赏
  • 举报
回复
Sharp不熟,VC通讯是知道的,VC没有那个专门的类,现成的通讯多为第三方串口类,比较有名的CSerialPort

这里关键的那句是通讯协议么?3个16进制数?完全看不懂
梦境传说 2012-07-31
  • 打赏
  • 举报
回复
最主要的是这句 :

 _peerStream.Write(new byte[] {0xfe, 0xb7 + 1, 0xa0}, 0, 3); //开始发送指令


怎么转化为VC代码,发送指令
梦境传说 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

一般是串口发送的吧
[/Quote]


有没有一些简单示例,谢谢!

现在是怎么把C#的代码转化为VC的代码?

pig357 2012-07-31
  • 打赏
  • 举报
回复
一般是串口发送的吧

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧