#include <inttypes.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
uint64_t timestamp, const uint8_t* payload,
uint32_t payload_length, bool error)
{
if (error) {
printf("Error frame: timestamp: %" PRIu64 "\n", timestamp);
} else {
printf("PGN: %u, SA: %u, DA: %u, length: %u, timestamp: %" PRIu64
", data: ",
id.pgn, id.src_addr, id.dest_addr, payload_length, timestamp);
for (uint32_t i = 0; i < payload_length; i++) {
printf("%02X ", payload[i]);
}
printf("\n");
}
}
void print_help()
{
printf(
"Usage: j1939_logger [options]\n"
"Options:\n"
" --channel <channel>, -c <channel> Set CAN channel (default: 0)\n"
" --bit-rate <bit_rate>, -b <bit_rate> Set CAN bit rate (default: "
"250000)\n"
" --help, -h Show this help message\n");
}
int main(int argc, char* argv[])
{
unsigned int channel_no = 0;
unsigned int bit_rate = 250000;
for (int i = 1; i < argc; ++i) {
if ((strcmp(argv[i], "--channel") == 0 || strcmp(argv[i], "-c") == 0)
&& i + 1 < argc) {
channel_no = (unsigned int)strtoul(argv[++i], NULL, 0);
} else if ((strcmp(argv[i], "--bit-rate") == 0
|| strcmp(argv[i], "-b") == 0)
&& i + 1 < argc) {
bit_rate = (unsigned int)strtoul(argv[++i], NULL, 0);
} else if (strcmp(argv[i], "--help") == 0
|| strcmp(argv[i], "-h") == 0) {
print_help();
return 0;
}
}
.support_virtual = true,
.bit_rate = bit_rate };
fprintf(stderr, "Failed to create J1939 channel!\n");
return 1;
}
fprintf(stderr, "Failed to register callbacks!\n");
return 1;
}
fprintf(stderr, "Failed to open J1939 channel!\n");
return 1;
}
printf("Logging traffic on channel %u. Press Enter to exit...\n",
channel_no);
getchar();
fprintf(stderr, "Failed to close J1939 channel!\n");
} else {
printf("J1939 channel closed successfully!\n");
}
return 0;
}
Main API for the KVJ1939 Library.
J1939ChannelResult j1939_create_channel(const J1939ChannelParams params)
Create a J1939 channel.
J1939Result j1939_destroy_channel(J1939ChannelHandle hnd)
Destroy a J1939 channel.
J1939Result j1939_register_callbacks(J1939ChannelHandle hnd, void *context, J1939RxCallback rx_callback, J1939TxCallback tx_callback, J1939AcCallback ac_callback)
Set callbacks for a J1939 channel.
J1939Result j1939_close_channel(J1939ChannelHandle hnd)
Close a J1939 channel and go off bus.
J1939Result j1939_open_channel(J1939ChannelHandle hnd)
Open a J1939 channel and go on bus.
uint32_t J1939ChannelHandle
A handle to a J1939 channel.
Definition: kvj1939lib_types.h:72
@ J1939_STATUS_OK
Operation completed successfully.
Definition: kvj1939lib_types.h:18
A struct that holds the parameters for creating a j1939 channel.
Definition: kvj1939lib_types.h:77
uint32_t channel
The CANlib channel number to use.
Definition: kvj1939lib_types.h:79
A struct that holds the result and handle for creating a j1939 channel.
Definition: kvj1939lib_types.h:91
J1939Result result
The result of the operation.
Definition: kvj1939lib_types.h:93
J1939ChannelHandle hnd
The handle to the created channel, if successful.
Definition: kvj1939lib_types.h:95
A struct that represents a J1939 identifier.
Definition: kvj1939lib_types.h:101