split the code out to make multiple robots easier
diff --git a/bbb_cape/src/cape/Makefile b/bbb_cape/src/cape/Makefile
index 35aeb0a..710cfcf 100644
--- a/bbb_cape/src/cape/Makefile
+++ b/bbb_cape/src/cape/Makefile
@@ -29,7 +29,7 @@
-nostartfiles -nostdlib \
-mthumb \
-OBJECTS_main := main \
+OBJECTS_main_common := main \
uart_common \
uart_dma \
uart \
@@ -45,7 +45,10 @@
uart_common \
uart_byte \
-OUTPUTS := main bootloader
+OBJECTS_main_test := $(OBJECTS_main_common) \
+ robot_test \
+
+OUTPUTS := main_test bootloader
# The sort is to remove duplicates because Make warns about those.
OBJECTS := $(sort $(foreach output,$(OUTPUTS),$(OBJECTS_$(output))))
diff --git a/bbb_cape/src/cape/analog.c b/bbb_cape/src/cape/analog.c
index 2f2602b..0ccd2f0 100644
--- a/bbb_cape/src/cape/analog.c
+++ b/bbb_cape/src/cape/analog.c
@@ -48,6 +48,7 @@
TIM->CR1 = TIM_CR1_UDIS;
TIM->CCR1 = 1;
TIM->EGR = TIM_EGR_UG;
+ TIM->CR1 |= TIM_CR1_CEN;
}
}
diff --git a/bbb_cape/src/cape/fill_packet.c b/bbb_cape/src/cape/fill_packet.c
index 0f49bd4..b525c2f 100644
--- a/bbb_cape/src/cape/fill_packet.c
+++ b/bbb_cape/src/cape/fill_packet.c
@@ -13,6 +13,7 @@
#include "cape/gyro.h"
#include "cape/led.h"
#include "cape/analog.h"
+#include "cape/robot.h"
#define TIMESTAMP_TIM TIM6
#define RCC_APB1ENR_TIMESTAMP_TIMEN RCC_APB1ENR_TIM6EN
@@ -40,18 +41,7 @@
packet->zeroing_gyro = !gyro_output.zeroed;
packet->bad_gyro = gyro_output.gyro_bad;
- packet->main.encoders[0] = encoder_read(0);
- packet->main.encoders[1] = encoder_read(1);
- packet->main.encoders[2] = encoder_read(2);
- packet->main.encoders[3] = encoder_read(3);
- packet->main.encoders[4] = encoder_read(4);
- packet->main.encoders[5] = encoder_read(5);
- packet->main.encoders[6] = encoder_read(6);
- packet->main.encoders[7] = encoder_read(7);
-
- for (int i = 0; i < 8; ++i) {
- packet->main.analogs[i] = analog_get(i);
- }
+ robot_fill_packet(packet);
}
// Fills the new packet with data.
@@ -71,7 +61,7 @@
memcpy(&p, &packet, sizeof(void *));
data.checksum = crc_calculate(p, sizeof(*packet) / 4);
- memset(buffer, 0, 4);
+ ((uint32_t *)buffer)[0] = 0;
cows_stuff(&data, sizeof(data), buffer + 4);
}
diff --git a/bbb_cape/src/cape/gyro.c b/bbb_cape/src/cape/gyro.c
index 55c3e5f..80accb9 100644
--- a/bbb_cape/src/cape/gyro.c
+++ b/bbb_cape/src/cape/gyro.c
@@ -81,6 +81,7 @@
state = new_state;
TIM->CCR1 = time;
TIM->EGR = TIM_EGR_UG;
+ TIM->CR1 |= TIM_CR1_CEN;
}
static void gyro_setup_failed(void) {
diff --git a/bbb_cape/src/cape/main_test.ld b/bbb_cape/src/cape/main_test.ld
new file mode 120000
index 0000000..af355cc
--- /dev/null
+++ b/bbb_cape/src/cape/main_test.ld
@@ -0,0 +1 @@
+main.ld
\ No newline at end of file
diff --git a/bbb_cape/src/cape/robot.h b/bbb_cape/src/cape/robot.h
new file mode 100644
index 0000000..02da3e2
--- /dev/null
+++ b/bbb_cape/src/cape/robot.h
@@ -0,0 +1,11 @@
+#ifndef CAPE_ROBOT_H_
+#define CAPE_ROBOT_H_
+
+// This header file is for the robot-specific files which should be named
+// robot_name.c. It documents what functions each robot should implement.
+
+#include "cape/fill_packet.h"
+
+void robot_fill_packet(struct DataStruct *packet);
+
+#endif // CAPE_ROBOT_H_
diff --git a/bbb_cape/src/cape/robot_test.c b/bbb_cape/src/cape/robot_test.c
new file mode 100644
index 0000000..02c1580
--- /dev/null
+++ b/bbb_cape/src/cape/robot_test.c
@@ -0,0 +1,22 @@
+#include "cape/robot.h"
+
+#include "cape/encoder.h"
+#include "cape/analog.h"
+#include "cape/digital.h"
+
+void robot_fill_packet(struct DataStruct *packet) {
+ packet->main.encoders[0] = encoder_read(0);
+ packet->main.encoders[1] = encoder_read(1);
+ packet->main.encoders[2] = encoder_read(2);
+ packet->main.encoders[3] = encoder_read(3);
+ packet->main.encoders[4] = encoder_read(4);
+ packet->main.encoders[5] = encoder_read(5);
+ packet->main.encoders[6] = encoder_read(6);
+ packet->main.encoders[7] = encoder_read(7);
+
+ for (int i = 0; i < 8; ++i) {
+ packet->main.analogs[i] = analog_get(i);
+ }
+
+ // TODO(brians): digitals
+}