RF1000community / Repetier-Firmware

Community version of the firmware for the Renkforce RF1000 and RF2000 3D Printers
http://www.rf1000.de
16 stars 12 forks source link

Beim RF2000 wird die Statusnachricht über M117 bei 16 Stellen abgeschnitten. #33

Closed Nibbels closed 7 years ago

Nibbels commented 7 years ago

ui.cpp

void UIDisplay::setStatus(char *txt,bool error,bool force)
{
    if( locked && !force )
    {
        // we shall not update the display
        return;
    }
    if(!error && Printer::isUIErrorMessage()) return;

    uint8_t i=0;
    while(*txt && i<16)
        statusMsg[i++] = *txt++;
    statusMsg[i]=0;

    if(error)
        Printer::setUIErrorMessage(true);

} // setStatus
void UIDisplay::setStatusP(PGM_P txt,bool error)
{
    if( locked )                    
    {
        // we shall not update the display
        return;
    }
    if(!error && Printer::isUIErrorMessage()) 
    {
        return;
    }

    uint8_t i=0;
    while(i<20)
    {
        uint8_t c = pgm_read_byte(txt++);
        if(!c) break;
        statusMsg[i++] = c;
    }
    statusMsg[i]=0;
    if(error)
        Printer::setUIErrorMessage(true);

} // setStatusP

Die Definition UI_COLS beinhaltet beim RF1000 die Zahl 16 und beim RF2000 die Zahl 20. while(*txt && i< UI_COLS ) statt "< 16" und "< 20". "<16" stimmt sowieso nicht beim RF2000!

Das führt auf die Frage, warum bei beiden Firmwares in ui.h char statusMsg[21]; definiert ist. UI_COLS wird anhand des Boards (#if MOTHERBOARD == DEVICE_TYPE_RF1000 ...) erst nach der Klasse UIDisplay definiert.

Vor Klasse UIDisplay existiert noch:

// Maximum size of a row - if row is larger, text gets scrolled
#define MAX_COLS                        28

Das soll vermutlich

// Maximum size of a row - if row is larger, text gets scrolled
#define MAX_COLS                        20

sein.

In setStatusP sowie setStatus sollte bis UI_COLS gezählt werden. Ich vermute weiter, dass statusMsg[21] zu statusMsg[UI_COLS] oder besser statusMsg[MAX_COLS] werden müsste.

Test läuft.

Nibbels commented 7 years ago

char displayCache[UI_ROWS][MAX_COLS+1]; in ui.cpp wird auch über MAX_COLS definiert.

Warum 28 ?? Muss das größer sein?

Nibbels commented 7 years ago

https://github.com/RF1000community/Repetier-Firmware/commit/7e02f48d2562a84de7dac39d4ed2f98b9c0f8fb4 https://github.com/RF1000community/Repetier-Firmware/commit/2991167a73ead941752d13e67af8b7c1ed08ed6a

Nibbels commented 7 years ago

Betreffend: #define MAX_COLS 28 https://github.com/repetier/Repetier-Firmware hat MAX_COLS auf 28 oder 50, je nach UI_DISPLAY_TYPE.

https://github.com/repetier/Repetier-Firmware/blob/master/src/ArduinoAVR/Repetier/ui.h#L542 https://github.com/repetier/Repetier-Firmware/blob/master/src/ArduinoDUE/Repetier/ui.h#L539

Frage von mir an mich und alle: Wenn wir 16 oder 20 Zeichen Displaybreite haben, brauchen wir dann nur 16 oder 20 oder muss das höher sein? Darf ich den Wert so wie er korrekt sein müsste auf 20 stellen?

Ich teste das aktuell, der Drucker läuft, aber für die finale Entscheidung brauche ich einen Tipp oder ich lese mir alle Quelltextstellen genau durch, die das betrifft. Nur das sind viele.

Nibbels commented 7 years ago

Der Patch ist echt super!

Ich lese nun auf dem RF2000 komplett: IP:192.168.178.39 und nicht mehr nur IP:192.168.178.3____ Auch zeigt der nun: "ETE 12:23:34 day 24" und nicht mehr "ETE 12:23:34 day__"

:) Negative Auswirkungen habe ich nicht bemerken können.