Skip to content

LongOperationInProgressException cannot be detected using the C API #170

@robinkrahl

Description

@robinkrahl

The C API translates the C++ exceptions to integer values (see NK_C_API.cc:get_with_status). For instances of CommandFailedException, the last_command_status field is used for the conversion. This field is typically set to a value of the stick10::command_status enum. But LongOperationInProgressException, which is a subclass of CommandFailedException, uses stick10::device_status::busy (= 1) instead. This overlaps with the wrong_CRC variant of the command_status enum, making it impossible to distinguish the two errors as a user of the C API.

Possible solutions:

  1. Add a new value to the stick10::command_status enum and use it for LongOperationInProgressException.
  2. Add a special case for the LongOperationInProgressException to the get_with_status function and return a unique ID for it. (I don’t really like this option because it makes the error handling code more complicated.)
  3. Let LongOperationInProgressException inherit from DeviceCommunicationException instead of CommandFailedException and define a new ID.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions