made it actually work on real hardware
diff --git a/aos/linux_code/starter/starter.sh b/aos/linux_code/starter/starter.sh
index 33906c3..62338af 100755
--- a/aos/linux_code/starter/starter.sh
+++ b/aos/linux_code/starter/starter.sh
@@ -17,4 +17,4 @@
#DUMPCAP_STDOUT_FILE=$(date "/home/driver/tmp/robot_logs/stdout_dumpcap.%F_%H-%M-%S")
#chrt -o 0 bash -c "dumpcap -i eth0 -w ${DUMPCAP_LOG_FILE} -f 'not port 8080 and not net 10.9.71.13' > ${DUMPCAP_STDOUT_FILE}" &
-chrt -o 0 bash -c 'while true; /home/driver/robot_code/bin/netconsole /home/driver/tmp/robot_logs/netconsole-`date +%s`; done' &
+chrt -o 0 bash -c 'while true; do /home/driver/robot_code/bin/netconsole /home/driver/tmp/robot_logs/netconsole-`date +%s`; done' &
diff --git a/bbb_cape/src/bbb/cape_manager.cc b/bbb_cape/src/bbb/cape_manager.cc
index d9b1e28..923021b 100644
--- a/bbb_cape/src/bbb/cape_manager.cc
+++ b/bbb_cape/src/bbb/cape_manager.cc
@@ -22,14 +22,14 @@
}
void CapeManager::DoReset(bool bootloader) {
- static constexpr ::aos::time::Time kTimeout =
+ static constexpr ::aos::time::Time kWaitTime =
::aos::time::Time::InSeconds(0.1);
reset_.Set(false);
- ::aos::time::SleepFor(kTimeout);
- custom_bootloader_.Set(bootloader);
- ::aos::time::SleepFor(kTimeout);
+ ::aos::time::SleepFor(kWaitTime);
+ custom_bootloader_.Set(!bootloader);
+ ::aos::time::SleepFor(kWaitTime);
reset_.Set(true);
- ::aos::time::SleepFor(kTimeout);
+ ::aos::time::SleepFor(kWaitTime);
}
} // namespace bbb
diff --git a/bbb_cape/src/bbb/gpios.cc b/bbb_cape/src/bbb/gpios.cc
index 0aca731..3584d06 100644
--- a/bbb_cape/src/bbb/gpios.cc
+++ b/bbb_cape/src/bbb/gpios.cc
@@ -48,6 +48,15 @@
LOG(WARNING, "fclose(%p) failed with %d: %s\n", direction_handle, errno,
strerror(errno));
}
+
+ char value_path[64];
+ snprintf(value_path, sizeof(value_path),
+ "/sys/class/gpio/gpio%d/value", kernel_pin_);
+ value_handle_ = fopen(value_path, "w+");
+ if (value_handle_ == NULL) {
+ LOG(FATAL, "fopen(%s, \"rw\") failed with %d: %s\n",
+ value_path, errno, strerror(errno));
+ }
}
GpioPin::~GpioPin() {
diff --git a/bbb_cape/src/bbb/gpo.cc b/bbb_cape/src/bbb/gpo.cc
index f02ded3..d17abe7 100644
--- a/bbb_cape/src/bbb/gpo.cc
+++ b/bbb_cape/src/bbb/gpo.cc
@@ -3,6 +3,7 @@
#include <stdio.h>
#include <errno.h>
#include <string.h>
+#include <unistd.h>
#include "aos/common/logging/logging.h"
@@ -12,11 +13,13 @@
: GpioPin(bank, pin, false, initial_value) {}
void Gpo::Set(bool high) {
- rewind(value_handle_);
- if (fputc(high ? '1' : '0', value_handle_) < 0) {
+ // TODO(brians): Figure out why this breaks it.
+ //rewind(value_handle_);
+ if (fputc(high ? '1' : '0', value_handle_) == EOF) {
LOG(FATAL, "fputc(%c, %p) for pin (%d,%d) failed with %d: %s\n",
high ? '1': '0', value_handle_, bank_, pin_, errno, strerror(errno));
}
+ sync();
}
} // namespace bbb
diff --git a/bbb_cape/src/bbb/hex_byte_reader.cc b/bbb_cape/src/bbb/hex_byte_reader.cc
index 968e771..7c6a28f 100644
--- a/bbb_cape/src/bbb/hex_byte_reader.cc
+++ b/bbb_cape/src/bbb/hex_byte_reader.cc
@@ -24,6 +24,7 @@
HexByteReader::HexByteReader(const ::std::string &filename)
: parser_status_(kParser.init()) {
+ LOG(DEBUG, "reading hex file %s\n", filename.c_str());
if (parser_status_ == NULL) {
LOG(FATAL, "%s parser failed to initialize.\n", kParser.name);
}
diff --git a/bbb_cape/src/bbb/sensor_reader.cc b/bbb_cape/src/bbb/sensor_reader.cc
index 13d6add..2e40903 100644
--- a/bbb_cape/src/bbb/sensor_reader.cc
+++ b/bbb_cape/src/bbb/sensor_reader.cc
@@ -33,13 +33,13 @@
}
const DataStruct *SensorReader::ReadPacket() {
- static constexpr ::aos::time::Time kTimeout =
- ::aos::time::Time::InSeconds(0.5);
+ static constexpr ::aos::time::Time kResetTimeout =
+ ::aos::time::Time::InSeconds(2.5);
while (true) {
- ::aos::time::Time next_timeout = last_received_time_ + kTimeout;
+ ::aos::time::Time next_timeout = last_received_time_ + kResetTimeout;
if (next_timeout <= ::aos::time::Time::Now()) {
- LOG(WARNING, "too long since good packet received\n");
+ LOG(WARNING, "Too long since good packet received. Resetting.\n");
manager_.Reset();
ResetHappened();
}
diff --git a/bbb_cape/src/flasher/flasher.gyp b/bbb_cape/src/flasher/flasher.gyp
index dea4e5c..2d506b8 100644
--- a/bbb_cape/src/flasher/flasher.gyp
+++ b/bbb_cape/src/flasher/flasher.gyp
@@ -16,6 +16,8 @@
'dependencies': [
'<(EXTERNALS):stm32flash',
'<(AOS)/build/aos.gyp:logging',
+ '<(DEPTH)/bbb_cape/src/bbb/bbb.gyp:gpios',
+ '<(AOS)/common/common.gyp:time',
],
},
],
diff --git a/bbb_cape/src/flasher/stm32_flasher.cc b/bbb_cape/src/flasher/stm32_flasher.cc
index ddddb1b..0f081f5 100644
--- a/bbb_cape/src/flasher/stm32_flasher.cc
+++ b/bbb_cape/src/flasher/stm32_flasher.cc
@@ -8,6 +8,7 @@
#include "aos/common/logging/logging.h"
#include "aos/common/logging/logging_impl.h"
+#include "aos/common/time.h"
extern "C" {
#include "stm32flash/parsers/parser.h"
@@ -17,11 +18,26 @@
#include "stm32flash/init.h"
}
+#include "bbb/gpo.h"
+
int main(int argc, char **argv) {
::aos::logging::Init();
::aos::logging::AddImplementation(
new ::aos::logging::StreamLogImplementation(stdout));
+ {
+ ::bbb::Gpo reset(2, 5, true);
+ ::bbb::Gpo bootloader(2, 2, false);
+ static constexpr ::aos::time::Time kWaitTime =
+ ::aos::time::Time::InSeconds(0.1);
+ reset.Set(false);
+ ::aos::time::SleepFor(kWaitTime);
+ bootloader.Set(false);
+ ::aos::time::SleepFor(kWaitTime);
+ reset.Set(true);
+ ::aos::time::SleepFor(kWaitTime);
+ }
+
if (argc < 2) {
fputs("Need an argument saying which target to download.\n", stderr);
return 1;
diff --git a/frc971/input/sensor_receiver.cc b/frc971/input/sensor_receiver.cc
index eb2bb9a..80c1c9f 100644
--- a/frc971/input/sensor_receiver.cc
+++ b/frc971/input/sensor_receiver.cc
@@ -97,7 +97,7 @@
int main() {
::aos::Init(::bbb::SensorReader::kRelativePriority);
- ::bbb::SensorReader reader("main");
+ ::bbb::SensorReader reader("comp");
while (true) {
::frc971::PacketReceived(reader.ReadPacket(), reader.GetCapeTimestamp());
}