Hauptseite   Module   Übersicht   Auflistung der Dateien   Datenstruktur-Elemente   Datei-Elemente   Beispiele  

can_api.h Dateireferenz

Auflistung der Funktionen. Mehr...

gehe zum Quellcode dieser Datei

Übersicht

struct  can_api
 Verwaltungsstruktur, wird in allen Funktionen benötigt. Mehr...

struct  can_api_send_thread
 Senden aus Hintergrundthreads. Mehr...


Funktionen

can_api *WINAPI canInit (HWND hParent, const void *pUserData, int(*events)(struct can_api *c, double absTime, double relTime, ISRInfo *i))
 Initialisieren der CAN Routinen.

void WINAPI canDeInit (struct can_api *c)
 Deinitialisieren der CAN Routinen.

int WINAPI canOpenDevice (struct can_api *c, const char *pDevName, int mode, int format, DWORD *pErr)
 CAN Treiber öffnen.

void WINAPI canCloseDevice (struct can_api *c)
 CAN Treiber schliessen.

void WINAPI canExtendedFrames (struct can_api *c, int format)
 Framing Format.

unsigned char WINAPI canGetRegisterRR1 (struct can_api *c, unsigned char nIndex)
 Register des SJA1000 im Reset Modus auslesen.

void WINAPI canSetRegisterRR1 (struct can_api *c, unsigned char nIndex, unsigned char nNewValue)
 Register des SJA1000 im Reset Modus beschreiben.

unsigned char WINAPI canGetRegister (struct can_api *c, unsigned char nIndex)
 Register des SJA1000 im Normalmodus auslesen.

void WINAPI canSetRegister (struct can_api *c, unsigned char nIndex, unsigned char nNewValue)
 Register des SJA1000 im Normalmodus beschreiben.

int WINAPI canTransmitDataByISR (struct can_api *c, struct ISRInfo *isr)
 CAN Botschaft senden.

int WINAPI canTransmitData (struct can_api *c, unsigned long id, int rtr, int dlc, unsigned char *data)
 CAN Botschaft senden.

unsigned char WINAPI canGetSJA1000Status (struct can_api *c)
 Statusregister des SJA1000 auslesen.

int WINAPI canSetSJA1000Command (struct can_api *c, unsigned char command)
 Kommando an den SJA1000 übergeben.

int WINAPI canAcceptanceCodeMask (struct can_api *c, unsigned long code, unsigned long mask)
 Hardware Akzeptanzfilter des SJA1000 einstellen.

int WINAPI canAcceptanceFilter (struct can_api *c, unsigned long code, unsigned long mask)
 Akzeptanzfilter.

int WINAPI canSetBaudrate (struct can_api *c, unsigned long baudrate)
 Baudrate einstellen.

void WINAPI canResetTime (struct can_api *c)
 Absolute Zeit rücksetzen.

long WINAPI canGetTime (struct can_api *c)
 Absolute Zeit ermitteln.

long WINAPI canGetLostDataMsg (struct can_api *c)
 Ermittelt die Anzahl verlorener Nachrichten.

double WINAPI canGetBusLoad (struct can_api *c)
 Liefert als Ergebnis die Buslast.

void WINAPI canSetLostDataMsg (struct can_api *c, long nNewValue)
 Manipulation eines internen Wertes.

void WINAPI canShowMessages (struct can_api *c, int on_off)
 Ereignisse weitermelden ein/ausschalten.

int WINAPI canDeleteTransmitThread (struct can_api *c, int threadId)
 Thread beenden.

void WINAPI canDeleteAllTransmitThreads (struct can_api *c)
 Alle Threads beenden.

int WINAPI canAddTransmitThread (struct can_api *c, int threadId, unsigned long canId, int rtr, int dlc, unsigned char *data, unsigned long delay)
 Neuen Thread anlegen.

int WINAPI canIsDeviceOpened (struct can_api *c)
 Ermitteln ob CAN Gerät geöffnet wurde.


Ausführliche Beschreibung

Auflistung der Funktionen.

Datei:
CAN_API.CPP
oder
CAN_API.DLL
Header:
CAN_API.H
CANPAR.H
Die Beschreibung soll helfen, die Treiberfunktionen direkt - also ohne das canParActiveX/CaniX - zu verwenden. Dies wird hiermit auch ausdrücklich empfohlen. Eine Lösung mit dem ActiveX wird immer etwas langsamer sein, als direkte API Aufrufe.

Es gibt mehrere Möglichkeiten diese Routinen einzubinden:

