Skip to content

Commit 06e3ab3

Browse files
committed
Improve text printing method for display buffer
1 parent fad26ce commit 06e3ab3

File tree

5 files changed

+29
-36
lines changed

5 files changed

+29
-36
lines changed

SSD1306/Adafruit_GFX.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,12 +356,19 @@ void Adafruit_GFX_drawBitmap(int16_t x, int16_t y,
356356
}
357357
}
358358

359-
void Adafruit_GFX_print(char * buffer) {
359+
static bool _updating_display_buffer = false;
360+
void Adafruit_GFX_print(char * buffer, int16_t x, int16_t y) {
361+
if (_updating_display_buffer) {
362+
return;
363+
}
364+
_updating_display_buffer = true;
365+
Adafruit_GFX_setCursor(x,y);
360366
int index = 0;
361367
while( buffer[index] != 0 )
362368
{
363369
Adafruit_GFX_write((uint8_t)buffer[index++]);
364370
}
371+
_updating_display_buffer = false;
365372
}
366373

367374
void Adafruit_GFX_write(uint8_t c) {

SSD1306/Adafruit_GFX.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ void Adafruit_GFX_drawBitmap(int16_t x, int16_t y,
8181
void Adafruit_GFX_drawChar(int16_t x, int16_t y, unsigned char c,
8282
uint16_t color, uint16_t bg, uint8_t size);
8383

84-
void Adafruit_GFX_print(char * buffer);
84+
void Adafruit_GFX_print(char * buffer, int16_t x, int16_t y);
8585
void Adafruit_GFX_write(uint8_t);
8686

8787
void Adafruit_GFX_setCursor(int16_t x, int16_t y);

command_interface.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ void command_interface_process_byte(char incoming)
241241
}
242242
else if(strncmp(command_input_buffer, "version", 7) == 0)
243243
{
244-
sprintf((char *)command_response_buffer, "version,0.9.0,beta");
244+
sprintf((char *)command_response_buffer, "version,0.9.1,beta");
245245
m_ble_tx_logbuffer(command_response_buffer, strlen((const char *)command_response_buffer));
246246
}
247247
else if(strncmp(command_input_buffer, "getcfg", 6) == 0)

main.c

Lines changed: 18 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -511,9 +511,8 @@ uint8_t lfs_free_space_check(void)
511511
NRF_LOG_FLUSH();
512512

513513
#if HAS_DISPLAY
514-
Adafruit_GFX_setCursor(88,16);
515514
snprintf(display_text_buffer,4,"%02d%%", lfs_percent_free);
516-
Adafruit_GFX_print(display_text_buffer);
515+
Adafruit_GFX_print(display_text_buffer, 88, 16);
517516
update_display = true;
518517
#endif
519518

@@ -809,8 +808,7 @@ static void pm_evt_handler(pm_evt_t const * p_evt)
809808
is_connection_secure = true;
810809
melody_play(MELODY_BLE_SUCCESS, true); // Play BLE Success sound
811810
// Notify user connection successful
812-
Adafruit_GFX_setCursor(64, 0);
813-
Adafruit_GFX_print("BLE OK");
811+
Adafruit_GFX_print("BLE OK", 64, 0);
814812
update_display = true;
815813
}
816814
else
@@ -828,8 +826,7 @@ static void pm_evt_handler(pm_evt_t const * p_evt)
828826
case PM_EVT_CONN_SEC_FAILED:
829827
m_conn_handle = BLE_CONN_HANDLE_INVALID;
830828
// Notify user connection failed
831-
Adafruit_GFX_setCursor(64, 0);
832-
Adafruit_GFX_print("BLEPIN");
829+
Adafruit_GFX_print("BLEPIN", 64, 0);
833830
update_display = true;
834831
melody_play(MELODY_BLE_FAIL, false); // Play BLE Failed sound. Do not interrupt (may happen repeatedly)
835832
break;
@@ -1546,9 +1543,8 @@ void process_packet_vesc(unsigned char *data, unsigned int len) {
15461543
++esc_rx_cnt;
15471544
#if HAS_DISPLAY
15481545
// Update fault code count on display
1549-
Adafruit_GFX_setCursor(106,16);
15501546
sprintf(display_text_buffer,"F%02d", recent_fault_index);
1551-
Adafruit_GFX_print(display_text_buffer);
1547+
Adafruit_GFX_print(display_text_buffer, 106, 16);
15521548

15531549
// Move dot each time we process an ESC VALUES packet
15541550
if (esc_rx_cnt % 2 == 0) {
@@ -1664,11 +1660,12 @@ static void logging_timer_handler(void *p_context) {
16641660
--melody_snooze_seconds;
16651661
}
16661662

1663+
#if HAS_DISPLAY
16671664
// Write GPS status to display
1668-
Adafruit_GFX_setCursor(64,8);
16691665
snprintf(gps_status, sizeof(gps_status), "GPS %02d S%01d%01d", hgps.seconds, hgps.is_valid, hgps.fix);
1670-
Adafruit_GFX_print(gps_status);
1666+
Adafruit_GFX_print(gps_status, 64, 8);
16711667
update_display = true;
1668+
#endif
16721669

16731670
// If logging is active and GPS is valid and fixed log GPS data
16741671
if (log_file_active && hgps.is_valid && hgps.fix > 0)
@@ -1939,9 +1936,8 @@ void display_file_count(void)
19391936
NRF_LOG_INFO("display_file_count");
19401937
NRF_LOG_FLUSH();
19411938
#if HAS_DISPLAY
1942-
Adafruit_GFX_setCursor(0,8);
19431939
sprintf(display_text_buffer,"%d files ", lfs_file_count);
1944-
Adafruit_GFX_print(display_text_buffer);
1940+
Adafruit_GFX_print(display_text_buffer, 0, 8);
19451941
update_display = true;
19461942
#endif
19471943
}
@@ -2042,9 +2038,8 @@ void qspi_init()
20422038
NRF_LOG_INFO("nrf_drv_qspi_init response %d", err_code);
20432039
NRF_LOG_FLUSH();
20442040
#if HAS_DISPLAY
2045-
Adafruit_GFX_setCursor(0,16);
20462041
sprintf(display_text_buffer,"QSPI Init Failed");
2047-
Adafruit_GFX_print(display_text_buffer);
2042+
Adafruit_GFX_print(display_text_buffer, 0, 16);
20482043
SSD1306_display();
20492044
#endif
20502045
while(1);
@@ -2063,9 +2058,8 @@ int log_file_stop()
20632058
log_file_active = false;
20642059

20652060
#if HAS_DISPLAY
2066-
Adafruit_GFX_setCursor(0,16);
20672061
sprintf(display_text_buffer,"Log inactive");
2068-
Adafruit_GFX_print(display_text_buffer);
2062+
Adafruit_GFX_print(display_text_buffer, 0, 16);
20692063
update_display = true;
20702064
#endif
20712065
// Clear log messages for delta processing
@@ -2134,9 +2128,8 @@ void log_file_start()
21342128
++lfs_file_count;
21352129
display_file_count();
21362130
#if HAS_DISPLAY
2137-
Adafruit_GFX_setCursor(0,16);
21382131
sprintf(display_text_buffer,"Log active ");
2139-
Adafruit_GFX_print(display_text_buffer);
2132+
Adafruit_GFX_print(display_text_buffer, 0, 16);
21402133
update_display = true;
21412134
#endif
21422135
// Write header data
@@ -2207,8 +2200,7 @@ void littlefs_init()
22072200
NRF_LOG_WARNING("LittleFS format (%d) and mount (%d) completed", lfs_format_response, lfs_mount_response);
22082201
user_cfg_set(false);
22092202
#if HAS_DISPLAY
2210-
Adafruit_GFX_setCursor(45,0);
2211-
Adafruit_GFX_print("*F");
2203+
Adafruit_GFX_print("*F", 45, 0);
22122204
SSD1306_display();
22132205
#endif
22142206
melody_play(MELODY_GOTCHI_FAULT, true); // Play robogotchi fault, interrupt
@@ -2283,9 +2275,8 @@ void littlefs_init()
22832275

22842276
#if HAS_DISPLAY
22852277
display_file_count();
2286-
Adafruit_GFX_setCursor(0,16);
22872278
sprintf(display_text_buffer,"Log inactive");
2288-
Adafruit_GFX_print(display_text_buffer);
2279+
Adafruit_GFX_print(display_text_buffer, 0, 16);
22892280
update_display = true;
22902281
#endif
22912282
}
@@ -2359,8 +2350,7 @@ void process_user_input()
23592350
sd_ble_gap_adv_stop(m_advertising.adv_handle);
23602351
advertising_start(true);
23612352
// Notify user
2362-
Adafruit_GFX_setCursor(64, 0);
2363-
Adafruit_GFX_print("CLEARD");
2353+
Adafruit_GFX_print("CLEARD", 64, 0);
23642354
update_display = true;
23652355
}
23662356
// If user pressed button for less than 5 seconds display the PIN code
@@ -2370,14 +2360,12 @@ void process_user_input()
23702360
if (is_pin_displayed)
23712361
{
23722362
is_pin_displayed = false;
2373-
Adafruit_GFX_setCursor(64, 0);
2374-
Adafruit_GFX_print(" ");
2363+
Adafruit_GFX_print(" ", 64, 0);
23752364
}
23762365
else
23772366
{
23782367
is_pin_displayed = true;
2379-
Adafruit_GFX_setCursor(64, 0);
2380-
Adafruit_GFX_print(ble_pin);
2368+
Adafruit_GFX_print(ble_pin, 64, 0);
23812369
}
23822370

