#define BLEcacheMediaKey 16 #define BLEcacheGamepadbtns 14 #define BLEcacheHAT 4 #define BLEcacheMouse 5 #define BLEcacheKeyboard 255 #define BLEAnalog 12 byte BLEBTNcacheMediaKey[BLEcacheMediaKey]; byte BLEBTNcacheGamepadbtns[BLEcacheGamepadbtns]; byte BLEBTNcacheHAT[BLEcacheHAT]; byte BLEBTNcacheMouse[BLEcacheMouse]; byte BLEBTNcacheKeyboard[BLEcacheKeyboard]; int16_t BLEAnalogSet[BLEAnalog]; int32_t BLEAnalogincrement[BLEAnalog]; String BLEProgramCache[5]; int BLEProgramActive = 0; void iniBLE(bool first = true){ for (int i = 0; i < BLEcacheMediaKey; i++) { BLEBTNcacheMediaKey[i] = 0; } for (int i = 0; i < BLEcacheGamepadbtns; i++) { BLEBTNcacheGamepadbtns[i] = 0; } for (int i = 0; i < BLEcacheHAT; i++) { BLEBTNcacheHAT[i] = 0; } for (int i = 0; i < BLEcacheMouse; i++) { BLEBTNcacheMouse[i] = 0; } for (int i = 0; i < BLEcacheKeyboard; i++) { BLEBTNcacheKeyboard[i] = 0; } for (byte i = 0; i < BLEAnalog; i++) { BLEAnalogSet[i] = 0; BLEAnalogincrement[i] = 0; } if(first)blex.begin(); loadProgram(BLEProgramCache[BLEProgramActive]); } /* [1] //scancode [0-255] [2] //MediaKey [0-15] [3] //Gamepadbtns [0-13] [4] //HAT [0-3] [5] //Mouse [0-4] */ void BLEpress(byte type, byte btn){ if(type == 1){ //scancode [0-255] if(BLEBTNcacheKeyboard[btn]<255)BLEBTNcacheKeyboard[btn]++; blex.press(btn); } if(type == 2){ //MediaKey [0-15] if(BLEBTNcacheMediaKey[btn]<255)BLEBTNcacheMediaKey[btn]++; } if(type == 3){ //Gamepadbtns [0-13] if(BLEBTNcacheGamepadbtns[btn]<255)BLEBTNcacheGamepadbtns[btn]++; } if(type == 4){ //HAT [0-3] if(BLEBTNcacheHAT[btn]<255)BLEBTNcacheHAT[btn]++; } if(type == 5){ //Mouse[0-4] if(BLEBTNcacheMouse[btn]<255)BLEBTNcacheMouse[btn]++; } } void BLErelese(byte type, byte btn){ if(type == 1){ //scancode [0-255] if(BLEBTNcacheKeyboard[btn]>0)BLEBTNcacheKeyboard[btn]--; if(BLEBTNcacheKeyboard[btn]==0)blex.release(btn); } if(type == 2&&btn<=15){ //MediaKey [0-15] if(BLEBTNcacheMediaKey[btn]>0)BLEBTNcacheMediaKey[btn]--; } if(type == 3&&btn<=13){ //Gamepadbtns [0-13] if(BLEBTNcacheGamepadbtns[btn]>0)BLEBTNcacheGamepadbtns[btn]--; } if(type == 4&&btn<=3){ //HAT [0-3] if(BLEBTNcacheHAT[btn]>0)BLEBTNcacheHAT[btn]--; } if(type == 5&&btn<=4){ //Mouse[0-4] if(BLEBTNcacheMouse[btn]>0)BLEBTNcacheMouse[btn]--; } } void BLEsetAxis(byte axe, int16_t value){ BLEAnalogSet[axe] = value; } void BLEincreseAxis(byte axe, int16_t value){ int32_t now = BLEAnalogincrement[axe]; now+=(int32_t) value; if(now>65536)now = 65536; if(now<-65536)now = -65536; NRFAnalogincrement[axe] = (int32_t) now; } int16_t BLEcalcAxis(byte i){ int32_t now = (int32_t)BLEAnalogSet[i]; now+=(int32_t) BLEAnalogincrement[i]; if(now>32767)now = 32767; if(now<-32767)now = -32767; //if(NRFAnalogSet[i] == 0){ NRFAnalogincrement[i] = 0; //} NRFAnalogSet[i] = 0; return (int16_t) now; } uint16_t mediaLast = 0; int16_t BlEAnalogCache[BLEAnalog]; void BLEsend(){ uint8_t mbuttons = 0; uint16_t k_16 = 0; /*for (byte i = 0; i < BLEcacheKeyboard; i++) { if(BLEBTNcacheKeyboard[i]>0){ } }*/ for (byte i = 0; i < BLEcacheMediaKey; i++) { if(BLEBTNcacheMediaKey[i]>0){ k_16 |= (uint16_t)1<0)blex.gpress((uint16_t)1<0)blex.pressHat(i,false); else blex.releaseHat(i,false); } for (byte i = 0; i < BLEcacheMouse; i++) { if(BLEBTNcacheMouse[i]>0){ mbuttons |= 1<> 8); _mediaKeyReport[1] = (uint8_t)(k_16 & 0x00FF); blex.sendReport(&_mediaKeyReport); } blex.sendGamepadReport(); leds[21] = blex.isConnected() ? BLEColorConnected : BLEColorNotConnected; } void BLEnextProgram(){ BLEProgramActive++; if(BLEProgramActive>4)BLEProgramActive = 0; if(BLEProgramActive<0)BLEProgramActive = 0; while(BLEProgramActive!=0&&BLEProgramCache[BLEProgramActive].length()){ BLEProgramActive++; if(BLEProgramActive>4)BLEProgramActive = 0; } loadProgram(BLEProgramCache[BLEProgramActive]); } void BLEclick(){ BLEnextProgram(); }