Der Treiber beinhaltet alle Funktionen für den BasicCAN und den PeliCAN Modus des SJA1000. Der BaiscCAN-Modus ist kompatibel zum PCA82c200, der daher auch mit diesem Treiber funktionieren sollte (wurde aber nicht getestet). Üblicherweise wird so vorgegangen:

  1. Eine Callbackfunktion definieren, die durch den Treiber aufgerufen wird, wenn CAN Nachrichten oder andere Ereignisse eintreffen. siehe Beispiel
  2. Beim Programmstart wird canInit() aufgerufen. In canInit() wird unter anderem die Callbackfunktion (siehe oben) angegeben
  3. canOpenDevice() aufrufen. Dadurch wird das CAN Gerät erst geöffnet
  4. CAN Nachrichten senden und empfangen und andere CAN API Funktionen aufrufen (z.B. Register auslesen, beschreiben, ...)
  5. canCloseDevice() aufrufen. Das CAN Gerät wird dadurch geschlossen
  6. Vor Programmende dann canDeInit() aufrufen um die interne Strukturen wieder aufzuräumen

Dokumentation der Funktionen

int WINAPI canAcceptanceCodeMask struct can_api   c,
unsigned long    code,
unsigned long    mask
 

Hardware Akzeptanzfilter des SJA1000 einstellen.

Die Werte werden direkt an den SJA1000 Baustein eingetragen. Die Werte sind nicht selbsterklärend, es wird dringend empfohlen, vorher das Datenblatt zum SJA1000 Baustein zu lesen! Als Alternative kann canAcceptanceFilter() verwendet werden.

Die Standardeinstellung ist 0xffffffff für Code und Mask. Es werden dann keine Botschaften gefiltert.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
code  Akzeptanzkode
mask  Akzeptanzmaske
Rückgabe:
Im Fehlerfall 0. Ansonsten 1.

int WINAPI canAcceptanceFilter struct can_api   c,
unsigned long    code,
unsigned long    mask
 

Akzeptanzfilter.

Dieser Akzeptanzfilter ist im Treiber als Softwarelösung implementiert. Das heißt, der SJA1000 Baustein ist am besten so eingestellt, dass alle Botschaften weitergeleitet werden. Die Filterung übernimmt danach der Treiber.

Siehe auch:
canAcceptanceCodeMask()
Die Standardeinstellung ist 0 für Code und Mask. Es werden dann keine Botschaften gefiltert.

Die Filterformel lautet: ((empfangene ID) AND mask) = (code AND mask) Bei Gleichheit wird die Botschaft weitergeleitet.

Version:
Ab V2.3
Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
code  Akzeptanzkode
mask  Akzeptanzmaske
Rückgabe:
Im Fehlerfall 0. Ansonsten 1.

int WINAPI canAddTransmitThread struct can_api   c,
int    threadId,
unsigned long    canId,
int    rtr,
int    dlc,
unsigned char *    data,
unsigned long    delay
 

Neuen Thread anlegen.

Es wird ein Thread mit der Identifikation threadId angelegt. In einer festgelegten Periodenzeit (delay) wird dann Endlos lange die angegeben CAN Nachricht gesendet.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
threadId  Thread-Identifier
canId  CAN Identifier der zu sendenden CAN Botschaft
rtr  Remote Transmission Request
  • 0 = Daten senden
  • 1 = Remote Transmission Request
dlc  Anzahl Datenbytes in data (maximal 8 Bytes sind m. oglich)
data  Zeiger auf einen Puffer mit den Datenbytes
delay  Wartezeit in ms zwischen zwei Sendungen
Rückgabe:
  • 0 = Thread wurde nicht angelegt
  • 1 = Thread wurde angelegt

void WINAPI canCloseDevice struct can_api   c
 

CAN Treiber schliessen.

Das zuvor über canOpenDevice() geöffnete Gerät wieder schliessen.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
Rückgabe:

void WINAPI canDeInit struct can_api   c
 

Deinitialisieren der CAN Routinen.

Interne Strukturen wieder aufräumen, bevor das Programm beendet wird.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()

void WINAPI canDeleteAllTransmitThreads struct can_api   c
 

Alle Threads beenden.

Alle Threads, die durch canAddTransmitThread() angelegt wurden, wieder beenden.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()

int WINAPI canDeleteTransmitThread struct can_api   c,
int    threadId
 

Thread beenden.

Ein zuvor durch canAddTransmitThread() angelegter Thread beenden.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
threadId  Thread ID, die in canAddTransmitThread angegeben wurde
Rückgabe:
  • 0 = Thread wurde nicht gelöscht (existiert nicht)
  • 1 = Thread wurde gelöscht

void WINAPI canExtendedFrames struct can_api   c,
int    format
 

