Chat freely about anything...

User avatar
By a8ngus
#85921 Hi all . I am hoping to find some direction with converting and ethernet sketch for a certain type of pixel control and have it work on the esp8266 . I am not a programmer ,just a xmas light hobbyist with a ton of these type of pixels .
Any guidance would be greatly appreciated .


Code: Select all/* A simple sketch to control TLS3001 type pixels from an E1.31 source.
  Copyright 2018 Barnabybear <diychristmas.org> Full details at end of code.
  Under data 07-Sept-2018

  Ethercard section based on a sketch 'udpListner' by Brian Lee <cybexsoft@hotmail.com> 2013-4-7
*/

#include <EtherCard.h>
#include <IPAddress.h>

unsigned char pix_val;
byte n;
int m;

byte s_reset[] = {0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0};
byte l_reset;

byte s_sync[] = {0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0,
                 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0
                };
byte l_sync;

byte s_start[] = {0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0};
byte l_start;

const byte PROGMEM lookup[256][13] {  // comment after line = 8 bit value, 12 bit gamma corrected value
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0}, //0,0
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F}, //1,1
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F}, //2,1
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F}, //3,1
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F}, //4,2
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0}, //5,2
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0}, //6,2
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F}, //7,3
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0}, //8,4
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F}, //9,5
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0}, //10,6
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0}, //11,8
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F}, //12,9
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0}, //13,11
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0}, //14,12
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0}, //15,14
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0}, //16,16
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0}, //17,18
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0}, //18,20
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0}, //19,23
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F}, //20,25
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F}, //21,28
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0}, //22,30
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F}, //23,33
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0}, //24,36
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F}, //25,39
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0}, //26,43
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F}, //27,46
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F}, //28,49
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0}, //29,53
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0}, //30,57
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0}, //31,61
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0}, //32,64
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0}, //33,69
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0}, //34,73
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F}, //35,77
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F}, //36,82
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0}, //37,86
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0}, //38,91
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F}, //39,96
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0}, //40,101
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F}, //41,106
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F}, //42,111
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0}, //43,116
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F}, //44,122
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F}, //45,128
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F}, //46,133
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F}, //47,139
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F}, //48,145
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F}, //49,151
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F}, //50,157
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F}, //51,164
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0}, //52,170
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0}, //53,177
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F}, //54,184
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0}, //55,191
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F}, //56,197
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0}, //57,205
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F}, //58,212
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F}, //59,219
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0}, //60,227
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0}, //61,234
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0}, //62,242
  {0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F}, //63,250
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F}, //64,258
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0}, //65,266
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0}, //66,274
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0}, //67,283
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F}, //68,291
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F}, //69,300
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0}, //70,309
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F}, //71,317
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0}, //72,326
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F}, //73,336
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0}, //74,345
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0}, //75,354
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F}, //76,364
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F}, //77,373
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F}, //78,383
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F}, //79,393
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F}, //80,403
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F}, //81,413
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F}, //82,423
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F}, //83,434
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0}, //84,444
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F}, //85,455
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F}, //86,466
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0}, //87,477
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F}, //88,488
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0}, //89,499
  {0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0}, //90,510
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F}, //91,522
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F}, //92,533
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0}, //93,545
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0}, //94,556
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0}, //95,568
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0}, //96,580
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0}, //97,593
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0}, //98,605
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F}, //99,617
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F}, //100,630
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0}, //101,642
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F}, //102,655
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0}, //103,668
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F}, //104,681
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0}, //105,694
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F}, //106,708
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F}, //107,721
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0}, //108,735
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0}, //109,748
  {0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0}, //110,762
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F}, //111,776
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F}, //112,790
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0}, //113,804
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0}, //114,818
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0}, //115,833
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F}, //116,847
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0}, //117,862
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0}, //118,877
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F}, //119,892
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0}, //120,907
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0}, //121,922
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F}, //122,937
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0}, //123,953
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0}, //124,968
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F}, //125,984
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F}, //126,1000
  {0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F}, //127,1016
  {0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F}, //128,1032
  {0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F}, //129,1048
  {0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0}, //130,1064
  {0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0}, //131,1081
  {0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F}, //132,1097
  {0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F}, //133,1114
  {0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0}, //134,1131
  {0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F}, //135,1148
  {0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0}, //136,1165
  {0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F}, //137,1182
  {0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F}, //138,1199
  {0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0}, //139,1217
  {0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0}, //140,1234
  {0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0}, //141,1252
  {0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F}, //142,1270
  {0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F}, //143,1288
  {0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F}, //144,1306
  {0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0}, //145,1324
  {0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0}, //146,1342
  {0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0}, //147,1361
  {0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F}, //148,1379
  {0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0}, //149,1398
  {0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0}, //150,1417
  {0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F}, //151,1436
  {0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0}, //152,1455
  {0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0}, //153,1474
  {0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F}, //154,1494
  {0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0}, //155,1513
  {0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0}, //156,1533
  {0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0}, //157,1552
  {0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0}, //158,1572
  {0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0}, //159,1592
  {0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0}, //160,1612
  {0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0}, //161,1632
  {0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0}, //162,1653
  {0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F}, //163,1673
  {0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F}, //164,1694
  {0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0}, //165,1715
  {0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F}, //166,1735
  {0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0}, //167,1756
  {0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F}, //168,1777
  {0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0}, //169,1799
  {0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0}, //170,1820
  {0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F}, //171,1841
  {0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F}, //172,1863
  {0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0}, //173,1885
  {0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0}, //174,1907
  {0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0}, //175,1929
  {0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0}, //176,1951
  {0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0}, //177,1973
  {0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F}, //178,1995
  {0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F}, //179,2018
  {0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0}, //180,2040
  {0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F}, //181,2063
  {0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0}, //182,2086
  {0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0}, //183,2109
  {0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0}, //184,2132
  {0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F}, //185,2155
  {0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0}, //186,2179
  {0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0}, //187,2202
  {0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F}, //188,2226
  {0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F}, //189,2250
  {0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F}, //190,2273
  {0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F}, //191,2297
  {0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F}, //192,2322
  {0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F}, //193,2346
  {0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0}, //194,2370
  {0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0}, //195,2395
  {0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F}, //196,2419
  {0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0}, //197,2444
  {0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0}, //198,2469
  {0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F}, //199,2494
  {0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F}, //200,2519
  {0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0}, //201,2544
  {0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F}, //202,2570
  {0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F}, //203,2595
  {0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0}, //204,2621
  {0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0}, //205,2647
  {0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0}, //206,2672
  {0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0}, //207,2698
  {0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0}, //208,2725
  {0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0}, //209,2751
  {0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F}, //210,2777
  {0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F}, //211,2804
  {0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0}, //212,2830
  {0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F}, //213,2857
  {0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0}, //214,2884
  {0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F}, //215,2911
  {0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0}, //216,2938
  {0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F}, //217,2965
  {0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0}, //218,2993
  {0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0}, //219,3020
  {0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0}, //220,3048
  {0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F}, //221,3076
  {0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F}, //222,3104
  {0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F}, //223,3132
  {0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F}, //224,3160
  {0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0}, //225,3188
  {0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0}, //226,3217
  {0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F}, //227,3245
  {0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F}, //228,3274
  {0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0}, //229,3303
  {0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F}, //230,3331
  {0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0}, //231,3360
  {0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F}, //232,3390
  {0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0}, //233,3419
  {0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0}, //234,3448
  {0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F}, //235,3478
  {0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F}, //236,3507
  {0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F}, //237,3537
  {0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F}, //238,3567
  {0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F}, //239,3597
  {0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F}, //240,3627
  {0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F}, //241,3658
  {0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0}, //242,3688
  {0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F, 0xF0}, //243,3719
  {0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0x0F}, //244,3749
  {0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0}, //245,3780
  {0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0x0F, 0x0F}, //246,3811
  {0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F, 0xF0}, //247,3842
  {0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0x0F}, //248,3873
  {0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0}, //249,3905
  {0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F}, //250,3936
  {0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F}, //251,3968
  {0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F}, //252,3999
  {0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F}, //253,4031
  {0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0xF0}, //254,4063
  {0xF0, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F}  //255,4095
};
#define STATIC 1  // set to 1 to disable DHCP (adjust myip/gwip values below)