23832371
update_display = true;
@@ -2433,7 +2421,7 @@ int main(void) {
24332421
char freetitle[] = "FreeSK8";
24342422
Adafruit_GFX_setTextSize(1);
24352423
Adafruit_GFX_setTextColor(1,0);
2436-
Adafruit_GFX_print(freetitle);
2424+
Adafruit_GFX_print(freetitle, 0, 0);
24372425
SSD1306_display();
24382426

24392427
NRF_LOG_INFO("OLED Initialized");
@@ -2456,8 +2444,7 @@ int main(void) {
24562444
NRF_LOG_FLUSH();
24572445

24582446
#if HAS_DISPLAY
2459-
Adafruit_GFX_setCursor(0,8);
2460-
Adafruit_GFX_print("RTC OK");
2447+
Adafruit_GFX_print("RTC OK", 0, 8);
24612448
SSD1306_display();
24622449

24632450
if(isButtonPressed)

minigame.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,7 @@ void play_game(){
183183

184184
// score
185185
sprintf(text,"%d",d);
186-
Adafruit_GFX_setCursor(100, 0);
187-
Adafruit_GFX_print(text);
186+
Adafruit_GFX_print(text, 100, 0);
188187

189188
// parallax clouds
190189
Adafruit_GFX_drawBitmap(128 -(d%128),cloud_1_y,cloud_1,24,7,WHITE);

0 commit comments

Comments
 (0)