一、简介
iOS与硬件设备模块(C语言)通信,iOS发送消息指令给硬件,硬件收到消息后,进行逻辑处理,再将应答消息返回iOS解析,界面展示结果
C语言采用unsigned char接收二进制数据,iOS需要将16进制数据转换成Byte数组,以NSData类型向设备发送协议
unsigned char(等于Byte) 1个字节 值域范围:0~255
*_t类型为:
序号 | 类型 | 字节长度 |
---|---|---|
1 | uint8_t | 1字节 |
2 | uint16_t | 2字节 |
3 | uint32_t | 4字节 |
4 | uint64_t | 8字节 |
二、发送协议消息
1.将拼接的16进制消息内容转换为Data数据
NSData *verificationData = [self convertHexStrToData:msgContent];
2.调用CRC16方法,将消息内容生成4位校验码,返回(消息内容+CRC校验码)
NSData *converData = [self calCRCWithData:verificationData];
3.将消息体内容进行转义处理,比如:AA <————> BB后紧跟一个 01
NSString *strMsg =[self convertDataToHexStr:finalDataM];
4.在转义内容前后增加标识位
NSString *flagBit = @"FF";
strMsg = [flagBit stringByAppendingString:strMsg];
strMsg = [strMsg stringByAppendingString:flagBit];
5.拆分NSString字符,每2位转换为unsigned char,放入数组中
NSData *trandata2 = [self convertHexStrToData:strMsg];
6.通过TCP将NSData数据发送给设备
三、接收应答消息
1.解析设备返回的应答数据,转换为16进制字符串
NSData *dataMsg = [NSData dataWithBytes:bytes length:sizeof(bytes)];
2.判断应答字符串前后缀是否为“FF“
NSString *headeMsg = [strMsg substringWithRange:range];
range.location = [strMsg length]-2;
NSString *footMsg = [strMsg substringWithRange:r