#if STATIC
// ethernet interface ip address
static byte myip[] = { 192, 168, 1, 62 };
// gateway ip address
static byte gwip[] = { 192, 168, 1, 1 };
#endif

// ethernet mac address - must be unique on your network.
static byte mymac[] = { 0x70, 0x69, 0x69, 0x2D, 0x30, 0x31 };

// the universe number to listen for.
unsigned int universe = 101;

byte Ethernet::buffer[681]; // tcp/ip send and receive buffer

//callback that runs the TLS output loop
void sACN_data(uint16_t dest_port, uint8_t src_ip[IP_LEN], uint16_t src_port, const char *data, uint16_t len) {


  // check to see if the packet is an ASC-E1.17 type
  if (!((data[4] ^ 0x41) && (data[5] ^ 0x53) && (data[6] ^ 0x43) && (data[7] ^ 0x2D) &&
        (data[8] ^ 0x45) && (data[9] ^ 0x31) && (data[10] ^ 0x2E) && (data[11] ^ 0x31) &&
        (data[12] ^ 0x37))) {

    // check to see if the universe number is correct
    if (!((universe ^ data[114]) + (universe >> 8 ^ data[113]))) {


      cli();  // stop interupts

      // Send start
      l_start = sizeof(s_start);
      for ( n = 0; n < l_start; n++) {
        while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
        UDR0 = s_start[n];  // put data in uart Tx buffer
      }
      m = 126; // first byte of data in e1.31 packet
     
      // output TLS data
      while (true) {  // loop
        pix_val = data[m];
        while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
        UDR0 = pgm_read_byte_near(&(lookup[pix_val][0]));  // put data in uart Tx buffer
        while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
        UDR0 = pgm_read_byte_near(&(lookup[pix_val][1]));  // put data in uart Tx buffer
        while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
        UDR0 = pgm_read_byte_near(&(lookup[pix_val][2]));  // put data in uart Tx buffer
        while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
        UDR0 = pgm_read_byte_near(&(lookup[pix_val][3]));  // put data in uart Tx buffer
        while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
        UDR0 = pgm_read_byte_near(&(lookup[pix_val][4]));  // put data in uart Tx buffer
        while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
        UDR0 = pgm_read_byte_near(&(lookup[pix_val][5]));  // put data in uart Tx buffer
        while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
        UDR0 = pgm_read_byte_near(&(lookup[pix_val][6]));  // put data in uart Tx buffer
        while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
        UDR0 = pgm_read_byte_near(&(lookup[pix_val][7]));  // put data in uart Tx buffer
        while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
        UDR0 = pgm_read_byte_near(&(lookup[pix_val][8]));  // put data in uart Tx buffer
        while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
        UDR0 = pgm_read_byte_near(&(lookup[pix_val][9]));  // put data in uart Tx buffer
        while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
        UDR0 = pgm_read_byte_near(&(lookup[pix_val][10]));  // put data in uart Tx buffer
        while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
        UDR0 = pgm_read_byte_near(&(lookup[pix_val][11]));  // put data in uart Tx buffer
        while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
        UDR0 = pgm_read_byte_near(&(lookup[pix_val][12]));  // put data in uart Tx buffer

        if (!(m < 638)) break;  // drop out of loop if all data tranfered
        m++;
      }
      // Send start
      delayMicroseconds(200);
      l_start = sizeof(s_start);
      for ( n = 0; n < l_start; n++) {
        while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
        UDR0 = s_start[n];  // put data in uart Tx buffer
      }
      sei();  // restart interupts
    }
  }
}


