# Reach Protocol Web Client

This library is designed to facilitate communication with devices that implement the Reach Protocol, using a user-defined transport method (e.g. BLE).  Currently-supported services are:
- Parameter Repository (discover, read, write, notify)
- Commands (discover, send)
- Command-Line Interface (send, receive)
- Files (discover, download, upload)
- Time (read, write)
- WiFi (discover, connect, disconnect)

# Usage

Communication with a Reach-enabled device is achieved by creating a new `DeviceAccess` object, which provides methods for accessing state, reacting to events, and sending commands to the device.
When creating a `DeviceAccess` object, a transport method must be provided that extends the `NetworkAccess` abstract class with implementations of the constructor and `sendBytes` method, along with calling the `received` method when bytes are received.

# Changelog
- 1.4.4
  - Bugfixes to `readParameter` and `readParameters` to ensure returned values reflect the response(s) provided by the device to the request itself, rather than the most up-to-date parameter values upon receipt of the last response.
  - Added deduplication logic for `readParameters` when a list of parameter IDs is provided.
- 1.4.3
  - Bugfix to handling of headers with reported size over 255 bytes.
- 1.4.2
  - Removed outdated "read after timestamp" configuration from `readParameters`.
  - Removed abstract `connect` method from `NetworkAccess` due to lack of utility in varied implementation contexts.
  - Removed `connect` method from `DeviceAccess` for above-stated reason.
  - Added optional configuration to `pingString` method for consistency.
  - Improved TSDoc documentation of `DeviceAccess` and `NetworkAccess`.
- 1.4.1
  - Bugfix to WiFi service
  - Bugfix to classic header selection
- 1.4.0
  - Implemented request state handling for file transfers, including substantial changes to the `FileTransfer` class.
  - Updated to Reach Protocol 0.2.3.
  - Transitioned to new header format, with use of "classic" headers configurable in DeviceAccess.
- 1.3.1
  - Implemented request state handling for all categories except file transfers, including error responses.  Core async functions now return upon a complete set of successful responses from the server, rather than upon the initial request being sent.
  - Updated structures to Reach Protocol 0.0.21
  - Exposed access to timeout in read/write file functions
  - Bugfixes to handling of file transfer init response
  - Bugfixes to file and command discovery
- 1.3.0
  - Added support for parameter notifications and time service
  - Updated device info structure and message definitions to Reach Protocol 0.0.12
- 1.2.0
  - Initial release with support for:
    - Get Device Info
    - Ping
    - Services:
      - Parameter Repository (discover, read, write)
      - Commands (discover, send)
      - Command-Line Interface
      - Files (discover, download, upload)
  - Known issue: `DeviceAccess` state not updated upon error reports and other device-reported failures.

