diff --git a/firmware.bin b/firmware.bin index 936b397..5e45550 100644 Binary files a/firmware.bin and b/firmware.bin differ diff --git a/src/MAKERphone.cpp b/src/MAKERphone.cpp index f46ad89..cac5971 100644 --- a/src/MAKERphone.cpp +++ b/src/MAKERphone.cpp @@ -3545,7 +3545,6 @@ void MAKERphone::lockscreen() { dataRefreshFlag = 1; bool blinkState = 0; - uint8_t altBlinkState = 0; //emergency call/hold to unlock switcher uint32_t elapsedMillis = millis(); // FastLED.clear(); inLockScreen = 1; @@ -3963,10 +3962,6 @@ void MAKERphone::lockscreen() { elapsedMillis = millis(); blinkState = !blinkState; - if (blinkState) - altBlinkState++; - if (altBlinkState >= 3) - altBlinkState = 0; if (clockYear % 100 != 4 && clockYear % 100 != 80) updateTimeRTC(); } @@ -3977,14 +3972,7 @@ void MAKERphone::lockscreen() display.setTextSize(1); display.setTextColor(TFT_BLACK); - if (altBlinkState >= 2) - { - display.print("Hold \"*\" for emergency"); - } - else - { - display.print("Hold \"#\" to unlock"); - } + display.print("Hold \"#\" to unlock"); display.setTextSize(6); display.setTextColor(TFT_DARKGREY); display.setFreeFont(TT1); @@ -4066,81 +4054,7 @@ void MAKERphone::lockscreen() display.setTextFont(2); return; } - /*--------------------------------------------emergency call start-------------------------------------------------*/ - if (buttons.timeHeld(BTN_ASTERISK) < 5 && buttons.timeHeld(BTN_ASTERISK) > 0) - { - display.setTextFont(2); - display.setTextSize(1); - display.fillRect(0, 112, display.width(), 16, backgroundColors[backgroundIndex]); - display.setCursor(2, 111); - display.print("Emergency"); - } - if (buttons.timeHeld(BTN_ASTERISK) >= 5 && buttons.timeHeld(BTN_ASTERISK) < 12) - { - display.fillRect(0, 112, display.width(), 16, backgroundColors[backgroundIndex]); - display.setCursor(2, 111); - display.setTextFont(2); - display.setTextSize(1); - display.print("Emergency *"); - leds[0] = CRGB::Red; - leds[7] = CRGB::Red; - // FastLED.show(); - } - else if (buttons.timeHeld(BTN_ASTERISK) >= 12 && buttons.timeHeld(BTN_ASTERISK) < 18) - { - display.fillRect(0, 112, display.width(), 16, backgroundColors[backgroundIndex]); - display.setCursor(2, 111); - display.setTextFont(2); - display.setTextSize(1); - display.print("Emergency * *"); - leds[0] = CRGB::Red; - leds[7] = CRGB::Red; - leds[1] = CRGB::Red; - leds[6] = CRGB::Red; - } - else if (buttons.timeHeld(BTN_ASTERISK) >= 18 && buttons.timeHeld(BTN_ASTERISK) < 24) - { - display.fillRect(0, 112, display.width(), 16, backgroundColors[backgroundIndex]); - display.setCursor(2, 111); - display.setTextFont(2); - display.setTextSize(1); - display.print("Emergency * * *"); - leds[0] = CRGB::Red; - leds[7] = CRGB::Red; - leds[1] = CRGB::Red; - leds[6] = CRGB::Red; - leds[2] = CRGB::Red; - leds[5] = CRGB::Red; - } - else if (buttons.timeHeld(BTN_ASTERISK) >= 24 && buttons.timeHeld(BTN_ASTERISK) < 30) - { - display.fillRect(0, 112, display.width(), 16, backgroundColors[backgroundIndex]); - display.setCursor(2, 111); - display.setTextFont(2); - display.setTextSize(1); - display.print("Emergency * * * *"); - leds[0] = CRGB::Red; - leds[7] = CRGB::Red; - leds[1] = CRGB::Red; - leds[6] = CRGB::Red; - leds[2] = CRGB::Red; - leds[5] = CRGB::Red; - leds[3] = CRGB::Red; - leds[4] = CRGB::Red; - } - else if (buttons.timeHeld(BTN_ASTERISK) >= 30) - { - // while(!update()); - dataRefreshFlag = 0; - buttons.holdForUnlock = 1; - inLockScreen = 0; - emergencyCall(); - display.setTextSize(1); - display.setTextFont(2); - return; - } - /*--------------------------------------------emergency call end-------------------------------------------------*/ update(); } } @@ -6537,681 +6451,6 @@ void MAKERphone::pduDecode(const char* PDU) // Serial.println(_smsNumber); // free(content); } - -void MAKERphone::emergencyCall() -{ - int8_t nSelector = 0; - bool freshLine = false; - String callBuffer = ""; - char key = NO_KEY; - display.setTextWrap(0); - display.setTextFont(2); - bool plusSign = 0; - uint32_t blinkMillis = millis(); - bool blinkState = 1; - while (1) - { - if (millis() - blinkMillis >= 350) - { - blinkMillis = millis(); - blinkState = !blinkState; - } - display.fillScreen(TFT_BLACK); - display.setTextColor(TFT_WHITE); - display.setTextSize(1); - display.fillRect(0, 79, display.width(), 26, TFT_DARKGREY); - display.drawRect(61, 110, 98, 17, TFT_WHITE); - display.setCursor(63, 110); - display.setTextFont(2); - display.setTextColor(TFT_WHITE); - display.print("Press A to dial"); - display.setCursor(60, -1); - display.setCursor(4, 110); - display.print("Erase"); - display.setCursor(2, -1); - display.setTextColor(TFT_LIGHTGREY); - display.print("Emergency calls only!"); - display.setTextColor(TFT_WHITE); - display.setCursor(2, 28); - display.print("112"); - display.setCursor(2, 55); - display.print("911"); - key = NO_KEY; - for (int i = 0; i < 12; i++) - { - if (buttons.released(i)) - { - if (i == 10) - key = '0'; - else if (i == 9) - key = '*'; - else if (i == 11) - key = '#'; - else - key = '0' + i + 1; - break; - } - } - if (buttons.pressed(BTN_DOWN) && nSelector >= 0) - { - if (nSelector < 2 && nSelector >= 0) - { - nSelector++; - } - else - { - nSelector = 0; - } - } - if (buttons.pressed(BTN_UP) && nSelector <= 2) - { - if (nSelector > 0 && nSelector <= 2) - { - nSelector--; - } - else - { - nSelector = 2; - } - } - if (blinkState) - emergencyCallDrawCursor(nSelector, 1); - - if (buttons.released(BTN_HOME)) - { - exitedLockscreen = true; - lockscreen(); - } - if (buttons.held(BTN_0, 20)) - { - callBuffer += "+"; - plusSign = 1; - } - if (key == '0' && plusSign) - key = NO_KEY; - if (plusSign && buttons.released(BTN_0)) - plusSign = 0; - if (buttons.released(BTN_FUN_LEFT)) - { - callBuffer.remove(callBuffer.length() - 1); - buttons.update(); - } - if (key != NO_KEY) - { - switch (key) - { - case '1': - osc->note(NOTE_C5, 0.05); - osc->play(); - break; - case '2': - osc->note(NOTE_D5, 0.05); - osc->play(); - break; - case '3': - osc->note(NOTE_E5, 0.05); - osc->play(); - break; - case '4': - osc->note(NOTE_F5, 0.05); - osc->play(); - break; - case '5': - osc->note(NOTE_G5, 0.05); - osc->play(); - break; - case '6': - osc->note(NOTE_A5, 0.05); - osc->play(); - break; - case '7': - osc->note(NOTE_B5, 0.05); - osc->play(); - break; - case '8': - osc->note(NOTE_C6, 0.05); - osc->play(); - break; - case '9': - osc->note(NOTE_D6, 0.05); - osc->play(); - break; - case '*': - osc->note(NOTE_E6, 0.05); - osc->play(); - break; - case '0': - osc->note(NOTE_F6, 0.05); - osc->play(); - break; - case '#': - osc->note(NOTE_G6, 0.05); - osc->play(); - break; - default: - break; - } - callBuffer += key; - } - if (callBuffer == "*" && !freshLine) - { - callBuffer = ""; //delete stuck asterisk - freshLine = true; //don't delete more than once... - } - display.setCursor(0, 76); - display.setTextSize(2); - display.print(callBuffer); - if (display.cursor_x + 4 >= display.width()) - { - display.fillRect(0, 79, display.width(), 26, TFT_DARKGREY); - display.setCursor(display.width() - display.cursor_x - 14, 76); - display.print(callBuffer); - } - if (blinkState) - { - display.drawFastVLine(display.getCursorX() + 1, display.getCursorY() + 6, 20, TFT_WHITE); - display.drawFastVLine(display.getCursorX() + 2, display.getCursorY() + 6, 20, TFT_WHITE); - } - //Call may still be valid if callBuffer=null if nSelector is on one of the two options - if ((buttons.released(BTN_A) && callBuffer != "") || (buttons.released(BTN_A) && nSelector != 2)) //initate call - { - while (!update()); - if (sim_module_version == 255) - { - display.fillScreen(TFT_BLACK); - display.setTextColor(TFT_WHITE); - display.setTextSize(1); - display.setCursor(0, display.height() / 2 - 20); - display.setTextFont(2); - display.printCenter(F("No network board!")); - display.setCursor(0, display.height() / 2); - display.printCenter(F("Insert board and reset")); - uint32_t tempMillis = millis(); - while (millis() < tempMillis + 2000 && !buttons.released(BTN_A) && !buttons.released(BTN_B)) - update(); - while (!update()); - } - else if (airplaneMode) - { - display.fillScreen(TFT_BLACK); - display.setTextColor(TFT_WHITE); - display.setTextSize(1); - display.setCursor(0, display.height() / 2 - 20); - display.setTextFont(2); - display.printCenter(F("Can't make calls")); - display.setCursor(0, display.height() / 2); - display.printCenter(F("Turn off airplane mode")); - uint32_t tempMillis = millis(); - while (millis() < tempMillis + 2000 && !buttons.released(BTN_A) && !buttons.released(BTN_B)) - update(); - while (!update()); - } - else - { - while (Serial1.available()) - Serial1.read(); - Serial1.println("AT+CCALR?"); //No sim - returns 0 - not ready, that's okay for emergency call - String input = waitForOK(); - Serial.println(input); - if (signalStrength == 99) - { - Serial1.println("AT+CSQ"); - String buffer = ""; - uint32_t current = millis(); - while (buffer.indexOf("+CSQ:") == -1 && millis() - current >= 2000) - buffer = Serial1.readString(); - if (buffer.indexOf("+CSQ:") != -1) - signalStrength = buffer.substring(buffer.indexOf(" ", buffer.indexOf("+CSQ:")) + 1, buffer.indexOf(",", buffer.indexOf(" ", buffer.indexOf("+CSQ:")))).toInt(); - if (signalStrength == 99) - { - display.fillScreen(TFT_BLACK); - display.setTextColor(TFT_WHITE); - display.setTextSize(1); - display.setCursor(0, display.height() / 2 - 20); - display.setTextFont(2); - display.printCenter(F("No signal!")); - display.setCursor(0, display.height() / 2); - display.printCenter(F("Check your antenna")); - uint32_t tempMillis = millis(); - while (millis() < tempMillis + 2000 && !buttons.released(BTN_A) && !buttons.released(BTN_B)) - update(); - while (!update()); - } - else - { - if (nSelector == 0) - { - callBuffer = "112"; - } - else if (nSelector == 1) - { - callBuffer = "911"; - } - callNumberEmergency(callBuffer); - while (!update()); - callBuffer = ""; - } - } - else - { //Check if number obviously ins't an emergency number, some countries use something other than 112/911 - //Later we will check with the operator if they allow the call to go through or not - if (callBuffer.length() > 4) - { - display.fillScreen(TFT_BLACK); - display.setTextColor(TFT_WHITE); - display.setTextSize(1); - display.setCursor(0, display.height() / 2 - 20); - display.setTextFont(2); - display.printCenter(F("No SIM card!")); - display.setCursor(0, display.height() / 2); - display.printCenter(F("Emergency calls only!")); - uint32_t tempMillis = millis(); - while (millis() < tempMillis + 2000 && !buttons.released(BTN_A) && !buttons.released(BTN_B)) - update(); - while (!update()); - } - else - { //Assign number to buffer if there's a selection other than input box - if (nSelector == 0) - { - callBuffer = "112"; - } - else if (nSelector == 1) - { - callBuffer = "911"; - } - //Make call - callNumberEmergency(callBuffer); - while (!update()); - } - callBuffer = ""; - } - } - } - if (buttons.released(BTN_B)) //BACK BUTTON - break; - - update(); - } - while (!update()); -} - -void MAKERphone::callNumberEmergency(String number) -{ - String contact = checkContact(number); - inCall = 1; - dataRefreshFlag = 0; - char c; - String localBuffer = ""; - String buffer = ""; - Serial1.print(F("ATD")); - Serial1.print(number); - Serial1.print(";\r\n"); - display.setFreeFont(TT1); - display.setTextColor(TFT_BLACK); - bool firstPass = 1; - uint32_t timeOffset = 0; - uint8_t scale; - String temp; - unsigned int tmp_time = 0; - if (resolutionMode) - { - scale = 1; - display.setFreeFont(TT1); - } - else - { - scale = 2; - display.setTextFont(2); - } - display.setTextSize(1); - digitalWrite(soundSwitchPin, 1); - if (contact == "") - display.printCenter(number); - else - display.printCenter(contact); - uint8_t callState = 1; - while (1) - { - display.fillScreen(TFT_WHITE); - if (Serial1.available()) - { - c = Serial1.read(); - buffer += c; - } - //Check if the operator allows the call to go through; check if it's an emergency number - //If the response contains "ERROR" selected/entered number is invalid, we print a msg to let the user know - if (buffer.indexOf("ERROR") > 1) - { - display.fillScreen(TFT_BLACK); - display.setTextColor(TFT_WHITE); - display.setTextSize(1); - display.setCursor(0, display.height() / 2 - 20); - display.setTextFont(2); - display.printCenter(F("Invalid number!")); - display.setCursor(0, display.height() / 2); - display.printCenter(F("Emergency calls only!")); - uint32_t tempMillis = millis(); - while (millis() < tempMillis + 2000 && !buttons.released(BTN_A) && !buttons.released(BTN_B)) - update(); - while (!update()); - if (SDinsertedFlag) - saveSettings(); - digitalWrite(soundSwitchPin, 0); - inCall = 0; - return; - } - if (buffer.indexOf("CLCC:") != -1 && buffer.indexOf("\r", buffer.indexOf("CLCC:")) != -1) - { - localBuffer = buffer; - buffer = ""; - } - if (buffer.indexOf("\r") != -1) - buffer = ""; - Serial.println("---------------"); - Serial.println(buffer); - delay(5); - if (buffer.indexOf("OK", buffer.indexOf("AT+CMIC=")) != -1) - buffer = ""; - if (localBuffer.indexOf("+CLCC: 1") != -1 || localBuffer.indexOf("AT+CMIC") != -1) - { - if (localBuffer.indexOf("1,0,0,0,0") != -1 || localBuffer.indexOf("AT+CMIC") != -1) - { - callState = 2; - } - - else if (localBuffer.indexOf("1,0,3,0,0") != -1) - { - callState = 0; - } - - else if (localBuffer.indexOf("1,0,2,0,0") != -1) - { - callState = 1; - } - - else if (localBuffer.indexOf("1,0,6,0,0") != -1) - { - display.fillScreen(TFT_WHITE); - display.setCursor(32, 9); - if (timeOffset == 0) - { - display.printCenter("00:00"); - tmp_time = 0; - } - else - { - temp = ""; - if ((int((millis() - timeOffset) / 1000) / 60) > 9) - temp += (int((millis() - timeOffset) / 1000) / 60); - else - { - temp += "0"; - temp += (int((millis() - timeOffset) / 1000) / 60); - } - temp += ":"; - if (int((millis() - timeOffset) / 1000) % 60 > 9) - temp += (int((millis() - timeOffset) / 1000) % 60); - else - { - temp += "0"; - temp += (int((millis() - timeOffset) / 1000) % 60); - } - display.setCursor(9, 9); - display.printCenter(temp); - } - display.drawBitmap(29 * scale, 24 * scale, call_icon, TFT_RED, scale); - if (resolutionMode) - display.setCursor(11, 20); - else - display.setCursor(11, 28); - if (contact == "") - display.printCenter(number); - else - display.printCenter(contact); - display.fillRect(0, 51 * scale, 80 * scale, 13 * scale, TFT_RED); - if (resolutionMode) - display.setCursor(2, 62); - else - display.setCursor(2, 112); - display.print("Call ended"); - Serial.println("ENDED"); - while (!update()); - - updateTimeRTC(); - if (SDinsertedFlag) - addCall(number, checkContact(number), RTC.now().unixtime(), tmp_time, 1); - - delay(1000); - break; - } - } - - else if (localBuffer.indexOf("CLCC:") == -1) - { - if (localBuffer.indexOf("ERROR") != -1) - { - - display.setCursor(3, 9); - display.printCenter("Couldn't dial number!"); - display.drawBitmap(29 * scale, 24 * scale, call_icon, TFT_RED, scale); - if (resolutionMode) - display.setCursor(11, 20); - else - display.setCursor(11, 28); - if (contact == "") - display.printCenter(number); - else - display.printCenter(contact); - display.fillRect(0, 51 * scale, 80 * scale, 13 * scale, TFT_RED); - if (resolutionMode) - { - display.setCursor(2, 57); - display.print("Invalid number or"); - display.setCursor(2, 63); - display.print("SIM card missing!"); - } - else - { - display.setCursor(2, 100); - display.print("Invalid number or"); - display.setCursor(2, 112); - display.print("SIM card missing!"); - } - while (!buttons.released(BTN_B)) - update(); - break; - } - else - { - callState = 1; - } - } - if (buttons.pressed(BTN_FUN_RIGHT)) // hanging up - { - - display.fillScreen(TFT_WHITE); - display.setCursor(32, 9); - if (timeOffset == 0) - { - display.printCenter("00:00"); - tmp_time = 0; - } - else - { - temp = ""; - if ((int((millis() - timeOffset) / 1000) / 60) > 9) - temp += (int((millis() - timeOffset) / 1000) / 60); - else - { - temp += "0"; - temp += (int((millis() - timeOffset) / 1000) / 60); - } - temp += ":"; - if (int((millis() - timeOffset) / 1000) % 60 > 9) - temp += (int((millis() - timeOffset) / 1000) % 60); - else - { - temp += "0"; - temp += (int((millis() - timeOffset) / 1000) % 60); - } - display.setCursor(9, 9); - display.printCenter(temp); - } - display.drawBitmap(29 * scale, 24 * scale, call_icon, TFT_RED, scale); - display.setCursor(11, 28); - if (contact == "") - display.printCenter(number); - else - display.printCenter(contact); - display.fillRect(0, 51 * scale, 80 * scale, 13 * scale, TFT_RED); - display.setCursor(2, 112); - display.print("Call ended"); - Serial.println("ENDED"); - while (!update()); - updateTimeRTC(); - Serial.println("B PRESSED"); - Serial1.println("ATH"); - uint32_t curr_millis = millis(); - while (Serial1.readString().indexOf("1,0,6,0,0") == -1 && millis() - curr_millis < 2000) - { - Serial1.println("ATH"); - } - if (SDinsertedFlag) - addCall(number, checkContact(number), RTC.now().unixtime(), tmp_time, 1); - delay(1000); - break; - } - if(buttons.released(BTN_UP) && callSpeakerVolume < 5) - { - callSpeakerVolume++; - if (sim_module_version == 1) - Serial1.printf("AT+CLVL=%d\r", callSpeakerVolume*20); - else if (sim_module_version == 0) - Serial1.printf("AT+CLVL=%d\r", callSpeakerVolume); - display.fillRect(56, 111, 20, 15, TFT_RED); - display.setCursor(59, 109); - display.print(callSpeakerVolume); - } - if(buttons.released(BTN_DOWN) && callSpeakerVolume > 0) - { - callSpeakerVolume--; - if (sim_module_version == 1) - Serial1.printf("AT+CLVL=%d\r", callSpeakerVolume*20); - else if (sim_module_version == 0) - Serial1.printf("AT+CLVL=%d\r", callSpeakerVolume); - display.fillRect(56, 111, 20, 15, TFT_RED); - display.setCursor(59, 109); - display.print(callSpeakerVolume); - } - switch (callState) - { - case 0: - display.setCursor(25, 9); - display.printCenter("Ringing..."); - display.drawBitmap(29 * scale, 24 * scale, call_icon, TFT_DARKGREY, scale); - display.setCursor(11, 28); - if (contact == "") - display.printCenter(number); - else - display.printCenter(contact); - display.fillRect(0, 51 * scale, 80 * scale, 13 * scale, TFT_RED); - display.setCursor(5, 109); - display.print("Volume: "); - display.print(callSpeakerVolume); - display.setCursor(100, 109); - display.print("Hang up"); - break; - case 1: - display.setCursor(25, 9); - display.printCenter("Calling..."); - display.drawBitmap(29 * scale, 24 * scale, call_icon, TFT_DARKGREY, scale); - display.setCursor(11, 28); - if (contact == "") - display.printCenter(number); - else - display.printCenter(contact); - display.fillRect(0, 51 * scale, 80 * scale, 13 * scale, TFT_RED); - display.setCursor(5, 109); - display.print("Volume: "); - display.print(callSpeakerVolume); - display.setCursor(100, 109); - display.print("Hang up"); - break; - case 2: - if (firstPass == 1) - { - timeOffset = millis(); - firstPass = 0; - } - String temp = ""; - if ((int((millis() - timeOffset) / 1000) / 60) > 9) - temp += (int((millis() - timeOffset) / 1000) / 60); - else - { - temp += "0"; - temp += (int((millis() - timeOffset) / 1000) / 60); - } - temp += ":"; - if (int((millis() - timeOffset) / 1000) % 60 > 9) - temp += (int((millis() - timeOffset) / 1000) % 60); - else - { - temp += "0"; - temp += (int((millis() - timeOffset) / 1000) % 60); - } - display.setCursor(9, 9); - display.printCenter(temp); - display.drawBitmap(29 * scale, 24 * scale, call_icon, TFT_GREEN, scale); - display.setCursor(11, 28); - if (contact == "") - display.printCenter(number); - else - display.printCenter(contact); - display.fillRect(0, 51 * scale, 80 * scale, 13 * scale, TFT_RED); - display.setCursor(5, 109); - display.print("Volume: "); - display.print(callSpeakerVolume); - display.setCursor(100, 109); - display.print("Hang up"); - break; - } - for (int i = 0; i < 12; i++) - { - - if (buttons.released(i)) - { - if (i == 9) - Serial1.println("AT+VTS=*"); - else if (i == 10) - Serial1.println("AT+VTS=0"); - else if (i == 11) - Serial1.println("AT+VTS=#"); - else - { - Serial1.print("AT+VTS="); - Serial1.println(i + 1); - } - break; - } - } - tmp_time = int((millis() - timeOffset) / 1000); - update(); - } - if (SDinsertedFlag) - saveSettings(); - digitalWrite(soundSwitchPin, 0); - inCall = 0; -} - -void MAKERphone::emergencyCallDrawCursor(uint8_t i, int32_t y) -{ - uint8_t offset = 20; - uint8_t boxHeight = 28; - y += i * boxHeight + offset; - display.drawRect(0, y, display.width(), boxHeight + 1, TFT_RED); -} - bool MAKERphone::setCallVolume(uint8_t volume) //0-100 { bool ret = false; diff --git a/src/MAKERphone.h b/src/MAKERphone.h index aec3583..be4d4c4 100644 --- a/src/MAKERphone.h +++ b/src/MAKERphone.h @@ -179,9 +179,9 @@ class MAKERphone:public Buttons, public DateTime bool setCallVolume(uint8_t volume); //Emergency calls - void emergencyCall(); - void callNumberEmergency(String number); - void emergencyCallDrawCursor(uint8_t i, int32_t y); + // void emergencyCall(); + // void callNumberEmergency(String number); + // void emergencyCallDrawCursor(uint8_t i, int32_t y); //NeoPixels... int numberOfColors = 19; @@ -248,7 +248,7 @@ class MAKERphone:public Buttons, public DateTime String ringtone_path = "/Ringtones/Default ringtone.wav"; String alarm_path = "/Ringtones/Default ringtone.wav"; uint8_t notification = 0; - uint16_t firmware_version = 102; + uint16_t firmware_version = 103; //Settings app void applySettings();