2

Bluetooth 経由でデバイスと通信する必要があります。デバイスは、コマンドがキャリッジ リターン + ラインフィードで区切られていることを期待しています。接続は 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から取得および調整されました。

thx事前に

4

1 に答える 1

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];
于 2014-10-27T07:18:04.110 に答える