# {py:mod}`haniwers.v1.cli.port`

```{py:module} haniwers.v1.cli.port
```

```{autodoc2-docstring} haniwers.v1.cli.port
:allowtitles:
```

## Module Contents

### Classes

````{list-table}
:class: autosummary longtable
:align: left

* - {py:obj}`DetectorData <haniwers.v1.cli.port.DetectorData>`
  - ```{autodoc2-docstring} haniwers.v1.cli.port.DetectorData
    :summary:
    ```
* - {py:obj}`FlashInfo <haniwers.v1.cli.port.FlashInfo>`
  - ```{autodoc2-docstring} haniwers.v1.cli.port.FlashInfo
    :summary:
    ```
* - {py:obj}`TestResult <haniwers.v1.cli.port.TestResult>`
  - ```{autodoc2-docstring} haniwers.v1.cli.port.TestResult
    :summary:
    ```
````

### Functions

````{list-table}
:class: autosummary longtable
:align: left

* - {py:obj}`list <haniwers.v1.cli.port.list>`
  - ```{autodoc2-docstring} haniwers.v1.cli.port.list
    :summary:
    ```
* - {py:obj}`test_port_connectivity <haniwers.v1.cli.port.test_port_connectivity>`
  - ```{autodoc2-docstring} haniwers.v1.cli.port.test_port_connectivity
    :summary:
    ```
* - {py:obj}`diagnose <haniwers.v1.cli.port.diagnose>`
  - ```{autodoc2-docstring} haniwers.v1.cli.port.diagnose
    :summary:
    ```
* - {py:obj}`_parse_flash_output <haniwers.v1.cli.port._parse_flash_output>`
  - ```{autodoc2-docstring} haniwers.v1.cli.port._parse_flash_output
    :summary:
    ```
````

### Data

````{list-table}
:class: autosummary longtable
:align: left

* - {py:obj}`app <haniwers.v1.cli.port.app>`
  - ```{autodoc2-docstring} haniwers.v1.cli.port.app
    :summary:
    ```
````

### API

````{py:data} app
:canonical: haniwers.v1.cli.port.app
:value: >
   'Typer(...)'

```{autodoc2-docstring} haniwers.v1.cli.port.app
```

````

`````{py:class} DetectorData
:canonical: haniwers.v1.cli.port.DetectorData

```{autodoc2-docstring} haniwers.v1.cli.port.DetectorData
```

````{py:attribute} top
:canonical: haniwers.v1.cli.port.DetectorData.top
:type: int
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.DetectorData.top
```

````

````{py:attribute} mid
:canonical: haniwers.v1.cli.port.DetectorData.mid
:type: int
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.DetectorData.mid
```

````

````{py:attribute} btm
:canonical: haniwers.v1.cli.port.DetectorData.btm
:type: int
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.DetectorData.btm
```

````

````{py:attribute} adc
:canonical: haniwers.v1.cli.port.DetectorData.adc
:type: int
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.DetectorData.adc
```

````

````{py:attribute} tmp
:canonical: haniwers.v1.cli.port.DetectorData.tmp
:type: float
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.DetectorData.tmp
```

````

````{py:attribute} atm
:canonical: haniwers.v1.cli.port.DetectorData.atm
:type: float
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.DetectorData.atm
```

````

````{py:attribute} hmd
:canonical: haniwers.v1.cli.port.DetectorData.hmd
:type: float
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.DetectorData.hmd
```

````

````{py:method} from_line(line: str) -> haniwers.v1.cli.port.DetectorData
:canonical: haniwers.v1.cli.port.DetectorData.from_line
:classmethod:

```{autodoc2-docstring} haniwers.v1.cli.port.DetectorData.from_line
```

````

````{py:method} is_valid() -> bool
:canonical: haniwers.v1.cli.port.DetectorData.is_valid

```{autodoc2-docstring} haniwers.v1.cli.port.DetectorData.is_valid
```

````

`````

`````{py:class} FlashInfo
:canonical: haniwers.v1.cli.port.FlashInfo

```{autodoc2-docstring} haniwers.v1.cli.port.FlashInfo
```

````{py:attribute} manufacturer
:canonical: haniwers.v1.cli.port.FlashInfo.manufacturer
:type: typing.Optional[str]
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.FlashInfo.manufacturer
```

````

````{py:attribute} device
:canonical: haniwers.v1.cli.port.FlashInfo.device
:type: typing.Optional[str]
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.FlashInfo.device
```

````

