====== AVC-LAN ====== {{ :avc-lan:avclan_ids_corolla_mp3_projekt.png?direct&400|IDs vom MP3 Toyato Corolla Projekt}}AVC ist die Abkürzung für: **A**udio **V**ideo **C**ommunication - **L**ocal **A**rea **N**etwork. Hier mal ein paar nützliche Links zur Einführung: * [[http://www.softservice.com.pl/corolla/avc/avclan.php| AVC-Lan Projekt - Toyota Corolla MP3-Player]] \\ ({{ :avc-lan:toyota_corolla_mp3_project.pdf |Toyota Corolla MP3 Projekt.pdf}}) * [[https://elinux.org/images/e/ed/Avc-lan.pdf|AVC-LAN.pdf]] - AVC-Lan Beschreibung von elinux.org * {{ :avc-lan:upd6708.pdf |}} Und Github Projekte: * [[https://github.com/DanielBroad/AVCSniffer|AVCSniffer]]\\ * [[https://github.com/halleysfifthinc/Toyota-AVC-LAN|Toyota-AVC-LAN]]\\ * [[https://github.com/GadgetNutt/AVC-LAN-Module-Builder|AVC-LAN-Module-Builder]] - neues aktuelles Projekt, ist wohl interessant\\ * [[http://flux242.blogspot.com/2007/09/avclan-iebus-sniffer-and-device.html]] - kein Github, pass aber hier gut her\\ * [[https://github.com/Tirta01/Arduino-AVCLan|Arduino-AVCLan]] * [[https://github.com/halleysfifthinc/toyota-avc-lan-bluetooth|toyota-avc-lan-bluetooth]] {{ :avc-lan:avc_command.png?direct&400|AVCLAN Co}} ===== Signal Analyzer ===== * [[https://sigrok.org/wiki/Protocol_decoder:Avclan|Sigrok Protocol Decoder - AVC-Lan]] ===== Protokoll ===== ==== Broadcast ==== * 0xFFF - Genereller Broadcast * 0xYFF - Group Broadcast wenn Slave-Adresse != 0xFFF ist.\\ y = Gruppe für die Die Broadcast gilt (hier meistens 0x1 => 0x1FF {{ :avc-lan:nec_iebus_upd72042_datasheet.pdf |Nec µPD72042 Datasheet}} - s. Gruppen siehe auch: [[https://en.wikipedia.org/wiki/IEBus]] (basiert wohl dann auf mode=2) typedef enum avclan_message_types { MSG_PING_SEND, MSG_PING_RECV, MSG_DEV_RESET, MSG_LAN_RESET, MSG_DEV_REG_DIRECT, MSG_DEV_REG_BROADCAST, MSG_DEV_ }; class avclan_messages { public: void cmdMessage(uint8_t cmd, uint16_t lan_slave, uint8_t src_dev, uint8_t dest_dev); void cmd10(uint8_t device_list[], uint8_t num_devices, uint16_t lan_master, uint16_t lan_slave, uint8_t src_dev, uint8_t dest_dev); // Report sending logical devices void cmd12(avclan_logical_device_map_t device_map[], uint8_t num_devices, uint16_t lan_master, uint16_t lan_slave, uint8_t src_dev, uint8_t dest_dev); // Report listening logical devices void cmd13(uint8_t device_list[], uint8_t num_devices, uint16_t lan_master, uint8_t src_dev, uint8_t dest_dev); // Broadcast logical devices void cmd30(uint16_t lan_master, uint16_t lan_slave, uint8_t ping); // Pong! void cmdE(uint16_t lan_master, uint16_t lan_slave, uint8_t src_dev, uint8_t dest_dev, uint8_t request_type); // Status request uint8_t getFunction(avclan_frame_t* msg_frame); uint8_t getSrcDevice(avclan_frame_t* msg_frame); uint8_t getDestDevice(avclan_frame_t* msg_frame); }; /* avclan-registers.h - AVCLan Head Unit library for for Atmega328 Created by Greg Nutt, 010.30.2020 Version 0.0.1 Not for commercial use. */ #ifndef avclan_registers_h #define avclan_registers_h #define FRAME_MAXLEN 32; // Address Register Values const uint16_t ADDR_AUDIO_ECU = 0x0180; const uint16_t ADDR_AUDIO_HU = 0x0190; const uint16_t ADDR_DVD_P = 0x01A0; const uint16_t ADDR_REAR_TV = 0x01B0; const uint16_t ADDR_SINGLE_DIN_NAV = 0x01B4; const uint16_t ADDR_DISPLAY_SW = 0x01B8; const uint16_t ADDR_REAR_CTRL_SW = 0x01C0; const uint16_t ADDR_EURO_GW_ECU = 0x01C2; const uint16_t ADDR_RUSSIA_GW_ECU = 0X01C4; const uint16_t ADDR_GW_ECU = 0x01C6; const uint16_t ADDR_FM_MULTI_DISPLAY = 0x01C8; const uint16_t ADDR_STEERING_SW = 0x01CC; const uint16_t ADDR_MULTI_CD_DECODER = 0x01D0; const uint16_t ADDR_DISPLAY_MASTER = 0x01D2; // Entry for custom device const uint16_t ADDR_DISPLAY = 0x01D4; const uint16_t ADDR_CLOCK = 0x01D6; const uint16_t ADDR_FR_CONTROLLED_SW = 0x01D8; const uint16_t ADDR_NAV_REM_CTRL = 0x01DC; const uint16_t ADDR_CD_CH_COMMANDER = 0x01E0; const uint16_t ADDR_CONSOLIDATED_SW = 0x01E4; const uint16_t ADDR_MD_CH_COMMANDER = 0x01E8; const uint16_t ADDR_BODY_COMPUTER = 0x01EC; const uint16_t ADDR_AMP_RADIO_TUNER = 0x01F0; const uint16_t ADDR_XM_RADIO_TUNER = 0x01F2; const uint16_t ADDR_RSA = 0x01F4; const uint16_t ADDR_RSE_M = 0x01F6; const uint16_t ADDR_BROADCAST_1FF = 0x01FF; const uint16_t ADDR_NAV_ECU = 0x0200; const uint16_t ADDR_ATIS = 0x0210; const uint16_t ADDR_VICS = 0x0220; const uint16_t ADDR_TV_TUNER = 0x0230; const uint16_t ADDR_HW_CD_CH = 0x0240; const uint16_t ADDR_HW_DVD_CH = 0x0250; const uint16_t ADDR_TEL_INFO_ECU = 0x0260; const uint16_t ADDR_CAMERA_CTRLR = 0x0280; const uint16_t ADDR_RADIO = 0x0300; const uint16_t ADDR_CASSETTE = 0x0320; const uint16_t ADDR_CASSETTE_NO_CH = 0x0330; const uint16_t ADDR_CD_P = 0x0340; const uint16_t ADDR_1DIN_CD_CH = 0x0360; const uint16_t ADDR_MD_P = 0x0380; const uint16_t ADDR_MD_CH = 0x03A0; const uint16_t ADDR_DAT = 0x03C0; const uint16_t ADDR_DCC = 0x03E0; const uint16_t ADDR_TEL_ECU = 0x03F8; const uint16_t ADDR_EQUALIZER = 0x0400; const uint16_t ADDR_DSP = 0x0440; const uint16_t ADDR_HW_AMP = 0x0480; const uint16_t ADDR_GPS_RECEIVER = 0x0500; const uint16_t ADDR_ATIS_DECODER = 0x0510; const uint16_t ADDR_FM_MULTI_DECODER = 0x0520; const uint16_t ADDR_RADIO_WAVE_BEACON = 0x0528; const uint16_t ADDR_OPTICAL_BEACON = 0x052C; const uint16_t ADDR_CD_CH = 0x0540; const uint16_t ADDR_MD_CH_2 = 0x0560; const uint16_t ADDR_CDROM_CH = 0x0580; const uint16_t ADDR_MDROM_CH = 0x05A0; const uint16_t ADDR_TEL_INFO = 0x05C0; const uint16_t ADDR_MAYDAY = 0x05C8; const uint16_t ADDR_AC_ECU = 0x0600; const uint16_t ADDR_BODY_ECU = 0x0680; const uint16_t ADDR_BROADCAST_FFF = 0x0FFF; // Device Register Values const uint16_t DEV_COM_CTRL0 = 0x00; const uint16_t DEV_COM_CTRL = 0x01; const uint16_t DEV_COM_EXT = 0x02; const uint16_t DEV_COM_MASTER = 0x11; const uint16_t DEV_SW_AUDIO = 0x21; const uint16_t DEV_SW_SHIFT = 0x23; const uint16_t DEV_SW = 0x25; const uint16_t DEV_HU_BEEP = 0x28; const uint16_t DEV_BEEP_SPEAK = 0x29; const uint16_t DEV_INFO_DISPLAY1 = 0x31; const uint16_t DEV_INFO_DISPLAY2 = 0x32; const uint16_t DEV_INFO_DISPLAY3 = 0x34; const uint16_t DEV_3F = 0x3F; const uint16_t DEV_TV_TUNER = 0x40; const uint16_t DEV_CD = 0x43; const uint16_t DEV_BLUETOOTH = 0x55; const uint16_t DEV_INFO_DRAW = 0x56; const uint16_t DEV_NAV_GPS = 0x58; const uint16_t DEV_FM_MULTIPLEX_VICS = 0x5A; const uint16_t DEV_BEACON = 0x5B; const uint16_t DEV_CAMERA = 0x5C; const uint16_t DEV_CLIMATE_CTRL_DRAW = 0x5D; const uint16_t DEV_AUDIO_DRAW = 0x5E; const uint16_t DEV_TRIP_INFO_DRAW = 0x5F; const uint16_t DEV_RADIO = 0x60; const uint16_t DEV_CASSETTE = 0x61; const uint16_t DEV_CD_P = 0x62; const uint16_t DEV_CD_CH = 0x63; const uint16_t DEV_MD = 0x64; const uint16_t DEV_MD_CH = 0x65; const uint16_t DEV_6D = 0x6D; const uint16_t DEV_6F = 0x6F; const uint16_t DEV_AUDIO_AMP = 0x74; const uint16_t DEV_NAV_GPS_2 = 0x80; const uint16_t DEV_81 = 0x81; const uint16_t DEV_FM_MULTIPLEX_DATA = 0x82; const uint16_t DEV_OPTICAL_BEACON = 0x83; const uint16_t DEV_RADIO_WAVE_BEACON = 0x84; const uint16_t DEV_VOICE_CONTROL = 0x85; const uint16_t DEV_FM_MULTIPLEX_TUNER = 0x9A; const uint16_t DEV_A4 = 0xA4; const uint16_t DEV_XM_TUNER = 0xC0; const uint16_t DEV_CLIMATE_CTRL_DEV = 0xE0; const uint16_t DEV_E4 = 0xE4; const uint16_t DEV_TRIP_INFO = 0xE5; const uint16_t DEV_EF = 0xEF; // Function Register Values const uint16_t FUNC_DIRECT_COMMAND = 0x00; const uint16_t FUNC_LAN_INIT = 0x01; const uint16_t MSG_DEVICES_RESPONSE = 0x02; const uint16_t MSG_DEVICES_REGISTER = 0x10; const uint16_t FUNC_REGISTER = 0x11; // TODO: Confirm const uint16_t MSG_DEVICES_REQUEST = 0x12; const uint16_t MSG_DEVICES_BROADCAST = 0x13; const uint16_t PING = 0x20; const uint16_t PONG = 0x30; const uint16_t FUNC_REGISTER_58 = 0x58; const uint16_t FUNC_REGISTER_5B = 0x5B; const uint16_t FUNC_REGISTER_5F = 0x5F; const uint16_t FUNC_STATUS_B7 = 0xB7; const uint16_t FUNC_UNKNOWN_INFO_D9 = 0xD9; // TODO: Related to Info Display, try to identify const uint16_t FUNC_AVG_KMH_INFO = 0xDB; const uint16_t FUNC_UNKNOWN_INFO_DC = 0xDC; const uint16_t FUNC_FUEL_RANGE_INFO = 0xDD; const uint16_t FUNC_TRIP_TIME_INFO = 0xDE; const uint16_t FUNC_STATUS_REQUEST_E0 = 0xE0; const uint16_t FUNC_STATUS_REQUEST_E2 = 0xE2; const uint16_t FUNC_STATUS_REQUEST_E4 = 0xE4; const uint16_t FUNC_STATUS_RESPOND_F0 = 0xF0; const uint16_t FUNC_STATUS_RESPOND_F1 = 0xF1; const uint16_t FUNC_STATUS_RESPOND_F2 = 0xF2; const uint16_t FUNC_STATUS_RESPOND_F3 = 0xF3; const uint16_t FUNC_STATUS_RESPOND_F9 = 0xF9; #endif ===== Links ===== * [[https://web.archive.org/web/20140627135927/http://www.sigmaobjects.com/toyota/|Toyota Aux Enabler]] - Toyota Projekt nur noch über Web-Archive abrufbar * Github-Projekte: * [[https://github.com/GadgetNutt/AVC-LAN-Module-Builder|AVC-LAN-Module-Builder]] * [[https://github.com/james-tate/IEBusAnalyzer|IEBusAnalyzer]] - IEBus analyzer using the Saleae Analyzer SDK