Framing Format.

Framing Format einstellen. Die Einstellung wird nur im PeliCAN Modus übernommen.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
format  Frame Format
  • 0 = Standard Frames (11 Bit Identifier)
  • 1 = Extended Frames (29 Bit Identifier)

double WINAPI canGetBusLoad struct can_api   c
 

Liefert als Ergebnis die Buslast.

Die Buslast wird in CAN API.CPP in einem parallel laufenden Thread ständig berechnet. Da dies nicht der Treiber erledigt, ist dieser Wert sehr ungenau!

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
Rückgabe:
Buslast in Prozent

long WINAPI canGetLostDataMsg struct can_api   c
 

Ermittelt die Anzahl verlorener Nachrichten.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
Rückgabe:
Anzahl der verloren gegangen Nachrichten.

unsigned char WINAPI canGetRegister struct can_api   c,
unsigned char    nIndex
 

Register des SJA1000 im Normalmodus auslesen.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
nIndex  Registerindex (0...127)
Rückgabe:
Registerwert

unsigned char WINAPI canGetRegisterRR1 struct can_api   c,
unsigned char    nIndex
 

Register des SJA1000 im Reset Modus auslesen.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
nIndex  Registerindex (0...127)
Rückgabe:
Registerwert

unsigned char WINAPI canGetSJA1000Status struct can_api   c
 

Statusregister des SJA1000 auslesen.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
Rückgabe:
Statusbyte des SJA1000.

long WINAPI canGetTime struct can_api   c
 

Absolute Zeit ermitteln.

Die Zeit ist ein 64 Bit Wert und ist abhängig vom Betriebsystem. Unter Windows 9x beträgt die Auflösung 800 ns und unter Windows NT 100 ns. Der 64 Bit Wert wird durch einen Betriebsystemspezifischen 32 Bit Wert dividiert. Vom Ergebnis wird der niederwertige 32 Bit Wert als Ergebnis geliefert.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
Rückgabe:
Zeit in Mikrosekunden.

struct can_api* WINAPI canInit HWND    hParent,
const void *    pUserData,
int(*    events)(struct can_api *c, double absTime, double relTime, ISRInfo *i)
 

Initialisieren der CAN Routinen.

Bevor die Routinen verwendet werden können muss canInit() aufgerufen werden. Dieser Funktion wird ein HANDLE auf ein vorhandenes Fenster übergeben (z.B. das Hauptfenster der Applikation) oder NULL. Dieses HANDLE wird nur für MessageBox() Aufrufe benötigt. Der zweite Parameter ist ein Pointer auf eine Funktion (Callback Funktion). Diese Funktion wird aus der API Sammlung heraus immer dann aufgerufen, wenn der CAN Treiber ein Ereignis signalisiert. Diese Funktion wird asynchron zu beliebigen Zeiten aufgerufen, dies muss unter Umst. anden bei der Programmierung ber. ucksichtigt werden: Vorsicht bei Zugriffe auf globale oder statische Daten. Als Ergebnis wird bei Erfolg ein Pointer zurückgegeben, der bei allen anderen Funktionen angegeben werden muss. Bei Misserfolg wird NULL zurückgegeben.

Parameter:
hParent  NULL oder Handle auf ein vorhandenes Fenster
pUserData  beliebige Anwenderdaten, die API trägt den Wert in die can api-Struktur ein, von wo sie in der Callbackroutine dann z.B. ausgelesen werden kann. Im ActiveX wird hier z.B. die ActiveX Instanz eingetragen.
pEvents  Zeiger auf die Callbackfunktion, in der Callback Funktion müssen die EV2PRG_... Makros ausgewertet werden
Rückgabe:
NULL bei Misserfolg, oder ein Zeiger auf can api Struktur
Siehe auch:
EV2PRG_...-Makros
Beispiel

int WINAPI canIsDeviceOpened struct can_api   c
 

Ermitteln ob CAN Gerät geöffnet wurde.

Über diese Funktion kann ermittelt werden, ob das CAN Gerät mit canOpenDevice() bereits geöffnet wurde.

Version:
Ab V2.3
Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
Rückgabe:
  • 0 = Gerät ist noch nicht geöffnet
  • 1 = Gerät wurde bereits geöffnet

int WINAPI canOpenDevice struct can_api   c,
const char *    pDevName,
int    mode,
int    format,
DWORD *    pErr
 

CAN Treiber öffnen.

