From 494320b1911cf5ecb0b9b7e8df978dde4c4a2fd0 Mon Sep 17 00:00:00 2001 From: feelfree69 Date: Thu, 5 Mar 2026 08:55:51 +0100 Subject: [PATCH] Resolve review comments --- httpd/page_impl.c | 3 +-- rtl837x_flash.c | 38 +++++++++++++++++++------------------- rtl837x_flash.h | 2 ++ rtlplayground.c | 11 +---------- 4 files changed, 23 insertions(+), 31 deletions(-) diff --git a/httpd/page_impl.c b/httpd/page_impl.c index f605529..9769311 100644 --- a/httpd/page_impl.c +++ b/httpd/page_impl.c @@ -17,7 +17,6 @@ // #define DEBUG #include "debug.h" -extern __xdata char flash_size_str[10]; #define L2_MAX_TRANSFER 30 @@ -241,7 +240,7 @@ void send_basic_info(void) slen += strtox(outbuf + slen, "\",\"hw_ver\":\""); slen += strtox(outbuf + slen, machine.machine_name); slen += strtox(outbuf + slen, "\",\"flash_size\":\""); - string_to_html(flash_size_str); + string_to_html(get_flash_size_str()); slen += strtox(outbuf + slen, "\",\"sfp_slot_0\":\""); send_sfp_info(0); diff --git a/rtl837x_flash.c b/rtl837x_flash.c index fa73743..42a6cf3 100644 --- a/rtl837x_flash.c +++ b/rtl837x_flash.c @@ -9,8 +9,11 @@ __xdata uint8_t dio_enabled; __xdata struct flash_region_t flash_region; + __xdata uint32_t flash_size; -__xdata char flash_size_str[16]; +__xdata uint8_t flash_capacity_code; +__code char * __code flash_size_text[] = { "256 KB", "512 KB", "1 MB", "2 MB", "4 MB", "8 MB", "16 MB" }; + // For the flash commands, see e.g. Windbond W25Q32JV datasheet #define CMD_WRITE_STATUS 0x01 @@ -135,6 +138,13 @@ void flash_read_uid(void) flash_configure_mmio(); } +__code char* get_flash_size_str(void) +{ + if (flash_capacity_code >= 0x12 && flash_capacity_code <= 0x18) + return flash_size_text[flash_capacity_code - 0x12]; + else + return "unknown"; +} void flash_read_jedecid(void) { @@ -151,26 +161,16 @@ void flash_read_jedecid(void) SFR_FLASH_EXEC_GO = 1; while(SFR_FLASH_EXEC_BUSY); - print_string("Maufacturer ID: 0x"); + print_string("Flash information:\n"); + print_string(" Manufacturer ID: 0x"); print_byte(SFR_FLASH_DATA0); - print_string("\nMemory Type: 0x"); + print_string("\n Memory Type: 0x"); print_byte(SFR_FLASH_DATA8); - print_string("\nCapacity: 0x"); - uint8_t cap = SFR_FLASH_DATA16; - flash_size = 1UL << cap; - print_byte(cap); - print_string(" = "); - switch(cap) { - case 0x12: memcpyc(flash_size_str, "256 KB", 7); break; - case 0x13: memcpyc(flash_size_str, "512 KB", 7); break; - case 0x14: memcpyc(flash_size_str, "1 MB", 5); break; - case 0x15: memcpyc(flash_size_str, "2 MB", 5); break; - case 0x16: memcpyc(flash_size_str, "4 MB", 5); break; - case 0x17: memcpyc(flash_size_str, "8 MB", 5); break; - case 0x18: memcpyc(flash_size_str, "16 MB", 6); break; - default: memcpyc(flash_size_str, "unknown", 8); break; - } - print_string_x(flash_size_str); write_char('\n'); + print_string("\n Capacity: 0x"); + flash_capacity_code = SFR_FLASH_DATA16; + flash_size = 1UL << flash_capacity_code; + print_byte(flash_capacity_code); + print_string(" = "); print_string(get_flash_size_str()); write_char('\n'); flash_configure_mmio(); } diff --git a/rtl837x_flash.h b/rtl837x_flash.h index cad66b0..2267b23 100644 --- a/rtl837x_flash.h +++ b/rtl837x_flash.h @@ -10,4 +10,6 @@ void flash_read_security(void); void flash_sector_erase(void); void flash_read_bulk(__xdata uint8_t *dst); void flash_write_bytes(__xdata uint8_t *ptr); +__code char* get_flash_size_str(void); + #endif diff --git a/rtlplayground.c b/rtlplayground.c index 22155a7..c58a761 100644 --- a/rtlplayground.c +++ b/rtlplayground.c @@ -25,7 +25,6 @@ extern __code const struct machine machine; extern __xdata uint32_t flash_size; -extern __xdata char flash_size_str[10]; extern __xdata uint16_t crc_value; __xdata struct machine_runtime machine_detected; @@ -241,14 +240,6 @@ uint16_t strtox(register __xdata uint8_t *dst, register __code const char *s) return dst - b; } -uint16_t strcpy(register __xdata uint8_t *dst, register const char *s) -{ - __xdata uint8_t *b = dst; - while (*s) - *dst++ = *s++; - *dst = 0; - return dst - b; -} uint16_t strlen(register __code const char *s) { @@ -1871,7 +1862,7 @@ void check_and_flash_update_image(void) { flash_read_jedecid(); // This initializes also __xdata flash_size variable - print_string_x(flash_size_str); print_string(" flash size detected. (1 MB is needed for image updating)\n"); + print_string(get_flash_size_str()); print_string(" flash size detected. (1 MB is needed for image updating)\n"); if (flash_size < FIRMWARE_UPLOAD_START*2) { print_string("Flash too small for updating; skipping update check\n"); return;