Created
January 6, 2020 16:00
-
-
Save nopbxlr/b1ab93e1416da75a6fffcb1641e159a8 to your computer and use it in GitHub Desktop.
okai_electisan_hack
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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