canerrsim: clang-format

Marc Kleine-Budde 2024-05-23 13:34:20 +02:00
parent f012e01c6b
commit 9f73e9c373
1 changed files with 497 additions and 505 deletions

View File

@ -37,7 +37,8 @@
#define can_interface_name argv[1] #define can_interface_name argv[1]
#define STR_EQUAL 0 #define STR_EQUAL 0
void show_help_and_exit() { void show_help_and_exit()
{
printf("\n"); printf("\n");
printf("Usage: canerrsim <CAN interface> <options>\n"); printf("Usage: canerrsim <CAN interface> <options>\n");
printf("\n"); printf("\n");
@ -123,38 +124,46 @@ void show_help_and_exit() {
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
} }
void err_exit(const char *msg) { void err_exit(const char *msg)
{
printf(msg); printf(msg);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
void show_custom_format_and_exit(const char *param, const char *format) { void show_custom_format_and_exit(const char *param, const char *format)
{
char str_buf[80]; char str_buf[80];
sprintf(str_buf, format, param); sprintf(str_buf, format, param);
err_exit(str_buf); err_exit(str_buf);
} }
void show_invalid_option(const char *option) { void show_invalid_option(const char *option)
{
show_custom_format_and_exit(option, "Error: Invalid option %s\n"); show_custom_format_and_exit(option, "Error: Invalid option %s\n");
} }
void show_err_and_exit(const char *err_type) { void show_err_and_exit(const char *err_type)
{
show_custom_format_and_exit(err_type, "Error: You can only have one %s parameter!\n"); show_custom_format_and_exit(err_type, "Error: You can only have one %s parameter!\n");
} }
void show_loc_err_and_exit() { void show_loc_err_and_exit()
{
show_err_and_exit("protocol location"); show_err_and_exit("protocol location");
} }
void show_arb_err_and_exit() { void show_arb_err_and_exit()
{
show_err_and_exit("arbitration bit"); show_err_and_exit("arbitration bit");
} }
void show_transc_err_and_exit() { void show_transc_err_and_exit()
{
show_err_and_exit("transceiver"); show_err_and_exit("transceiver");
} }
void print_binary(uint32_t number) { void print_binary(uint32_t number)
{
uint32_t mask = 0x80000000; // start with the most significant bit uint32_t mask = 0x80000000; // start with the most significant bit
for (int i = 0; i < 32; i++) { for (int i = 0; i < 32; i++) {
putchar((number & mask) ? '1' : '0'); putchar((number & mask) ? '1' : '0');
@ -162,9 +171,8 @@ void print_binary(uint32_t number) {
} }
} }
int main(int argc, char *argv[])
{
int main(int argc, char *argv[]) {
int sock; int sock;
struct sockaddr_can addr; struct sockaddr_can addr;
struct ifreq ifr; struct ifreq ifr;
@ -200,32 +208,25 @@ int main(int argc, char *argv[]) {
else if (strcasecmp(argv[i], "OverflowRX") == STR_EQUAL) { else if (strcasecmp(argv[i], "OverflowRX") == STR_EQUAL) {
frame.can_id |= CAN_ERR_CRTL; // generate Controller error frame.can_id |= CAN_ERR_CRTL; // generate Controller error
frame.data[1] |= CAN_ERR_CRTL_RX_OVERFLOW; // generate RX Overflow suberror frame.data[1] |= CAN_ERR_CRTL_RX_OVERFLOW; // generate RX Overflow suberror
} } else if (strcasecmp(argv[i], "OverflowTX") == STR_EQUAL) {
else if (strcasecmp(argv[i], "OverflowTX") == STR_EQUAL) {
frame.can_id |= CAN_ERR_CRTL; // generate Controller error frame.can_id |= CAN_ERR_CRTL; // generate Controller error
frame.data[1] |= CAN_ERR_CRTL_TX_OVERFLOW; // generate TX Overflow suberror frame.data[1] |= CAN_ERR_CRTL_TX_OVERFLOW; // generate TX Overflow suberror
} } else if (strcasecmp(argv[i], "WarningRX") == STR_EQUAL) {
else if (strcasecmp(argv[i], "WarningRX") == STR_EQUAL) {
frame.can_id |= CAN_ERR_CRTL; // generate Controller error frame.can_id |= CAN_ERR_CRTL; // generate Controller error
frame.data[1] |= CAN_ERR_CRTL_RX_WARNING; // generate RX Warning suberror frame.data[1] |= CAN_ERR_CRTL_RX_WARNING; // generate RX Warning suberror
} } else if (strcasecmp(argv[i], "WarningTX") == STR_EQUAL) {
else if (strcasecmp(argv[i], "WarningTX") == STR_EQUAL) {
frame.can_id |= CAN_ERR_CRTL; // generate Controller error frame.can_id |= CAN_ERR_CRTL; // generate Controller error
frame.data[1] |= CAN_ERR_CRTL_TX_WARNING; // generate TX Warning suberror frame.data[1] |= CAN_ERR_CRTL_TX_WARNING; // generate TX Warning suberror
} } else if (strcasecmp(argv[i], "PassiveRX") == STR_EQUAL) {
else if (strcasecmp(argv[i], "PassiveRX") == STR_EQUAL) {
frame.can_id |= CAN_ERR_CRTL; // generate Controller error frame.can_id |= CAN_ERR_CRTL; // generate Controller error
frame.data[1] |= CAN_ERR_CRTL_RX_PASSIVE; // generate RX Passive suberror frame.data[1] |= CAN_ERR_CRTL_RX_PASSIVE; // generate RX Passive suberror
} } else if (strcasecmp(argv[i], "PassiveTX") == STR_EQUAL) {
else if (strcasecmp(argv[i], "PassiveTX") == STR_EQUAL) {
frame.can_id |= CAN_ERR_CRTL; // generate Controller error frame.can_id |= CAN_ERR_CRTL; // generate Controller error
frame.data[1] |= CAN_ERR_CRTL_TX_PASSIVE; // generate TX Passive suberror frame.data[1] |= CAN_ERR_CRTL_TX_PASSIVE; // generate TX Passive suberror
} } else if (strcasecmp(argv[i], "Active") == STR_EQUAL) {
else if (strcasecmp(argv[i], "Active") == STR_EQUAL) {
frame.can_id |= CAN_ERR_CRTL; // generate Controller error frame.can_id |= CAN_ERR_CRTL; // generate Controller error
frame.data[1] |= CAN_ERR_CRTL_ACTIVE; // generate Active suberror frame.data[1] |= CAN_ERR_CRTL_ACTIVE; // generate Active suberror
} } else if (strcasecmp(argv[i], "CtrlUnspec") == STR_EQUAL) {
else if (strcasecmp(argv[i], "CtrlUnspec") == STR_EQUAL) {
frame.can_id |= CAN_ERR_CRTL; // generate Controller error frame.can_id |= CAN_ERR_CRTL; // generate Controller error
frame.data[1] = CAN_ERR_CRTL_UNSPEC; // generate Unspec suberror frame.data[1] = CAN_ERR_CRTL_UNSPEC; // generate Unspec suberror
} }
@ -233,223 +234,217 @@ int main(int argc, char *argv[]) {
else if (strcasecmp(argv[i], "SingleBit") == STR_EQUAL) { else if (strcasecmp(argv[i], "SingleBit") == STR_EQUAL) {
frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error
frame.data[2] = CAN_ERR_PROT_BIT; // generate SingleBit suberror frame.data[2] = CAN_ERR_PROT_BIT; // generate SingleBit suberror
} } else if (strcasecmp(argv[i], "FrameFormat") == STR_EQUAL) {
else if (strcasecmp(argv[i], "FrameFormat") == STR_EQUAL) {
frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error
frame.data[2] = CAN_ERR_PROT_FORM; // generate FrameFormat suberror frame.data[2] = CAN_ERR_PROT_FORM; // generate FrameFormat suberror
} } else if (strcasecmp(argv[i], "BitStuffing") == STR_EQUAL) {
else if (strcasecmp(argv[i], "BitStuffing") == STR_EQUAL) {
frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error
frame.data[2] = CAN_ERR_PROT_STUFF; // generate BitStuffing suberror frame.data[2] = CAN_ERR_PROT_STUFF; // generate BitStuffing suberror
} } else if (strcasecmp(argv[i], "Bit0") == STR_EQUAL) {
else if (strcasecmp(argv[i], "Bit0") == STR_EQUAL) {
frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error
frame.data[2] = CAN_ERR_PROT_BIT0; // generate Bit0 suberror frame.data[2] = CAN_ERR_PROT_BIT0; // generate Bit0 suberror
} } else if (strcasecmp(argv[i], "Bit1") == STR_EQUAL) {
else if (strcasecmp(argv[i], "Bit1") == STR_EQUAL) {
frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error
frame.data[2] = CAN_ERR_PROT_BIT1; // generate Bit1 suberror frame.data[2] = CAN_ERR_PROT_BIT1; // generate Bit1 suberror
} } else if (strcasecmp(argv[i], "BusOverload") == STR_EQUAL) {
else if (strcasecmp(argv[i], "BusOverload") == STR_EQUAL) {
frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error
frame.data[2] = CAN_ERR_PROT_OVERLOAD; // generate BusOverload suberror frame.data[2] = CAN_ERR_PROT_OVERLOAD; // generate BusOverload suberror
} } else if (strcasecmp(argv[i], "ActiveAnnouncement") == STR_EQUAL) {
else if (strcasecmp(argv[i], "ActiveAnnouncement") == STR_EQUAL) {
frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error
frame.data[2] = CAN_ERR_PROT_ACTIVE; // generate ActiveAnnouncement suberror frame.data[2] = CAN_ERR_PROT_ACTIVE; // generate ActiveAnnouncement suberror
} } else if (strcasecmp(argv[i], "TX") == STR_EQUAL) {
else if (strcasecmp(argv[i], "TX") == STR_EQUAL) {
frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error
frame.data[2] = CAN_ERR_PROT_TX; // generate TX suberror frame.data[2] = CAN_ERR_PROT_TX; // generate TX suberror
} } else if (strcasecmp(argv[i], "ProtUnspec") == STR_EQUAL) {
else if (strcasecmp(argv[i], "ProtUnspec") == STR_EQUAL) {
frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error frame.can_id |= CAN_ERR_PROT; // generate Protocol Type error
frame.data[2] = CAN_ERR_PROT_UNSPEC; // generate Unspec suberror frame.data[2] = CAN_ERR_PROT_UNSPEC; // generate Unspec suberror
} }
// error in CAN protocol (location) / data[3] // error in CAN protocol (location) / data[3]
else if (strcasecmp(argv[i], "LocUnspec") == STR_EQUAL) { else if (strcasecmp(argv[i], "LocUnspec") == STR_EQUAL) {
if (location_processed) show_loc_err_and_exit; if (location_processed)
show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_UNSPEC; // generate Unspec suberror frame.data[3] = CAN_ERR_PROT_LOC_UNSPEC; // generate Unspec suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "SOF") == STR_EQUAL) {
else if (strcasecmp(argv[i], "SOF") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_SOF; // generate SOF suberror frame.data[3] = CAN_ERR_PROT_LOC_SOF; // generate SOF suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "SOF") == STR_EQUAL) {
else if (strcasecmp(argv[i], "SOF") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_SOF; // generate SOF suberror frame.data[3] = CAN_ERR_PROT_LOC_SOF; // generate SOF suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "ID28_21") == STR_EQUAL) {
else if (strcasecmp(argv[i], "ID28_21") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_ID28_21; // generate ID28_21 suberror frame.data[3] = CAN_ERR_PROT_LOC_ID28_21; // generate ID28_21 suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "ID20_18") == STR_EQUAL) {
else if (strcasecmp(argv[i], "ID20_18") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_ID20_18; // generate ID20_18 suberror frame.data[3] = CAN_ERR_PROT_LOC_ID20_18; // generate ID20_18 suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "SRTR") == STR_EQUAL) {
else if (strcasecmp(argv[i], "SRTR") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_SRTR; // generate SRTR suberror frame.data[3] = CAN_ERR_PROT_LOC_SRTR; // generate SRTR suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "IDE") == STR_EQUAL) {
else if (strcasecmp(argv[i], "IDE") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_IDE; // generate IDE suberror frame.data[3] = CAN_ERR_PROT_LOC_IDE; // generate IDE suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "ID17_13") == STR_EQUAL) {
else if (strcasecmp(argv[i], "ID17_13") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_ID17_13; // generate ID17_13 suberror frame.data[3] = CAN_ERR_PROT_LOC_ID17_13; // generate ID17_13 suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "ID12_05") == STR_EQUAL) {
else if (strcasecmp(argv[i], "ID12_05") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_ID12_05; // generate ID12_05 suberror frame.data[3] = CAN_ERR_PROT_LOC_ID12_05; // generate ID12_05 suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "ID04_00") == STR_EQUAL) {
else if (strcasecmp(argv[i], "ID04_00") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_ID04_00; // generate ID04_00 suberror frame.data[3] = CAN_ERR_PROT_LOC_ID04_00; // generate ID04_00 suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "RTR") == STR_EQUAL) {
else if (strcasecmp(argv[i], "RTR") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_RTR; // generate RTR suberror frame.data[3] = CAN_ERR_PROT_LOC_RTR; // generate RTR suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "RES1") == STR_EQUAL) {
else if (strcasecmp(argv[i], "RES1") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_RES1; // generate RES1 suberror frame.data[3] = CAN_ERR_PROT_LOC_RES1; // generate RES1 suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "RES0") == STR_EQUAL) {
else if (strcasecmp(argv[i], "RES0") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_RES0; // generate RES0 suberror frame.data[3] = CAN_ERR_PROT_LOC_RES0; // generate RES0 suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "DLC") == STR_EQUAL) {
else if (strcasecmp(argv[i], "DLC") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_DLC; // generate DLC suberror frame.data[3] = CAN_ERR_PROT_LOC_DLC; // generate DLC suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "DATA") == STR_EQUAL) {
else if (strcasecmp(argv[i], "DATA") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_DATA; // generate DATA suberror frame.data[3] = CAN_ERR_PROT_LOC_DATA; // generate DATA suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "CRC_SEQ") == STR_EQUAL) {
else if (strcasecmp(argv[i], "CRC_SEQ") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_CRC_SEQ; // generate CRC_SEQ suberror frame.data[3] = CAN_ERR_PROT_LOC_CRC_SEQ; // generate CRC_SEQ suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "CRC_DEL") == STR_EQUAL) {
else if (strcasecmp(argv[i], "CRC_DEL") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_CRC_DEL; // generate CRC_DEL suberror frame.data[3] = CAN_ERR_PROT_LOC_CRC_DEL; // generate CRC_DEL suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "ACK") == STR_EQUAL) {
else if (strcasecmp(argv[i], "ACK") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_ACK; // generate ACK suberror frame.data[3] = CAN_ERR_PROT_LOC_ACK; // generate ACK suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "ACK_DEL") == STR_EQUAL) {
else if (strcasecmp(argv[i], "ACK_DEL") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_ACK_DEL; // generate ACK_DEL suberror frame.data[3] = CAN_ERR_PROT_LOC_ACK_DEL; // generate ACK_DEL suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "EOF") == STR_EQUAL) {
else if (strcasecmp(argv[i], "EOF") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_EOF; // generate EOF suberror frame.data[3] = CAN_ERR_PROT_LOC_EOF; // generate EOF suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "INTERM") == STR_EQUAL) {
else if (strcasecmp(argv[i], "INTERM") == STR_EQUAL) { if (location_processed)
if (location_processed) show_loc_err_and_exit; show_loc_err_and_exit;
frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error frame.can_id |= CAN_ERR_PROT; // generate Protocol Location error
frame.data[3] = CAN_ERR_PROT_LOC_INTERM; // generate INTERM suberror frame.data[3] = CAN_ERR_PROT_LOC_INTERM; // generate INTERM suberror
location_processed = true; location_processed = true;
} }
// error status of CAN transceiver / data[4] // error status of CAN transceiver / data[4]
else if (strcasecmp(argv[i], "TransUnspec") == STR_EQUAL) { else if (strcasecmp(argv[i], "TransUnspec") == STR_EQUAL) {
if (transceiver_processed) show_transc_err_and_exit; if (transceiver_processed)
show_transc_err_and_exit;
frame.can_id |= CAN_ERR_TRX; // generate Transceiver error frame.can_id |= CAN_ERR_TRX; // generate Transceiver error
frame.data[4] = CAN_ERR_TRX_UNSPEC; // generate EOF suberror frame.data[4] = CAN_ERR_TRX_UNSPEC; // generate EOF suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "CanHiNoWire") == STR_EQUAL) {
else if (strcasecmp(argv[i], "CanHiNoWire") == STR_EQUAL) { if (transceiver_processed)
if (transceiver_processed) show_transc_err_and_exit; show_transc_err_and_exit;
frame.can_id |= CAN_ERR_TRX; // generate Transceiver error frame.can_id |= CAN_ERR_TRX; // generate Transceiver error
frame.data[4] = CAN_ERR_TRX_CANH_NO_WIRE; // generate CanHiNoWire suberror frame.data[4] = CAN_ERR_TRX_CANH_NO_WIRE; // generate CanHiNoWire suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "CanHiShortToBAT") == STR_EQUAL) {
else if (strcasecmp(argv[i], "CanHiShortToBAT") == STR_EQUAL) { if (transceiver_processed)
if (transceiver_processed) show_transc_err_and_exit; show_transc_err_and_exit;
frame.can_id |= CAN_ERR_TRX; // generate Transceiver error frame.can_id |= CAN_ERR_TRX; // generate Transceiver error
frame.data[4] = CAN_ERR_TRX_CANH_SHORT_TO_BAT; // generate CanHiShortToBAT suberror frame.data[4] = CAN_ERR_TRX_CANH_SHORT_TO_BAT; // generate CanHiShortToBAT suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "CanHiShortToVCC") == STR_EQUAL) {
else if (strcasecmp(argv[i], "CanHiShortToVCC") == STR_EQUAL) { if (transceiver_processed)
if (transceiver_processed) show_transc_err_and_exit; show_transc_err_and_exit;
frame.can_id |= CAN_ERR_TRX; // generate Transceiver error frame.can_id |= CAN_ERR_TRX; // generate Transceiver error
frame.data[4] = CAN_ERR_TRX_CANH_SHORT_TO_VCC; // generate CanHiShortToVCC suberror frame.data[4] = CAN_ERR_TRX_CANH_SHORT_TO_VCC; // generate CanHiShortToVCC suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "CanHiShortToGND") == STR_EQUAL) {
else if (strcasecmp(argv[i], "CanHiShortToGND") == STR_EQUAL) { if (transceiver_processed)
if (transceiver_processed) show_transc_err_and_exit; show_transc_err_and_exit;
frame.can_id |= CAN_ERR_TRX; // generate Transceiver error frame.can_id |= CAN_ERR_TRX; // generate Transceiver error
frame.data[4] = CAN_ERR_TRX_CANH_SHORT_TO_GND; // generate CanHiShortToGND suberror frame.data[4] = CAN_ERR_TRX_CANH_SHORT_TO_GND; // generate CanHiShortToGND suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "CanLoNoWire") == STR_EQUAL) {
else if (strcasecmp(argv[i], "CanLoNoWire") == STR_EQUAL) { if (transceiver_processed)
if (transceiver_processed) show_transc_err_and_exit; show_transc_err_and_exit;
frame.can_id |= CAN_ERR_TRX; // generate Transceiver error frame.can_id |= CAN_ERR_TRX; // generate Transceiver error
frame.data[4] = CAN_ERR_TRX_CANL_NO_WIRE; // generate CanLoNoWire suberror frame.data[4] = CAN_ERR_TRX_CANL_NO_WIRE; // generate CanLoNoWire suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "CanLoShortToBAT") == STR_EQUAL) {
else if (strcasecmp(argv[i], "CanLoShortToBAT") == STR_EQUAL) { if (transceiver_processed)
if (transceiver_processed) show_transc_err_and_exit; show_transc_err_and_exit;
frame.can_id |= CAN_ERR_TRX; // generate Transceiver error frame.can_id |= CAN_ERR_TRX; // generate Transceiver error
frame.data[4] = CAN_ERR_TRX_CANL_SHORT_TO_BAT; // generate CanLoShortToBAT suberror frame.data[4] = CAN_ERR_TRX_CANL_SHORT_TO_BAT; // generate CanLoShortToBAT suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "CanLoShortToVCC") == STR_EQUAL) {
else if (strcasecmp(argv[i], "CanLoShortToVCC") == STR_EQUAL) { if (transceiver_processed)
if (transceiver_processed) show_transc_err_and_exit; show_transc_err_and_exit;
frame.can_id |= CAN_ERR_TRX; // generate Transceiver error frame.can_id |= CAN_ERR_TRX; // generate Transceiver error
frame.data[4] = CAN_ERR_TRX_CANL_SHORT_TO_VCC; // generate CanLoShortToVCC suberror frame.data[4] = CAN_ERR_TRX_CANL_SHORT_TO_VCC; // generate CanLoShortToVCC suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "CanLoShortToGND") == STR_EQUAL) {
else if (strcasecmp(argv[i], "CanLoShortToGND") == STR_EQUAL) { if (transceiver_processed)
if (transceiver_processed) show_transc_err_and_exit; show_transc_err_and_exit;
frame.can_id |= CAN_ERR_TRX; // generate Transceiver error frame.can_id |= CAN_ERR_TRX; // generate Transceiver error
frame.data[4] = CAN_ERR_TRX_CANL_SHORT_TO_GND; // generate CanLoShortToGND suberror frame.data[4] = CAN_ERR_TRX_CANL_SHORT_TO_GND; // generate CanLoShortToGND suberror
location_processed = true; location_processed = true;
} } else if (strcasecmp(argv[i], "CanLoShortToCanHi") == STR_EQUAL) {
else if (strcasecmp(argv[i], "CanLoShortToCanHi") == STR_EQUAL) { if (transceiver_processed)
if (transceiver_processed) show_transc_err_and_exit; show_transc_err_and_exit;
frame.can_id |= CAN_ERR_TRX; // generate Transceiver error frame.can_id |= CAN_ERR_TRX; // generate Transceiver error
frame.data[4] = CAN_ERR_TRX_CANL_SHORT_TO_CANH; // generate CanLoShortToCanHi suberror frame.data[4] = CAN_ERR_TRX_CANL_SHORT_TO_CANH; // generate CanLoShortToCanHi suberror
location_processed = true; location_processed = true;
@ -462,12 +457,12 @@ int main(int argc, char *argv[]) {
unsigned char arb_bit_num = (argv[i][10] - '0') * 10 + argv[i][11] - '0'; // convert decimal bitnumber to byte unsigned char arb_bit_num = (argv[i][10] - '0') * 10 + argv[i][11] - '0'; // convert decimal bitnumber to byte
argv[i][9] = 0; // terminate string for comparison argv[i][9] = 0; // terminate string for comparison
if (strcasecmp(argv[i], "LostArBit") == STR_EQUAL) { if (strcasecmp(argv[i], "LostArBit") == STR_EQUAL) {
if (arbitration_processed) show_arb_err_and_exit; if (arbitration_processed)
show_arb_err_and_exit;
frame.can_id |= CAN_ERR_LOSTARB; // generate LostArbitartionBit error frame.can_id |= CAN_ERR_LOSTARB; // generate LostArbitartionBit error
frame.data[0] = arb_bit_num; // bitnumber frame.data[0] = arb_bit_num; // bitnumber
arbitration_processed = true; arbitration_processed = true;
} } else {
else {
argv[i][9] = '='; // undo string termination argv[i][9] = '='; // undo string termination
show_invalid_option(argv[i]); show_invalid_option(argv[i]);
} }
@ -491,11 +486,11 @@ int main(int argc, char *argv[]) {
data_byte_value += (argv[i][7] - '0'); data_byte_value += (argv[i][7] - '0');
argv[i][4] = 0; // terminate string for comparison argv[i][4] = 0; // terminate string for comparison
if (strcasecmp(argv[i], "Data") == STR_EQUAL) { if (strcasecmp(argv[i], "Data") == STR_EQUAL) {
if (transceiver_processed) show_transc_err_and_exit; if (transceiver_processed)
show_transc_err_and_exit;
frame.data[data_byte_no] = data_byte_value; // populate proper data byte frame.data[data_byte_no] = data_byte_value; // populate proper data byte
arbitration_processed = true; arbitration_processed = true;
} } else {
else {
argv[i][4] = data_byte_no + '0'; // undo string termination argv[i][4] = data_byte_no + '0'; // undo string termination
show_invalid_option(argv[i]); show_invalid_option(argv[i]);
} }
@ -518,17 +513,14 @@ int main(int argc, char *argv[]) {
if (strcasecmp(argv[i], "TxCount") == STR_EQUAL) { if (strcasecmp(argv[i], "TxCount") == STR_EQUAL) {
frame.can_id |= CAN_ERR_CNT; // generate TxCounter error frame.can_id |= CAN_ERR_CNT; // generate TxCounter error
frame.data[6] = counter_value; // populate proper data byte frame.data[6] = counter_value; // populate proper data byte
} } else if (strcasecmp(argv[i], "RxCount") == STR_EQUAL) {
else if (strcasecmp(argv[i], "RxCount") == STR_EQUAL) {
frame.can_id |= CAN_ERR_CNT; // generate RxCounter error frame.can_id |= CAN_ERR_CNT; // generate RxCounter error
frame.data[7] = counter_value; // populate proper data byte frame.data[7] = counter_value; // populate proper data byte
} } else {
else {
argv[i][7] = '='; // undo string termination argv[i][7] = '='; // undo string termination
show_invalid_option(argv[i]); show_invalid_option(argv[i]);
} }
} } else if (strcasecmp(argv[i], "ShowBits") == STR_EQUAL) // DEBUG helper
else if (strcasecmp(argv[i], "ShowBits") == STR_EQUAL) // DEBUG helper
show_bits = true; // Display frame as bits show_bits = true; // Display frame as bits
else else
show_invalid_option(argv[i]); show_invalid_option(argv[i]);