5.85" Initial support and general preparation for BW only compatibility.

This commit is contained in:
VstudioLAB
2024-02-15 00:09:25 +01:00
parent a787ac6ddf
commit bee51a23b6
4 changed files with 49 additions and 47 deletions

View File

@@ -105,7 +105,7 @@ struct tagSpecs {
uint8_t buttonCount = 0; uint8_t buttonCount = 0;
bool hasNFC = false; bool hasNFC = false;
bool hasLED = false; bool hasLED = false;
bool hasSecondColor = true; bool hasThirdColor = false;
uint16_t macSuffix = 0x0000; uint16_t macSuffix = 0x0000;
uint8_t OEPLtype = 0; uint8_t OEPLtype = 0;
uint8_t solumType = 0; uint8_t solumType = 0;

View File

@@ -36,7 +36,9 @@ void identifyTagInfo() {
CA FE BA DE 15 0B 12 04 00 10 01 E0 01 20 03 39 00 03 81 9D 00 00 4C FF FF FF FF FF FF FF FF FF 7.4 UC8179 CA FE BA DE 15 0B 12 04 00 10 01 E0 01 20 03 39 00 03 81 9D 00 00 4C FF FF FF FF FF FF FF FF FF 7.4 UC8179
F3 22 BC 05 15 0A 0D 04 00 19 01 A0 02 C0 03 38 07 07 01 80 00 00 64 FF FF FF FF FF FF FF FF FF 9.7 SSD F3 22 BC 05 15 0A 0D 04 00 19 01 A0 02 C0 03 38 07 07 01 80 00 00 64 FF FF FF FF FF FF FF FF FF 9.7 SSD
AD BA FE CA 15 0A 1B 04 00 19 01 A0 02 C0 03 38 07 07 01 80 00 00 64 FF FF FF FF FF FF FF FF FF 9.7 type 2 AD BA FE CA 15 0A 1B 04 00 19 01 A0 02 C0 03 38 07 07 01 80 00 00 64 FF FF FF FF FF FF FF FF FF 9.7 type 2
22 F0 BF 05 15 0A 14 04 00 12 00 18 03 10 01 04 07 07 01 80 00 00 24 FF FF FF FF FF FF FF FF FF 5.85 92 C3 80 05 15 08 19 04 00 12 01 18 03 10 01 04 07 07 01 80 00 00 63 FF FF FF FF FF FF FF FF FF 5.85 BWR
22 F0 BF 05 15 0A 14 04 00 12 00 18 03 10 01 04 07 07 01 80 00 00 24 FF FF FF FF FF FF FF FF FF 5.85 BW
MAC | calib | |?????|Xres |Yres | ??? |capab| |type| MAC | calib | |?????|Xres |Yres | ??? |capab| |type|
@@ -51,7 +53,7 @@ void identifyTagInfo() {
0x12 - SSD (var1.6) 0x12 - SSD (var1.6)
0x15 - SSD (2.9 lite) 0x15 - SSD (2.9 lite)
0x19 - SSD (9.7) 0x19 - SSD (9.7)
0x0A - Have third color?
0x12 - 0x01 | (0x80 if it has a button) 0x12 - 0x01 | (0x80 if it has a button)
0x13 - 0x80 | (0x10 if it has a LED) | (0x0C ?? ) | (0x01 if it has a button) 0x13 - 0x80 | (0x10 if it has a LED) | (0x0C ?? ) | (0x01 if it has a button)
*/ */
@@ -67,6 +69,10 @@ void identifyTagInfo() {
capabilities[1] = getUICRByte(0x13); capabilities[1] = getUICRByte(0x13);
tag.solumType = getUICRByte(0x16); tag.solumType = getUICRByte(0x16);
if(getUICRByte(0x0A) == 0x01){
tag.hasThirdColor = true;
}
switch (controllerType) { switch (controllerType) {
case 0x0F: case 0x0F:
case 0x12: case 0x12:
@@ -125,7 +131,11 @@ void identifyTagInfo() {
}else{ }else{
printf("This tag have NFC: No\n"); printf("This tag have NFC: No\n");
} }
if(tag.hasThirdColor){
printf("This tag is Black and white only: No\n");
}else{
printf("This tag is Black and white only: Yes\n");
}
// we'll calculate image slot size here // we'll calculate image slot size here
uint32_t imageSize = epd->Xres * epd->Yres / 4; uint32_t imageSize = epd->Xres * epd->Yres / 4;
@@ -171,6 +181,11 @@ void identifyTagInfo() {
epd->epdMirrorV = true; epd->epdMirrorV = true;
tag.OEPLtype = SOLUM_M3_BWR_58; tag.OEPLtype = SOLUM_M3_BWR_58;
break; break;
case STYPE_SIZE_058_FREEZER:
tag.macSuffix = 0x84D0;
epd->epdMirrorV = true;
tag.OEPLtype = SOLUM_M3_BW_58;
break;
case STYPE_SIZE_060: case STYPE_SIZE_060:
tag.macSuffix = 0xB890; tag.macSuffix = 0xB890;
tag.OEPLtype = SOLUM_M3_BWR_60; tag.OEPLtype = SOLUM_M3_BWR_60;

View File

@@ -69,20 +69,6 @@ void dualssd::epdSetup() {
case 0x0F: case 0x0F:
case 0x12: case 0x12:
case 0x15: case 0x15:
// stock init 1.6"
/*epdWrite(CMD_DRV_OUTPUT_CTRL, 3, this->effectiveYRes & 0xFF, this->effectiveYRes >> 8, 0x00);
epdWrite(CMD_DATA_ENTRY_MODE, 1, 0x01);
epdWrite(CMD_WINDOW_X_SIZE, 2, this->XOffset / 8, ((this->XOffset + this->effectiveXRes) / 8) - 1);
epdWrite(CMD_WINDOW_Y_SIZE, 4, (this->YOffset + this->effectiveYRes) & 0xFF, (this->YOffset + this->effectiveYRes) >> 8, this->YOffset & 0xFF, this->YOffset >> 8);
epdWrite(CMD_BORDER_WAVEFORM_CTRL, 1, 0x05);
epdWrite(CMD_TEMP_SENSOR_CONTROL, 1, 0x80);
*/
// end stock init
// added
//epdWrite(CMD_DISP_UPDATE_CTRL, 2, 0x08, 0x00); // fix reversed image with stock setup
/* 5.85 INIT SEQUENCE /* 5.85 INIT SEQUENCE
0x11, 0x00 0x11, 0x00
0x91, 0x01 0x91, 0x01
@@ -113,7 +99,11 @@ void dualssd::epdSetup() {
epdWrite(0x11, 1, 0x00); epdWrite(0x11, 1, 0x00);
epdWrite(0x91, 1, 0x01); epdWrite(0x91, 1, 0x01);
epdWrite(0x21, 2, 0x08, 0x10); if(tag.hasThirdColor){
epdWrite(0x21, 2, 0x08, 0x10);
}else{
epdWrite(0x21, 2, 0x48, 0x10);
}
//epdWrite(CMD_WINDOW_X_SIZE, 2, this->XOffset / 8, ((this->XOffset + this->effectiveXRes) / 8) - 1); //epdWrite(CMD_WINDOW_X_SIZE, 2, this->XOffset / 8, ((this->XOffset + this->effectiveXRes) / 8) - 1);
//epdWrite(CMD_WINDOW_Y_SIZE, 4, (this->YOffset + this->effectiveYRes) & 0xFF, (this->YOffset + this->effectiveYRes) >> 8, this->YOffset & 0xFF, this->YOffset >> 8); //epdWrite(CMD_WINDOW_Y_SIZE, 4, (this->YOffset + this->effectiveYRes) & 0xFF, (this->YOffset + this->effectiveYRes) >> 8, this->YOffset & 0xFF, this->YOffset >> 8);
epdWrite(0x44, 2, 0x31, 0x00); epdWrite(0x44, 2, 0x31, 0x00);
@@ -126,28 +116,7 @@ void dualssd::epdSetup() {
epdWrite(0xC5, 4, 0x0F, 0x01, 0x00, 0x00); epdWrite(0xC5, 4, 0x0F, 0x01, 0x00, 0x00);
epdWrite(0xCE, 1, 0x00); epdWrite(0xCE, 1, 0x00);
epdWrite(0xCF, 4, 0x0F, 0x01, 0x3C, 0x01); epdWrite(0xCF, 4, 0x0F, 0x01, 0x3C, 0x01);
//epdWrite(CMD_DISP_UPDATE_CTRL, 2, 0x08, 0x00); // fix reversed image with stock setup
break;
case 0x19:
// stock init 9.7"
epdWrite(0x46, 1, 0xF7);
delay(15);
epdWrite(0x47, 1, 0xF7);
delay(15);
epdWrite(0x0C, 5, 0xAE, 0xC7, 0xC3, 0xC0, 0x80);
epdWrite(0x01, 3, 0x9F, 0x02, 0x00);
epdWrite(0x11, 1, 0x02);
epdWrite(0x44, 4, 0xBF, 0x03, 0x00, 0x00);
epdWrite(0x45, 4, 0x00, 0x00, 0x9F, 0x02);
epdWrite(0x3C, 1, 0x01); epdWrite(0x3C, 1, 0x01);
epdWrite(0x18, 1, 0x80);
epdWrite(0x22, 1, 0xF7);
// end stock init
// added
//epdWrite(CMD_DISP_UPDATE_CTRL, 2, 0x08, 0x00); // fix reversed image with stock setup
break; break;
} }
} }
@@ -156,12 +125,16 @@ void dualssd::epdWriteDisplayData() {
uint8_t *buf[2] = {0, 0}; // this will hold pointers to odd/even data lines uint8_t *buf[2] = {0, 0}; // this will hold pointers to odd/even data lines
// Those dual SSD controller (SSD1683??) behave as 2 400pxx wide screens, that needs independent data transfers. // Those dual SSD controller (SSD1683??) behave as 2 400pxx wide screens, that needs independent data transfers.
for (uint8_t c = 0; c < 4; c++) { uint8_t c_increment = 1;
if(!tag.hasThirdColor){
c_increment = 2;
}
for (uint8_t c = 0; c < 4; c = c + c_increment) {
delay(10); delay(10);
if (c == 0) epd_cmd(0x24);//RED if (c == 0) epd_cmd(0x24);//BW
if (c == 1) epd_cmd(0x26);//BW if (c == 1) epd_cmd(0x26);//RED
if (c == 2) epd_cmd(0xA4);//Red 2 if (c == 2) epd_cmd(0xA4);//BW
if (c == 3) epd_cmd(0xA6);//BW 2 if (c == 3) epd_cmd(0xA6);//RED
delay(10); delay(10);
markData(); markData();
@@ -239,7 +212,11 @@ void dualssd::draw() {
} }
void dualssd::drawNoWait() { void dualssd::drawNoWait() {
epdWriteDisplayData(); epdWriteDisplayData();
epdWrite(CMD_DISP_UPDATE_CTRL2, 1, 0xF7); if(tag.hasThirdColor){
epdWrite(CMD_DISP_UPDATE_CTRL2, 1, 0xF7);
}else{
//epdWrite(CMD_DISP_UPDATE_CTRL2, 1, 0xF7);
}
epdWrite(CMD_ACTIVATION, 0); epdWrite(CMD_ACTIVATION, 0);
} }
void dualssd::epdWaitRdy() { void dualssd::epdWaitRdy() {

View File

@@ -115,12 +115,22 @@ void showSplashScreen() {
fr.setFont(&FreeSansBold18pt7b); fr.setFont(&FreeSansBold18pt7b);
fr.epdPrintf(2, 2, COLOR_BLACK, rotation::ROTATE_0, "OpenEPaperLink"); fr.epdPrintf(2, 2, COLOR_BLACK, rotation::ROTATE_0, "OpenEPaperLink");
fr.setFont(&FreeSans9pt7b); fr.setFont(&FreeSans9pt7b);
fr.epdPrintf(10, 38, 1, rotation::ROTATE_0, "Newton M3 5.85\""); fr.epdPrintf(10, 38, COLOR_RED, rotation::ROTATE_0, "Newton M3 5.85\"");
fr.setFont(&FreeSans9pt7b); fr.setFont(&FreeSans9pt7b);
fr.epdPrintf(epd->Xres - 17, 0, 0, rotation::ROTATE_270, "FW: %04X-%s", fwVersion, fwVersionSuffix); fr.epdPrintf(epd->Xres - 17, 0, 0, rotation::ROTATE_270, "FW: %04X-%s", fwVersion, fwVersionSuffix);
fr.epdPrintf(5, epd->Yres - 20, 0, rotation::ROTATE_0, "MAC: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", mSelfMac[7], mSelfMac[6], mSelfMac[5], mSelfMac[4], mSelfMac[3], mSelfMac[2], mSelfMac[1], mSelfMac[0]); fr.epdPrintf(5, epd->Yres - 20, 0, rotation::ROTATE_0, "MAC: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", mSelfMac[7], mSelfMac[6], mSelfMac[5], mSelfMac[4], mSelfMac[3], mSelfMac[2], mSelfMac[1], mSelfMac[0]);
addQR(epd->Xres - 120, 42, 3, 3, "https://openepaperlink.eu/tag/0/%02X/%02X%02X%02X%02X%02X%02X%02X%02X/", tag.OEPLtype, mSelfMac[7], mSelfMac[6], mSelfMac[5], mSelfMac[4], mSelfMac[3], mSelfMac[2], mSelfMac[1], mSelfMac[0]); addQR(epd->Xres - 120, 42, 3, 3, "https://openepaperlink.eu/tag/0/%02X/%02X%02X%02X%02X%02X%02X%02X%02X/", tag.OEPLtype, mSelfMac[7], mSelfMac[6], mSelfMac[5], mSelfMac[4], mSelfMac[3], mSelfMac[2], mSelfMac[1], mSelfMac[0]);
break; break;
case STYPE_SIZE_058_FREEZER:
fr.setFont(&FreeSansBold18pt7b);
fr.epdPrintf(2, 2, COLOR_BLACK, rotation::ROTATE_0, "OpenEPaperLink");
fr.setFont(&FreeSans9pt7b);
fr.epdPrintf(10, 38, COLOR_BLACK, rotation::ROTATE_0, "Newton M3 5.85\" Freezer");
fr.setFont(&FreeSans9pt7b);
fr.epdPrintf(epd->Xres - 17, 0, COLOR_BLACK, rotation::ROTATE_270, "FW: %04X-%s", fwVersion, fwVersionSuffix);
fr.epdPrintf(5, epd->Yres - 20, COLOR_BLACK, rotation::ROTATE_0, "MAC: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", mSelfMac[7], mSelfMac[6], mSelfMac[5], mSelfMac[4], mSelfMac[3], mSelfMac[2], mSelfMac[1], mSelfMac[0]);
addQR(epd->Xres - 120, 42, 3, 3, "https://openepaperlink.eu/tag/0/%02X/%02X%02X%02X%02X%02X%02X%02X%02X/", tag.OEPLtype, mSelfMac[7], mSelfMac[6], mSelfMac[5], mSelfMac[4], mSelfMac[3], mSelfMac[2], mSelfMac[1], mSelfMac[0]);
break;
case STYPE_SIZE_060: case STYPE_SIZE_060:
fr.setFont(&FreeSansBold24pt7b); fr.setFont(&FreeSansBold24pt7b);
fr.epdPrintf(10, 10, COLOR_BLACK, rotation::ROTATE_0, "OpenEPaperLink"); fr.epdPrintf(10, 10, COLOR_BLACK, rotation::ROTATE_0, "OpenEPaperLink");