#include "hw_impl_unix.h"

struct UARTDriver create_unix_uart() {
  struct UARTDriver uart;
  uart.state = NULL;
  uart.reset = unix_uart_reset;
  uart.write = unix_uart_write;
  uart.read = unix_uart_read;
  return uart;
}

struct MotorDriver create_unix_motors() {
  struct MotorDriver motors;
  motors.state = NULL;
  motors.reset = unix_motor_reset;
  motors.write = unix_motor_write;
  return motors;
}

struct RCReceiverDriver create_unix_rc_receiver() {
  struct RCReceiverDriver rc_receivers;
  rc_receivers.state = NULL;
  rc_receivers.reset = unix_rc_receiver_reset;
  rc_receivers.read = unix_rc_receiver_read;
  return rc_receivers;
}

struct I2CDriver create_unix_i2c() {
  struct I2CDriver i2c;
  i2c.state = NULL;
  i2c.reset = unix_i2c_reset;
  i2c.write = unix_i2c_write;
  i2c.read = unix_i2c_read;
  return i2c;
}

struct TimerDriver create_unix_global_timer() {
  struct TimerDriver global_timer;
  global_timer.state = NULL;
  global_timer.reset = unix_global_timer_reset;
  global_timer.restart = unix_global_timer_restart;
  global_timer.read = unix_global_timer_read;
  return global_timer;
}

struct TimerDriver create_unix_axi_timer() {
  struct TimerDriver axi_timer;
  axi_timer.state = NULL;
  axi_timer.reset = unix_axi_timer_reset;
  axi_timer.restart = unix_axi_timer_restart;
  axi_timer.read = unix_axi_timer_read;
  return axi_timer;
}

struct LEDDriver create_unix_mio7_led() {
  struct LEDDriver mio7_led;
  mio7_led.state = NULL;
  mio7_led.reset = unix_mio7_led_reset;
  mio7_led.turn_on = unix_mio7_led_turn_on;
  mio7_led.turn_off = unix_mio7_led_turn_off;
  return mio7_led;
}

struct SystemDriver create_unix_system() {
  struct SystemDriver sys;
  sys.state = NULL;
  sys.reset = unix_system_reset;
  sys.sleep = unix_system_sleep;
  return sys;
}