-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(ros2agnocast): add topic info cmd base (#442)
* feat: add base Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * feat: add comment Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * feat: change topic info ret Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * feat: response to cppcheck Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * feat: remove topic list Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * fix: remove empty line Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * fix: decrease node name buffer size Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * feat: change display format Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * feat: move getting ros2 topic list Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * fix: display format mistake Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * feat: remove null check before free Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * feat: move print to another functions Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * fix: MAX_TOPIC_INFO_RET_NUM Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * fix: include algorithm and std::max Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * fix: copy latest MAX_PUBLISHER/SUBSCRIBER_NUM Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * feat: add none check Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * feat: remove unnecessary arg Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * feat(ros2agnocast): reimplement topic info (#465) * feat: use ioctl Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * fix: add close fd Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> --------- Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * feat(kmod): add get topic pub sub cmd (#457) * feat: add topic info cmds Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * fix: use MAX_TOPIC_INFO_RET_NUM Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * fix: redefine MAX_TOPIC_INFO_RET_NUM Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * feat: once copy_to_usr Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * fix: response to cppcheck Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * fix: add kfree Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * tmp: write space Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> * feat: pre-commit Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> --------- Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com> --------- Signed-off-by: TetsuKawa <kawaguchitnon@icloud.com>
- Loading branch information
Showing
7 changed files
with
465 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
#include "agnocast_ioctl.hpp" | ||
|
||
#include <fcntl.h> | ||
#include <sys/ioctl.h> | ||
#include <unistd.h> | ||
|
||
#include <cstdlib> | ||
#include <cstring> | ||
#include <string> | ||
#include <vector> | ||
|
||
extern "C" { | ||
|
||
struct topic_info_ret * get_agnocast_sub_nodes(const char * topic_name, int * topic_info_ret_count) | ||
{ | ||
*topic_info_ret_count = 0; | ||
|
||
int fd = open("/dev/agnocast", O_RDONLY); | ||
if (fd < 0) { | ||
perror("Failed to open /dev/agnocast"); | ||
return nullptr; | ||
} | ||
|
||
struct topic_info_ret * agnocast_topic_info_ret_buffer = static_cast<struct topic_info_ret *>( | ||
malloc(MAX_TOPIC_INFO_RET_NUM * sizeof(struct topic_info_ret))); | ||
|
||
if (agnocast_topic_info_ret_buffer == nullptr) { | ||
fprintf(stderr, "Memory allocation failed\n"); | ||
close(fd); | ||
return nullptr; | ||
} | ||
|
||
union ioctl_topic_info_args topic_info_args = {}; | ||
topic_info_args.topic_name = topic_name; | ||
topic_info_args.topic_info_ret_buffer_addr = | ||
reinterpret_cast<uint64_t>(agnocast_topic_info_ret_buffer); | ||
if (ioctl(fd, AGNOCAST_GET_TOPIC_SUBSCRIBER_INFO_CMD, &topic_info_args) < 0) { | ||
perror("AGNOCAST_GET_TOPIC_SUBSCRIBER_INFO_CMD failed"); | ||
free(agnocast_topic_info_ret_buffer); | ||
close(fd); | ||
return nullptr; | ||
} | ||
|
||
if (topic_info_args.ret_topic_info_ret_num == 0) { | ||
free(agnocast_topic_info_ret_buffer); | ||
close(fd); | ||
return nullptr; | ||
} | ||
|
||
*topic_info_ret_count = static_cast<int>(topic_info_args.ret_topic_info_ret_num); | ||
return agnocast_topic_info_ret_buffer; | ||
} | ||
|
||
struct topic_info_ret * get_agnocast_pub_nodes(const char * topic_name, int * topic_info_ret_count) | ||
{ | ||
*topic_info_ret_count = 0; | ||
|
||
int fd = open("/dev/agnocast", O_RDONLY); | ||
if (fd < 0) { | ||
perror("Failed to open /dev/agnocast"); | ||
return nullptr; | ||
} | ||
|
||
struct topic_info_ret * agnocast_topic_info_ret_buffer = static_cast<struct topic_info_ret *>( | ||
malloc(MAX_TOPIC_INFO_RET_NUM * sizeof(struct topic_info_ret))); | ||
|
||
if (agnocast_topic_info_ret_buffer == nullptr) { | ||
fprintf(stderr, "Memory allocation failed\n"); | ||
close(fd); | ||
return nullptr; | ||
} | ||
|
||
union ioctl_topic_info_args topic_info_args = {}; | ||
topic_info_args.topic_name = topic_name; | ||
topic_info_args.topic_info_ret_buffer_addr = | ||
reinterpret_cast<uint64_t>(agnocast_topic_info_ret_buffer); | ||
if (ioctl(fd, AGNOCAST_GET_TOPIC_PUBLISHER_INFO_CMD, &topic_info_args) < 0) { | ||
perror("AGNOCAST_GET_TOPIC_PUBLISHER_INFO_CMD failed"); | ||
free(agnocast_topic_info_ret_buffer); | ||
close(fd); | ||
return nullptr; | ||
} | ||
|
||
if (topic_info_args.ret_topic_info_ret_num == 0) { | ||
free(agnocast_topic_info_ret_buffer); | ||
close(fd); | ||
return nullptr; | ||
} | ||
|
||
*topic_info_ret_count = static_cast<int>(topic_info_args.ret_topic_info_ret_num); | ||
return agnocast_topic_info_ret_buffer; | ||
} | ||
|
||
void free_agnocast_topic_info_ret(struct topic_info_ret * array) | ||
{ | ||
free(array); | ||
} | ||
} |
Oops, something went wrong.