Skip to content

Commit e184960

Browse files
authored
Merge pull request #3 from xatavian/topic-print-one
Added the PrintOne functionnality
2 parents e3c1106 + b08fd42 commit e184960

File tree

5 files changed

+344
-80
lines changed

5 files changed

+344
-80
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,6 @@ target_include_directories(cpp_can_parser
2424
add_executable(can-parse
2525
utils/can-parse/can-parse.cpp
2626
utils/can-parse/print-frame.cpp
27+
utils/can-parse/print-single-frame.cpp
2728
utils/can-parse/check-frame.cpp)
2829
target_link_libraries(can-parse cpp_can_parser)

utils/can-parse/can-parse.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,13 @@ std::tuple<CanParseAction, std::string, uint32_t> extractAction(int argc, char**
7777
check_args = false;
7878

7979
try {
80-
detail_frame = std::stoul(arg);
80+
if(arg.compare(0, 2, "0x") == 0 || arg.compare(0, 2, "0X") == 0) {
81+
detail_frame = std::stoul(arg, nullptr, 16);
82+
}
83+
else {
84+
detail_frame = std::stoul(arg);
85+
}
86+
8187
action = static_cast<CanParseAction>(static_cast<int>(action) + 1);
8288
continue;
8389
} catch(const std::logic_error& e) {
@@ -135,6 +141,19 @@ int main(int argc, char** argv) {
135141
print_all_frames(db);
136142
break;
137143

144+
case PrintOne:
145+
{
146+
try {
147+
print_single_frame(db, detail_frame);
148+
}
149+
catch(const std::out_of_range&) {
150+
std::cerr << "Cannot find the frame with ID " << std::hex << std::showbase
151+
<< detail_frame << std::endl;
152+
return 3;
153+
}
154+
}
155+
break;
156+
138157
case CheckAll:
139158
check_all_frames(db);
140159
break;

utils/can-parse/operations.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,10 @@ class CANDatabase;
99

1010
namespace CppCAN {
1111
namespace can_parse {
12-
/**
13-
* @brief Prints a single frame selected by its frame name
14-
void printSingleFrame(CANDatabase& db, const std::string& frame_name);
15-
*/
16-
1712
/**
1813
* @brief Prints a single frame selected by its CAN ID.
19-
void printSingleFrame(CANDatabase& db, uint64_t can_id);
2014
*/
15+
void print_single_frame(CANDatabase& db, uint32_t can_id);
2116

2217
/**
2318
* @brief Prints all the frames of the database

utils/can-parse/print-frame.cpp

Lines changed: 1 addition & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -9,60 +9,6 @@
99
*/
1010
static const int INT_COL_SIZE = 10;
1111

12-
void print_info_separator(int level = 0) {
13-
static const char* level_0_separator = "##############";
14-
static const char* level_1_separator = "--------------";
15-
static const char* level_2_separator = "~~~~~~~~~~~~~~";
16-
const char** separator = nullptr;
17-
18-
switch(level) {
19-
case 0:
20-
default:
21-
separator = &level_0_separator;
22-
break;
23-
24-
case 1:
25-
separator = &level_1_separator;
26-
break;
27-
}
28-
std::cout << *separator << std::endl;
29-
}
30-
31-
void print_frame_impl(const CANFrame& frame, unsigned name_col_size) {
32-
std::cout << std::left << std::setw(name_col_size) << frame.name() << ":\t"
33-
<< std::hex << std::showbase << frame.can_id() << "/"
34-
<< std::dec << std::noshowbase << frame.dlc() << "/"
35-
<< frame.period() << "s" << std::endl;
36-
37-
if(frame.comment().size() > 0) {
38-
std::cout << "COMMENT" << frame.name() << ":\t \"" << frame.comment() << "\"" << std::endl;
39-
}
40-
}
41-
42-
void print_signal_impl(const CANSignal& sig) {
43-
std::cout << "SIGNAL[" << sig.name() << "]: " << std::endl;
44-
std::cout << "\tstart bit:\t" << sig.start_bit() << std::endl;
45-
std::cout << "\tlength:\t\t" << sig.length() << std::endl;
46-
std::cout << "\tendianness:\t\t" << ((sig.endianness() == CANSignal::BigEndian)
47-
? "BigEndian" : "LittleEndian") << std::endl;
48-
std::cout << "\tsignedness:\t\t" << ((sig.signedness() == CANSignal::Signed)
49-
? "Signed" : "Unsigned") << std::endl;
50-
std::cout << "\tscale:\t" << sig.scale() << std::endl;
51-
std::cout << "\toffset:\t" << sig.offset() << std::endl;
52-
std::cout << "\trange:\t" << sig.range().min << " -> " << sig.range().max << std::endl;
53-
54-
55-
if(sig.choices().size() > 0) {
56-
std::cout << "\tchoices:" << std::endl;
57-
58-
for(const auto& choice: sig.choices()) {
59-
std::string result = "";
60-
result += std::to_string(choice.first) + " -> \"" + choice.second + "\", ";
61-
std::cout << "\t\t" << result << std::endl;
62-
}
63-
}
64-
}
65-
6612
void print_frame_line(const CANFrame& src, int name_col_size) {
6713
std::cout << std::left
6814
<< std::setw(name_col_size) << src.name()
@@ -95,22 +41,4 @@ void CppCAN::can_parse::print_all_frames(CANDatabase& db) {
9541
for(const auto& frame : db) {
9642
print_frame_line(frame.second, frame_name_maxsize);
9743
}
98-
99-
/*
100-
for(const auto& frame : db) {
101-
print_frame_impl(*frame.second, frame_name_maxsize);
102-
print_info_separator(1);
103-
104-
size_t j = 0;
105-
for(const auto& sig : *frame.second) {
106-
print_signal_impl(*sig.second);
107-
108-
if(j++ < frame.second->size() - 1)
109-
print_info_separator(2);
110-
}
111-
112-
if(i++ < db.size() - 1)
113-
print_info_separator();
114-
}
115-
*/
116-
}
44+
}

0 commit comments

Comments
 (0)