Ein Gerät öffnen. Damit unter NT ebenfalls das Gerät \\.\CANPAR (ohne angehängte Ziffer!) geöffnet werden kann, sind Registryeinträge notwendig. Erst wenn ein Gerät geöffnet ist, können CAN Nachrichten gesendet und empfangen werden.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
pDevName  Gerätename z.B.
  • unter Windows 9x: \\.\canpar
  • unter Windows NT: \\.\canpar oder \\.\canpar0 oder \\.\canpar1 oder \\.\canpar2
mode  Modus für den SJA1000
  • 0 = BasicCAN
  • 1 = PeliCAN
format  Frame Format
  • 0 = Standard Frame Format (11 Bit)
  • 1 = Extended Frame Format (29 Bit)
pErr  Zeiger auf ein DWORD. In diesem wird durch GetLastError() der zuletzt aufgetretene Fehler gespeichert.
Rückgabe:
  • 1 = Treiber erfolgreich geöffnet
  • 0 = Fehler beim Öffnen des Treibers in CreateFile()
  • -1 = Fehler beim Anlegen eines Events in CreateEvent()
  • -2 = Fehler beim Anlegen eines Threads in CreateThread()
  • -3 = Fehler beim Überprüfen der Treiberversion (Version der CAN API.CPP und Treiber passen nicht)

void WINAPI canResetTime struct can_api   c
 

Absolute Zeit rücksetzen.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()

int WINAPI canSetBaudrate struct can_api   c,
unsigned long    baudrate
 

Baudrate einstellen.

Die Demoversion erlaubt hier nur maximal 150000 Baud.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
baudrate  Baudrate 10000...1000000
Rückgabe:
Im Fehlerfall 0. Ansonsten 1.

void WINAPI canSetLostDataMsg struct can_api   c,
long    nNewValue
 

Manipulation eines internen Wertes.

Hiermit kann die Anzahl der verlorenen Nachrichten manipuliert werden. Im Normalfall sollte diese Funktion verwendet werden, um den Wert auf null rückzusetzen.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()

void WINAPI canSetRegister struct can_api   c,
unsigned char    nIndex,
unsigned char    nNewValue
 

Register des SJA1000 im Normalmodus beschreiben.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
nIndex  Registerindex (0...127)
nNewValue  zu schreibender Registerwert

void WINAPI canSetRegisterRR1 struct can_api   c,
unsigned char    nIndex,
unsigned char    nNewValue
 

Register des SJA1000 im Reset Modus beschreiben.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
nIndex  Registerindex (0...127)
nNewValue  zu schreibender Registerwert

int WINAPI canSetSJA1000Command struct can_api   c,
unsigned char    command
 

Kommando an den SJA1000 übergeben.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
command  Kommando (CAN_COMMAND...-Makros) an den Treiber übergeben. Die meisten Kommandos werden dabei direkt an den SJA1000 Baustein weitergeleitet.
Siehe auch:
CAN_COMMAND_...Makros
Rückgabe:
Im Fehlerfall 0. Ansonsten 1.

void WINAPI canShowMessages struct can_api   c,
int    on_off
 

Ereignisse weitermelden ein/ausschalten.

Benachrichtigung beim Eintreffen neuer Nachrichten (empfangene, ge- sendete CAN Botschaften oder Fehler) ein- oder ausschalten.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
on_off  Ereignisse ein- und ausschalten
  • 0 = CAN Botschaften nicht anzeigen
  • 1 = CAN Botschaften anzeigen

int WINAPI canTransmitData struct can_api   c,
unsigned long    id,
int    rtr,
int    dlc,
unsigned char *    data
 

CAN Botschaft senden.

CAN Botschaft senden. Die Botschaft wird direkt angegeben.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
id  CAN Identifier, es sind Standard Frames und Extended Frames möglich
rtr  Remote Transmission Request
  • 0 = Daten senden
  • 1 = Remote Transmission Request
dlc  Anzahl Datenbytes in data[] (maximal 8 Bytes sind möglich)
data  Zeiger auf einen Puffer mit den Datenbytes
Rückgabe:
Im Fehlerfall eine Fehlernummern, die durch GetLastError() ermittelt wurde. Ansonsten 0.

int WINAPI canTransmitDataByISR struct can_api   c,
struct ISRInfo   isr
 

CAN Botschaft senden.

CAN Botschaft senden. Wobei die Botschaft in einer ISR Struktur übergeben wird.

Parameter:
c  Ergebnis eines zuvor erfolgten canInit()
isr  Zeiger auf eine initialisierte Struktur, die die zu sendende CAN Botschaft enthält
Rückgabe:
Im Fehlerfall eine Fehlernummern, die durch GetLastError() ermittelt wurde. Ansonsten 0.


Erzeugt am Tue Oct 15 22:28:39 2002 für CAN API von doxygen1.2.18