Refactored

This commit is contained in:
2021-03-20 16:07:46 +01:00
parent e451875d36
commit b53332acdd
47 changed files with 746 additions and 1604 deletions

View File

@@ -6,14 +6,12 @@
const uint8_t kPins[6] = {32, 25, 33, 26, 19, 18};
void frame_factorytest_exit_cb(epdgui_args_vector_t &args)
{
void frame_factorytest_exit_cb(epdgui_args_vector_t &args) {
EPDGUI_PopFrame();
*((int *)(args[0])) = 0;
}
Frame_FactoryTest::Frame_FactoryTest(void)
{
Frame_FactoryTest::Frame_FactoryTest(void) {
//TODO: Voltage WiFi Psram touch pos
_frame_name = "Frame_FactoryTest";
@@ -42,18 +40,13 @@ Frame_FactoryTest::Frame_FactoryTest(void)
_canvas_pass->setTextDatum(CR_DATUM);
_language = GetLanguage();
if (_language == LANGUAGE_JA)
{
if (_language == LANGUAGE_JA) {
exitbtn("ホーム");
_canvas_title->drawString("工場テスト", 270, 34);
}
else if (_language == LANGUAGE_ZH)
{
} else if (_language == LANGUAGE_ZH) {
exitbtn("主页");
_canvas_title->drawString("出厂测试", 270, 34);
}
else
{
} else {
exitbtn("Home");
_canvas_title->drawString("Factory Test", 270, 34);
}
@@ -61,8 +54,7 @@ Frame_FactoryTest::Frame_FactoryTest(void)
_key_exit->AddArgs(EPDGUI_Button::EVENT_RELEASED, 0, (void *)(&_is_run));
_key_exit->Bind(EPDGUI_Button::EVENT_RELEASED, &Frame_Base::exit_cb);
for (int i = 0; i < 6; i++)
{
for (int i = 0; i < 6; i++) {
pinMode(kPins[i], OUTPUT);
digitalWrite(kPins[i], HIGH);
}
@@ -74,8 +66,7 @@ Frame_FactoryTest::Frame_FactoryTest(void)
M5.RTC.getTime(&time_struct);
M5.RTC.getDate(&date_struct);
if ((isTimeSynced() == 0) || (date_struct.year < 2010))
{
if ((isTimeSynced() == 0) || (date_struct.year < 2010)) {
rtc_time_t time_struct;
time_struct.hour = 23;
time_struct.min = 33;
@@ -97,8 +88,7 @@ Frame_FactoryTest::Frame_FactoryTest(void)
_pass_flag |= GetInitStatus(0) ? 0x0080 : 0;
}
Frame_FactoryTest::~Frame_FactoryTest(void)
{
Frame_FactoryTest::~Frame_FactoryTest(void) {
delete _canvas_base;
delete _canvas_data;
delete _canvas_pos;
@@ -106,27 +96,21 @@ Frame_FactoryTest::~Frame_FactoryTest(void)
delete _canvas_pass;
}
void Frame_FactoryTest::drawItem(uint16_t flag, const char* str, int y)
{
void Frame_FactoryTest::drawItem(uint16_t flag, const char* str, int y) {
String prefix_pass("[PASS] ");
String prefix_none("");
if(_pass_flag & flag)
{
if(_pass_flag & flag) {
_canvas_base->drawString(prefix_pass + str, POS_LX, y);
}
else
{
} else {
_canvas_base->drawString(str, POS_LX, y);
_canvas_base->ReversePartColor(0, y - 30, 300, 60);
}
}
void Frame_FactoryTest::drawItem(m5epd_update_mode_t mode)
{
void Frame_FactoryTest::drawItem(m5epd_update_mode_t mode) {
_canvas_base->fillCanvas(0);
if (_language == LANGUAGE_JA)
{
if (_language == LANGUAGE_JA) {
drawItem(0x0001, "1.期日", 30);
drawItem(0x0002, "2.時間", 90);
drawItem(0x0004, "3.温度", 150);
@@ -137,9 +121,7 @@ void Frame_FactoryTest::drawItem(m5epd_update_mode_t mode)
drawItem(0x0080, "8.SDカード", 450);
drawItem(0x0100, "9.ボタン", 510);
drawItem(0x0200, "10.タッチパッド", 570);
}
else if (_language == LANGUAGE_ZH)
{
} else if (_language == LANGUAGE_ZH) {
drawItem(0x0001, "1.日期", 30);
drawItem(0x0002, "2.时间", 90);
drawItem(0x0004, "3.温度", 150);
@@ -150,9 +132,7 @@ void Frame_FactoryTest::drawItem(m5epd_update_mode_t mode)
drawItem(0x0080, "8.SD卡", 450);
drawItem(0x0100, "9.按键", 510);
drawItem(0x0200, "10.触屏", 570);
}
else
{
} else {
drawItem(0x0001, "1.day", 30);
drawItem(0x0002, "2.Time", 90);
drawItem(0x0004, "3.Temperature", 150);
@@ -167,31 +147,25 @@ void Frame_FactoryTest::drawItem(m5epd_update_mode_t mode)
_canvas_base->pushCanvas(0, 100, mode);
}
void Frame_FactoryTest::drawGrove(m5epd_update_mode_t mode)
{
void Frame_FactoryTest::drawGrove(m5epd_update_mode_t mode) {
M5.EPD.WritePartGram4bpp(428, 916, 100, 40, (_pass_flag & 0x0400) ? ImageResource_factory_pass_h_100x40 : ImageResource_factory_port_a_100x40);
M5.EPD.WritePartGram4bpp(4, 848, 40, 100, (_pass_flag & 0x0800) ? ImageResource_factory_pass_v_40x100 : ImageResource_factory_port_b_40x100);
M5.EPD.WritePartGram4bpp(4, 720, 40, 100, (_pass_flag & 0x1000) ? ImageResource_factory_pass_v_40x100 : ImageResource_factory_port_c_40x100);
M5.EPD.UpdateArea(0, 720, 540, 240, mode);
}
bool Frame_FactoryTest::checkGrove(int sda, int scl)
{
bool Frame_FactoryTest::checkGrove(int sda, int scl) {
Wire1.begin(sda, scl, 10000);
bool groveCheck = true;
Wire1.beginTransmission(0x76);
Wire1.write(0xD0);
if (Wire1.endTransmission() != 0)
{
if (Wire1.endTransmission() != 0) {
groveCheck = false;
}
else
{
} else {
Wire1.requestFrom(0x76, 1);
uint8_t chipID = Wire1.read();
if (chipID != 0x58)
{
if (chipID != 0x58) {
groveCheck = false;
}
}
@@ -199,8 +173,7 @@ bool Frame_FactoryTest::checkGrove(int sda, int scl)
return groveCheck;
}
void Frame_FactoryTest::drawPassCount(m5epd_update_mode_t mode)
{
void Frame_FactoryTest::drawPassCount(m5epd_update_mode_t mode) {
uint16_t x = _pass_flag, n = 0;
for (; x; x >>= 1)
n += x & 1;
@@ -211,18 +184,15 @@ void Frame_FactoryTest::drawPassCount(m5epd_update_mode_t mode)
_canvas_pass->pushCanvas(375, 28, mode);
}
void Frame_FactoryTest::scan(String *ssid, int32_t *rssi)
{
void Frame_FactoryTest::scan(String *ssid, int32_t *rssi) {
WiFi.mode(WIFI_STA);
WiFi.disconnect();
WiFi.scanNetworks(true);
int wifi_num;
while (1)
{
while (1) {
wifi_num = WiFi.scanComplete();
if (wifi_num >= 0)
{
if (wifi_num >= 0) {
break;
}
}
@@ -232,13 +202,11 @@ void Frame_FactoryTest::scan(String *ssid, int32_t *rssi)
WiFi.scanDelete();
}
int Frame_FactoryTest::run()
{
int Frame_FactoryTest::run() {
uint16_t pass_flag = _pass_flag;
char buf[100];
// POS
if ((M5.TP.readFingerX(0) != _last_x) || (M5.TP.readFingerY(0) != _last_y))
{
if ((M5.TP.readFingerX(0) != _last_x) || (M5.TP.readFingerY(0) != _last_y)) {
pass_flag |= 0x0200;
_last_x = M5.TP.readFingerX(0);
_last_y = M5.TP.readFingerY(0);
@@ -252,59 +220,49 @@ int Frame_FactoryTest::run()
M5.update();
int ptr = 0;
bool ispressed = false;
if (_btn == 0x07)
{
if (_btn == 0x07) {
_btn |= 0x08;
pass_flag |= 0x0100;
}
if (M5.BtnL.isPressed())
{
if (M5.BtnL.isPressed()) {
_btn |= 0x01;
buf[ptr++] = 'L';
ispressed = true;
}
if (M5.BtnP.isPressed())
{
if (M5.BtnP.isPressed()) {
_btn |= 0x02;
buf[ptr++] = 'P';
ispressed = true;
}
if (M5.BtnR.isPressed())
{
if (M5.BtnR.isPressed()) {
_btn |= 0x04;
buf[ptr++] = 'R';
ispressed = true;
}
buf[ptr] = '\0';
if(ptr == 0)
{
if(ptr == 0) {
strcpy(buf, "Waiting...");
}
if (ispressed)
{
if (ispressed) {
_canvas_btn->fillCanvas(0);
_canvas_btn->drawString(buf, POS_RX, 30);
_canvas_btn->pushCanvas(300, 580, UPDATE_MODE_A2);
}
if (millis() - _time > 1000)
{
if (millis() - _time > 1000) {
_time = millis();
rtc_time_t time_struct;
rtc_date_t date_struct;
M5.RTC.getTime(&time_struct);
M5.RTC.getDate(&date_struct);
if ((date_struct.year > 2010) && (time_struct.hour <= 24) && (time_struct.min <= 60) && (time_struct.sec <= 60))
{
if ((date_struct.year > 2010) && (time_struct.hour <= 24) && (time_struct.min <= 60) && (time_struct.sec <= 60)) {
pass_flag |= 0x01;
}
if (_prev_sec == 255)
{
if (_prev_sec == 255) {
_prev_sec = time_struct.sec;
}
if (time_struct.sec != _prev_sec)
{
if (time_struct.sec != _prev_sec) {
pass_flag |= 0x02;
}
@@ -319,31 +277,24 @@ int Frame_FactoryTest::run()
// SHT30
M5.SHT30.UpdateData();
if(M5.SHT30.GetError() == 0)
{
if(M5.SHT30.GetError() == 0) {
float ctemp = M5.SHT30.GetTemperature();
float chumi = M5.SHT30.GetRelHumidity();
if (!(pass_flag & 0x04))
{
if (_prev_temp > 100)
{
if (!(pass_flag & 0x04)) {
if (_prev_temp > 100) {
_prev_temp = ctemp;
}
if ((ctemp < 40) && (ctemp > 0) && (_prev_temp != ctemp))
{
if ((ctemp < 40) && (ctemp > 0) && (_prev_temp != ctemp)) {
pass_flag |= 0x04;
}
}
if (!(pass_flag & 0x08))
{
if (_prev_hum > 100)
{
if (!(pass_flag & 0x08)) {
if (_prev_hum > 100) {
_prev_hum = chumi;
}
if ((chumi >= 0) && (chumi <= 100) && (_prev_hum != chumi))
{
if ((chumi >= 0) && (chumi <= 100) && (_prev_hum != chumi)) {
pass_flag |= 0x08;
}
}
@@ -352,21 +303,17 @@ int Frame_FactoryTest::run()
_canvas_data->drawString(buf, POS_RX, 150);
sprintf(buf, "%d %%", (int)chumi);
_canvas_data->drawString(buf, POS_RX, 210);
}
else
{
} else {
_canvas_data->drawString("[FAILED]", POS_RX, 150);
_canvas_data->drawString("[FAILED]", POS_RX, 210);
}
// Battery
uint32_t vol = M5.getBatteryVoltage();
if (_prev_vol == 0)
{
if (_prev_vol == 0) {
_prev_vol = vol;
}
if (_prev_vol != vol)
{
if (_prev_vol != vol) {
pass_flag |= 0x10;
}
float vol_f = vol / 1000.0f;
@@ -374,60 +321,46 @@ int Frame_FactoryTest::run()
_canvas_data->drawString(buf, POS_RX, 270);
// WiFi
if (_isfirst)
{
if (_isfirst) {
String ssid;
int32_t rssi;
scan(&ssid, &rssi);
sprintf(buf, "%s (%d db)", ssid.c_str(), rssi);
_wifistr = String(buf);
if (rssi > -55)
{
if (rssi > -55) {
pass_flag |= 0x20;
}
}
_canvas_data->drawString(_wifistr, POS_RX, 330);
// PSRAM
if (_isfirst)
{
if (_isfirst) {
uint8_t *test_p = (uint8_t *)ps_malloc(16);
if (test_p != NULL)
{
if (test_p != NULL) {
free(test_p);
_psram_success = true;
sprintf(buf, "Free %.2f KiB", ESP.getFreePsram() / 1024.0f);
_canvas_data->drawString(buf, POS_RX, 390);
pass_flag |= 0x40;
}
else
{
} else {
_psram_success = false;
sprintf(buf, "[FAILED]");
_canvas_data->drawString(buf, POS_RX, 390);
}
}
else
{
if (_psram_success)
{
} else {
if (_psram_success) {
sprintf(buf, "Free %.2f KiB", ESP.getFreePsram() / 1024.0f);
_canvas_data->drawString(buf, POS_RX, 390);
}
else
{
} else {
_canvas_data->drawString("[FAILED]", POS_RX, 390);
}
}
// SD
if (GetInitStatus(0))
{
if (GetInitStatus(0)) {
sprintf(buf, "%.2f MiB", SD.cardSize() / 1024.0f / 1024.0f);
_canvas_data->drawString(buf, POS_RX, 450);
}
else
{
} else {
_canvas_data->drawString("[FAILED]", POS_RX, 450);
}
@@ -437,51 +370,41 @@ int Frame_FactoryTest::run()
// grove
uint16_t temp = pass_flag;
if (!(pass_flag & 0x0400))
{
if (!(pass_flag & 0x0400)) {
pass_flag |= checkGrove(M5EPD_PORTA_Y_PIN, M5EPD_PORTA_W_PIN) ? 0x0400 : 0x0000;
}
if (!(pass_flag & 0x0800))
{
if (!(pass_flag & 0x0800)) {
pass_flag |= checkGrove(M5EPD_PORTB_Y_PIN, M5EPD_PORTB_W_PIN) ? 0x0800 : 0x0000;
}
if (!(pass_flag & 0x1000))
{
if (!(pass_flag & 0x1000)) {
pass_flag |= checkGrove(M5EPD_PORTC_Y_PIN, M5EPD_PORTC_W_PIN) ? 0x1000 : 0x0000;
}
bool update_flag = false;
if(temp != pass_flag)
{
if(pass_flag != _pass_flag)
{
if(temp != pass_flag) {
if(pass_flag != _pass_flag) {
update_flag = true;
}
_pass_flag = pass_flag;
drawGrove(UPDATE_MODE_GL16);
update_flag = true;
}
else if (update_flag || (pass_flag != _pass_flag))
{
} else if (update_flag || (pass_flag != _pass_flag)) {
_pass_flag = pass_flag;
drawItem(UPDATE_MODE_GL16);
update_flag = true;
}
if(update_flag)
{
if(update_flag) {
drawPassCount(UPDATE_MODE_GL16);
}
if (_isfirst)
{
if (_isfirst) {
_isfirst = false;
}
return 1;
}
int Frame_FactoryTest::init(epdgui_args_vector_t &args)
{
int Frame_FactoryTest::init(epdgui_args_vector_t &args) {
_is_run = 1;
M5.EPD.Clear();
_canvas_title->pushCanvas(0, 8, UPDATE_MODE_NONE);