17static bool done =
false;
18static uint16_t val_0xf190 = 0;
19static uint16_t val_0xf191 = 0;
21void sigint_handler(
int signum) {
22 printf(
"SIGINT received\n");
30 printf(
"received RDBI %04x\n", r->dataId);
33 return r->
copy(srv, &val_0xf190,
sizeof(val_0xf190));
37 return r->
copy(srv, &val_0xf191,
sizeof(val_0xf191));
41 return UDS_NRC_RequestOutOfRange;
48 if (r->
len !=
sizeof(val_0xf190)) {
49 return UDS_NRC_IncorrectMessageLengthOrInvalidFormat;
51 val_0xf190 = (r->
data[0] << 8) + r->
data[1];
52 return UDS_PositiveResponse;
55 return UDS_NRC_RequestOutOfRange;
59 printf(
"Unhandled event: %s\n", UDSEventToStr(ev));
60 return UDS_NRC_ServiceNotSupported;
64static int sleep_ms(uint32_t tms) {
67 ts.tv_sec = tms / 1000;
68 ts.tv_nsec = (tms % 1000) * 1000000;
70 ret = nanosleep(&ts, &ts);
71 }
while (ret && errno == EINTR);
75int main(
int ac,
char **av) {
77 memset(&sa, 0,
sizeof(sa));
78 sa.sa_handler = sigint_handler;
79 sigaction(SIGINT, &sa, NULL);
81 if (UDSTpIsoTpSockInitServer(&tp,
"vcan0", 0x7E0, 0x7E8, 0x7DF)) {
82 fprintf(stderr,
"UDSTpIsoTpSockInitServer failed\n");
86 if (UDSServerInit(&srv)) {
87 fprintf(stderr,
"UDSServerInit failed\n");
93 printf(
"server up, polling . . .\n");
98 printf(
"server exiting\n");
ISO14229-1 (UDS) library.
@ UDS_EVT_WriteDataByIdent
@ UDS_EVT_ReadDataByIdent
Read data by identifier arguments.
uint8_t(* copy)(UDSServer_t *srv, const void *src, uint16_t count)
UDSErr_t(* fn)(struct UDSServer *srv, UDSEvent_t event, void *arg)
Write data by identifier arguments.
const uint8_t *const data