2020.05.08.01

Made improvement to rotator_k3ngdisplay.cpp to reduce LCD bus traffic from cursor positioning
This commit is contained in:
Anthony Good 2020-05-08 18:30:37 -04:00
parent 3453a14e86
commit 97c655108f
2 changed files with 86 additions and 77 deletions

View File

@ -479,6 +479,8 @@
Fixed several issues with debug dump log
Updated command reference: https://github.com/k3ng/k3ng_rotator_controller/wiki/820-Command-Reference
2020.05.08.01
Made improvement to rotator_k3ngdisplay.cpp to reduce LCD bus traffic from cursor positioning
All library files should be placed in directories likes \sketchbook\libraries\library1\ , \sketchbook\libraries\library2\ , etc.
Anything rotator_*.* should be in the ino directory!
@ -491,7 +493,7 @@
*/
#define CODE_VERSION "2020.05.07.01"
#define CODE_VERSION "2020.05.08.01"
#include <avr/pgmspace.h>
#include <EEPROM.h>
@ -4244,6 +4246,66 @@ void service_nextion_display(){
}
#endif // defined(FEATURE_NEXTION_DISPLAY_OLD)
// --------------------------------------------------------------
// #if defined(FEATURE_NEXTION_DISPLAY)
// uint16_t recvNextionRetString(char *buffer, uint16_t len, uint32_t timeout){
// uint16_t ret = 0;
// bool received_start_byte = false;
// uint8_t counter_0xff_bytes = 0;
// String temp = String("");
// uint8_t serial_byte = 0;
// unsigned long start;
// #if defined(DEBUG_NEXTION_DISPLAY_SERIAL_RECV)
// debug.print("\r\nrecvNextionRetString: rcv:");
// #endif
// start = millis();
// while ((millis() - start) <= timeout){
// while (nexSerial.available()){
// serial_byte = nexSerial.read();
// #if defined(DEBUG_NEXTION_DISPLAY_SERIAL_RECV)
// debug.write(serial_byte);
// #endif
// if (received_start_byte){
// if (serial_byte == 0xFF){
// counter_0xff_bytes++;
// if (counter_0xff_bytes >= 3){
// break;
// }
// } else {
// temp += (char)serial_byte;
// }
// } else if (serial_byte == 0x70){ //0x70 is starting byte that is discarded
// received_start_byte = true;
// }
// }
// if (counter_0xff_bytes >= 3){
// break;
// }
// }
// #if defined(DEBUG_NEXTION_DISPLAY_SERIAL_RECV)
// debug.println("$");
// if (millis() - start > timeout){
// debug.println("\r\nrecvNextionRetString: timeout");
// }
// #endif
// ret = temp.length();
// if (ret > len){
// ret = len;
// }
// strncpy(buffer, temp.c_str(), ret);
// return ret;
// }
// #endif //FEATURE_NEXTION_DISPLAY
// --------------------------------------------------------------
#if defined(FEATURE_NEXTION_DISPLAY)
void sendNextionCommand(const char* send_command){
@ -4259,65 +4321,7 @@ void sendNextionCommand(const char* send_command){
nexSerial.write(0xFF);
}
#endif //FEATURE_NEXTION_DISPLAY
// --------------------------------------------------------------
#if defined(FEATURE_NEXTION_DISPLAY)
uint16_t recvNextionRetString(char *buffer, uint16_t len, uint32_t timeout){
uint16_t ret = 0;
bool received_start_byte = false;
uint8_t counter_0xff_bytes = 0;
String temp = String("");
uint8_t serial_byte = 0;
unsigned long start;
#if defined(DEBUG_NEXTION_DISPLAY_SERIAL_RECV)
debug.print("\r\nrecvNextionRetString: rcv:");
#endif
start = millis();
while ((millis() - start) <= timeout){
while (nexSerial.available()){
serial_byte = nexSerial.read();
#if defined(DEBUG_NEXTION_DISPLAY_SERIAL_RECV)
debug.write(serial_byte);
#endif
if (received_start_byte){
if (serial_byte == 0xFF){
counter_0xff_bytes++;
if (counter_0xff_bytes >= 3){
break;
}
} else {
temp += (char)serial_byte;
}
} else if (serial_byte == 0x70){ //0x70 is starting byte that is discarded
received_start_byte = true;
}
}
if (counter_0xff_bytes >= 3){
break;
}
}
#if defined(DEBUG_NEXTION_DISPLAY_SERIAL_RECV)
debug.println("$");
if (millis() - start > timeout){
debug.println("\r\nrecvNextionRetString: timeout");
}
#endif
ret = temp.length();
if (ret > len){
ret = len;
}
strncpy(buffer, temp.c_str(), ret);
return ret;
}
#endif //FEATURE_NEXTION_DISPLAY
// --------------------------------------------------------------
#if defined(FEATURE_NEXTION_DISPLAY)
void service_nextion_display(){
@ -4681,11 +4685,6 @@ TODO:
Azimuth Display Mode: Raw Degrees
Azimuth Display Mode: +Overlap
New Extended Commands
\?AO - Azimuth Full CCW Calibration
\?AF - Azimuth Full CW Calibration
\?EO - Elevation Full DOWN Calibration
\?EF - Elevation Full UP Calibration
*/
//zzzzzz
@ -4809,7 +4808,7 @@ TODO:
// gAzR
dtostrf(raw_azimuth / LCD_HEADING_MULTIPLIER, 1, 0, workstring1);
strcpy(workstring2,"gAz=");
strcpy(workstring2,"gAzR=");
strcat(workstring2,workstring1);
sendNextionCommand(workstring2);

View File

@ -299,14 +299,18 @@ void K3NGdisplay::update(){
// update the screen with changes that are pending in screen_buffer_pending
static int round_robin_refresh_position = 0;
//static int round_robin_refresh_position = 0;
byte wrote_to_lcd_last_loop = 0;
lcd.noCursor();
lcd.setCursor(0,0);
for (int x = 0;x < (display_columns*display_rows);x++){
if ((screen_buffer_live[x] != screen_buffer_pending[x]) || (x == round_robin_refresh_position)){ // do we have a new character to put on the screen ?
lcd.setCursor(Xposition(x),Yposition(x));
if ((screen_buffer_live[x] != screen_buffer_pending[x]) /*|| (x == round_robin_refresh_position)*/){ // do we have a new character to put on the screen ?
if (!wrote_to_lcd_last_loop){
lcd.setCursor(Xposition(x),Yposition(x));
}
if (screen_buffer_attributes_pending[x] & ATTRIBUTE_BLINK){ // does this character have the blink attribute
if (current_blink_state){
lcd.print(screen_buffer_pending[x]);
@ -318,24 +322,30 @@ void K3NGdisplay::update(){
}
screen_buffer_live[x] = screen_buffer_pending[x];
screen_buffer_attributes_live[x] = screen_buffer_attributes_pending[x];
wrote_to_lcd_last_loop = 1;
} else { // not a new character, do we have live character on the screen to blink?
if (last_blink_state != current_blink_state){
if (screen_buffer_attributes_live[x] & ATTRIBUTE_BLINK){
lcd.setCursor(Xposition(x),Yposition(x));
if (!wrote_to_lcd_last_loop){
lcd.setCursor(Xposition(x),Yposition(x));
}
if (current_blink_state){
lcd.print(screen_buffer_live[x]);
} else {
lcd.print(' ');
}
lcd.print(screen_buffer_live[x]);
} else {
lcd.print(' ');
}
wrote_to_lcd_last_loop = 1;
}
} else {
wrote_to_lcd_last_loop = 0;
}
}
}
round_robin_refresh_position++;
if (round_robin_refresh_position >= (display_columns*display_rows)){
round_robin_refresh_position = 0;
}
// round_robin_refresh_position++;
// if (round_robin_refresh_position >= (display_columns*display_rows)){
// round_robin_refresh_position = 0;
// }
last_blink_state = current_blink_state;