首页 > 作文

怎么用蓝牙传照片

更新时间:2023-03-10 07:01:20 阅读: 评论:0

昆明有什么特产-正宗椰子鸡的做法

怎么用蓝牙传照片
2023年3月10日发(作者:发声训练方法)

基于SPP协议,通过iphone蓝⽛与经过苹果MFI授权认证的硬件通讯,传输图

因为公司产品需要,要写⼀个demo,演⽰iphone与硬件通过蓝⽛通讯,传输数据包,折腾好久,终于折腾了出来了。分享⼀下实现的过程。

⾸先,要拿到苹果公司的MFI认证,然后要定义⾄少⼀种命令协议,让配件⽀持,Apple并不负责提供协议的注册机制,制造商必须⾃⼰决定⽀持哪些协议,为了防⽌命名冲

突,协议的名字是反向的DNS字符串,类似ocol。

定义好协议后,要在⼯程中声明协议,在的UISupportedExternalAccessoryProtocols键中声明。

⼯程⾥要添加ExternalAccessory框架。

通过EAAccessoryManager获取配件列表,通过EAAccessory与配件建⽴连接,就可以创建⼀个EASession回话,与配件进⾏通讯。

详细代码参照官⽅EADemo实例,⾥⾯实现的很清楚。

我的任务是将图⽚读进去,提取它的raw数据,但由于图⽚是96x96像素,就是说raw数据⼤⼩有96x96x4个bit,⼤约40k,输出到配件后要进⾏写⼊,速度太慢,所以将raw

据经过处理,去掉透明度,RGB分别取5位,6位,5位,这样⼤约剩20k,即使这样也要将每个数据包分段发送,每段256个字节,发送数据前,加上⼀个⽂件头,每⼀段加上⼀

段头,每⼀段发送之后等待硬件响应,响应之后才能发送下⼀段,1s之内没有接受响应则终⽌发送。部分代码如下:

[html]

e*img=[UIImageimageNamed:myFilePath];//myFilePath位图⽚路径

eRefcgimage=e;

Refdataref=CGDataProviderCopyData(CGImageGetDataProvider(cgimage));//获取图⽚cfdata数据

atalength=CFDataGetLength(dataref);

8*pixelByteData=(UInt8*)malloc(cgdatalength);

GetBytes(dataref,CFRangeMake(0,cgdatalength),pixelByteData);

hgroupnum=256;//每⼀段数据⼤⼩为256bit

umpcount=cgdatalength/(eachgroupnum*2);//分段总数

bleData*data1=[NSMutableDatadata];

har*buf=[8String];//将命令头处理为字节流

(buf)

12.{

32_tlen=strlen(buf);

ngleNumberString[3]={'0','0','0'};

32_tsingleNumber=0;

(uint32_ti=0;i

17.{

(((i+1)

19.{

NumberString[0]=buf[i];

NumberString[1]=buf[i+1];

(singleNumberString,"%x",&singleNumber);

8_ttmp=(uint8_t)(singleNumber&0x000000FF);

24.[data1appendBytes:(void*)(&tmp)length:1];

25.}

27.{

;

29.}

30.}

31.}

32.[data1appendBytes:(void*)(&groumpcount)length:1];//将分段总数添加到字节流中

33.[[EADSessionControllersharedController]writeData:data1];//发送⽂件头

34.//将图⽚字节流数据分成groumpcount分,每个像素点去掉透明体,3字节RGB处理成2字节,读⼊字节流缓冲区

bleData*datas=[NSMutableDatadata];

16temp=0;

(inti=0;i

38.{

39.[datasappendBytes:(void*)(&i)length:1];//段⾸编号部分

40.[datasappendBytes:(void*)(&groumpcount)length:1];//段⾸编号分段总数部分

(intj=eachgroupnum*i*2;j

42.{

=pixelByteData[j+2];

+=pixelByteData[j+1]*32;

+=pixelByteData[j]*2048;

8_ttmp1=(uint8_t)(temp&0x0000FF00);

8_ttmp2=(uint8_t)(temp&0x000000FF);

48.[datasappendBytes:(void*)(&tmp1)length:1];

49.[datasappendBytes:(void*)(&tmp2)length:1];

50.}

(i==0){

52.[[EADSessionControllersharedController]writeData:datas];//第⼀段数据直接发送

53.}

{

(readdatabuf==0xff0000){//readdatabuf为硬件响应发回的数据,当以⼀段数据成功接受后,给应⽤发回0xff0000,且readdatabuf值存储最后⼀次硬件响应

56.[[EADSessionControllersharedController]writeData:datas];//发送下⼀段数据

tabuf=0;//清空上⼀次接受的数据

58.[datastData:nil];//清空上⼀次发送的数据

ue;//结束本次循环

60.}

61.[lfperformSelector:@lector(laterwritedata:)withObject:datasafterDelay:1];

(temp==NO)

63.{

;//1s之内没有收到硬件的响应,跳出循环,终⽌发送

65.}

66.}

tabuf=0;//清空上⼀次接受的数据

68.[datastData:nil];//清空上⼀次发送的数据

69.}

70.

71.

72.-(void)laterwritedata:(NSMutableData*)data

73.{

(readdatabuf==0xff0000){

=YES;//temp位YES,表⽰已得到响应,可以进⾏下⼀段的发送

76.[[EADSessionControllersharedController]writeData:data];

77.}

79.{

=NO;

81.}

82.}

本文发布于:2023-03-10 07:01:19,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/1678402880201684.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:怎么用蓝牙传照片.doc

本文 PDF 下载地址:怎么用蓝牙传照片.pdf

下一篇:返回列表
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图