CCS Modul   P_LIN
 
   $Id: p_lin.C,v 1.8 2005/09/01 07:11:40 sniff Exp $
   ---------------------------------------------------------------------
   Kurzbeschreibung: 	Eingabemodul fuer LIN-Protokoll (SKMlight)
   ---------------------------------------------------------------------
   Projekt:		CCS
   Sourcefile:		p_lin.C
   Autor:		RtW2/TEF72-Kaeppeler (25.01.2005)
   Zielsystem:		Linux
   Sprache:		ANSI-C/C++
   ---------------------------------------------------------------------
   Prototyp:
   
   int  p_lin
   (shm_stringpointer *zeilen_wert	// <I> Inputfield of INTERPRETERLIST
   ,long  index1			// <I> INDEX in list
   ,long anzahl)			// <I> Number of Elements for Loaddfile
   
   ---------------------------------------------------------------------
   Aufruf:
   
   error = p_lin
   (zeilen_wert	// <I> Inputfield of INTERPRETERLIST
   ,index1	// <I> INDEX in list
   ,anzahl)	// <I> Number of Elements for Loaddfile

   
   if (error != 0) 	// Errordescription ... 
   {
   // Errorhandling ... 
   }
   
   ---------------------------------------------------------------------
   Funktionsbeschreibung:
   
   Dieses Modul dient zur Auftragsvergabe an die SKMlight. Es bereitet die 
   Eingangsdaten zu einem SKMlight-verstaendlichen String auf und veranlasst 
   die gewuenschten Aktionen.
   Die Antwort wird im shared Memory abgelegt und kann dort z.B. vom Modul 
   p_zerlege_string geholt und verarbeitet werden.
   
   ACHTUNG: nur SKMlight
   
   Beschreibung der ModulÏbergabeparameter:
1 PRUEFSCHRITT
   	GAUDI Prüfschritt
   ------------------------------
2 POSITION
   	PAV- Position
   ------------------------------
3 LIN_BEFEHL
                        Steuerbefehle für LIN
        INIT_VER_LI:	DIESER BEFEHL MUSS (MEIST MEHRMALS) ZU ANFANG VERWENDET WERDEN, UM FESTZULEGEN
                        AUF WELCHEN IDs GESENDET UND EMPFANGEN WIRD UND WIEVIEL DATENBYTES DIESEN IDs
                        ZUGEORDNET SIND.
                        Der Befehl dient zur Initialisierung/Änderung einer Zeile der LIN-Verarbeitungs-
                        tabelle. Die Verarbeitungstabelle besteht aus 64 Zeilen (entsprechend den für 
                        LIN gültigen Frame-IDs 0...63) und den Spalten FRAME_ID, FRAME_MODE und LIN_DATEN.
                        Über FRAME_ID wird die gewünschte Zeile angesprochen. 
                        Für die Frame-IDs, auf welchen Daten empfangen werden sollen, muss jeweils 
                        der FRAME_MODE auf RECEIVE gesetzt und die erwartete Datenlänge in LIN_DATEN 
                        angegeben werden. 
                        Für die Frame-IDs auf welchen Daten gesendet werden sollen (nur für Master), 
                        muss jeweils der FRAME_MODE auf RESPOND gesetzt und die Sende-LIN_DATEN vermerkt 
                        werden.
                        Benötigte Parameter: FRAME_ID, FRAME_MODE, ggf. LIN_DATEN
        FRAME_DIRECT:	Nur für LIN-Master: Dieser Befehl ist eine sehr flexible Alternative zum 
                        Scheduler. Dabei bestimmt der Host wann welche Frame-ID (ggf. mit den 
                        übergebenen Daten) auf den Bus gelegt werden. Die Sendedaten der 
                        Verarbeitungstabelle werden in diesem Fall nicht verwendet. Jedoch muss der 
                        FRAME_MODE der Verarbeitungstabelle beachtet werden. Ggf. empfangene Daten 
                        werden zurückgegeben.
                        Benötigte Parameter: FRAME_ID, ggf. LIN_DATEN

                        DIE FOLGENDEN BEFEHLE BETREFFEN DEN SCHEDULER (nur für LIN-Master):
        CLEAR_SCHE:	Nur für LIN-Master: Dieser Befehl löscht die komplette Schedule-Tabelle.
                        Benötigte Parameter: -
        ADD_SCHE_LI:	Nur für LIN-Master: Fügt der Schedule-Tabelle hinten (d.h. am niedrigsten freien
                        Index) eine neue Zeile an. Hinweis: Die Schedule-Tabelle kann max. 255 Zeilen 
                        enthalten (1...255) und besteht aus den Spalten SCHED_INDEX, FRAME_ID und 
                        SCHED_DELAY.
                        Benötigte Parameter: FRAME_ID, SCHED_DELAY
        INSERT_SCHE_LI:	Nur für LIN-Master: Fügt der Schedule-Tabelle am übergebenen Index eine neue Zeile
                        an. Alle Zeilen ab diesem Index werden dadurch um eine Position nach hinten 
                        verschoben. Lücken in der Schedule-Tabelle sind nicht erlaubt; wenn der übergebene
                        Index zu groß ist, wird die Zeile am niedrigsten freien Index angehängt, d.h. der
                        übergebene Index wird in diesem Fall ignoriert. Hinweis: Die Schedule-Tabelle kann 
                        max. 255 Zeilen enthalten (1...255) und besteht aus den Spalten SCHED_INDEX, 
                        FRAME_ID und SCHED_DELAY.
                        Benötigte Parameter: SCHED_INDEX, FRAME_ID, SCHED_DELAY
        DELETE_SCHE_LI:	Nur für LIN-Master: Löscht aus der Schedule-Tabelle eine Zeile am übergebenen Index. 
                        Alle Zeilen ab diesem Index werden dadurch um eine Position nach vorne verschoben. 
                        Hinweis: Die Schedule-Tabelle kann max. 255 Zeilen enthalten (1...255) und besteht 
                        aus den Spalten SCHED_INDEX, FRAME_ID und SCHED_DELAY.
                        Benötigte Parameter: SCHED_INDEX
        START_SCHE:	Nur für LIN-Master: Startet den Scheduler, d.h. die Schedule-Tabelle wird
                        abgearbeitet.
                        Benötigte Parameter: -
        STOP_SCHE 	Nur für LIN-Master: Stoppt den Scheduler.
                        Benötigte Parameter: -
   ------------------------------
