diff --git a/quad/src/quad_app/hw_iface.h b/quad/src/quad_app/hw_iface.h index 2880dcc234d23358967189f99834bd8060d2dfe3..38dbe6dade16b28d5d945f584c13aef0800f1e4f 100644 --- a/quad/src/quad_app/hw_iface.h +++ b/quad/src/quad_app/hw_iface.h @@ -21,6 +21,7 @@ struct gam; struct lidar; struct px4flow; +struct gps; struct RCReceiverDriver { void *state; @@ -36,6 +37,7 @@ struct MotorDriver { struct UARTDriver { void *state; + int devId; int (*reset)(struct UARTDriver *self); int (*write)(struct UARTDriver *self, unsigned char c); int (*read)(struct UARTDriver *self, unsigned char *c); @@ -93,4 +95,17 @@ struct OpticalFlowDriver { int (*read)(struct OpticalFlowDriver *self, struct px4flow *of); }; +struct GPSDriver { + struct UARTDriver * uart; + int (*reset)(struct GPSDriver *self, struct gps *gps); + int (*read)(struct GPSDriver *self, struct gps *gps); +}; + +struct CommDriver { + struct UARTDriver * uart; + int (*reset)(struct CommDriver *self); + int (*write)(struct CommDriver *self, unsigned char c); + int (*read)(struct CommDriver *self, unsigned char *c); +}; + #endif diff --git a/quad/src/quad_app/type_def.h b/quad/src/quad_app/type_def.h index ccf8a677cfe88abb4bb4705ff0240a7cce6fce4c..d5bd1d45e240dd71e06ac784fc4c75e8b4e406d0 100644 --- a/quad/src/quad_app/type_def.h +++ b/quad/src/quad_app/type_def.h @@ -131,6 +131,14 @@ typedef struct px4flow { SensorError_t error; } px4flow_t; +typedef struct gps { + double lat, lon; + double vel, course; + + int fixed; + unsigned int numSats; +} gps_t; + typedef struct PID_t { float current_point; // Current value of the system float setpoint; // Desired value of the system @@ -454,7 +462,10 @@ typedef struct hardware_t { struct I2CDriver i2c_1; struct RCReceiverDriver rc_receiver; struct MotorDriver motors; - struct UARTDriver uart; + struct UARTDriver uart_0; + struct UARTDriver uart_1; + struct GPSDriver gps; + struct CommDriver comm; struct TimerDriver global_timer; struct TimerDriver axi_timer; struct LEDDriver mio7_led; diff --git a/quad/xsdk_workspace/real_quad/src/hw_impl_zybo.c b/quad/xsdk_workspace/real_quad/src/hw_impl_zybo.c index 78cf4aafd4f291db173f595de9b0a826f6a929c7..396c07c46f61fb4a3fb779848af988cc06a6d4f4 100644 --- a/quad/xsdk_workspace/real_quad/src/hw_impl_zybo.c +++ b/quad/xsdk_workspace/real_quad/src/hw_impl_zybo.c @@ -1,7 +1,8 @@ #include "hw_impl_zybo.h" -struct UARTDriver create_zybo_uart() { +struct UARTDriver create_zybo_uart(int devId) { struct UARTDriver uart; + uart.devId = devId; uart.state = NULL; uart.reset = zybo_uart_reset; uart.write = zybo_uart_write; @@ -9,6 +10,32 @@ struct UARTDriver create_zybo_uart() { return uart; } +struct GPSDriver create_zybo_gps(struct UARTDriver *uart) { + struct GPSDriver gps; + gps.uart = uart; + gps.reset = zybo_gps_reset; + gps.read = zybo_gps_read; + return gps; +} + +struct CommDriver create_zybo_comm(struct UARTDriver *uart) { + struct CommDriver comm; + comm.uart = uart; + comm.reset = zybo_comm_reset; + comm.read = zybo_comm_read; + return comm; +} + +/* + * struct LidarDriver create_zybo_lidar(struct I2CDriver *i2c) { + struct LidarDriver lidar; + lidar.i2c = i2c; + lidar.reset = zybo_lidar_reset; + lidar.read = zybo_lidar_read; + return lidar; +} + */ + struct MotorDriver create_zybo_motors() { struct MotorDriver motors; motors.state = NULL; diff --git a/quad/xsdk_workspace/real_quad/src/main.c b/quad/xsdk_workspace/real_quad/src/main.c index f2562cb6f639affb480b78216cf99f54b5835020..d192b9c6c7dcb4b28eb801857a87eeed4ae1313b 100644 --- a/quad/xsdk_workspace/real_quad/src/main.c +++ b/quad/xsdk_workspace/real_quad/src/main.c @@ -9,7 +9,8 @@ int setup_hardware(hardware_t *hardware) { hardware->rc_receiver = create_zybo_rc_receiver(); hardware->motors = create_zybo_motors(); - hardware->uart = create_zybo_uart(); + hardware->uart_0 = create_zybo_uart(0); + hardware->uart_1 = create_zybo_uart(1); hardware->global_timer = create_zybo_global_timer(); hardware->axi_timer = create_zybo_axi_timer(); hardware->mio7_led = create_zybo_mio7_led();