````{py:attribute} flash_size
:canonical: haniwers.v1.cli.port.FlashInfo.flash_size
:type: typing.Optional[str]
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.FlashInfo.flash_size
```

````

````{py:attribute} flash_voltage
:canonical: haniwers.v1.cli.port.FlashInfo.flash_voltage
:type: typing.Optional[str]
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.FlashInfo.flash_voltage
```

````

````{py:attribute} chip_type
:canonical: haniwers.v1.cli.port.FlashInfo.chip_type
:type: typing.Optional[str]
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.FlashInfo.chip_type
```

````

````{py:attribute} crystal
:canonical: haniwers.v1.cli.port.FlashInfo.crystal
:type: typing.Optional[str]
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.FlashInfo.crystal
```

````

````{py:attribute} mac_address
:canonical: haniwers.v1.cli.port.FlashInfo.mac_address
:type: typing.Optional[str]
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.FlashInfo.mac_address
```

````

````{py:method} is_healthy() -> bool
:canonical: haniwers.v1.cli.port.FlashInfo.is_healthy

```{autodoc2-docstring} haniwers.v1.cli.port.FlashInfo.is_healthy
```

````

````{py:method} get_diagnosis() -> str
:canonical: haniwers.v1.cli.port.FlashInfo.get_diagnosis

```{autodoc2-docstring} haniwers.v1.cli.port.FlashInfo.get_diagnosis
```

````

`````

`````{py:class} TestResult
:canonical: haniwers.v1.cli.port.TestResult

```{autodoc2-docstring} haniwers.v1.cli.port.TestResult
```

````{py:attribute} success
:canonical: haniwers.v1.cli.port.TestResult.success
:type: bool
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.TestResult.success
```

````

````{py:attribute} message
:canonical: haniwers.v1.cli.port.TestResult.message
:type: str
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.TestResult.message
```

````

````{py:attribute} response_time
:canonical: haniwers.v1.cli.port.TestResult.response_time
:type: typing.Optional[float]
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.TestResult.response_time
```

````

````{py:attribute} data_sample
:canonical: haniwers.v1.cli.port.TestResult.data_sample
:type: typing.Optional[str]
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.TestResult.data_sample
```

````

````{py:attribute} error_type
:canonical: haniwers.v1.cli.port.TestResult.error_type
:type: typing.Optional[str]
:value: >
   None

```{autodoc2-docstring} haniwers.v1.cli.port.TestResult.error_type
```

````

````{py:method} success_result(response_time: float, data_sample: str) -> haniwers.v1.cli.port.TestResult
:canonical: haniwers.v1.cli.port.TestResult.success_result
:classmethod:

```{autodoc2-docstring} haniwers.v1.cli.port.TestResult.success_result
```

````

````{py:method} failure_result(error_type: str, message: str) -> haniwers.v1.cli.port.TestResult
:canonical: haniwers.v1.cli.port.TestResult.failure_result
:classmethod:

```{autodoc2-docstring} haniwers.v1.cli.port.TestResult.failure_result
```

````

````{py:method} format_for_display() -> str
:canonical: haniwers.v1.cli.port.TestResult.format_for_display

```{autodoc2-docstring} haniwers.v1.cli.port.TestResult.format_for_display
```

````

`````

````{py:function} list() -> None
:canonical: haniwers.v1.cli.port.list

```{autodoc2-docstring} haniwers.v1.cli.port.list
```
````

````{py:function} test_port_connectivity(device: str = typer.Argument(..., help='Device path to test (e.g., /dev/ttyUSB0, COM3)'), baudrate: typing.Optional[int] = DeviceOptions.baudrate, timeout: typing.Optional[float] = DeviceOptions.timeout) -> None
:canonical: haniwers.v1.cli.port.test_port_connectivity

```{autodoc2-docstring} haniwers.v1.cli.port.test_port_connectivity
```
````

````{py:function} diagnose(device: str = typer.Argument(..., help='Device path to diagnose (e.g., /dev/ttyUSB0, COM3)'), baudrate: int = typer.Option(115200, help='Baud rate for communication'), flash_id: bool = typer.Option(False, '--flash-id', help='Show flash chip ID only'), chip_id: bool = typer.Option(False, '--chip-id', help='Show chip ID only'), summary: bool = typer.Option(False, '--summary', help='Show chip summary only')) -> None
:canonical: haniwers.v1.cli.port.diagnose

```{autodoc2-docstring} haniwers.v1.cli.port.diagnose
```
````

````{py:function} _parse_flash_output(output: str) -> haniwers.v1.cli.port.FlashInfo
:canonical: haniwers.v1.cli.port._parse_flash_output

```{autodoc2-docstring} haniwers.v1.cli.port._parse_flash_output
```
````
