/* Basis-Adressen einiger Bausteine:                                     */
/*                                                                       */
/* Einige IC's haben die gleiche Basisadresse. Über die Adressbits       */
/* A3, A2 oder A1 können die Adressen vom Anwender festgelegt werden.    */
/* um Adresskonflikte zu vermeiden und mehrere gleiche Bausteine zu      */
/* verwenden.                                                            */
/* Im Kommentar steht rechts, welche Bits gesetzt werden können.         */
/*                                                                       */
/* Das Adress-bit A0 bestimmt, ob gelesen oder geschrieben wird.         */

#define PCD3311_base  0x48 /* DTMF/Modem/Tongenerator                  1 */
#define PCD3312_base  0x48 /* DTMF/Modem/Tongenerator                  1 */
#define PCF8200_base  0x20 /* Sprachsynthesizer                          */
#define PCF8566_base  0x7c /* Universeller LCD-Treiber                 1 */
#define PCF8570_base  0xa0 /* Statisches RAM (256x8)               3/2/1 */
#define PCF8571_base  0xa0 /* Statisches RAM (128x8)               3/2/1 */
#define PCF8570C_base 0xb0 /* Statisches RAM (256x8)               3/2/1 */
#define PCF8572_base  0xa0 /* EEPROM (128x8)                         2/1 */
#define PCF8573_base  0xd0 /* Echtzeituhr/Kalender                   2/1 */
#define PCF8574_base  0x40 /* 8 Bit I/O-Erweiterung                3/2/1 */
#define PCF8574A_base 0x70 /* 8 Bit I/O-Erweiterung                3/2/1 */
#define PCF8576_base  0x70 /* Universeller LCD-Treiber                 1 */
#define PCF8577_base  0x74 /* LCD-Direct/Dupplex-Treiber                 */
#define PCF8577A_base 0x76 /* LCD-Direct/Dupplex-Treiber                 */
#define PCF8578_base  0x78 /* LCD-Treiber fuer Dot-Matrix              1 */
#define PCF8579_base  0x78 /* LCD-Treiber fuer Dot-Matrix              1 */
#define PCF8582A_base 0xa0 /* EEPROM (256x8)                       3/2/1 */
#define PCF8583_base  0xa0 /* Uhr/Kalender mit stat. RAM (256x8)       1 */
#define PCF8591_base  0x90 /* 8-bit-ADC mit 4 Kanal MUPX + 1 DAC   3/2/1 */
#define SAA1064_base  0x70 /* 4-Digit-LED-Treiber                    2/1 */
#define SAA1136_base  0x3c /* PCM-Audio-Interface                        */
#define SAA1300_base  0x40 /* Tuner-Schaltkreis                      2/1 */
#define SAA3028_base  0x4c /* Transkoder (RC5) für IR-Fernsteuerung      */
#define SAA4700_base  0x20 /* VPS-Datenzeilen-Prozessor                1 */
#define SAA5243_base  0x22 /* Videotext-Dekoder                          */
#define SAA5245_base  0x22 /* Videotext-Dekoder                          */
#define SAA5246_base  0x22 /* Videotext-Dekoder                          */
#define SAA5246A_base 0x22 /* Videotext-Dekoder                          */
#define SAA9020_base  0x28 /* Speicher-Kontroller                    2/1 */
#define SAA9050_base  0x8a /* Digitaler Multistandard TV-Kontroller      */
#define SAA9055_base  0x8a /* Digitaler SECAM-Dekoder                    */
#define SAA9055E_base 0x8e /* Digitaler SECAM-Dekoder                    */
#define SAA9062_base  0x8c /* Digitaler Ablenkungs-Kontroller            */
#define SAA9063_base  0x8c /* Digitaler Ablenkungs-Kontroller            */
#define SAA9064_base  0x8c /* Digitaler Ablenkungs-Kontroller            */
#define SAA9068_base  0x24 /* Bild-in-Bild-Kontroller (PIPCO)          1 */
#define SAB3035_base  0xc0 /* Computer-Interface für Abstimmung      2/1 */
#define SAB3036_base  0xc0 /* Computer-Interface für Abstimmung      2/1 */
#define SAB3037_base  0xc0 /* Computer-Interface für Abstimmung      2/1 */
#define SAF1135_base  0x20 /* Datenzeile-16-Dekoder für VCR          2/1 */
#define TDA8370_base  0x8c /* Sync-Prozessor für TV                      */
#define TDA8400_base  0xc0 /* Interface für Vorteiler-Synthesizer    2/1 */
#define TDA8405_base  0x84 /* Stereo-Tonprozessor für TV                 */
#define TDA8420_base  0x80 /* Stereo-Audio-Prozessor für TV            1 */
#define TDA8421_base  0x80 /* Stereo-Audio-Prozessor für TV            1 */
#define TDA8425_base  0x82 /* Stereo-Audio-Prozessor für TV              */
#define TDA8440_base  0x90 /* Video/Audio-Schalter                 3/2/1 */
#define TDA8442_base  0x88 /* Interface für Farbdekoder                  */
#define TDA8443A_base 0xd0 /* YUV/RGB-Matrix-Schalter              3/2/1 */
#define TDA8444_base  0x40 /* 8-fach 6-bit-D/A-Wandler             3/2/1 */
#define TDA8461_base  0x88 /* PAL/NTSC-Dekoder                     3/2/1 */
#define TEA6000_base  0xc2 /* FM/ZF-System für Mikroproz.-Tuner          */
#define TEA6100_base  0xc2 /* FM/ZF-System für Mikroproz.-Tuner          */
#define TEA6300_base  0x80 /* Fader-Ton-IC für Autoradios                */
#define TEA6310T_base 0x80 /* Fader-Ton-IC für Autoradios                */
#define TEA6330T_base 0x80 /* Regelverstärker                            */
#define TEA6360_base  0x84 /* Equalizer                                1 */
#define TSA5510_base  0xc0 /* PLL-Frequenz-Synth. für TV und VCR     2/1 */
#define TSA6057_base  0xc4 /* PLL-Frequenz-Synth. für Radios           1 */
#define UMA1000T_base 0xd8 /* Datenprozessor für Funktelefon         2/1 */
#define UMA1010T_base 0xc0 /* Frequenz-Synth. für Funktelefone         1 */