4 FRAME_ID
                        LIN Frame-ID. Gültige Werte 0...63. Auf dem LIN-Bus wird die ID (6 Bits) 
                        automatisch mit 2 CRC-Bits ergänzt. Beispiel: ID 33 = 0x21. Auf dem LIN-Bus 
                        wird 0x61 gesendet. Die beiden CRC-Bits liegen am oberen Ende.
                        FRAME_ID wird für die Befehle INIT_VER_LI, FRAME_DIRECT, ADD_SCHE_LI und 
                        INSERT_SCHE_LI benötigt.                        
   ------------------------------
5 FRAME_MODE
                        FRAME_MODE ist eine Spalte der Verarbeitungstabelle und wird für den Befehl 
                        INIT_VER_LI benötigt. Dort wird angegeben, wie der LIN-Knoten auf den 
                        Empfang der jeweiligen Frame-ID reagiert.
                        RESPOND: Bei Empfang der entspr. Frame-ID werden Daten gesendet (s. LIN_DATEN).
                        RECEIVE: Bei Empfang der entspr. Frame-ID werden Daten empfangen; die 
                          erwartete Datenlänge muss in LIN_DATEN angegeben sein.
                        IGNORE:  Es soll weder gesendet noch empfangen werden.
   ------------------------------
6 LIN_DATEN
                        LIN-Daten (1...8 Bytes). Wird für den Befehl INIT_VER_LI benötigt, um
                        Daten in die Verarbeitungstabelle zu schreiben. 
                        a) Diese Daten werden gesendet, sobald die entspr. Frame-ID empfangen und 
                           RESPOND eingestellt ist.
                        b) Da LIN-Frames keine Datenlängeninformation besitzen, ist die Angabe der
                           erwarteten Datenlänge auch für RECEIVE notwendig. Dazu werden Dummy-
                           Daten mit der entsprechenden Länge in die Verarbeitungstabelle 
                           geschrieben.

                        Dieser Parameter wird ebenfalls für den Befehl FRAME_DIRECT benötigt, um 
                        Sendedaten für den zu sendenden Frame anzugeben.
   ------------------------------
7 SCHED_INDEX
                        Zeilennummer der Schedule-Tabelle. Gültige Werte 1...255. Wird für den Befehl
                        INSERT_SCHE_LI und DELETE_SCHE_LI benötigt.
   ------------------------------
8 SCHED_DELAY
                        SCHED_DELAY ist eine Spalte der Schedule-Tabelle und wird für den Befehl
                        ADD_SCHE_LI und INSERT_SCHE_LI benötigt. Dort wird die Verzögerungszeit (in ms) 
                        angegeben, die der Scheduler nach der Ausführung dieser Zeile warten soll, 
                        bevor die nächste Zeile abgearbeitet wird. Gültige Werte 0...255 ms.
   ------------------------------
9 NR_EXEC
	Wird z.Zt. nicht verwendet. Reserviert für zukünftige Erweiterungen.
   ------------------------------
10 FEHLERFLAG
	Wird gesetzt bei aufgetretenem Fehler
   ------------------------------
11 ERGEBNIS
	Pointer auf den Antwortstring der PSS/SKM