Remove initialized flag in CAN socket class (#16)
Removed the redundant `initialized_` flag, which was not properly set or unset when the `CANSocket` class was reinitialized. It has been replaced with a direct check on `socket_fd_`. Additionally, `socket_fd_` is now always reset after being closed. Signed-off-by: Alfi Maulana <alfi.maulana.f@gmail.com>
This commit is contained in:
parent
ae54e19dff
commit
54c5a295d2
@ -45,7 +45,7 @@ public:
|
|||||||
int get_socket_fd() const { return socket_fd_; }
|
int get_socket_fd() const { return socket_fd_; }
|
||||||
const std::string& get_interface() const { return interface_; }
|
const std::string& get_interface() const { return interface_; }
|
||||||
bool is_canfd_enabled() const { return fd_enabled_; }
|
bool is_canfd_enabled() const { return fd_enabled_; }
|
||||||
bool is_initialized() const { return initialized_; }
|
bool is_initialized() const { return socket_fd_ >= 0; }
|
||||||
|
|
||||||
// Direct frame operations for Python bindings
|
// Direct frame operations for Python bindings
|
||||||
ssize_t read_raw_frame(void* buffer, size_t buffer_size);
|
ssize_t read_raw_frame(void* buffer, size_t buffer_size);
|
||||||
@ -69,7 +69,6 @@ protected:
|
|||||||
int socket_fd_;
|
int socket_fd_;
|
||||||
std::string interface_;
|
std::string interface_;
|
||||||
bool fd_enabled_;
|
bool fd_enabled_;
|
||||||
bool initialized_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace openarm::canbus
|
} // namespace openarm::canbus
|
||||||
|
|||||||
@ -27,11 +27,10 @@
|
|||||||
namespace openarm::canbus {
|
namespace openarm::canbus {
|
||||||
|
|
||||||
CANSocket::CANSocket(const std::string& interface, bool enable_fd)
|
CANSocket::CANSocket(const std::string& interface, bool enable_fd)
|
||||||
: socket_fd_(-1), interface_(interface), fd_enabled_(enable_fd), initialized_(false) {
|
: socket_fd_(-1), interface_(interface), fd_enabled_(enable_fd) {
|
||||||
if (!initialize_socket(interface)) {
|
if (!initialize_socket(interface)) {
|
||||||
throw CANSocketException("Failed to initialize socket for interface: " + interface);
|
throw CANSocketException("Failed to initialize socket for interface: " + interface);
|
||||||
}
|
}
|
||||||
initialized_ = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CANSocket::~CANSocket() { cleanup(); }
|
CANSocket::~CANSocket() { cleanup(); }
|
||||||
@ -50,7 +49,7 @@ bool CANSocket::initialize_socket(const std::string& interface) {
|
|||||||
ifr.ifr_name[IFNAMSIZ - 1] = '\0';
|
ifr.ifr_name[IFNAMSIZ - 1] = '\0';
|
||||||
|
|
||||||
if (ioctl(socket_fd_, SIOCGIFINDEX, &ifr) < 0) {
|
if (ioctl(socket_fd_, SIOCGIFINDEX, &ifr) < 0) {
|
||||||
close(socket_fd_);
|
cleanup();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,13 +61,13 @@ bool CANSocket::initialize_socket(const std::string& interface) {
|
|||||||
int enable_canfd = 1;
|
int enable_canfd = 1;
|
||||||
if (setsockopt(socket_fd_, SOL_CAN_RAW, CAN_RAW_FD_FRAMES, &enable_canfd,
|
if (setsockopt(socket_fd_, SOL_CAN_RAW, CAN_RAW_FD_FRAMES, &enable_canfd,
|
||||||
sizeof(enable_canfd)) < 0) {
|
sizeof(enable_canfd)) < 0) {
|
||||||
close(socket_fd_);
|
cleanup();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (bind(socket_fd_, reinterpret_cast<struct sockaddr*>(&addr), sizeof(addr)) < 0) {
|
if (bind(socket_fd_, reinterpret_cast<struct sockaddr*>(&addr), sizeof(addr)) < 0) {
|
||||||
close(socket_fd_);
|
cleanup();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +75,7 @@ bool CANSocket::initialize_socket(const std::string& interface) {
|
|||||||
timeout.tv_sec = 0;
|
timeout.tv_sec = 0;
|
||||||
timeout.tv_usec = 100;
|
timeout.tv_usec = 100;
|
||||||
if (setsockopt(socket_fd_, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)) < 0) {
|
if (setsockopt(socket_fd_, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)) < 0) {
|
||||||
close(socket_fd_);
|
cleanup();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,19 +83,19 @@ bool CANSocket::initialize_socket(const std::string& interface) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CANSocket::cleanup() {
|
void CANSocket::cleanup() {
|
||||||
if (socket_fd_ > 0) {
|
if (socket_fd_ >= 0) {
|
||||||
close(socket_fd_);
|
close(socket_fd_);
|
||||||
socket_fd_ = -1;
|
socket_fd_ = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t CANSocket::read_raw_frame(void* buffer, size_t buffer_size) {
|
ssize_t CANSocket::read_raw_frame(void* buffer, size_t buffer_size) {
|
||||||
if (!initialized_) return -1;
|
if (!is_initialized()) return -1;
|
||||||
return read(socket_fd_, buffer, buffer_size);
|
return read(socket_fd_, buffer, buffer_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t CANSocket::write_raw_frame(const void* buffer, size_t frame_size) {
|
ssize_t CANSocket::write_raw_frame(const void* buffer, size_t frame_size) {
|
||||||
if (!initialized_) return -1;
|
if (!is_initialized()) return -1;
|
||||||
return write(socket_fd_, buffer, frame_size);
|
return write(socket_fd_, buffer, frame_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,19 +108,19 @@ bool CANSocket::write_canfd_frame(const canfd_frame& frame) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool CANSocket::read_can_frame(can_frame& frame) {
|
bool CANSocket::read_can_frame(can_frame& frame) {
|
||||||
if (!initialized_) return false;
|
if (!is_initialized()) return false;
|
||||||
ssize_t bytes_read = read(socket_fd_, &frame, sizeof(frame));
|
ssize_t bytes_read = read(socket_fd_, &frame, sizeof(frame));
|
||||||
return bytes_read == sizeof(frame);
|
return bytes_read == sizeof(frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CANSocket::read_canfd_frame(canfd_frame& frame) {
|
bool CANSocket::read_canfd_frame(canfd_frame& frame) {
|
||||||
if (!initialized_) return false;
|
if (!is_initialized()) return false;
|
||||||
ssize_t bytes_read = read(socket_fd_, &frame, sizeof(frame));
|
ssize_t bytes_read = read(socket_fd_, &frame, sizeof(frame));
|
||||||
return bytes_read == sizeof(frame);
|
return bytes_read == sizeof(frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CANSocket::is_data_available(int timeout_us) {
|
bool CANSocket::is_data_available(int timeout_us) {
|
||||||
if (!initialized_) return false;
|
if (!is_initialized()) return false;
|
||||||
|
|
||||||
fd_set read_fds;
|
fd_set read_fds;
|
||||||
struct timeval timeout;
|
struct timeval timeout;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user