Skip to content

Instantly share code, notes, and snippets.

@nopbxlr
Created January 6, 2020 16:00
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save nopbxlr/b1ab93e1416da75a6fffcb1641e159a8 to your computer and use it in GitHub Desktop.
okai_electisan_hack
unsigned short tcrc[]={
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5,
0x60C6, 0x70E7, 0x8108, 0x9129, 0xA14A, 0xB16B,
0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, 0x1231, 0x0210,
0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C,
0xF3FF, 0xE3DE, 0x2462, 0x3443, 0x0420, 0x1401,
0x64E6, 0x74C7, 0x44A4, 0x5485, 0xA56A, 0xB54B,
0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6,
0x5695, 0x46B4, 0xB75B, 0xA77A, 0x9719, 0x8738,
0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, 0x48C4, 0x58E5,
0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969,
0xA90A, 0xB92B, 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96,
0x1A71, 0x0A50, 0x3A33, 0x2A12, 0xDBFD, 0xCBDC,
0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03,
0x0C60, 0x1C41, 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD,
0xAD2A, 0xBD0B, 0x8D68, 0x9D49, 0x7E97, 0x6EB6,
0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A,
0x9F59, 0x8F78, 0x9188, 0x81A9, 0xB1CA, 0xA1EB,
0xD10C, 0xC12D, 0xF14E, 0xE16F, 0x1080, 0x00A1,
0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C,
0xE37F, 0xF35E, 0x02B1, 0x1290, 0x22F3, 0x32D2,
0x4235, 0x5214, 0x6277, 0x7256, 0xB5EA, 0xA5CB,
0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447,
0x5424, 0x4405, 0xA7DB, 0xB7FA, 0x8799, 0x97B8,
0xE75F, 0xF77E, 0xC71D, 0xD73C, 0x26D3, 0x36F2,
0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9,
0xB98A, 0xA9AB, 0x5844, 0x4865, 0x7806, 0x6827,
0x18C0, 0x08E1, 0x3882, 0x28A3, 0xCB7D, 0xDB5C,
0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0,
0x2AB3, 0x3A92, 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D,
0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, 0x7C26, 0x6C07,
0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA,
0x8FD9, 0x9FF8, 0x6E17, 0x7E36, 0x4E55, 0x5E74,
0x2E93, 0x3EB2, 0x0ED1, 0x1EF0};
unsigned short crc(unsigned char *v,int sz)
{
unsigned short crc=0;
for(int i=0;i<sz;i++) {
int n=((crc>>8)^v[i])&0xFF;
crc=(crc<<8)^tcrc[n];
}
return crc;
}
void send_lime(unsigned char *msg, int size,bool aff=0)
{
static int cnt=0;cnt++;
unsigned char msg2[size+2];
int h=crc(msg,size);
memcpy(msg2,msg,size);
msg2[size]=h>>8;
msg2[size+1]=h&0xff;
Serial.write(msg2,size+2);
delay(10);
}
unsigned char lime[]={0x46,0x43,0x11,0x01,0x00,0x08,0x4C,0x49,0x4D,0x45,0x42,0x49,0x4B,0x45}; //heathbeat
unsigned char un0[]={0x46,0x43,0x16,0x63,0x00,0x01,0xF0}; // lock off
unsigned char un1[]={0x46,0x43,0x16,0x11,0x00,0x02,0x01,0x12}; //speed limit and mode
unsigned char un1_11[]={0x46,0x43,0x16,0x11,0x00,0x02,0x01,0x11};
unsigned char un1_12[]={0x46,0x43,0x16,0x11,0x00,0x02,0x01,0x12};
unsigned char un1_13[]={0x46,0x43,0x16,0x11,0x00,0x02,0x01,0x13};
unsigned char un1_14[]={0x46,0x43,0x16,0x11,0x00,0x02,0x01,0x14};
unsigned char un1_16[]={0x46,0x43,0x16,0x11,0x00,0x02,0x01,0x16};
unsigned char un1_18[]={0x46,0x43,0x16,0x11,0x00,0x02,0x01,0x18};
unsigned char un2[]={0x46,0x43,0x16,0x90,0x00,0x04,0x01,0x0F,0x21,0x00};
unsigned char un3[]={0x46,0x43,0x16,0x91,0x00,0x02,0x00,0x96};
unsigned char un4[]={0x46,0x43,0x16,0x61,0x00,0x01,0xF1}; // on
unsigned char light_on[]={0x46,0x43,0x16,0x12,0x00,0x01,0xF1}; //light on
unsigned char light_off[]={0x46,0x43,0x16,0x12,0x00,0x01,0xF1}; //light off
unsigned char un6[]={0x46,0x43,0x16,0xF1,0x00,0x02,0x7F,0x7F}; //timeouts
unsigned char un7[]={0x46,0x43,0x16,0xF3,0x00,0x02,0x7F,0x7F}; //timeouts
unsigned char l0[]={0x46,0x43,0x16,0x61,0x00,0x01,0xF0}; //off
unsigned char l1[]={0x46,0x43,0x16,0x12,0x00,0x01,0xF0}; //light off
unsigned char block[]={0x46,0x43,0x16,0x63,0x00,0x01,0xF1};
unsigned char unblock[]={0x46,0x43,0x16,0x63,0x00,0x01,0xF0};
unsigned char unlock[]={0x46,0x43,0x16,0x61,0x00,0x01,0xF1};
unsigned char lock[]={0x46,0x43,0x16,0x61,0x00,0x01,0xF0};
#define SEND_LIME(a) {send_lime(a,sizeof(a));}
#define SEND3_LIME(a) {SEND_LIME(a);delay(40);SEND_LIME(a);delay(40);SEND_LIME(a);delay(40);}
unsigned char reboot[] ={0x46,0x43,0x16,0x21,0x55,0x50,0x44};
unsigned char crc8(const unsigned char * data, const unsigned int size)
{
unsigned char crc = 0;
for ( unsigned int i = 0; i < size; ++i )
{
unsigned char inbyte = data[i];
for ( unsigned char j = 0; j < 8; ++j )
{
unsigned char mix = (crc ^ inbyte) & 0x01;
crc >>= 1;
if ( mix ) crc ^= 0x8C;
inbyte >>= 1;
}
}
return crc;
}
void send_bird(int i=5)
{
unsigned char bf[55];
bf[0]=0xA6;
bf[1]=0;
bf[2]=0;
bf[3]=i&255;
bf[4]=i>>8;;
bf[5]=crc8(bf,5);
Serial.write(bf,6);
delay(10);
}
void setup() {
Serial.begin(9600);
}
void allchange(int ff,int light)
{
if(ff==0) {
SEND3_LIME(l0);
SEND3_LIME(l1);
}
if(ff==1) {
SEND3_LIME(un0);
SEND3_LIME(un1);
SEND3_LIME(un2);
SEND3_LIME(un3);
SEND3_LIME(un4);
if(light)
{SEND3_LIME(light_on);}
else
{SEND3_LIME(light_off);}
SEND3_LIME(un6);
SEND3_LIME(un7);
}
send_bird(ff*(1+light*4));
delay(100);
}
void loop() {
SEND_LIME(lime);
allchange(0,0);
delay(100);
allchange(0,0);
delay(100);
allchange(0,0);
delay(1000);
while(1) {
SEND_LIME(lime);
delay(500);
allchange(1,1);
delay(500);
}
}
@angrca
Copy link

angrca commented Jan 7, 2020

Hello and congratulation for your work and share it.
I was testing it on ES200B, and the SW unlock the scooter, turn on the light, but doesnt accelerate
I was testing other SW shared on forum and scooter accelerate until 20km/h, but with your SW..........no.
Do you know why?
THX for your answer and thx for help

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment