From 9091a232ab5d0dd612d5041ddca8ba3ffeded144 Mon Sep 17 00:00:00 2001 From: Allen Hill Date: Sat, 18 Jul 2015 15:45:42 -0700 Subject: [PATCH] Initial Commit --- AVCLanDriver.c | 967 ++++++++++++++ AVCLanDriver.h | 109 ++ AVCLanDriver.o | Bin 0 -> 19976 bytes BigPcb.jpg | Bin 0 -> 89242 bytes BigSchematic.jpg | Bin 0 -> 130968 bytes GlobalDef.h | 50 + Makefile | 28 + ToyotaAuxEnabler.c | 144 ++ ToyotaAuxEnabler.elf | Bin 0 -> 22248 bytes ToyotaAuxEnabler.hex | 273 ++++ ToyotaAuxEnabler.o | Bin 0 -> 8832 bytes USART.c | 144 ++ USART.h | 37 + USART.o | Bin 0 -> 7936 bytes log.txt | 2990 ++++++++++++++++++++++++++++++++++++++++++ screenlog.0 | 1578 ++++++++++++++++++++++ 16 files changed, 6320 insertions(+) create mode 100644 AVCLanDriver.c create mode 100644 AVCLanDriver.h create mode 100644 AVCLanDriver.o create mode 100644 BigPcb.jpg create mode 100644 BigSchematic.jpg create mode 100644 GlobalDef.h create mode 100644 Makefile create mode 100644 ToyotaAuxEnabler.c create mode 100755 ToyotaAuxEnabler.elf create mode 100644 ToyotaAuxEnabler.hex create mode 100644 ToyotaAuxEnabler.o create mode 100644 USART.c create mode 100644 USART.h create mode 100644 USART.o create mode 100644 log.txt create mode 100644 screenlog.0 diff --git a/AVCLanDriver.c b/AVCLanDriver.c new file mode 100644 index 0000000..dc3e68c --- /dev/null +++ b/AVCLanDriver.c @@ -0,0 +1,967 @@ +/*-------------------------------------------------------------------------------------------------- + + Name : AVCLanDriver.c + + Description : AVC Lan driver for Toyota devices. + + Author : Louis Frigon + + Copyright : (c) 2007 SigmaObjects + +---------------------------------------------------------------------------------------------------- + AVC LAN Theory + + The AVC bus is an implementation of the IEBus which is a differential line, floating on logical + level '1' and driving on logical '0'. Floating level shall be below 20 mV whereas driving level + shall be above 120 mV. + + The diagram below represents how things work from a logical perspective on the bus. + + A rising edge indicates a new bit. The duration of the high state tells whether it is a start + bit (~165 us), a bit '0' (~30 us) or a bit '1' (~20 us). A normal bit length is close to 40 us. + + |<---- Bit '0' ---->|<---- Bit '1' ---->| + Physical '1' ,---------------, ,---------, ,--------- + ^ | ^ | ^ + Physical '0' -----' '---' '---------'--------- Idle low + |---- 32 us ----| 7 |- 20 us -|- 19 us -| + + A bit '1' is typically 20 us high followed by 19 us low. + + A bit '0' is typically 32 us high followed by 7 us low. A bit '0' is dominant i.e. it takes + precedence over a '1' by extending the pulse. This is why lower addresses win on arbitration. + + A start bit is typically 165 us high followed by 30 us low. + + AVC LAN Frame Format + Bits Description + + 1 Start bit + 1 MSG_NORMAL + 12 Master address + 1 Parity + 12 Slave address + 1 Parity + 1 * Acknowledge * (read below) + 4 Control + 1 Parity + 1 * Acknowledge * (read below) + 8 Payload length (n) + 1 Parity + 1 * Acknowledge * (read below) + 8 Data + 1 Parity + 1 * Acknowledge * (read below) + repeat 'n' times + + In point-to-point communication, sender issues an ack bit with value '1' (20 us). Receiver + upon acking will extend the bit until it looks like a '0' (32 us) on the bus. In broadcast + mode, receiver disregards the bit. + + An acknowledge bit of value '0' means OK, '1' means no ack. + +--------------------------------------------------------------------------------------------------*/ +#include +#include +#include +#include + +#include "GlobalDef.h" +#include "USART.h" +#include "AVCLanDriver.h" + +/*-------------------------------------------------------------------------------------------------- + Local Functions +--------------------------------------------------------------------------------------------------*/ +static void SendStartBit ( void ); +static void Send12BitWord ( word data ); +static void Send8BitWord ( byte data ); +static void Send4BitWord ( byte data ); +static void Send1BitWord ( bool data ); +static bool SendMessage ( void ); + +static word ReadBits ( byte nbBits ); +static bool ReadAcknowledge ( void ); + +static bool HandleAcknowledge ( void ); +static bool IsAvcBusFree ( void ); + +static AvcActionID GetActionID ( void ); +static void LoadDataInGlogalRegisters ( AvcOutMessage * msg ); + +/*-------------------------------------------------------------------------------------------------- + Global Variables +--------------------------------------------------------------------------------------------------*/ +// Message frame global registers +static const char * Description; +static bool Broadcast; +static word MasterAddress; +static word SlaveAddress; +static byte Control; +static byte DataSize; +static bool ParityBit; +static byte Data[ 256 ]; + +bool AUX_Enabled = FALSE; +AvcActionID DeviceEnabled = ACT_NONE; //casting possibly unneccesary + +static AvcInMessage MessageTable [] PROGMEM = +{ +/*-------------------------------------------------------------------------------------------------- + Head Unit (HU) Messages + 0x60 = Tuner ID + 0x61 = Tape ID + 0x62 = CD ID + 0x63 = CD Changer ID (this is what we're emulating) +--------------------------------------------------------------------------------------------------*/ + { ACT_AUX_IN_USE, 4, {0x11, 0x01, 0x45, 0x01}, "AUX in use" }, + { ACT_TUNER_IN_USE, 4, {0x11, 0x01, 0x45, 0x60}, "Tuner in use" }, + { ACT_TAPE_IN_USE, 4, {0x11, 0x01, 0x45, 0x61}, "Tape in use" }, + { ACT_CD_IN_USE, 4, {0x11, 0x01, 0x45, 0x62}, "CD in use" }, + + { ACT_NONE, 3, {0x11, 0x01, 0x46}, "No device in use" }, + { ACT_NONE, 3, {0x11, 0x01, 0x20 /* xx */}, "Ping" }, // Get this once every minute in radio off mode. xx increments + { ACT_TUNER_INFO, 5, {0x60, 0x31, 0xF1, 0x01, 0x01 /* xx xx xx 0x00 0x00 0x00 0x00 */ /* 81 0 C9 = 107.9 or 107.7*/}, "Tuner Status"}, + { ACT_EJECT_CD, 10, {0x62, 0x31, 0xF1, 0x00, 0x30, 0x01, 0x01, 0x00, 0x00, 0x00, 0x80}, "Eject CD" }, + { ACT_NO_CD, 10, {0x62, 0x31, 0xF1, 0x00, 0xF8, 0x01, 0x01, 0x00, 0x00, 0x00, 0x80}, "No CD" }, +// { ACT_CD_INFO, 6, {0x62, 0x31, 0xF1, 0x01, 0x10, 0x01 /* Track #, Min, Sec, 0x00, 0x80 */}, "CD Info: " }, + {ACT_AUDIO_STATUS, 4, { 0x74, 0x31, 0xF1, 0x90 /* Volume, Balance, Fade, Bass, 0x10, Treble, 0x00, 0x0F, 0x00, 0x00 */ }, "Audio Status"}, + + { ACT_STATUS, 3, {0x00, 0x01, 0x0A}, "LAN Status" }, + { ACT_REGISTER, 3, {0x11, 0x01, 0x00}, "LAN Register" }, + { ACT_INIT, 3, {0x11, 0x01, 0x01}, "LAN Restart" }, + { ACT_CHECK, 3, {0x11, 0x01, 0x20}, "LAN Check" }, + + { (AvcActionID)FALSE } //possibly should be ACT_NONE +}; + +const byte MessageTableSize = sizeof( MessageTable ) / sizeof( AvcInMessage ); + +/*-------------------------------------------------------------------------------------------------- + Our (CD) Commands +--------------------------------------------------------------------------------------------------*/ +AvcOutMessage CmdReset PROGMEM = { MSG_BCAST, 5, {0x00, 0x00, 0x00, 0x00, 0x00}, "Reset" }; // This causes HU to send ACT_REGISTER + +//AvcOutMessage CmdRegister PROGMEM = { MSG_NORMAL, 5, {0x00, 0x01, 0x11, 0x10, 0x63}, "Register" }; +//AvcOutMessage CmdRegister PROGMEM = { MSG_NORMAL, 5, {0x00, 0x01, 0x11, 0x54, 0x63}, "Toggle HU On/Off" }; +//AvcOutMessage CmdRegister PROGMEM = { MSG_NORMAL, 5, {0x00, 0x01, 0x11, 0x54, 0x63}, "Toggle HU On/Off" }; +AvcOutMessage CmdEnableAux PROGMEM = { MSG_NORMAL, 5, {0x00, 0x01, 0x11, 0x50, 0x61}, "Enable AUX" }; +AvcOutMessage CmdDisableAux PROGMEM = { MSG_NORMAL, 5, {0x00, 0x01, 0x11, 0x51, 0x61}, "Disable AUX" }; + +/*-------------------------------------------------------------------------------------------------- + + Name : AvcRegisterMe + + Description : Sends registration message to master controller. + + Argument(s) : None. + + Return value : (bool) -> TRUE if successful else FALSE. + +--------------------------------------------------------------------------------------------------*/ +bool AvcRegisterMe ( void ) +{ + Broadcast = MSG_NORMAL; + MasterAddress = MY_ADDRESS; + SlaveAddress = HU_ADDRESS; + Control = CONTROL_FLAGS; + + AvcProcessActionID( ACT_REGISTER ); + + return TRUE; +} + +/*-------------------------------------------------------------------------------------------------- + + Name : AvcReadMessage + + Description : Read incoming messages on the AVC LAN bus. + + Argument(s) : None. + + Return value : (AvcActionID) -> Action ID associated with this message. + +--------------------------------------------------------------------------------------------------*/ +AvcActionID AvcReadMessage ( void ) +{ + ReadBits( 1 ); // Start bit. + + LedOn(); + + Broadcast = ReadBits( 1 ); + + MasterAddress = ReadBits( 12 ); + bool p = ParityBit; + if ( p != ReadBits( 1 ) ) + { + UsartPutCStr( PSTR("AvcReadMessage: Parity error @ MasterAddress!\r\n") ); + return (AvcActionID)FALSE; + } + + SlaveAddress = ReadBits( 12 ); + p = ParityBit; + if ( p != ReadBits( 1 ) ) + { + UsartPutCStr( PSTR("AvcReadMessage: Parity error @ SlaveAddress!\r\n") ); + return (AvcActionID)FALSE; + } + + bool forMe = ( SlaveAddress == MY_ADDRESS ); + + // In point-to-point communication, sender issues an ack bit with value '1' (20us). Receiver + // upon acking will extend the bit until it looks like a '0' (32us) on the bus. In broadcast + // mode, receiver disregards the bit. + + if ( forMe ) + { + // Send ACK. + Send1BitWord( 0 ); + } + else + { + ReadBits( 1 ); + } + + Control = ReadBits( 4 ); + p = ParityBit; + if ( p != ReadBits( 1 ) ) + { + UsartPutCStr( PSTR("AvcReadMessage: Parity error @ Control!\r\n") ); + return (AvcActionID)FALSE; + } + + if ( forMe ) + { + // Send ACK. + Send1BitWord( 0 ); + } + else + { + ReadBits( 1 ); + } + + DataSize = ReadBits( 8 ); + p = ParityBit; + if ( p != ReadBits( 1 ) ) + { + UsartPutCStr( PSTR("AvcReadMessage: Parity error @ DataSize!\r\n") ); + return (AvcActionID)FALSE; + } + + if ( forMe ) + { + // Send ACK. + Send1BitWord( 0 ); + } + else + { + ReadBits( 1 ); + } + + byte i; + + for ( i = 0; i < DataSize; i++ ) + { + Data[i] = ReadBits( 8 ); + p = ParityBit; + if ( p != ReadBits( 1 ) ) + { + sprintf( UsartMsgBuffer, "AvcReadMessage: Parity error @ Data[%d]\r\n", i ); + UsartPutStr( UsartMsgBuffer ); + return (AvcActionID)FALSE; + } + + if ( forMe ) + { + // Send ACK. + Send1BitWord( 0 ); + } + else + { + ReadBits( 1 ); + } + } + + // Dump message on terminal. + if ( forMe ) UsartPutCStr( PSTR("AvcReadMessage: This message is for me!\r\n") ); + + AvcActionID actionID = GetActionID(); + + // switch ( actionID ) { + // case /* value */: + // } + DumpRawMessage( FALSE ); + + LedOff(); + + return actionID; +} + +/*-------------------------------------------------------------------------------------------------- + + Name : AvcProcessActionID + + Description : Perform processing for given action ID. + + Argument(s) : actionID (AvcActionID) -> Action ID to process. + + Return value : (bool) -> TRUE if action performed. + +--------------------------------------------------------------------------------------------------*/ +bool AvcProcessActionID ( AvcActionID actionID ) +{ + // This function relies on the last received message still being loaded in global registers. + + switch ( actionID ) + { + case ACT_AUX_IN_USE: + + AUX_Enabled = TRUE; + return FALSE; + + case ACT_TUNER_IN_USE: + case ACT_TAPE_IN_USE: +// case ACT_AUDIO_STATUS: This is where we should print interpretted data (Volume, Balance, etc.) +// case ACT_TUNER_INFO: Same here + case ACT_CD_IN_USE: + + DeviceEnabled = actionID; + AUX_Enabled = FALSE; + return FALSE; + +// case ACT_NO_CD: + + case ACT_EJECT_CD: + + // Normal CD eject command. + if ( DeviceEnabled == ACT_CD_IN_USE ) return FALSE; + + if ( AUX_Enabled ) + { + LoadDataInGlogalRegisters ( &CmdDisableAux ); + AUX_Enabled = FALSE; + } + else + { + LoadDataInGlogalRegisters ( &CmdEnableAux ); + AUX_Enabled = TRUE; + } + + return SendMessage(); + break; + + default: + + // No success! + UsartPutCStr( PSTR("AvcProcessActionID: Unknown action ID!\r\n") ); + //POssibly dumpmsgbuffer here for sebuggimng + return FALSE; + } + + // Nothing to do! + return FALSE; +} + +/*-------------------------------------------------------------------------------------------------- + + Name : LoadDataInGlogalRegisters + + Description : Loads message data in global registers for given mesage ID. + + Argument(s) : msg (AvcOutMessage *) -> Message to load. + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +void LoadDataInGlogalRegisters ( AvcOutMessage * msg ) +{ + Description = msg->Description; + + Broadcast = pgm_read_byte_near( &msg->Mode ); + + MasterAddress = MY_ADDRESS; + + if ( Broadcast == MSG_BCAST ) + SlaveAddress = BROADCAST_ADDRESS; + else + SlaveAddress = HU_ADDRESS; + + DataSize = pgm_read_byte_near( &msg->DataSize ); + + for ( byte i = 0; i < DataSize; i++ ) + { + Data[i] = pgm_read_byte_near( &msg->Data[i] ); + } +} + +/*-------------------------------------------------------------------------------------------------- + + Name : GetActionID + + Description : Use the last received message to determine the corresponding action ID. + + Argument(s) : None. + + Return value : (AvcActionID) -> Action ID corresponding to current message. + +--------------------------------------------------------------------------------------------------*/ +AvcActionID GetActionID ( void ) +{ + Description = PSTR("Unknown message!"); + + // Iterate through all HU messages in table. + for ( byte msg = 0; msg < MessageTableSize; msg++ ) + { + bool found = TRUE; + + // Identify current message from it's payload data. + for ( byte i = 0; i < pgm_read_byte_near( &MessageTable[msg].DataSize ); i++ ) + { + if ( Data[i] != pgm_read_byte_near( &MessageTable[msg].Data[i] ) ) + { + found = FALSE; + break; + } + } + + if ( found ) + { + Description = MessageTable[msg].Description; + + // Fetch action corresponding to the message. + AvcActionID actionID = pgm_read_byte_near( &MessageTable[msg].ActionID ); + + return actionID; + } + } + + return ACT_NONE; +} + +/*-------------------------------------------------------------------------------------------------- + + Name : Send12BitWord + + Description : Writes a 12 bit word on the AVC LAN bus. + + Argument(s) : data (word) -> Data to write. + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +void Send12BitWord ( word data ) +{ + ParityBit = 0; + + // Most significant bit out first. + for ( char nbBits = 0; nbBits < 12; nbBits++ ) + { + // Reset timer to measure bit length. + TCNT0 = 0; + + // Drive output to signal high. + DDRD |= _BV(PD2) | _BV(PD3); + + if ( data & 0x0800 ) + { + // Adjust parity. + ParityBit = ! ParityBit; + + while ( TCNT0 < BIT_1_HOLD_ON_LENGTH ); + } + else + { + while ( TCNT0 < BIT_0_HOLD_ON_LENGTH ); + } + + // Release output. + DDRD &= ~( _BV(PD2) | _BV(PD3) ); + + // Hold output low until end of bit. + while ( TCNT0 < NORMAL_BIT_LENGTH ); + + // Fetch next bit. + data <<= 1; + } +} + +/*-------------------------------------------------------------------------------------------------- + + Name : Send8BitWord + + Description : Writes an 8 bit word on the AVC LAN bus. + + Argument(s) : data (byte) -> Data to write. + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +void Send8BitWord ( byte data ) +{ + ParityBit = 0; + + // Most significant bit out first. + for ( char nbBits = 0; nbBits < 8; nbBits++ ) + { + // Reset timer to measure bit length. + TCNT0 = 0; + + // Drive output to signal high. + DDRD |= _BV(PD2) | _BV(PD3); + + if ( data & 0x80 ) + { + // Adjust parity. + ParityBit = ! ParityBit; + + while ( TCNT0 < BIT_1_HOLD_ON_LENGTH ); + } + else + { + while ( TCNT0 < BIT_0_HOLD_ON_LENGTH ); + } + + // Release output. + DDRD &= ~( _BV(PD2) | _BV(PD3) ); + + // Hold output low until end of bit. + while ( TCNT0 < NORMAL_BIT_LENGTH ); + + // Fetch next bit. + data <<= 1; + } +} + +/*-------------------------------------------------------------------------------------------------- + + Name : Send4BitWord + + Description : Writes a 4 bit word on the AVC LAN bus. + + Argument(s) : data (byte) -> Data to write. + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +void Send4BitWord ( byte data ) +{ + ParityBit = 0; + + // Most significant bit out first. + for ( char nbBits = 0; nbBits < 4; nbBits++ ) + { + // Reset timer to measure bit length. + TCNT0 = 0; + + // Drive output to signal high. + DDRD |= _BV(PD2) | _BV(PD3); + + if ( data & 0x8 ) + { + // Adjust parity. + ParityBit = ! ParityBit; + + while ( TCNT0 < BIT_1_HOLD_ON_LENGTH ); + } + else + { + while ( TCNT0 < BIT_0_HOLD_ON_LENGTH ); + } + + // Release output. + DDRD &= ~( _BV(PD2) | _BV(PD3) ); + + // Hold output low until end of bit. + while ( TCNT0 < NORMAL_BIT_LENGTH ); + + // Fetch next bit. + data <<= 1; + } +} + +/*-------------------------------------------------------------------------------------------------- + + Name : Send1BitWord + + Description : Writes a 1 bit word on the AVC LAN bus. + + Argument(s) : data (bool) -> Data to write. + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +void Send1BitWord ( bool data ) +{ + // Reset timer to measure bit length. + TCNT0 = 0; + + // Drive output to signal high. + DDRD |= _BV(PD2) | _BV(PD3); + + if ( data ) + { + while ( TCNT0 < BIT_1_HOLD_ON_LENGTH ); + } + else + { + while ( TCNT0 < BIT_0_HOLD_ON_LENGTH ); + } + + // Release output. + DDRD &= ~( _BV(PD2) | _BV(PD3) ); + + // Pulse level low duration until 40 us. + while ( TCNT0 < NORMAL_BIT_LENGTH ); +} + +/*-------------------------------------------------------------------------------------------------- + + Name : SendStartBit + + Description : Writes a start bit on the AVC LAN bus. + + Argument(s) : None. + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +void SendStartBit ( void ) +{ + // Reset timer to measure bit length. + TCNT0 = 0; + + // Drive output to signal high. + DDRD |= _BV(PD2) | _BV(PD3); + + // Pulse level high duration. + while ( TCNT0 < START_BIT_HOLD_ON_LENGTH ); + + // Release output. + DDRD &= ~( _BV(PD2) | _BV(PD3) ); + + // Pulse level low duration until ~185 us. + while ( TCNT0 < START_BIT_LENGTH ); +} + +/*-------------------------------------------------------------------------------------------------- + + Name : ReadBits + + Description : Reads specified number of bits from the AVC LAN bus. + + Argument(s) : nbBits (byte) -> Number of bits to read. + + Return value : (word) -> Data value read. + + |<---- Bit '0' ---->|<---- Bit '1' ---->| + Physical '1' ,---------------, ,---------, ,--------- + ^ | ^ | ^ + Physical '0' -----' '---' '---------'--------- Idle low + |---- 32 us ----| 7 |- 20 us -|- 19 us -| + +--------------------------------------------------------------------------------------------------*/ +word ReadBits ( byte nbBits ) +{ + word data = 0; + + ParityBit = 0; + + while ( nbBits-- > 0 ) + { + // Insert new bit + data <<= 1; + + // Wait until rising edge of new bit. + while ( INPUT_IS_CLEAR ) + { + // Reset watchdog. + wdt_reset(); + } + + // Reset timer to measure bit length. + TCNT0 = 0; + + // Wait until falling edge. + while ( INPUT_IS_SET ); + + // Compare half way between a '1' (20 us) and a '0' (32 us ): 32 - (32 - 20) /2 = 26 us + if ( TCNT0 < BIT_0_HOLD_ON_LENGTH - (BIT_0_HOLD_ON_LENGTH - BIT_1_HOLD_ON_LENGTH) / 2 ) + { + // Set new bit. + data |= 0x0001; + + // Adjust parity. + ParityBit = ! ParityBit; + } + } + + return data; +} + +/*-------------------------------------------------------------------------------------------------- + + Name : SendMessage + + Description : Sends the message in global registers on the AVC LAN bus. + + Argument(s) : None. + + Return value : (bool) -> TRUE if successful else FALSE. + +--------------------------------------------------------------------------------------------------*/ +bool SendMessage ( void ) +{ + while ( ! IsAvcBusFree() ); + + // At this point we know the bus is available. + + LedOn(); + + // Send start bit. + SendStartBit(); + + // Broadcast bit. + Send1BitWord( Broadcast ); + + // Master address = me. + Send12BitWord( MasterAddress ); + Send1BitWord( ParityBit ); + + // Slave address = head unit (HU). + Send12BitWord( SlaveAddress ); + Send1BitWord( ParityBit ); + + if ( ! HandleAcknowledge() ) + { + DumpRawMessage( TRUE ); + UsartPutStr( (char*)"SendMessage: No Ack @ Slave address\r\n" ); + return FALSE; + } + + // Control flag + parity. + Send4BitWord( Control ); + Send1BitWord( ParityBit ); + + if ( ! HandleAcknowledge() ) + { + DumpRawMessage( TRUE ); + UsartPutStr( (char*)"SendMessage: No Ack @ Control\r\n" ); + return FALSE; + } + + // Data length + parity. + Send8BitWord( DataSize ); + Send1BitWord( ParityBit ); + + if ( ! HandleAcknowledge() ) + { + DumpRawMessage( TRUE ); + UsartPutStr( (char*)"SendMessage: No Ack @ DataSize\r\n" ); + return FALSE; + } + + for ( byte i = 0; i < DataSize; i++ ) + { + Send8BitWord( Data[i] ); + Send1BitWord( ParityBit ); + + if ( ! HandleAcknowledge() ) + { + DumpRawMessage( TRUE ); + sprintf( UsartMsgBuffer, "SendMessage: No Ack @ Data[%d]\r\n", i ); + UsartPutStr( UsartMsgBuffer ); + return FALSE; + } + } + + DumpRawMessage( TRUE ); + + LedOff(); + + return TRUE; +} + +/*-------------------------------------------------------------------------------------------------- + + Name : ReadAcknowledge + + Description : Reads the acknowledge bit the AVC LAN bus. + + Argument(s) : None. + + Return value : (bool) -> TRUE if ack detected else FALSE. + +--------------------------------------------------------------------------------------------------*/ +inline bool ReadAcknowledge ( void ) +{ + // The acknowledge pattern is very tricky: the sender shall drive the bus for the equivalent + // of a bit '1' (20 us) then release the bus and listen. At this point the target shall have + // taken over the bus maintaining the pulse until the equivalent of a bit '0' (32 us) is formed. + + // Reset timer to measure bit length. + TCNT0 = 0; + + // Drive output to signal high. + DDRD |= _BV(PD2) | _BV(PD3); + + // Generate bit '0'. + while ( TCNT0 < BIT_1_HOLD_ON_LENGTH ); + + // Release output. + DDRD &= ~( _BV(PD2) | _BV(PD3) ); + + // Measure final resulting bit. + while ( INPUT_IS_SET ); + + // Sample half-way through bit '0' (26 us) to detect whether the target is acknowledging. + if ( TCNT0 > BIT_0_HOLD_ON_LENGTH - (BIT_0_HOLD_ON_LENGTH - BIT_1_HOLD_ON_LENGTH) / 2 ) + { + // Slave is acknowledging (ack = 0). Wait until end of ack bit. + while ( INPUT_IS_SET ); + return TRUE; + } + + // No sign of life on the bus. + return FALSE; +} + +/*-------------------------------------------------------------------------------------------------- + + Name : HandleAcknowledge + + Description : Sends ack bit if I am broadcasting otherwise wait and return received ack bit. + + Argument(s) : None. + + Return value : (bool) -> FALSE if ack bit not detected. + +--------------------------------------------------------------------------------------------------*/ +bool HandleAcknowledge ( void ) +{ + if ( Broadcast == MSG_BCAST ) + { + // Acknowledge. + Send1BitWord( 0 ); + return TRUE; + } + + // Return acknowledge bit. + return ReadAcknowledge(); +} + +/*-------------------------------------------------------------------------------------------------- + + Name : IsAvcBusFree + + Description : Determine whether the bus is free (no tx/rx). + + Argument(s) : None. + + Return value : (bool) -> TRUE is bus is free. + +--------------------------------------------------------------------------------------------------*/ +bool IsAvcBusFree ( void ) +{ + // Reset timer. + TCNT0 = 0; + + while ( INPUT_IS_CLEAR ) + { + // We assume the bus is free if anything happens for the length of 1 bit. + if ( TCNT0 > NORMAL_BIT_LENGTH ) + { + return TRUE; + } + } + + return FALSE; +} + +/*-------------------------------------------------------------------------------------------------- + + Name : DumpRawMessage + + Description : Dumps raw content of message registers on the terminal. + + Argument(s) : incoming (bool) -> TRUE means incoming data, FALSE means outgoing. + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +void DumpRawMessage ( bool incoming ) +{ + // Dump message on terminal. + + if ( incoming ) + UsartPutCStr( PSTR("\r\nAUX Enabler <<--- HU\r\n") ); + else + UsartPutCStr( PSTR("\r\nAUX Enabler --->> HU\r\n") ); + + UsartPutCStr( PSTR(" Description: ") ); + UsartPutCStr( Description ); + UsartPutCStr( PSTR("\r\n") ); + + sprintf( UsartMsgBuffer, " Broadcast: %d \r\n", Broadcast ); + UsartPutStr( UsartMsgBuffer ); + + sprintf( UsartMsgBuffer, " Master address: 0x%X \r\n", MasterAddress ); + UsartPutStr( UsartMsgBuffer ); + + sprintf( UsartMsgBuffer, " Slave address: 0x%X \r\n", SlaveAddress ); + UsartPutStr( UsartMsgBuffer ); + + sprintf( UsartMsgBuffer, " Control: 0x%X \r\n", Control ); + UsartPutStr( UsartMsgBuffer ); + + sprintf( UsartMsgBuffer, " Data size: %d \r\n", DataSize ); + UsartPutStr( UsartMsgBuffer ); + + sprintf( UsartMsgBuffer, " Data: " ); + UsartPutStr( UsartMsgBuffer ); + + for ( byte i = 0; i < DataSize; i++ ) + { + sprintf( UsartMsgBuffer, "%X ", Data[i] ); + UsartPutStr( UsartMsgBuffer ); + } + + UsartPutStr( (char*)"\r\n-----\r\n" ); +} + +/*-------------------------------------------------------------------------------------------------- + + Name : LedOn + + Description : Turn LED on (active low signal). + + Argument(s) : None. + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +inline void LedOn ( void ) +{ + LED_PORT &= ~LEDOUT; +} + +/*-------------------------------------------------------------------------------------------------- + + Name : LedOff + + Description : Turn LED off (active low signal). + + Argument(s) : None. + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +inline void LedOff ( void ) +{ + LED_PORT |= LEDOUT; +} + + + +/*-------------------------------------------------------------------------------------------------- + End of file. +--------------------------------------------------------------------------------------------------*/ diff --git a/AVCLanDriver.h b/AVCLanDriver.h new file mode 100644 index 0000000..5906cbc --- /dev/null +++ b/AVCLanDriver.h @@ -0,0 +1,109 @@ +/*-------------------------------------------------------------------------------------------------- + + Name : AvcLanDriver.h + + Description : AVC Lan driver for Toyota devices + +--------------------------------------------------------------------------------------------------*/ +#ifndef _AVCLANDRV_H_ +#define _AVCLANDRV_H_ + +#include "GlobalDef.h" + +#define HU_ADDRESS 0x190 // But possibly 0x160, known to be both + +#define MY_ADDRESS 0x360 // CD Changer #1 + +#define BROADCAST_ADDRESS 0x01FF // All audio devices + +#define CONTROL_FLAGS 0xF + +/*-------------------------------------------------------------------------------------------------- + + |<---- Bit '0' ---->|<---- Bit '1' ---->| + Physical '1' ,---------------, ,---------, ,--------- + ^ | ^ | ^ + Physical '0' -----' '---' '---------'--------- Idle low + |---- 33 us ----| 7 |- 20 us -|- 20 us -| + + A bit '0' is typically 33 us high followed by 7 us low. + A bit '1' is typically 20 us high followed by 20 us low. + A start bit is typically 165 us high followed by 30 us low. + +--------------------------------------------------------------------------------------------------*/ + +// Following multipliers result of Timer 0 prescaler having 2 counts/us +#define NORMAL_BIT_LENGTH 74 //37*2 + +#define BIT_1_HOLD_ON_LENGTH 40 //20*2 +#define BIT_0_HOLD_ON_LENGTH 64 //33*2 + +#define START_BIT_LENGTH 372 //186*2 +#define START_BIT_HOLD_ON_LENGTH 336 //168*2 + +typedef enum +{ // No this is not a mistake, broadcast = 0! + MSG_NORMAL = 1, + MSG_BCAST = 0 + +} AvcTransmissionMode; + +typedef enum +{ + ACT_NONE, + + ACT_AUX_IN_USE, + ACT_TUNER_IN_USE, + ACT_TAPE_IN_USE, + ACT_CD_IN_USE, + + ACT_EJECT_CD, + ACT_NO_CD, + ACT_TUNER_INFO, + ACT_AUDIO_STATUS, +// ACT_CD_INFO, + + ACT_STATUS, + ACT_REGISTER, + ACT_INIT, + ACT_CHECK + +} AvcActionID; + +typedef struct +{ + AvcActionID ActionID; // Action to perform after receiving this message. + byte DataSize; // Payload data size (bytes). + byte Data[ 11 ]; // Payload data. + char Description[ 17 ]; // ASCII description of the command for terminal dump. + +} AvcIncomingMessageStruct; + +typedef const AvcIncomingMessageStruct AvcInMessage; + +typedef struct +{ + AvcTransmissionMode Mode; // Transmission mode: normal (1) or broadcast (0). + byte DataSize; // Payload data size (bytes). + byte Data[ 11 ]; // Payload data. + char Description[ 17 ]; // ASCII description of the command for terminal dump. + +} AvcOutgoingMessageStruct; + +typedef const AvcOutgoingMessageStruct AvcOutMessage; + +/*-------------------------------------------------------------------------------------------------- + Prototypes +--------------------------------------------------------------------------------------------------*/ +AvcActionID AvcReadMessage ( void ); + +bool AvcProcessActionID ( AvcActionID actionID ); +void AvcUpdateStatus ( void ); + +void DumpRawMessage ( bool incoming ); + +#endif // _AVCLANDRV_H_ + +/*-------------------------------------------------------------------------------------------------- + End of file. +--------------------------------------------------------------------------------------------------*/ diff --git a/AVCLanDriver.o b/AVCLanDriver.o new file mode 100644 index 0000000000000000000000000000000000000000..11d377634a6e9a2f711442c8c00b4693e05af8c7 GIT binary patch literal 19976 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 UzH0cy90d6+bAf4-|Bk@_1LN%Bd;kCd literal 0 HcmV?d00001 diff --git a/BigPcb.jpg b/BigPcb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f9e677b42c81d24bfcbc29e1f3be08c2e4e07179 GIT binary patch literal 89242 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 $cUk|Si@bGD!Pcqt5Z7f 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 HU;Y09uR>L? literal 0 HcmV?d00001 diff --git a/BigSchematic.jpg b/BigSchematic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18d09a11837496020cf9a69aa6cb659e275c7d7d GIT binary patch literal 130968 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 + +/*-------------------------------------------------------------------------------------------------- + Constants +--------------------------------------------------------------------------------------------------*/ +#define FALSE 0 +#define TRUE (!FALSE) + +// AVC LAN bus directly connected to internal analog comparator (PD6/7) +// PD6 AIN0 + +// PD7 AIN1 - +#define DATAIN_PIN ACSR +#define DATAIN ACO + +#define INPUT_IS_SET ( bit_is_set( DATAIN_PIN, DATAIN ) ) +#define INPUT_IS_CLEAR ( bit_is_clear( DATAIN_PIN, DATAIN ) ) + +#define LED_DDR DDRB +#define LED_PORT PORTB +#define LEDOUT _BV(PORT5) + +/*-------------------------------------------------------------------------------------------------- + Type definitions +--------------------------------------------------------------------------------------------------*/ +typedef unsigned char byte; +typedef unsigned int word; + +/*-------------------------------------------------------------------------------------------------- + Prototypes +--------------------------------------------------------------------------------------------------*/ +inline void LedOff( void ); +inline void LedOn( void ); + +#endif // _GLOBALDEF_H_ + +/*-------------------------------------------------------------------------------------------------- + End of file. +--------------------------------------------------------------------------------------------------*/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3f124fc --- /dev/null +++ b/Makefile @@ -0,0 +1,28 @@ +CC=avr-g++ +CFLAGS=-c -g -Os -Wall -fno-exceptions -fpermissive -ffunction-sections -fdata-sections -fno-threadsafe-statics -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_DUEMILANOVE -DARDUINO_ARCH_AVR +LFLAGS=-g -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10605 -DARDUINO_AVR_DUEMILANOVE -DARDUINO_ARCH_AVR + +all: ToyotaAuxEnabler.hex + +ToyotaAuxEnabler.hex: ToyotaAuxEnabler.elf + avr-objcopy -j .text -j .data -O ihex ToyotaAuxEnabler.elf ToyotaAuxEnabler.hex + +ToyotaAuxEnabler.elf: ToyotaAuxEnabler.o USART.o AVCLanDriver.o + $(CC) $(LFLAGS) -o ToyotaAuxEnabler.elf ToyotaAuxEnabler.o USART.o AVCLanDriver.o + +ToyotaAuxEnabler.o: ToyotaAuxEnabler.c GlobalDef.h USART.h AVCLanDriver.h + $(CC) $(CFLAGS) ToyotaAuxEnabler.c + +USART.o: USART.c USART.h GlobalDef.h + $(CC) $(CFLAGS) USART.c + +AVCLanDriver.o: AVCLanDriver.c GlobalDef.h USART.h AVCLanDriver.h + $(CC) $(CFLAGS) AVCLanDriver.c + +clean: + rm *.o *.hex *.elf + +upload: ToyotaAuxEnabler.hex + avrdude -C/home/allen/Programs/arduino-1.6.5/hardware/tools/avr/etc/avrdude.conf -v -patmega328p -carduino -P/dev/arduino -b57600 -D -Uflash:w:ToyotaAuxEnabler.hex:i + +.PHONY: upload diff --git a/ToyotaAuxEnabler.c b/ToyotaAuxEnabler.c new file mode 100644 index 0000000..e67ba69 --- /dev/null +++ b/ToyotaAuxEnabler.c @@ -0,0 +1,144 @@ +/*-------------------------------------------------------------------------------------------------- + + Name : ToyotaAuxEnabler.c + + Description : This program enables the AUX audio input on old Toyota radios with CD. Pressing + CD Eject button while no CD is loaded will toggle the AUX input. + + MCU : ATmega328P @ 16 MHz. + + Author : 2007-01-27 - Louis Frigon + + Copyright : (c) 2007 SigmaObjects + + History : 2007-01-27 - v0.1 Prototyping draft inspired from Marcin Slonicki's code. + 2007-02-24 - v1.0 Production release. + +--------------------------------------------------------------------------------------------------*/ +#include +#include +#include +#include + +#include "GlobalDef.h" +#include "USART.h" +#include "AVCLanDriver.h" + +#define FIRMWARE_VERSION "v1.0" +#define FIRMWARE_DATE __DATE__ + +/*-------------------------------------------------------------------------------------------------- + Prototypes +--------------------------------------------------------------------------------------------------*/ +void InitMCU ( void ); + +/*-------------------------------------------------------------------------------------------------- + Global Variables +--------------------------------------------------------------------------------------------------*/ +volatile bool SecondsTick = FALSE; + +char UsartMsgBuffer[ USART_BUFFER_SIZE ]; + +/*-------------------------------------------------------------------------------------------------- + + Name : InitMCU + + Description : Performs MCU initialization. + + Argument(s) : None. + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +void InitMCU ( void ) +{ + // Init LED port pin + LED_DDR |= LEDOUT; + LedOff(); + + // OLD: TCCR0A = _BV(CS01); + // Correction: TCCR0B has the CS0n bits, not TCCR0A, prescaler should be at 8 or less to have 1 or more counts/us + // Timer 0 prescaler = 8 ( 2 count / us ) + TCCR0B = _BV(CS01); + + InitUSART(); + + // Preset AVC bus driver output pins but leave pins tri-stated until we need to use them. + PORTD |= _BV(PD3); // PD3 (+) high. + PORTD &= ~_BV(PD2); // PD2 (-) low. + + // Enable watchdog @ ~2 sec. + // Likely this too, after research probably not, but maybe + wdt_enable( WDTO_2S ); +} + +/*-------------------------------------------------------------------------------------------------- + + Name : LedOn + + Description : Turn LED on (active low signal). + + Argument(s) : None. + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +inline void LedOn ( void ) +{ + LED_PORT &= ~LEDOUT; +} + +/*-------------------------------------------------------------------------------------------------- + + Name : LedOff + + Description : Turn LED off (active low signal). + + Argument(s) : None. + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +inline void LedOff ( void ) +{ + LED_PORT |= LEDOUT; +} + +/*-------------------------------------------------------------------------------------------------- + + Name : main + + Description : Program's main function. + + Argument(s) : None. + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +int main ( void ) +{ + InitMCU(); + + UsartPutCStr( PSTR("\r\n\t\t Toyota AVC-Lan AUX Enabler\r\n") ); + UsartPutCStr( PSTR("\t\tCopyright (C) 2007, SigmaObjects Inc.\r\n") ); + + sprintf( UsartMsgBuffer, "\t\t Firmware %s, %s\r\n\r\n", FIRMWARE_VERSION, FIRMWARE_DATE ); + UsartPutStr( UsartMsgBuffer ); + + while ( 1 ) + { + // Reset watchdog. + wdt_reset(); + + AvcActionID actionID = AvcReadMessage(); + + if ( actionID != ACT_NONE ) + { + AvcProcessActionID( actionID ); + } + } +} + +/*-------------------------------------------------------------------------------------------------- + End of file. +--------------------------------------------------------------------------------------------------*/ diff --git a/ToyotaAuxEnabler.elf b/ToyotaAuxEnabler.elf new file mode 100755 index 0000000000000000000000000000000000000000..ac961b4d2a20cac335341f2a7dede46afbca5151 GIT binary patch literal 22248 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�?kh+d!6sc-ja8aDKWX0u|_)E12u5qcC@!U4k zSi1s>+G3>jaTk3OaR3h=Wc2zeG}uta4WDbw_T7wjPqCAlTxYI?X}TJAiBytPBJ+XJ j-O;<|Ha*7zTl>R|k5Tse;tatX`yETpRI*CK<7_SW|v`ogkJJB*LB$4}D396JVxTV28L|Y*YLP#i?xq zeIY91V&>j%;KRUQW2z9xa6Yc^PYnEqf&XdXD`CKK^r__ye4BxvG4Oi^zV@PU>^=iG z4g6~ZUoh~d{%~x{z|#i4)4(kQKWN}H2L6kI|83wa5VGU!p%9jVZ!xfM;D-%-#=vhI z_>xOPoiPJ{!@&0%_-O;bYT)w*j;srHP8j%zfq!b?-x&Bk18-d)>d71UP6OX(;GY}# zj|Tpifg>A2o%;;DYT&00{JMerH-=-k7&vXBt%hUf?iSN47@0?RBbv)f{TM<;8|q z_o}NyWyjy?v@11ls8p*iIS1yy<(46_mfC8$oUqH@(sHftR${`o+qFh3k;=Dr#0RbD z$gXB0Rqz=X;)QrtwE_e~xr8B?h!*0hxNL=Z(vY8T*XpfW!(MUhdac>w8IsYF8=yQD z9pPU=hSc4ok-FEYMk-z#zO!69Ix>?iAZON%hA@qn)5NsmVM@wc%DGTCWwSfMitQ z;)qBgZt2iH5ffvY1=tT;Wmdb1ADXfaMTnn@zg}a*CqcpT7LN(f6R!|Un%y3kw$cEM<*MapJ z4HR=7&o-cISBAz_l(aAoRf8FwKr;bfQ`wm>Q{_+9B>ez#C6%*L996{<^hp{{?Mqvk6!D-Y^+f) zhMDOwBcD_%rgWH$n(Gw?Sf{Y~fOpf0BLI*mIQ zW|F+X$*lBUPuIye2^HHkpvT4#$#H= zaCnhHHJ)&!iNlCq(@M>^7kE#PaM5aDWyw~o8SO^ZZFN|-P822(esh1~Vz*t0{&NUgjf`il384RGgN>8WB&DNJR&S z)uYG!YD+F;!{L&1#Pj8PiA}n^_K~reZSiGq#SsX1vb4vZIxsUix<79XQs<_z(b8-_ zK3EW=E9F_=X*8E=&1TJOOnMbL0S$zfgwlezxuavV&@wfSaRf)_Znr0GzJ2T^ZCQ7s8GkHr|I59Obo42HKV|&NPZq8c?>GEi~1!pIUfp>5Nr6p@>ft^kw-moE`1VOAVDcWAe3#gTOljIBSQ6)!*l`QviR6^d@N z?AMmb9;pL$5$GWK49Qc8TCmHqpQnbFERGbem15>Xur5TW#>k0V$z)%1L>} zT5(j>VK$Mk-IVqk1qH7;|ID>Mt;e72N2kRH+O4Yh2^Qnxg-?*^FqxjF$rjxEl*y2@ z4`wGCwbta=+)92oxL636oLYl1*m%s5nU&GUr7+iY{MKZ%dQ*F0!S(ZdSR?A$403i@ z1zD8bve&3IXKUrdN)+XA6UJa~A+CRN=acuIJMqiQ9ueY>Cl5Y8bnXXlKXh)(3m-jl z`qASj4~Z==NASDh(S7ZD#L7hyaVsrWtXN!Z+!&#@yXG$)aeOy&eRB}U=1rS73DR}^ z+(YNO&rh9v@FdaKI-9chpE-4A!((K_saLkVeE%z_A0@8%QQrrAKD%+_n76#@V;OEm zc8o<~R6IKvG2aeFP)jjbvU!s-Q@(?WjNUr7bHCGw;6jh6w^5K1d&b7{ksW)c=Aw~Q zEEluzQm(nW)N#BT!f?OUUXD@TMQqvks!Q$?PXYx8Q$!w5+IHEF|1T~Z6zi-GNi%9d#BiC>TQ+_< z_vwDV3^96nj86>QQtGTv{9+lMYj6<8rx$LYB==Qt={@TIlS3xd_b*n*-^I?t2yF+w zm!)^GgE$E5_F+VbIywV5h_297iR4Dns z&frpiE7vg*>Dn5=72_Kcl&9mWe+cIRRQ3tgrxWp?Q2l9~x51v%s!u24KiAd&RagJb zuKvfWPchymwup6Muvy>dy83Hw7u81vEK*SF9G&(3|dRew(nLMA9HrHZuldvM)>x_KPv2bb+98PMvXAG(1roKiC`p!y zlEOY^#&s%cqq0J@9B9+NSH@OM?;0%&G~F>b6>zlT;j_!~s?B#r*~L@0Z`1wpa>TMv zT?!Ec@5OiTK3c5MW)1wB!c-G)5x$f~#5)Fl9Hm6`Lty=au+qN){ejO*dHNkt`sun~ zM+HG=9P1Tkd8{SWXqt7Zgy~z}dWA`JK*^9V>+tQB8m%Ym6}}Rf=%nK-ica`CMW^*^ zyP^{wB)Yoq#E7mi-7g2|W{Z}?p=I*GT894TF+dZd&EOcIMFj1392a5IX`Jc1-T)bb Kb|;R0MgK4HSk7Aj literal 0 HcmV?d00001 diff --git a/USART.c b/USART.c new file mode 100644 index 0000000..70d434b --- /dev/null +++ b/USART.c @@ -0,0 +1,144 @@ +/*-------------------------------------------------------------------------------------------------- + + Name : USART.c + + Description : Utility functions for ATmega8 USART. + + Author : 2004-10-22 - Louis Frigon + + History : 2004-10-22 - First release (v0.1). + +--------------------------------------------------------------------------------------------------*/ +#include +#include +#include +#include + +#include "USART.h" + +/*-------------------------------------------------------------------------------------------------- + + Name : InitUSART + + Description : Performs USART initialization: 9600,N,8,1. + + Argument(s) : None. + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +void InitUSART ( void ) +{ + // Disable USART while setting baud rate. + UCSR0B = 0x00; + UCSR0A = 0x00; + + // 8 data bit, 1 stop, no parity. + UCSR0C = _BV(EEAR7) | _BV(UCSZ01) | _BV(UCSZ00); + + // Set USART baud rate @ 9600. Divider is 103 @ 16 MHz. + UBRR0L = 103; + + // Enable internal pull-up on Rx pin. + PORTD |= _BV(PD0); + + // Enable Tx & Rx. + UCSR0B = _BV(RXEN0) | _BV(TXEN0); +} + +/*-------------------------------------------------------------------------------------------------- + + Name : UsartIsChr + + Description : Return status of USART Rx buffer. + + Argument(s) : None. + + Return value : 0 if Rx buffer empty. + +--------------------------------------------------------------------------------------------------*/ +bool UsartIsChr ( void ) +{ + return UCSR0A & _BV(RXC0); +} + +/*-------------------------------------------------------------------------------------------------- + + Name : UsartGetChr + + Description : Return character USART Rx buffer. Blocking until Rx buffer not empty. + + Argument(s) : None. + + Return value : Character in Rx buffer. + +--------------------------------------------------------------------------------------------------*/ +char UsartGetChr ( void ) +{ + while ( !UsartIsChr() ); + + return UDR0; +} + +/*-------------------------------------------------------------------------------------------------- + + Name : UsartPutChr + + Description : Send a character through the USART. + + Argument(s) : c -> char to send. + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +void UsartPutChr ( char c ) +{ + // Wait for transmit register to be empty. + while ( !(UCSR0A & _BV(UDRE0)) ); + + UDR0 = c; +} + +/*-------------------------------------------------------------------------------------------------- + + Name : UsartPutStr + + Description : Transmit a string on the serial port. + + Argument(s) : str -> pointer to string to send. + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +void UsartPutStr ( char *str ) +{ + while ( *str ) + { + UsartPutChr( *str++ ); + } +} + +/*-------------------------------------------------------------------------------------------------- + + Name : UsartPutCStr + + Description : Transmit a string on the serial port. + + Argument(s) : str -> pointer to constant string to send (strings in Flash). + + Return value : None. + +--------------------------------------------------------------------------------------------------*/ +void UsartPutCStr ( const char *str ) +{ + char c; + + while ( (c = pgm_read_byte_near( str++ )) ) + { + UsartPutChr( c ); + } +} + +/*-------------------------------------------------------------------------------------------------- + End of file. +--------------------------------------------------------------------------------------------------*/ diff --git a/USART.h b/USART.h new file mode 100644 index 0000000..9eab16c --- /dev/null +++ b/USART.h @@ -0,0 +1,37 @@ +/*-------------------------------------------------------------------------------------------------- + + Name : USART.h + + Description : Header file for USART functions. + + History : 2004-10-22 - Created by Louis Frigon. + +--------------------------------------------------------------------------------------------------*/ +#ifndef _USART_H_ +#define _USART_H_ + +#include + +#include "GlobalDef.h" + +#define USART_BUFFER_SIZE 80 + +extern char UsartMsgBuffer[ USART_BUFFER_SIZE ]; + +/*-------------------------------------------------------------------------------------------------- + Function prototypes +--------------------------------------------------------------------------------------------------*/ +// Function prototypes are mandatory otherwise the compiler generates unreliable code. + +void InitUSART ( void ); +bool UsartIsChr ( void ); +char UsartGetChr ( void ); +void UsartPutChr ( char c ); +void UsartPutStr ( char *str ); +void UsartPutCStr ( const char *str ); + + +#endif // _USART_H_ +/*-------------------------------------------------------------------------------------------------- + End of file. +--------------------------------------------------------------------------------------------------*/ diff --git a/USART.o b/USART.o new file mode 100644 index 0000000000000000000000000000000000000000..ce056e282f7350852ff34e4f386f5d4de11d61dc GIT binary patch literal 7936 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 V$(8e9llCRK<=~N}`XMLIe*uvd!oC0i literal 0 HcmV?d00001 diff --git a/log.txt b/log.txt new file mode 100644 index 0000000..bdfee62 --- /dev/null +++ b/log.txt @@ -0,0 +1,2990 @@ + + Toyota AVC-Lan AUX Enabler + Copyright (C) 2007, SigmaObjects Inc. + Firmware v1.0, Jul 18 2015 + + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 41 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 98 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 98 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 41 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 F8 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 41 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 41 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 41 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 41 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 41 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 48 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 30 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 F8 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 48 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 F8 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 30 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 F8 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 30 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 F8 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: Ping + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 20 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 30 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 F8 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 82 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 80 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 30 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 F8 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 1 0 1 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 80 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 1 0 1 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 80 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 1 0 1 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 80 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 1 0 1 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 80 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 80 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Ping + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 20 1 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 1 0 1 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 80 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 CB 6 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 CB 5 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 45 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- +AvcReadMessage: Parity error @ Data[4] + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 55 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 0 + + Toyota AVC-Lan AUX Enabler + Copyright (C) 2007, SigmaObjects Inc. + Firmware v1.0, Jul 18 2015 + + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AD 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AD 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 55 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AD 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AD 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 55 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AD 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 55 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AD 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 55 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AD 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 55 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AD 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 45 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AD 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 45 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 55 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 FF 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: Ping + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 20 3 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AD 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 67 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 59 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 55 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AD 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AD 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AD 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AD 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AD 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AD 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AB 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A9 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A9 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A7 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A7 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A5 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A5 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A5 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A5 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A5 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A5 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A5 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A5 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A5 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A5 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A5 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A5 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A5 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A5 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A3 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A1 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A1 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A1 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A1 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A1 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 9F 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 9F 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Ping + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 20 4 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 30 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 F8 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 30 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 F8 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: Ping + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 20 5 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: Ping + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 20 6 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 A1 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 B9 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 B9 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 1 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 7 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 CB 5 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 1 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 CB 5 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 1 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 B0 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: Ping + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 20 7 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 48 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 41 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 38 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 37 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 41 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 CB 5 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 59 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 FF 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 67 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 CB 5 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 67 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 67 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 CB 5 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 CB 5 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 4 0 0 0 +----- diff --git a/screenlog.0 b/screenlog.0 new file mode 100644 index 0000000..1db0984 --- /dev/null +++ b/screenlog.0 @@ -0,0 +1,1578 @@ + + Toyota AVC-Lan AUX Enabler + Copyright (C) 2007, SigmaObjects Inc. + Firmware v1.0, Jul 18 2015 + + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0. + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 41 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 98 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 98 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 41 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 F8 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 41 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 41 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 41 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 41 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 41 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 48 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 30 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 F8 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 48 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 F8 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 30 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 F8 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 30 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 F8 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: Ping + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 20 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 30 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 F8 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 82 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 80 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 30 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 11 + Data: 62 31 F1 0 F8 1 0 FF 7F 0 C0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 1 0 1 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 80 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 1 0 1 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 80 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 1 0 1 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 80 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 1 0 1 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 80 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 80 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: No device in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 3 + Data: 11 1 46 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Ping + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 20 1 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 1 0 1 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 80 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 3 1 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 CB 6 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 CB 5 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 43 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 45 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 51 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- +AvcReadMessage: Parity error @ Data[4] + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 55 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 AF 4 0 + + Toyota AVC-Lan AUX Enabler + Copyright (C) 2007, SigmaObjects Inc. + Firmware v1.0, Jul 18 2015 + + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C7 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 37 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 37 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 + Toyota AVC-Lan AUX Enabler + Copyright (C) 2007, SigmaObjects Inc. + Firmware v1.0, Jul 18 2015 + + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 48 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 CB 5 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 CB 5 4 0 0 0 +----- + + Toyota AVC-Lan AUX Enabler + Copyright (C) 2007, SigmaObjects Inc. + Firmware v1.0, Jul 18 2015 + + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 48 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 48 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: Ping + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 20 F +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 48 10 10 10 10 10 0 F 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 4 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: Tuner in use + Broadcast: 0 + Master address: 0x190 + Slave address: 0xFFF + Control: 0xF + Data size: 4 + Data: 11 1 45 60 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 13 + Data: 60 31 F1 1 1 81 0 C9 0 0 0 0 0 +----- + +AUX Enabler <<--- HU + Description: + Broadcast: 0 + Master address: 0x190 + Slave address: 0x1FF + Control: 0xF + Data size: 14 + Data: 74 31 F1 90 48 10 10 10 10 10 0 F 0 0 +-----