Herunterladen Inhalt Inhalt Diese Seite drucken

Lesen (Read); Schreiben (Write) - synertronixx CAN2Web Advanced Handbuch

Inhaltsverzeichnis

Werbung

CAN2Web Advanced
CAN-Ethernet-Gateway Linux Kernel Treiber
if (fd_can<0)
printf("can't open CAN device\n";
....
close(fd_can);

7.2.2 Lesen (read)

Mit dem read-Befehl werden CAN-Telegramme vom Empfangspuffer des CAN-Treiber
gelesen. Der Befehl arbeitet meldungsorientiert, d.h. der Auslesezeiger wird mit Ausfüh-
rung von read auf die nächste empfangene CAN-Meldung gesetzt. Je nach Anwendung
können die CAN-Meldungen wahlweise mit oder ohne Empfangszeitangabe gelesen
werden.
Beispiel 10 : Auslesen von empfangenen CAN-Meldungen
int fd_can;
struct TCANMsg
struct TCANMsgT c2; // CAN-Message-stucture with time
.....
// Read CAN msg. without time information
if (read(fd_can,(void*)&c1, sizeof(c1)) == sizeof(c1) )
// read msg. correctly: process data ....
....
// Read CAN msg. with time information
if (read(fd_can,(void*)&c2, sizeof(c2)) == sizeof(c2) )
// read msg. correctly: process data ....
Vor dem Auslesen von CAN-Meldungen sollte per ioctl-Kommando getestet werden, ob
CAN-Meldungen im Empfangspuffer verfügbar sind.

7.2.3 Schreiben (write)

Mit dem write-Befehl werden CAN-Telegramme zum Sendepuffer des CAN-Treibers
geschreiben. Der Befehl arbeitet meldungsorientiert, d.h. es muss eine vollständige
CAN-Meldung übergeben werden.
Beispiel 11 : Senden von CAN-Meldungen
int fd_can;
struct TCANMsg
.....
// build CAN-message
c1.ID
= 0x123456;
c1.RTR = 0;
c1.LEN = 8;
for (i=0;i<=c1.LEN-1;i++)
c1.DATA[i]=i;
// send messages
if (write(fd_can,(void*)&c1, sizeof(c1)) == -1 )
printf("CAN transmit buffer full!\n");
synertronixx, 29. Juni 2010
// file descriptor for CAN kernel driver
c1; // CAN-Message-stucture without time
// file descriptor for CAN kernel driver
c1; // CAN-Message-stucture without time
// configure, read, write, ...
// close CAN device
40

Werbung

Inhaltsverzeichnis
loading

Inhaltsverzeichnis