Hey everyone!
I'm new to Arduino and trying to modify my car a bit
I want to create a LinBus converter for steering wheel controls for my Audi A4 2013. Currently I have connected Arduino and MCP2004 with my car
And using this code
#include <SoftwareSerial.h>
// https://github.com/zapta/linbus/tree/master/analyzer/arduino
#include "lin_frame.h"
// Pins we use for MCP2004
#define RX_PIN 10
#define TX_PIN 11
#define FAULT_PIN 14
#define CS_PIN 8
#define SYN_FIELD 0x55
SoftwareSerial LINBusSerial(RX_PIN, TX_PIN);
byte b, i, n;
LinFrame frame;
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
// Open serial communications to host (PC) and wait for port to open:
Serial.begin(9600, SERIAL_8E1);
Serial.println("LIN Debugging begins");
LINBusSerial.begin(19200);
pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH);
pinMode(FAULT_PIN, OUTPUT);
digitalWrite(FAULT_PIN, HIGH);
frame = LinFrame();
}
void loop() {
if (LINBusSerial.available()) {
b = LINBusSerial.read();
n = frame.num_bytes();
if (b == SYN_FIELD && n > 2 && frame.get_byte(n - 1) == 0) {
//Added delay for better read if I delete this is doesn't read anything
delay(10);
digitalWrite(LED_BUILTIN, HIGH);
frame.pop_byte();
handle_frame();
frame.reset();
digitalWrite(LED_BUILTIN, LOW);
} else if (n == LinFrame::kMaxBytes) {
frame.reset();
} else {
frame.append_byte(b);
}
}
}
void handle_frame() {
if (!frame.isValid())
return;
dump_frame();
}
void dump_frame() {
for (i = 0; i < frame.num_bytes(); i++) {
Serial.print(frame.get_byte(i), HEX);
Serial.print(" ");
}
Serial.println();
}
I get this info
LIN Debugging begins
50 0 80 FF 7F
C1 0 FF 0
F0 0 55 50 0 80 FF 7F 0 0
F0 F0 0 0 34 0 FF DA
50 0 80 FF 7F
C1 0 FF 0
61 64 1 9A
F0 F1 10 0 34 0 FF C9
50 0 80 FF 7F
C1 0 FF 0 0 0
50 0 80 FF 7F 0
50 0 80 FF 7F
61 64 1 9A 0 0
F0 F2 20 0 34 0 FF B8
50 0 80 FF 7F 0 0
50 0 80 FF 7F
C1 0 FF 0 0 0
F0 F3 30 0 34 0 FF A7
50 0 80 FF 7F 0 0
50 0 80 FF 7F 0
50 0 80 FF 7F
61 64 1 9A 0 0
F0 F4 47 0 34 0 FF 8F
50 0 80 FF 7F 0 0
50 0 80 FF 7F
C1 0 FF 0 0 0
F0 F5 57 0 34 0 FF 7E
50 0 80 FF 7F 0 0
50 0 80 FF 7F 0
50 0 80 FF 7F
61 64 1 9A 0 0
F0 F6 67 0 34 0 FF 6D
50 0 80 FF 7F 0 0
50 0 80 FF 7F
C1 0 FF 0 0 0
F0 F7 70 0 34 0 FF 63
50 0 80 FF 7F 0 0
50 0 80 FF 7F 0
50 0 80 FF 7F
61 64 1 9A 0 0
F0 F8 80 0 34 0 FF 52
50 0 80 FF 7F 0 0
50 0 80 FF 7F
C1 0 FF 0 0 0
F0 F9 97 0 34 0 FF 3A
50 0 80 FF 7F 0 0
50 0 80 FF 7F 0
50 0 80 FF 7F
61 64 1 9A 0 0
F0 FA A7 0 34 0 FF 29
50 0 80 FF 7F 0 0
50 0 80 FF 7F
C1 0 FF 0 0 0
F0 FB B0 0 34 0 FF 1F
50 0 80 FF 7F 0 0
50 0 80 FF 7F 0
50 0 80 FF 7F
61 64 1 9A 0 0
F0 FC C0 0 34 0 FF E
50 0 80 FF 7F 0 0
50 0 80 FF 7F
C1 0 FF 0 0 0
F0 FD D0 0 34 0 FF FC
50 0 80 FF 7F 0 0
50 0 80 FF 7F 0
50 0 80 FF 7F
61 64 1 9A 0 0
F0 FE E0 0 34 0 FF EB
50 0 80 FF 7F 0 0
50 0 80 FF 7F
C1 0 FF 0 0 0
F0 FF F4 0 34 0 FF D6
But from this i can't distinguish is this actual linbus frame
As I understand It should look like this
Synchronisation interrupt.
Identification field.
Data information.
Checksum.
But from what I get I feel like I'm doing something wrong
Can someone help me to understand what I'm doing wrong? Or maybe someone has already done something with Audi and linbus readings and can share his knowledge?
People don't be shy, everyone can help
alto777
December 11, 2021, 3:42pm
3
Your posted code is there twice, maybe you double-pasted it.
Anyway, at a glance the code appears to be receiving, validating and dumping frames.
There is no way for it to print without the logic having been convinved of a proper frame going by.
What do you expect to see? Right now, every line should be a frame. At a glance.
Cool project and devices! Almost makes me wish I had a car. Or could still drive.
a7
1 Like
Can You elaborate that? There's a possibility that a modification of the car might be illegal. Vital functions of the car might get out of order.
1 Like
tomaslabanauskas:
MCP2004
The "Typical Application" schematic in the datasheet for the MCP2004 shows a 4.7k pull-up resistor on the RX line.
1 Like
Yeah, I have edited it I did double paste it
I would expect to see actual frames , but it seems to be missing info
I actually used the code and schematic from here GitHub - laurynas/volvo_linbus: Volvo LIN bus reader . but probably it's missing the resistor
Not sure if that's the case All i want to do is make the steering wheel switches play next song and volume up and down I think it should be legal
Okey, only reading the bus....
Steering wheel..... Do want music playing to switch because of passing right or left bends on the road? Never mind. Reading the bus and understanding the data is the mission.
1 Like
Well I want to retrofit a steering wheel that uses lin 2.2 and if I understand right my cars supports only lin1.3 so basically I need to read the bus for old steering wheel , then for the new one and map the messages in correct order
Have You been trying to get in contact with Audi engineers?
Yeah, they said that it's a stupid idea and I should just buy a new car. Not understanding If I could buy a new car I would
Hum.
That sounds like sales people, not engineers...
Could You go on using the old steering wheel? I've never heard about changing it.....
Sure, but I really want the new one
JohnRob
December 11, 2021, 9:36pm
15
Not clear. It sounds like you are trying to "capture" a few of the steering wheel controls, and pass the remainder to the vehicle. Then use these controls to do something sourced from the Arduino.
Or you trying to modify the LIN commands to change the function of the control --> vehicle function?
I want to capture the messages from the new steering wheel and pass as it is from the old one.
I know nothing about LIN but feel like your logic may not be syncing properly ( I admit I didn't go over it with a fine tooth comb...)
(EDIT: N/M I see what you're doing now. Probably better than my code since you look for the break... )
Any chance this does anything different?
#include <SoftwareSerial.h>
// https://github.com/zapta/linbus/tree/master/analyzer/arduino
#include "lin_frame.h"
#define SYN_FIELD 0x55
// Pins we use for MCP2004
const uint8_t pinRX = 10;
const uint8_t pinTX = 11;
const uint8_t pinFault = 14;
const uint8_t pinCS = 8;
enum eLINStates
{
SEEK_SYNC = 0,
GET_ID_DATA_CS
};
SoftwareSerial LINBusSerial( pinRX, pinTX );
byte
b, i, n;
LinFrame frame;
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
// Open serial communications to host (PC) and wait for port to open:
Serial.begin(9600, SERIAL_8E1);
Serial.println("LIN Debugging begins");
LINBusSerial.begin(19200);
pinMode( pinCS, OUTPUT );
digitalWrite( pinCS, HIGH );
pinMode( pinFault, OUTPUT );
digitalWrite( pinFault, HIGH );
frame = LinFrame();
}//setup
void loop()
{
static uint8_t
stateLIN = SEEK_SYNC;
if( LINBusSerial.available() )
{
b = LINBusSerial.read();
switch( stateLIN )
{
case SEEK_SYNC:
//not sure if we can detect a break using SoftwareSerial so all we can do is just check
//for the sync byte (0x55)
if( b == SYN_FIELD )
{
frame.reset();
stateLIN = GET_ID_DATA_CS;
}//if
break;
case GET_ID_DATA_CS:
if( frame.num_bytes() > LinFrame::kMaxBytes )
{
stateLIN = SEEK_SYNC;
}//if
else
{
frame.append_byte(b);
if( frame.isValid() )
{
digitalWrite(LED_BUILTIN, HIGH);
dump_frame();
stateLIN = SEEK_SYNC;
digitalWrite(LED_BUILTIN, LOW);
}//if
}//if
break;
}//switch
}//if
}//loop
void dump_frame()
{
uint8_t
b;
for (i = 0; i < frame.num_bytes(); i++)
{
b = frame.get_byte(i);
if( b <= 0xf )
Serial.write( '0' );
Serial.print( b, HEX);
Serial.write( ' ' );
}//for
Serial.println();
}//dump_frame
1 Like
So all I get is this
50
F0
50
F0
50
F0
50
50
F0
50
F0
50
F0
50
F0
Not really sure what it suppose to mean It goes in the same pattern all the way
Looking at the source for your library it makes sense; it's not right, it just makes sense. I assumed doing an isValid() after each received byte would fail until an entire valid message is "valid." However, looking at the source for isValid, it appears that receiving just an ID by is sufficient to pass the validity test. So, after receiving the ID byte, I print it and then reset the frame and wait until another SYNC.
In your original code it looks like you receive bytes until you see a 0x00 0x55 -- a break and a SYNC, indicating the beginning of new frame, and then send the packet received up to that point for validation checking.
On the surface this should work but your frame contents seem to indicate that there's still some sort of sync issue.
Maybe you could try this; it just tries to sync and prints the contents received until the next start/sync sequence, similar to what your OP code did. I don't do any LIN stuff yet, just printing raw received data.
#include <SoftwareSerial.h>
#define FRAME_START 0x00
#define SYNC_FIELD 0x55
#define MAX_FRAME_BYTES 20
uint8_t
frmIndex = 0;
uint8_t
grFrame[MAX_FRAME_BYTES];
// Pins we use for MCP2004
const uint8_t pinRX = 10;
const uint8_t pinTX = 11;
const uint8_t pinFault = 14;
const uint8_t pinCS = 8;
enum eLINStates
{
SEEK_FRAME_START = 0,
SEEK_SYNC_BYTE,
RECEIVE_FRAME_DATA,
};
SoftwareSerial
LINBusSerial( pinRX, pinTX );
byte
b, i, n;
void setup()
{
pinMode(LED_BUILTIN, OUTPUT);
// Open serial communications to host (PC) and wait for port to open:
Serial.begin(9600, SERIAL_8E1);
Serial.println("LIN Debugging begins");
LINBusSerial.begin(19200);
pinMode( pinCS, OUTPUT );
digitalWrite( pinCS, HIGH );
pinMode( pinFault, OUTPUT );
digitalWrite( pinFault, HIGH );
}//setup
void loop()
{
static bool
bSyncArmed = false;
static uint8_t
stateLIN = SEEK_FRAME_START;
if( LINBusSerial.available() )
{
b = LINBusSerial.read();
switch( stateLIN )
{
case SEEK_FRAME_START:
//look for a 0x00 that might indicate a serial break detected
if( b == FRAME_START )
stateLIN = SEEK_SYNC_BYTE;
break;
case SEEK_SYNC_BYTE:
//after the break, we should see a 0x55
if( b == SYNC_FIELD )
{
//if so, assume we're synced and go collect the first frame
frmIndex = 0;
stateLIN = RECEIVE_FRAME_DATA;
}//if
else
//if not, go back to look for break
stateLIN = SEEK_FRAME_START;
break;
case RECEIVE_FRAME_DATA:
//put the byte in the frame buffer
grFrame[frmIndex++] = b;
//bump the index; stay within the bounds of the buffer
if( frmIndex >= MAX_FRAME_BYTES )
frmIndex--;
//we're looking for the start of the next frame here
if( !bSyncArmed )
{
//not armed so we're still looking for a 0x00 (break)
if( b == FRAME_START )
bSyncArmed = true;
}//if
else
{
//we're armed (saw a 0x00 last byte); is this byte the SYNC byte?
if( b == SYNC_FIELD )
{
//yes; print contents of frame
//subtract 2 because we include the start and sync bytes as part of collection
for( i=0; i<frmIndex-2; i++ )
{
//print two chars for each HEX byte
if( grFrame[i] <= 0xf )
Serial.write( '0' );
Serial.print( grFrame[i], HEX);
Serial.write( ' ' );
}//for
Serial.println();
//we're ready to receive this frame's data
frmIndex = 0;
bSyncArmed = false;
stateLIN = RECEIVE_FRAME_DATA;
}//if
else
//armed but this byte isn't the SYNC so disarm
bSyncArmed == false;
}//else
break;
}//switch
}//if
}//loop
Here's the result
LIN Debugging begins
F0 F9 97 00 34 00 FF 3A
50 00 80 FF 7F
C1 00 FF 00
F0 FA A7 00 34 00 FF 29
50 00 80 FF 7F
F0 FB B0 00 34 00 FF 1F
50 00 80 FF 7F
C1 00 FF 00
F0 FC C0 00 34 00 FF 0E
50 00 80 FF 7F
61 64 01 9A
F0 FD D0 00 34 00 FF FC
50 00 80 FF 7F
C1 00 FF 00
F0 FE E0 00 34 00 FF EB
50 00 80 FF 7F
00 34 00 FF DA
50 00 80
F0 F1 10 00 34
C1 00 FF
50 00 80 FF 7F
61 64
F0 F4 47 00 34
F0 F5 57 00
C1 00 FF 00
F0 F6 34 00 FF 63
50 00 34 00 FF 52
97 00 34 00 FF C1 00 FF 00
F0
F0 FB B0
50 00 80 FF 7F
50 00
F0 FD D0 00 34 C1 00 FF 00
7F
61 64 01
50 00 80 FF 7F 00 80 FF 7F
F0 F1 10
C1 00 FF 00
F0 F2 20
50
C1 00 FF FF 8F
50 00 80 00 FF 7E 00
C1 00 FF 00
F0 F6 67
50
C1 00 FF FF 52
50 00 80 FF 7F
F0 FA A7 FF 7F
61 64
50 00 80
F0 0E
50 00 80 FF FF FC
50 00 80 FF 7F FF 7F
F0 FF
50 00 80
F0 DA
50 00 80 FF FF C9
50 00 80 00 FF
50 00 80 FF 7F
50 00 C1 00 FF 00 00
50 00
F0 F5 57 00 34 00
F0 F6 67 00 34 00 FF
50 00 C1 00 FF 00 00
50 00
F0 F9 97 00 34 00
F0 FA A7 00 34
F0 FB B0 00 34
F0 FC C0 00 34 00 FF FC
50 55 C1 00 FF 00
F0
F0 FF F0 00 34 00 FF 34 00 FF DA
50 00 80 80 FF 7F 00
F0 F2 20 00 34 00 30 00 34 00 FF A7 00 F4 47 00 34
FF 7F
F0 F7 70 00
C1
F0 F8 80 00 34 00 FF 52
50
F0 FA A7 00 34 00 FF
50 00 80 FF 7F
C1 00 FF 00
F0 FC C0 00 34 00 FF 0E
50 00 80 FF 7F
50 00 64 01 9A
F0
C1
F0 F0 00 00 34 00 FF DA
50
C1 00 FF 00
F0
F0 F3 30 00 34
F0 F4 47 00 61 64 01 9A
F0 F5 57 00 FF 6D
50 00 80 00 FF 63
50 00 34 00 FF 00 80 FF
F0 F9 97 00 34 00 FF 3A 29
FF 7F
61 64
50
C1 00 FF 00 00
F0 FD D0 00 34 00 FF FC FE E0 00 34 00 FF EB 00 FF
50 00 80 FF
50 00 80 FF 7F
61
F0 F2 20 00 34 00 FF B8 00 FF 7F
F0 F4 50 00 80
F0 F5 57 00
C1 00 FF 00
F0 F6 67 00 34 00 FF 6D
50 00 80
F0 F9 97 00 FF 7F
C1 00 FF 80 FF 7F
F0 FB B0 00 34 00 FF 1F
50 01 9A
F0 FD D0 00 34
F0 FE E0 00
F0 FF F0 00 80 FF 7F
C1 00 FF 00 00
F0 F1 10
C1 00 FF 00
61 64 01 9A
F0 F3
F0 F4 47 00 34 00 FF
50 00 80
F0 F6 67 00 34
F0 F7 70 00 34 FF 00
F0 F8 80 00 34 97 00 34 00 FF 3A 00 FA A7 00 34 00
F0 FB B0 00 FF 7F
C1 00
50 00
F0 FD D0 00 34 00 FF E0 00 34 00
61 64 01 9A
55 C1 00 FF 00
F0 F0 55 F0 F1 10 00 34 00 FF C9
50 00 80 FF 7F
C1 F0 F4 47 00 34 00 FF 8F 00 FF 7E 00
C1 00 67 00 34 00 FF 6D
50 00 80 FF 7F 00 34 00 FF 52 00
F0 F9 97 00 34
F0 FA A7 00 34 00 FF 29
50
F0 FC C0 00 34
F0 FD D0 00 34 00 FF FC
50 00 80 FF DA
50 00 80 FF 7F
61 64 01 9A
F0 F1 10 00 34 00
F0 F3 30 00
C1 00 FF 00
F0 F4 47 00 FF 7E 00 80 FF 7F
C1 50 00 80 FF 7F
61 64 01
F0 F8 80 00 34
F0 F9 97 00 34
F0 FA A7 00
F0 FB B0 00 34 00 00
F0 FC C0
61 64 01 9A 55 50 00 80 FF 7F
C1 00 FF 00
50 00 80 FF 7F
50 00 80 FF F0 F1 10 00 34 00
F0 F2 20 00 34
F0 F3 30 00 34 FF 00
F0 F4 47 00 34 57 00 34 00 FF C1 00 FF 00
F0 F6 67 00 34 00
C1 00 FF 00
50 00 80 FF 7F
50 00 80 FF 7F
C1 00 FF 00 FF 1F
50 00 34 00 FF 0E
50 00 80 00 80 FF 7F
C1 00 FF 00
F0 FE E0
F0 F0 00 00 34 00 FF 00 34 00 FF C9 00
F0 F2 20 00 34
F0 F3 30 00 34
F0 F4 47 00 34 00 F0 F5 57 00 34 00 FF 7E 00 FF 6D
50 00 80 FF 80 FF 7F
C1
50 00 80
F0 F9 97 00 34 00 FF 3A
50 00 80
50 00 80 FF 7F 0E
50 00 80 FF FF FC
50 00 80 FF 7F
C1 00 FF 00
F0 FE DA
50 00 80 FF 7F 00
C1
F0 F2 20 80 FF 7F
F0 F3 30 00 34
F0 F4 47
F0 F5 57 00 34 00 C1 00 FF 00
F0 F6
F0 F7 70 00 34
F0 F8 80 00
F0 F9 97
50 00 80 FF 7F 00 50 00 80
F0 FB B0 00 34 00
F0 FC C0 00 34
F0 FD D0 80 FF 7F
C1 00 FF 00
F0
50 00 00 FF 00
F0 F0
F0 F1 10 00 7F
C1 00 00 FF B8
50 00 80 FF 7F 00
F0 F4 47 00 34
F0 F5 57 00 34 00
F0 F6 67 00 34 00 70 00 34 00 FF 63
F0 FF 52
50 00 80 00 FF 3A 00
C1 00 FF 00 00
F0 FB B0 00 34
C1 00 FF 00
F0 FD D0 00
C1 00 FF 00
F0
F0 FF F0 00 34 00 FF DA
50
F0 F1 10 00
C1 00 FF 00
F0
F0 F3 30 00 34
F0 F4 47 00 34
F0 F5 57
C1 00
F0 F6 67
F0 F7 70 00 50 00
C1 00 FF 00
F0 F8 80 FF 3A 00 80 FF 7F
C1
50 00 80 FF B0 00
50 00 80 FF 7F 00
50 00 80 FF 7F
50 00 80
F0 FE 55 50 00 80 FF FF F0 00 34 00 FF DA 00 FF DA
50
F0 F1 10 00 34 00 FF C9
F0 F3 30 00 34 00 FF A7 00 47 00 34 00 FF 8F
7E
50 00 80 FF FF 6D
50
F0 F7 70 00 34 00 FF 63
50 00 80 FF 7F
F0 34 00 FF 29
50 00 80 FF
00 FF 00
F0 FC C0 00 34 00 FF 0E
50 00 00 80 FF
F0 FF F0 00 34 00
F0 00 FF DA
50 00 80 FF 7F
C1 00 FF 00 00
64 01 9A
F0 F3 C1 00 FF 00
7F
F0 F5 34 00 FF 7E
50 00 80 FF
F0 F7 70 00 34
C1 00 FF 00
64 01 9A
F0
C1 00 FF 00 00 7F
F0 FB B0 00 FF 7F
C1 34 00 FF 0E
50 00
50
C1 00 FF 00
61 64 01 9A
7F
C1 00 FF 00 FF 7F
F0 F1
50 00 80
F0 B8
50 00 80 FF 7F
50 00 80 FF 7F 00 FF 7F
61 64 01 80 FF 7F 00
F0 6D
50 00 80 F0 F7 70 00 34 00
F0 00 34 00 FF 52
50
50 00 C1 00 FF 00 00
50 00 9A
F0 FB B0 00 FF 00
F0 FC C0 00 34 00
50 00 80 FF 7F
F0 FF F0 00 34 00 FF DA
50 00
61 64 01 9A
F0
F0 34 00 FF B8
50 00 80 00 80 FF 7F 00 47 00 34 00 FF 8F
7E
50 00 80 FF
50 00 80 FF 7F 00
00 80 FF 7F
C1 00 FF 00
F0 F9 55 50 00 80 FF 7F 29
FF 7F
F0 FB B0 80 FF 7F
C1 00 FF 00
F0 FC C0 00
F0 FE
50 00 80 FF F0 00 34 00 FF DA
DA
50 00 80 F0 F1 10 00 34 00
F0 F2 20 00 34 00 FF B8 00 FF 7F
F0 F4 47 00 34 00 57 00 34 00 FF 7E
F0 F6 67 00
F0 F7 00 FF 63
50 00 80 FF 7F
55 F0 F9
50 00 80 FF 7F
C1 00
F0 FB B0 00 34 00 FF 1F
50
FD D0 00 34 00 FF FC
50 00 80 FF 7F DA
50 00 80 F0 00 00 34 00 FF DA F0 F1 10 00 34 00
F0 F2 20 00
F0 F3 30 00 34
C1 00 F4 47 00 34 00 FF 8F
50 7F
F0 F6 67 00 34 00 FF 34 00 FF 63
50 00
50 00 80 FF 7F
F0 F9 97 00 34 00 FF 3A 00 34 00 FF 1F
F0 FC C0 00 34
F0 FD D0 00 34 00 FF FC 00
F0 FF F0 00 00 FF DA
50 00 80 FF 7F
C1 00 FF C9 00
C1 00 FF 00 00
F0 F3 30 00 34 00 FF A7
50 00 80
F5 57 00 34 00 FF 7E F0 F6 67 00 34 00 FF 6D
50 55 C1 00 FF 00
F0 F8 F0 F9 97 00 34 00
F0 FA A7 00 34 00
F0 FB B0 00 34
F0 FC C0 00 34 00 FF 0E 50 00 80 FF 7F FE E0 00 34
50 00 80 FF 7F
F0
F0 F1 10 00 34 00
F0 F2 20 00 34 00 FF
50 00 80 FF 7F
7F
F0 F5 57 00 FF 7F
C1 00 FF 00
F0 F6 67 00 34 00 FF 6D
50 00 7F
61 64 01 9A FF 7F 00 00
F0 FA A7 00 34
F0 FB B0 00 34 00 FF
50 00 80 FF 7F FC
7F
C1 00 FF 00 00
61 64 01 9A 80 FF 7F
C1 00 FF 00 00
F0 F1 10
C1 00 FF 00
F0 F2 30 00 34 00 FF A7 00 F4 47 00 34 00 FF 8F
55 50 00 80 FF 7F
FF 7F
F0 F7 70 00 34 00 FF 00
F0 F8 80 00 34 97 00 34 00 FF 3A 00 FA A7 00 34
61 64 01 9A 00 FF 7F
C1 00 FF 00
F0 FC C0 00 34 00 FF 0E
50 00 80 FF 7F 00 FF 7F
F0 F0 00 00 34 00 FF DA 00 80 FF 7F
C1 00 FF 00
F0 F2 20 00 34 00
50 00 80 FF 7F
C1 00 FF 00 00 80 FF 7F
61 64 01 9A
F0 F8 80 00 34 00 FF 52 50 00 7F
C1 00 FF 00
F0 FA A7 00
C1 00 FF 00 00 FF 7F
61 64 01 9A
C1 00 FF 00 00
F0 FF F0 00 34 00 FF DA
DA
50 00 80 F0 F1 10 00 34 00 FF C9
50 00 80 F3 30 00 34 00 FF
F0 F4 47 00
F0 F5 57 00 34 00 FF
F0 F6 67 00
F0 F7 70 00 34 00 FF 00
F0 F8 80 00 34 3A
FF 7F
C1 00 FF 00
F0 FA A7 7F
C1 00 FF 00
F0 FC 00 FF FC
50 55 F0 FE E0 00 34 00 FF EB
50 00 80 FF 00 34 00 FF DA
50 00 80
C1 00 FF 00
F0 F3 FF A7
50
F0 F4 47 00 34 9A
F0 F5 57
C1 00 FF 00 00
F0 F7 70 00 34 00 FF 63
55 50 00 80 FF 7F
F0 F9 97 A7 00 34 00
61 64 01 9A 00 FF 7F
C1 00 FF 00 50 00 80
F0 FD D0 00 34 00
F0 FE E0 80 FF 7F
F0 FF 00 80 FF 7F
C1 00 FF 00
F0 F1 10 00 34 00 20 00 34 00 FF B8
50 55 50 00 80 FF 7F
C1
F0 F5 57 00 34 00 FF F6 67 00 34 00 FF 6D 00 FF 63
50 00 80 FF
50 00 80 FF 7F 00 80 FF 7F
C1
50 00 80 FF 7F
F0 FB B0 00 34 00 80 FF 7F
61 64 01 FF 00 00 FE E0 00 34 00 FF EB
50 00 80 FF 7F
F0 FF F0 00 34 00 FF C9 00
F0 F2 20 00 34 00 FF B8 00
C1
F0 F4 47 00 34
F0 F5 57 00 34 00 FF 7E 00 80 FF 7F
F0 F7 70 00 34 00 FF 63
F0 F9 97 00 34 00
F0 FA A7 00 34 00 FF 29 80 FF 7F
C1 00 FF 00
34 00 FF 50 00 80 FF 7F
55 50 00 80 FF 7F
61 64 01 9A
F0 F1 10 00 34 00 FF C9 F2 20 00 FF B8
50 00 80
50 00 80 FF 7F
C1 00 FF 00
50 00 80 FF 00 34 00 FF 6D
50 00 80
C1 00 FF 00
F0 F9 97 00
C1 00 FF 00
F0 FA A7 00 34 00 FF 29 00 F0 FC C0 00 34
F0 FD D0 00 34
C1 00 FF 00 50 00 80 FF 7F
F0 FF F0 00 00 00 34 00 FF 61 64 01 9A
7F
C1 00 FF 00 00 50 00 80 FF 7F 00 A7
50 00 80 FF 7F
C1 00 FF 00
00 FF 00
F0 F6 61 64 01 9A
F0 F7 70 00
50 00 80 FF 7F
F0 F9 97 00 34 00 FF
F0 FB B0 00 34 00 FF 1F
50 00 80 FF 7F FF FC
50 00 80 00 FF EB
50 55 F0 FF F0 00
C1 00 FF 00
F0 F1 10 00
C1 00 FF 00 00 7F
61 64 01 9A
F0 F4 47 00 34 00 FF 8F
50 00 80 FF 7F
F0 F7 70 00 34 00 00
F0 F8 80 00 34
F0 F9 97 00 00 FF
F0 FA A7 00
F0 FB B0 00 34 00 00
F0 FC C0
F0 FD D0 00 34 00 FF FC
EB
50 00 80 FF FF DA
50 00 80 FF 7F
F0 F1 10 00 34
C1 00 FF 00
F0 F3 30 00
C1 00 FF 00
F0
F0 F5 57 FF 7F
C1 00 FF 00
55 F0 F7
50 00 80 FF 7F 00 50 00 80 FF 7F
55 50 FF 7F
C1 00 FF 80 FF 7F
61
50 00 80 FF 7F 00 FF 0E
50
F0 FD
50 00 80 FF 7F
50 00 80 FF FF F0 00 34
C1 00 FF 00
F0 F0 00 00 34
C1 00 FF 00 00 FF 7F
F0 F3 30 00
C1
F0 F4 47 00 34 00 FF 8F 50 00
C1 00 FF 00 FF 6D
50 00 34 00 FF 63
50 00 80 FF
F0 F9 97 00 50 00 80 FF 7F
55 50 00 80 FF 7F
F0 C1 00 FF 00
7F
9A
F0 FD D0 00 34 00 FF FC 00
F0 FF F0 00 34 00 FF 00
F0 F0 00 00
F0 F1 10 00 C1 00 FF 00
F0 F2 20 00
50 00 80 FF 7F
7F
F0 F5 57 00 FF 7F 00 00
67 00 34 00 FF 6D
50 00 80 00 FF 00
F0 F8 80 00 34 3A
50 00 80 FA A7 00 34 00 FF 29
50 7F
C1 00 FF
50 00 80 FF 7F
50
C1 00 FF 00
F0 FE F0 00 34 00 FF DA
DA
50 00 80 FF
50 00 80 FF 7F
7F
F0 F3 30 00 34 00 FF A7 00
50 00 9A
F0 F5 00 80 FF 7F
C1 55 50 00
F0 F7 70 00 FF 7F
C1 00 FF 00
55 F0 F9
50 00 80 FF A7 00 34 00 FF 29 00 FB B0 00
50 00 80 FF 7F
C1
F0 FD D0 00
C1 00 FF 00
F0 FF F0 00
C1 00 FF 00
61 64 01 9A
7F
C1 00 00 FF B8
50 00 80 FF 7F
F0 F3 30 00
F0 F5 57 00 34
C1
F0 F6 67 00 64 01 9A
F0 7F
C1 00 FF 00 00 00 80 FF 7F
50 00 80 FF FA A7 00
50 00 80 FF 7F
50 00 80 FF 7F
50 00 80 FF 00 34 00 FF FC
E0 00 34
50 00 80 FF 7F
55 C1 00 FF 34 00 FF DA
50 00 80 FF 7F 00
F0 F2 20 00 34 00 FF B8 A7
50 00 80 FF FF 8F
50 00 80 00 FF 7E
50 00 80 FF 7F 00
F0 F7 70 80 FF 7F
C1 00 00 80 FF 7F
61 64 01 9A
F0 FA A7 00 34 00 B0 00 34 00 FF 1F
50 00 80
F0 FD D0 00 34 00
F0 FE E0 00 34 00 F0 FF F0 00 34 00 FF DA 00 FF DA
50 00 80
50 00 80 FF 7F 00 00 80 FF 7F
50 00 80 FF 7F
C1 00 FF 00 00 00 80 FF 7F 00 67 00 34 00 FF 6D
63
50 00 80 FF 7F
C1 00 FF 00
F0 F8 80
50 00 80
F0 FB B0 00 34 00 FF 1F
F0 FD D0 00 34 00 FF 00
F0 FE E0 00 34 00 FF EB
50 00 80 FF
61 64
F0 F1 10 00 34
F0 F2 20 00
F0 F3 30
50 00
F0 F4 47 00 34 00 FF 8F 00 80 FF
C1 00 FF 00
F0 F6 70 00 34 00 FF 63
50 00
F0 F9 97
50 00 80
F0 FA A7 00 34
F0 FB B0 00
C1 00 FF
50
61 64 01 9A
F0 FD D0 00 34 00
F0 FF F0 00 FF 7F
C1 00 FF 00
55 F0 F1 10 00 80 FF 7F 00 20 00 34 00 FF 61 64 01
F0 55 C1 00 FF 00 00 FF 7F
F0 00 34
50 00 80 FF 7F FF 6D
50 00 80 FF
50 00 80 FF 7F 00 FF 7F
61 64
50 00 80 FF 7F
C1 00 FF 00
F0 FA A7 00 34
50 00 80 FF 7F
F0 FD 55 F0 FE E0 00
61 64 01 9A
F0
F0 F0 00 00
F0 F1 10 00 34 00 FF C9 B8
50
F0 F3 30 00
C1 00 FF 00 00 80 FF 7F
61 64 00 80 FF 7F
C1 50 00 80 FF 7