2012-06-29 29 views
1

我正在嘗試使用基座與RS232線(我從RedPark購買)與另一個硬件進行通信的應用。我也在使用redpark提供的圖書館。我在開始時做了一個簡單的代碼,它運行良好。 UInt8 infoCmd [5] = {0x3E,0x3E,0x05,0x80,0xff}; [rscMgr write:infoCmd Length:5];
然後我想給它添加更多的命令,所以我創建了一個返回我需要的命令的不同組合的方法。iOS:發送定製uint8陣列

- (UInt8 *)requestCommand:(int)commandName{ 
    UInt8 * command; 
    if (commandName == DATADUMP) { 
     command=[Communication buildDataDump]; 
    } 
    if (commandName == GETSERIALINFO) { 
     command=[Communication buildGetSerailInfo]; 
    } 
    return command; 
} 
+ (UInt8 *)buildGetSerailInfo{ 
    UInt8 *command = malloc(sizeof(UInt8)*5); 
    command[0]=SYN; 
    command[1]=SYN; 
    command[2]=ENQ; 
    command[3]=GETSERIALINFO; 
    //command[4] = {SYN, SYN, ENQ, GETSERIALINFO}; 
    return command;  
} 

的事情是,我的一些命令,包括數據,可以是200個字節長。我如何創建一個更容易添加字節的UInt8數組? 我是新手編程,請詳細解釋一下。提前謝謝你。

+3

當您在Objective-C中使用UInt8和'C'函數時,如何才能編程? –

+0

更不用說發送和接收串口,malloc等了......? – trumpetlicks

+0

//請詳細向我解釋//如果您甚至無法理解您現在推出的代碼,那麼您如何期待我們給您一個關於它的詳細答案? – CodaFi

回答

1

其實你只需要發送數據,行字節就可以了。我在一個項目中做了類似的事情(不是連線,而是TCP/IP上的RS232命令),如果使用NSMutableData實例,它就變得非常簡單。

一個從我的代碼片段:

static u_int8_t codeTable[] = { 0x1b, 0x74, 0x10 }; 
static u_int8_t charSet[] = { 0x1b, 0x52, 0x10 }; 
static u_int8_t formatOff[] = { 0x1b, 0x21, 0x00 }; 
static u_int8_t reverseOn[] = { 0x1d, 0x42, 0x01 }; 
static u_int8_t reverseOff[]= { 0x1d, 0x42, 0x00 }; 
static u_int8_t paperCut[] = { 0x1d, 0x56, 0x0 }; 


NSMutableData *mdata = [NSMutableData dataWithBytes:&formatOff length:sizeof(formatOff)]; 
[mdata appendBytes:&formatOff length:sizeof(formatOff)]; 
[mdata appendBytes:&reverseOff length:sizeof(reverseOff)];  
[mdata appendData: [NSData dataWithBytes: &codeTable length:sizeof(codeTable)]]; 
[mdata appendData: [NSData dataWithBytes: &charSet length:sizeof(charSet)]]; 

正如你看到的,我只是通過附加字節的數據字節。

+0

謝謝!這正是我所問的。 – user1491987

+0

我還有一個問題。我創建一個NSMutableData並嘗試使用[rscMgr write:data Length:5]發送數據。錯誤:它給了我一個錯誤和一個警告:用ARC不允許將Objective-C指針隱式轉換爲'UInt8 *'(aka'unsigned char *')警告:將'NSMutableData * __ strong'發送給參數的不兼容指針類型鍵入'UInt8 *'(又名'unsigned char *')你有什麼建議可以解決這個問題嗎? – user1491987

+0

什麼是'rscMgr'? – vikingosegundo