4.6. ISCPParser
added in version 1.7.0
外部機器制御用コマンドの応答を解析する機能を提供するインターフェイスです。
本インターフェイスは、外部機器に対応しているモデル専用です。 対応しているモデルは 対応外部機器 を参照ください。
列挙体
名称
説明
解析結果定数
プロパティ
名称
説明
解析結果定数
メソッド
名称
説明
外部機器からの応答を受け取るコマンドを生成します。
4.6.1. StarIoExtParserCompletionResult
added in version 1.7.0
解析結果定数
宣言
typedef NS_ENUM(NSInteger, StarIoExtParserCompletionResult) { StarIoExtParserCompletionResultInvalid = 0, StarIoExtParserCompletionResultSuccess, StarIoExtParserCompletionResultFailure };
定数
名称
説明
StarIoExtParserCompletionResultInvalid
不定(コマンド応答未完了)
StarIoExtParserCompletionResultSuccess
成功
StarIoExtParserCompletionResultFailure
失敗
4.6.2. completionHandler
added in version 1.7.0
createSendCommands で生成したコマンドを送信後の、外部機器からのコマンド応答を解析します。
宣言
typedef StarIoExtParserCompletionResult (^StarIoExtParserCompletionHandler)(uint8_t *buffer, int *length); @property (nonatomic, copy) StarIoExtParserCompletionHandler completionHandler;
値
説明
型
解析ハンドラ
StarIoExtParserCompletionHandler
実装例
createSendCommands メソッドの実装例を参照ください。
4.6.3. createSendCommands
added in version 1.7.0
外部機器からの応答を受け取るコマンドを生成します。
宣言
- (NSData *)createSendCommands;
引数
なし
戻り値
説明
型
生成されたコマンド列
NSData *
実装例
+ (BOOL)parseDoNotCheckCondition:(ISCPParser *)parser port:(SMPort *)port completionHandler:(SendCompletionHandler)completionHandler { CommResult result = CommResultErrorOpenPort; NSInteger code = SMStarIOResultCodeFailedError; NSData *commands = [parser createSendCommands]; while (YES) { NSError *error = nil; ... StarPrinterStatus_2 printerStatus; ... NSDate *startDate = [NSDate date]; uint32_t total = 0; while (total < (uint32_t) commands.length) { uint32_t written = [port writePort:(unsigned char *) commands.bytes :total :(uint32_t) commands.length - total :&error]; ... } ... startDate = [NSDate date]; // Restart NSMutableData *receivedData = [NSMutableData data]; while (YES) { uint8_t buffer[1024 + 8] = {0}; ... uint32_t readLength = [port readPort:buffer :0 :1024 :&error]; ... [receivedData appendBytes:buffer length:readLength]; int recvDataLength = (int) receivedData.length; uint8_t *recvDataBytes = (uint8_t *) receivedData.bytes; if (parser.completionHandler(recvDataBytes, &recvDataLength) == StarIoExtParserCompletionResultSuccess) { result = CommResultSuccess; code = SMStarIOResultCodeSuccess; break; } } break; } ... }
Communication.m を参照ください。