// (C) 2026 Philip Endecott.
// Distributed under the Boost Software License, Version 1.0.
// See accompanying file LICENCE.txt or copy at https://www.boost.org/LICENSE_1_0.txt

#ifndef lipstick_modbus_hh
#define lipstick_modbus_hh

#include "power.hh"
#include "vic.hh"


constexpr auto modbus_power_bits = PCUART1 | PCTIM0;


void setup_modbus(int slave_address);

IRQ_HANDLER
void modbus_uart_irq_handler();

IRQ_HANDLER
void modbus_timer_irq_handler();


void modbus_loop();


struct get_modbus_register_return_t {
  bool ok;
  uint16_t value;
};

get_modbus_register_return_t get_modbus_register(uint16_t address);

enum SetRegisterStatus { ok, invalid_address, invalid_value };

SetRegisterStatus set_modbus_register(uint16_t address, uint16_t value);


#endif

