====== 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