4.6. ISCPParser

added in version 1.7.0

外部機器制御用コマンドの応答を解析する機能を提供するインターフェイスです。

本インターフェイスは、外部機器に対応しているモデル専用です。 対応しているモデルは 対応外部機器 を参照ください。

  • メソッド

    名称

    説明

    createSendCommands

    外部機器からの応答を受け取るコマンドを生成します。

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

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