/* Mögliche Fehlerfälle beim Öffnen und Betreiben des I²C-Bus            */

#define I2CErr_NoHost     1  /* I²C-Host ist nicht gestartet               */
#define I2CErr_NoMsg      2  /* AllocMem() failed                          */
#define I2CErr_NoReply    3  /* CreateMsgPort() failed                     */
#define I2CErr_Open       4  /* I²C-Device kann nicht geöffnet werden      */
#define I2CErr_NoAck      5  /* IC schickte kein Acknowledge               */
#define I2CErr_NoI2C      6  /* Am Port ist kein I²C-Bus gesteckt          */
#define I2CErr_Address    7  /* Baustein-Adresse nicht auf dem Bus         */
#define I2CErr_Owner      8  /* Port wird schon benutzt                    */
#define I2CErr_NoPrefs    9  /* Kein Preference-File vorhanden             */
#define I2CErr_UnknownCmd 10 /* Unbekanntes Kommando                       */
#define I2CErr_NoPort     11 /* Port nicht geöffnet                        */

#define I2C_FEHLER_1  "I²C-Host ist nicht gestartet"
#define I2C_FEHLER_2  "AllocMem() failed"
#define I2C_FEHLER_3  "CreateMsgPort() failed"
#define I2C_FEHLER_4  "I²C-Device kann nicht geöffnet werden"
#define I2C_FEHLER_5  "IC schickte kein Acknowledge"
#define I2C_FEHLER_6  "Am Port ist kein I²C-Bus gesteckt"
#define I2C_FEHLER_7  "Baustein-Adresse nicht auf dem Bus"
#define I2C_FEHLER_8  "Port wird schon benutzt"
#define I2C_FEHLER_9  "Konfigurations-Datei 'ENV:i2cHost/i2cHost.prefs' nicht vorhanden"
#define I2C_FEHLER_10 "Unbekanntes Kommando"
#define I2C_FEHLER_11 "I²C-Port ist nicht geöffnet"

struct I2CMsg {
               struct Message Msg     ;
               int            Command ;  /* Kommando (READ/WRITE/RESET)  */
               int            Address ;  /* I²C-Bausteinadresse          */
               int            Length  ;  /* Länge des Datenfeldes        */
               char          *Data    ;  /* Datenfeld                    */
               int            Error   ;  /* Fehlernummer 0 = kein Fehler */
              } ;

#define I2C_LOGON  1
#define I2C_LOGOFF 2
#define I2C_WRITE  3
#define I2C_READ   4
#define I2C_RESET  5

/* Prototypes */

int  Open_I2C( void ) ;
void Close_I2C( void ) ;
BOOL Send_I2C( int Address, int Anzahl, char *Daten ) ;
BOOL Receive_I2C( int Address, int Anzahl, char *Daten ) ;
void Reset_I2C( void ) ;