void setup() {
  Serial.begin(115200); // debug print - comment out during normal use.
  Serial.println(F("\n[backSoon]")); // debug print - comment out during normal use.

  if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0)
    Serial.println(F("Failed to access Ethernet controller")); // debug print - comment out during normal use.
#if STATIC
  ether.staticSetup(myip, gwip);
#else
  if (!ether.dhcpSetup())
    Serial.println(F("DHCP failed")); // debug print - comment out during normal use.
#endif

  ether.printIp("IP:  ", ether.myip);
  ether.printIp("GW:  ", ether.gwip);
  ether.printIp("DNS: ", ether.dnsip);

  //register udpSerialPrint() to port 5568 (e1.31 port).
  ether.udpServerListenOnPort(&sACN_data, 5568);

  //register udpSerialPrint() to port 42.
  ether.udpServerListenOnPort(&sACN_data, 42);
  Serial.end();
  //  UCSR0C = (1 << UMSEL01) | (1 << UMSEL00); // Set MSPI data mode 1.
  //  UCSR0C = (3 << UCSZ00) | (0 << UCPOL0); // Set MSPI data mode 1.
  UCSR0C = 0xC0; // Set MSPI data mode 1.
  UCSR0B = (1 << TXEN0); // Enable transmitter
  UCSR0A |= (1 << U2X0); // Double transmition speed
  UBRR0H = 0; UBRR0L = 1; // Set baud to 4,000,000bps @ 16Mhz clock

  cli();
 
  // Send reset
  l_reset = sizeof(s_reset);
  for (n = 0; n < l_reset; n++) {
    while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
    UDR0 = s_reset[n];  // put data in uart Tx buffer
  }
  delayMicroseconds(1000);

  // Send sync
  l_sync = sizeof(s_sync);
  for (n = 0; n < l_sync; n++) {
    while ( ! (UCSR0A & (1 << UDRE0)) ); // Wait for buffer to empty
    UDR0 = s_sync[n];  // put data in uart Tx buffer
  }
 
  sei();
  delayMicroseconds(2500);
}

void loop() {
  //this must be called for ethercard functions to work.
  ether.packetLoop(ether.packetReceive());
  delay(1);
}

/*5V – this connects to the 5V on the Nano.
GND – this connects to the ground on the Nano.
MO (MOSI Master Out Slave In) – this connects to MOSI (pin D12) on the Nano.
MI (MISO Master In Slave Out) – this connects to MISO (pin D11) on the Nano.
CK (ClocK) – this connects to SCK (pin D13) on the Nano.
SS (Slave Select) – this connects to SS (pin 10) on the Nano.
POE+ (Power Over Ethernet) – we don’t use this.
POE- (Power Over Ethernet) – we don’t use this.
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software
  and associated documentation files (the "Software"), to deal in the Software without restriction,
  including without limitation the rights to use, copy, modify, merge, publish, distribute,
  sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
  furnished to do so, subject to the following conditions:

  The above copyright notice and this permission notice shall be included in all copies or
  substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
  INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
  FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  IN THE SOFTWARE.
*/


User avatar
By eriksl
#86470 I think it may help if you tell is what you're trying to achieve (including what/why).

The ESP8266 can receive and send 802.11 frames, it can even convert 802.3 (ethernet) frames to 802.11 frames, so it's probably possible. Normally these frames are input and output from/to the LWIP library. If you insert something that replaces LWIP you can process the raw frames. It may even be that LWIP has a hook for processing raw frames, I'm not sure.