From 8920e1a4fdc2d24e6ac03bf1070eabf059d0b69f Mon Sep 17 00:00:00 2001 From: "ucart@co3050-12" <dawehr@iastate.edu> Date: Fri, 21 Apr 2017 22:13:18 -0500 Subject: [PATCH] WIP: Work on a second UART, separating comm and gps drivers. --- quad/src/quad_app/hw_iface.h | 15 ++++++++++ quad/src/quad_app/type_def.h | 13 ++++++++- .../real_quad/src/hw_impl_zybo.c | 29 ++++++++++++++++++- quad/xsdk_workspace/real_quad/src/main.c | 3 +- 4 files changed, 57 insertions(+), 3 deletions(-) diff --git a/quad/src/quad_app/hw_iface.h b/quad/src/quad_app/hw_iface.h index 2880dcc23..38dbe6dad 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 ccf8a677c..d5bd1d45e 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 78cf4aafd..396c07c46 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 f2562cb6f..d192b9c6c 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(); -- GitLab