gpt4 book ai didi

cocoa - 如何构建通过 RFCOMMChannel 与 writeAsync 一起使用的命令?

转载 作者:行者123 更新时间:2023-12-03 16:46:37 26 4
gpt4 key购买 nike

我必须通过蓝牙与设备进行通信,该设备期望命令由回车+换行分隔。使用 RFCOMMChannel 建立连接。

Atm 似乎我的代码无法正常工作,因为我期待设备的回复,当我使用 simpel 终端程序向它发送命令时,它会回复。

此代码在建立连接后运行(这肯定有效,因为我可以记录来自外部设备的数据)

NSString *clockRequest = @"C\r\n";
void *clockRequestData = (__bridge void *)([clockRequest dataUsingEncoding:NSASCIIStringEncoding]);

NSLog(@"Data buffer to write: %@", clockRequestData);

[rfcommChannel writeAsync: clockRequestData length:100 refcon:NULL];


//writing data from rfcomm
- (void)rfcommChannelWriteComplete:(IOBluetoothRFCOMMChannel*)rfcommChannel refcon:(void*)refcon status:(IOReturn)error {
NSLog(@"Macbook wrote to Timecube, status: %d", error);
}

建立连接的代码取自并调整自 https://gist.github.com/crazycoder1999/3139668

提前致谢

最佳答案

将类别 NSStringHexToBytes 添加到您的项目:

NSString+NSStringHexToBytes.h

#import <Foundation/Foundation.h>

@interface NSString (NSStringHexToBytes)
+ (NSData *)dataWithString:(NSString *)string;
@end

NSString+NSStringHexToBytes.m

#import "NSString+NSStringHexToBytes.h"

@implementation NSString (NSStringHexToBytes)

+ (NSData *)dataWithString:(NSString *)string
{
//string = [string stringByReplacingOccurrencesOfString:@"0x" withString:@""];

//NSCharacterSet *notAllowedCharacters = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefABCDEF1234567890"] invertedSet];
//string = [[string componentsSeparatedByCharactersInSet:notAllowedCharacters] componentsJoinedByString:@""];

const char *cString = [string cStringUsingEncoding:NSASCIIStringEncoding];
const char *idx = cString;
unsigned char result[[string length] / 2];
size_t count = 0;

for(count = 0; count < sizeof(result)/sizeof(result[0]); count++)
{
sscanf(idx, "%2hhx", &result[count]);
idx += 2 * sizeof(char);
}

return [[NSData alloc] initWithBytes:result length:sizeof(result)];
}

@end

在您的实现文件中导入 NSString+NSStringHexToBytes.h 并添加方法

-(void)sendMessage:(NSData *)data
{
[rfcommChannel writeSync:(void*)data.bytes length:data.length];
}

然后:

NSString* clockRequest = @"C\r\n";
NSData* data = [NSString dataWithString:clockRequest];
[rfcommChannel sendMessage:data];

关于cocoa - 如何构建通过 RFCOMMChannel 与 writeAsync 一起使用的命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16546997/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com