Add a can_logger for the orin
Signed-off-by: Maxwell Henderson <mxwhenderson@gmail.com>
Change-Id: I3e3f0d5acacafb4f4d26e2c0ba50c03ace9716dc
diff --git a/frc971/can_logger/BUILD b/frc971/can_logger/BUILD
index f568aa9..7c4a319 100644
--- a/frc971/can_logger/BUILD
+++ b/frc971/can_logger/BUILD
@@ -21,9 +21,10 @@
"can_logger.cc",
"can_logger.h",
],
+ visibility = ["//visibility:public"],
deps = [
":can_logging_fbs",
- "//aos/events:event_loop",
+ "//aos/events:shm_event_loop",
"//aos/scoped:scoped_fd",
"@com_github_google_glog//:glog",
],
diff --git a/frc971/can_logger/can_logger.cc b/frc971/can_logger/can_logger.cc
index 3f71b44..7a6c0fe 100644
--- a/frc971/can_logger/can_logger.cc
+++ b/frc971/can_logger/can_logger.cc
@@ -3,10 +3,11 @@
namespace frc971 {
namespace can_logger {
-CanLogger::CanLogger(aos::EventLoop *event_loop,
+CanLogger::CanLogger(aos::ShmEventLoop *event_loop,
+ std::string_view channel_name,
std::string_view interface_name)
: fd_(socket(PF_CAN, SOCK_RAW | SOCK_NONBLOCK, CAN_RAW)),
- frames_sender_(event_loop->MakeSender<CanFrame>("/can")) {
+ frames_sender_(event_loop->MakeSender<CanFrame>(channel_name)) {
struct ifreq ifr;
strcpy(ifr.ifr_name, interface_name.data());
PCHECK(ioctl(fd_.get(), SIOCGIFINDEX, &ifr) == 0)
@@ -32,9 +33,7 @@
CHECK_EQ(opt_size, sizeof(recieve_buffer_size));
VLOG(0) << "CAN recieve bufffer is " << recieve_buffer_size << " bytes large";
- aos::TimerHandler *timer_handler = event_loop->AddTimer([this]() { Poll(); });
- timer_handler->set_name("CAN logging Loop");
- timer_handler->Schedule(event_loop->monotonic_now(), kPollPeriod);
+ event_loop->epoll()->OnReadable(fd_, [this]() { Poll(); });
}
void CanLogger::Poll() {
diff --git a/frc971/can_logger/can_logger.h b/frc971/can_logger/can_logger.h
index cf37841..432bac8 100644
--- a/frc971/can_logger/can_logger.h
+++ b/frc971/can_logger/can_logger.h
@@ -11,7 +11,7 @@
#include <chrono>
-#include "aos/events/event_loop.h"
+#include "aos/events/shm_event_loop.h"
#include "aos/realtime.h"
#include "aos/scoped/scoped_fd.h"
#include "frc971/can_logger/can_logging_generated.h"
@@ -27,7 +27,8 @@
static constexpr std::chrono::milliseconds kPollPeriod =
std::chrono::milliseconds(100);
- CanLogger(aos::EventLoop *event_loop,
+ CanLogger(aos::ShmEventLoop *event_loop,
+ std::string_view channel_name = "/can",
std::string_view interface_name = "can0");
CanLogger(const CanLogger &) = delete;
diff --git a/frc971/can_logger/can_logger_main.cc b/frc971/can_logger/can_logger_main.cc
index 42c7162..b8f3f3f 100644
--- a/frc971/can_logger/can_logger_main.cc
+++ b/frc971/can_logger/can_logger_main.cc
@@ -10,7 +10,7 @@
::aos::ShmEventLoop event_loop(&config.message());
- frc971::can_logger::CanLogger can_logger(&event_loop, "can0");
+ frc971::can_logger::CanLogger can_logger(&event_loop, "/can", "can0");
event_loop.Run();
diff --git a/y2024/BUILD b/y2024/BUILD
index 010b17c..7e28c19 100644
--- a/y2024/BUILD
+++ b/y2024/BUILD
@@ -71,6 +71,7 @@
"//aos/starter:irq_affinity",
"//y2024/vision:image_logger",
"//aos/events/logging:logger_main",
+ "//y2024/orin:can_logger",
],
target_compatible_with = ["//tools/platforms/hardware:raspberry_pi"],
target_type = "orin",
@@ -102,6 +103,7 @@
"//aos/network:message_bridge_client_fbs",
"//aos/network:message_bridge_server_fbs",
"//y2024/constants:constants_fbs",
+ "//frc971/can_logger:can_logging_fbs",
"//aos/network:timestamp_fbs",
"//aos/network:remote_message_fbs",
],
diff --git a/y2024/orin/BUILD b/y2024/orin/BUILD
new file mode 100644
index 0000000..b8ee2bc
--- /dev/null
+++ b/y2024/orin/BUILD
@@ -0,0 +1,15 @@
+cc_binary(
+ name = "can_logger",
+ srcs = [
+ "can_logger_main.cc",
+ ],
+ target_compatible_with = ["@platforms//cpu:arm64"],
+ visibility = ["//visibility:public"],
+ deps = [
+ "//aos:init",
+ "//aos/events:shm_event_loop",
+ "//aos/time",
+ "//frc971/can_logger:can_logger_lib",
+ "@com_github_google_glog//:glog",
+ ],
+)
diff --git a/y2024/orin/can_logger_main.cc b/y2024/orin/can_logger_main.cc
new file mode 100644
index 0000000..febed5f
--- /dev/null
+++ b/y2024/orin/can_logger_main.cc
@@ -0,0 +1,20 @@
+#include "aos/events/shm_event_loop.h"
+#include "aos/init.h"
+#include "frc971/can_logger/can_logger.h"
+
+int main(int argc, char **argv) {
+ ::aos::InitGoogle(&argc, &argv);
+
+ aos::FlatbufferDetachedBuffer<aos::Configuration> config =
+ aos::configuration::ReadConfig("aos_config.json");
+
+ ::aos::ShmEventLoop event_loop(&config.message());
+
+ frc971::can_logger::CanLogger cana_logger(&event_loop, "/can/cana", "cana");
+ frc971::can_logger::CanLogger canb_logger(&event_loop, "/can/canb", "canb");
+ frc971::can_logger::CanLogger canc_logger(&event_loop, "/can/canc", "canc");
+
+ event_loop.Run();
+
+ return 0;
+}
diff --git a/y2024/y2024_imu.json b/y2024/y2024_imu.json
index d2b5faa..5094d64 100644
--- a/y2024/y2024_imu.json
+++ b/y2024/y2024_imu.json
@@ -117,6 +117,30 @@
"max_size": 200
},
{
+ "name": "/can/cana",
+ "type": "frc971.can_logger.CanFrame",
+ "source_node": "imu",
+ "frequency": 6000,
+ "num_senders": 2,
+ "max_size": 200
+ },
+ {
+ "name": "/can/canb",
+ "type": "frc971.can_logger.CanFrame",
+ "source_node": "imu",
+ "frequency": 6000,
+ "num_senders": 2,
+ "max_size": 200
+ },
+ {
+ "name": "/can/canc",
+ "type": "frc971.can_logger.CanFrame",
+ "source_node": "imu",
+ "frequency": 6000,
+ "num_senders": 2,
+ "max_size": 200
+ },
+ {
"name": "/localizer",
"type": "frc971.IMUValuesBatch",
"source_node": "imu",
@@ -187,6 +211,13 @@
]
},
{
+ "name": "can_logger",
+ "executable_name": "can_logger",
+ "nodes": [
+ "imu"
+ ]
+ },
+ {
"name": "web_proxy",
"executable_name": "web_proxy_main",
"args": [