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 を参照ください。