2013-05-14 69 views
1

我必須通過藍牙與設備進行通信,設備希望通過回車+換行來分隔命令。 使用RFCOMMChannel建立連接。如何通過RFCOMMChannel構建用於writeAsync的命令?

大氣壓看來我的代碼是不工作,因爲我期待從設備,這時候我發送命令,利用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調整提前

THX

回答

0

添加類別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];