mirror of
https://github.com/openshwprojects/OpenBK7231T_App.git
synced 2026-02-07 02:55:26 +00:00
RTL8710C/RTL8720C support (#1468)
* Move delay us and wdt to hals, update workflow * rtl8720c initial * move uart to hal * rtl uart * obk adjustments * sdk adjustments, fix ota * add some features * fix some warnings * esp uart + tr6260/esp tcp_msl * add bl0937, adjust ota * enable artifacts merge * add forgotten ln882h delay * fix mqtt, pwm on boot * irq fix * fix wifi disconnect * update sdk, change lfs location and size * Update Makefile
This commit is contained in:
committed by
GitHub
parent
8fba7dd31e
commit
2a9a7270f2
@ -40,6 +40,10 @@ static char SUBMIT_AND_END_FORM[] = "<br><input type=\"submit\" value=\"Submit\"
|
||||
#include "temp_detect_pub.h"
|
||||
#elif defined(PLATFORM_LN882H)
|
||||
#elif defined(PLATFORM_TR6260)
|
||||
#elif defined(PLATFORM_RTL87X0C)
|
||||
#include "hal_sys_ctrl.h"
|
||||
extern hal_reset_reason_t reset_reason;
|
||||
extern uint32_t current_fw_idx;
|
||||
#elif defined(PLATFORM_ESPIDF)
|
||||
#include "esp_wifi.h"
|
||||
#include "esp_system.h"
|
||||
@ -782,7 +786,9 @@ int http_fn_index(http_request_t* request) {
|
||||
|
||||
// display temperature - thanks to giedriuslt
|
||||
// only in Normal mode, and if boot is not failing
|
||||
#ifndef NO_CHIP_TEMPERATURE
|
||||
hprintf255(request, "<h5>Chip temperature: %.1f°C</h5>", g_wifi_temperature);
|
||||
#endif
|
||||
|
||||
inputName = CFG_GetPingHost();
|
||||
if (inputName && *inputName && CFG_GetPingDisconnectedSecondsToRestart()) {
|
||||
@ -875,6 +881,17 @@ typedef enum {
|
||||
default: break;
|
||||
}
|
||||
hprintf255(request, "<h5>Reboot reason: %i - %s</h5>", reason, s);
|
||||
#elif PLATFORM_RTL87X0C
|
||||
const char* s = "Unk";
|
||||
switch(reset_reason)
|
||||
{
|
||||
case HAL_RESET_REASON_POWER_ON: s = "Pwr"; break;
|
||||
case HAL_RESET_REASON_SOFTWARE: s = "Soft"; break;
|
||||
case HAL_RESET_REASON_WATCHDOG: s = "Wdt"; break;
|
||||
default: break;
|
||||
}
|
||||
hprintf255(request, "<h5>Reboot reason: %i - %s</h5>", reset_reason, s);
|
||||
hprintf255(request, "<h5>Current fw: FW%i</h5>", current_fw_idx);
|
||||
#endif
|
||||
if (CFG_GetMQTTHost()[0] == 0) {
|
||||
hprintf255(request, "<h5>MQTT State: not configured<br>");
|
||||
@ -1308,6 +1325,8 @@ int http_fn_cfg_wifi(http_request_t* request) {
|
||||
}
|
||||
#elif PLATFORM_TR6260
|
||||
poststr(request, "TODO TR6260<br>");
|
||||
#elif defined(PLATFORM_RTL87X0C)
|
||||
poststr(request, "TODO RTL87X0C<br>");
|
||||
#else
|
||||
#error "Unknown platform"
|
||||
poststr(request, "Unknown platform<br>");
|
||||
@ -2990,6 +3009,7 @@ void OTA_RequestDownloadFromHTTP(const char* s) {
|
||||
|
||||
#elif PLATFORM_ESPIDF
|
||||
#elif PLATFORM_TR6260
|
||||
#elif PLATFORM_RTL87X0C
|
||||
#elif PLATFORM_W600 || PLATFORM_W800
|
||||
t_http_fwup(s);
|
||||
#elif PLATFORM_XR809
|
||||
|
||||
@ -213,18 +213,21 @@ static void tcp_server_thread(beken_thread_arg_t arg)
|
||||
socklen_t addr_len = sizeof(source_addr);
|
||||
|
||||
int new_idx = 0;
|
||||
for(int i = 0; i < max_socks; ++i)
|
||||
{
|
||||
if(sock[i].isCompleted)
|
||||
{
|
||||
if(sock[i].thread != NULL)
|
||||
{
|
||||
rtos_delete_thread(&sock[i].thread);
|
||||
sock[i].thread = NULL;
|
||||
}
|
||||
sock[i].isCompleted = false;
|
||||
sock[i].fd = INVALID_SOCK;
|
||||
}
|
||||
}
|
||||
for(new_idx = 0; new_idx < max_socks; ++new_idx)
|
||||
{
|
||||
if(sock[new_idx].isCompleted)
|
||||
{
|
||||
if(sock[new_idx].thread != NULL)
|
||||
{
|
||||
rtos_delete_thread(&sock[new_idx].thread);
|
||||
sock[new_idx].thread = NULL;
|
||||
}
|
||||
sock[new_idx].isCompleted = false;
|
||||
sock[new_idx].fd = INVALID_SOCK;
|
||||
}
|
||||
if(sock[new_idx].fd == INVALID_SOCK)
|
||||
{
|
||||
break;
|
||||
|
||||
@ -53,6 +53,20 @@ uint32_t flash_read(uint32_t flash, uint32_t addr, void* buf, uint32_t size);
|
||||
|
||||
#elif PLATFORM_ESPIDF
|
||||
|
||||
#elif PLATFORM_RTL87X0C
|
||||
|
||||
#include "flash_api.h"
|
||||
#include "device_lock.h"
|
||||
#include "ota_8710c.h"
|
||||
#include "sys_api.h"
|
||||
|
||||
extern flash_t flash;
|
||||
extern uint32_t sys_update_ota_get_curr_fw_idx(void);
|
||||
extern uint32_t sys_update_ota_prepare_addr(void);
|
||||
extern void sys_disable_fast_boot(void);
|
||||
extern void get_fw_info(uint32_t* targetFWaddr, uint32_t* currentFWaddr, uint32_t* fw1_sn, uint32_t* fw2_sn);
|
||||
static flash_t flash_ota;
|
||||
|
||||
#else
|
||||
|
||||
extern UINT32 flash_read(char* user_buf, UINT32 count, UINT32 address);
|
||||
@ -253,6 +267,8 @@ static int http_rest_post(http_request_t* request) {
|
||||
return http_rest_post_flash(request, -1, -1);
|
||||
#elif PLATFORM_ESPIDF
|
||||
return http_rest_post_flash(request, -1, -1);
|
||||
#elif PLATFORM_RTL87X0C
|
||||
return http_rest_post_flash(request, 0, -1);
|
||||
#else
|
||||
// TODO
|
||||
ADDLOG_DEBUG(LOG_FEATURE_API, "No OTA");
|
||||
@ -2054,6 +2070,146 @@ static int http_rest_post_flash(http_request_t* request, int startaddr, int maxa
|
||||
return -1;
|
||||
}
|
||||
|
||||
#elif PLATFORM_RTL87X0C
|
||||
|
||||
uint32_t NewFWLen = 0, NewFWAddr = 0;
|
||||
uint32_t address = 0;
|
||||
uint32_t curr_fw_idx = 0;
|
||||
uint32_t flash_checksum = 0;
|
||||
uint32_t targetFWaddr;
|
||||
uint32_t currentFWaddr;
|
||||
uint32_t fw1_sn;
|
||||
uint32_t fw2_sn;
|
||||
_file_checksum file_checksum;
|
||||
file_checksum.u = 0;
|
||||
unsigned char sig_backup[32];
|
||||
int ret = 1;
|
||||
|
||||
if(request->contentLength >= 0)
|
||||
{
|
||||
towrite = request->contentLength;
|
||||
}
|
||||
NewFWAddr = sys_update_ota_prepare_addr();
|
||||
if(NewFWAddr == -1)
|
||||
{
|
||||
ret = -1;
|
||||
goto update_ota_exit;
|
||||
}
|
||||
get_fw_info(&targetFWaddr, ¤tFWaddr, &fw1_sn, &fw2_sn);
|
||||
ADDLOG_INFO(LOG_FEATURE_OTA, "Current FW addr: 0x%08X, target FW addr: 0x%08X, fw1 sn: %u, fw2 sn: %u", currentFWaddr, targetFWaddr, fw1_sn, fw2_sn);
|
||||
curr_fw_idx = sys_update_ota_get_curr_fw_idx();
|
||||
ADDLOG_INFO(LOG_FEATURE_OTA, "Current firmware index is %d", curr_fw_idx);
|
||||
int reserase = update_ota_erase_upg_region(towrite, 0, NewFWAddr);
|
||||
NewFWLen = towrite;
|
||||
if(reserase == -1)
|
||||
{
|
||||
ADDLOG_ERROR(LOG_FEATURE_OTA, "Erase failed");
|
||||
ret = -1;
|
||||
goto update_ota_exit;
|
||||
}
|
||||
if(NewFWAddr != ~0x0)
|
||||
{
|
||||
address = NewFWAddr;
|
||||
ADDLOG_INFO(LOG_FEATURE_OTA, "Start to read data %i bytes", NewFWLen);
|
||||
}
|
||||
do
|
||||
{
|
||||
// back up signature and only write it to flash till the end of OTA
|
||||
if(startaddr < 32)
|
||||
{
|
||||
memcpy(sig_backup + startaddr, writebuf, (startaddr + writelen > 32 ? (32 - startaddr) : writelen));
|
||||
memset(writebuf, 0xFF, (startaddr + writelen > 32 ? (32 - startaddr) : writelen));
|
||||
ADDLOG_DEBUG(LOG_FEATURE_OTA, "sig_backup for% d bytes from index% d", (startaddr + writelen > 32 ? (32 - startaddr) : writelen), startaddr);
|
||||
}
|
||||
|
||||
device_mutex_lock(RT_DEV_LOCK_FLASH);
|
||||
if(flash_burst_write(&flash_ota, address + startaddr, writelen, (uint8_t*)writebuf) < 0)
|
||||
{
|
||||
ADDLOG_ERROR(LOG_FEATURE_OTA, "Write stream failed");
|
||||
device_mutex_unlock(RT_DEV_LOCK_FLASH);
|
||||
ret = -1;
|
||||
goto update_ota_exit;
|
||||
}
|
||||
device_mutex_unlock(RT_DEV_LOCK_FLASH);
|
||||
|
||||
rtos_delay_milliseconds(10);
|
||||
ADDLOG_DEBUG(LOG_FEATURE_OTA, "Writelen %i at %i", writelen, total);
|
||||
total += writelen;
|
||||
startaddr += writelen;
|
||||
towrite -= writelen;
|
||||
|
||||
// checksum attached at file end
|
||||
if(startaddr + writelen > NewFWLen - 4)
|
||||
{
|
||||
file_checksum.c[0] = writebuf[writelen - 4];
|
||||
file_checksum.c[1] = writebuf[writelen - 3];
|
||||
file_checksum.c[2] = writebuf[writelen - 2];
|
||||
file_checksum.c[3] = writebuf[writelen - 1];
|
||||
}
|
||||
if(towrite > 0)
|
||||
{
|
||||
writebuf = request->received;
|
||||
writelen = recv(request->fd, writebuf, request->receivedLenmax, 0);
|
||||
if(writelen < 0)
|
||||
{
|
||||
ADDLOG_DEBUG(LOG_FEATURE_OTA, "recv returned %d - end of data - remaining %d", writelen, towrite);
|
||||
}
|
||||
}
|
||||
} while((towrite > 0) && (writelen >= 0));
|
||||
ADDLOG_DEBUG(LOG_FEATURE_OTA, "%d total bytes written, verifying checksum", total);
|
||||
uint8_t* buf = (uint8_t*)os_malloc(2048);
|
||||
memset(buf, 0, 2048);
|
||||
// read flash data back and calculate checksum
|
||||
for(int i = 0; i < NewFWLen; i += 2048)
|
||||
{
|
||||
int k;
|
||||
int rlen = (startaddr - 4 - i) > 2048 ? 2048 : (startaddr - 4 - i);
|
||||
device_mutex_lock(RT_DEV_LOCK_FLASH);
|
||||
flash_stream_read(&flash_ota, NewFWAddr + i, rlen, buf);
|
||||
device_mutex_unlock(RT_DEV_LOCK_FLASH);
|
||||
for(k = 0; k < rlen; k++)
|
||||
{
|
||||
if(i + k < 32)
|
||||
{
|
||||
flash_checksum += sig_backup[i + k];
|
||||
}
|
||||
else
|
||||
{
|
||||
flash_checksum += buf[k];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ADDLOG_INFO(LOG_FEATURE_OTA, "flash checksum 0x%8x attached checksum 0x%8x", flash_checksum, file_checksum.u);
|
||||
|
||||
if(file_checksum.u != flash_checksum)
|
||||
{
|
||||
ADDLOG_ERROR(LOG_FEATURE_OTA, "The checksum is wrong!");
|
||||
ret = -1;
|
||||
goto update_ota_exit;
|
||||
}
|
||||
ret = update_ota_signature(sig_backup, NewFWAddr);
|
||||
if(ret == -1)
|
||||
{
|
||||
ADDLOG_ERROR(LOG_FEATURE_OTA, "Update signature fail");
|
||||
goto update_ota_exit;
|
||||
}
|
||||
update_ota_exit:
|
||||
if(ret != -1)
|
||||
{
|
||||
device_mutex_lock(RT_DEV_LOCK_FLASH);
|
||||
flash_write_word(&flash, targetFWaddr, 4294967295);
|
||||
flash_write_word(&flash, currentFWaddr, 0);
|
||||
device_mutex_unlock(RT_DEV_LOCK_FLASH);
|
||||
|
||||
sys_disable_fast_boot();
|
||||
if(buf) free(buf);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(buf) free(buf);
|
||||
return http_rest_error(request, ret, "error");
|
||||
}
|
||||
#else
|
||||
|
||||
init_ota(startaddr);
|
||||
@ -2092,6 +2248,7 @@ static int http_rest_post_flash(http_request_t* request, int startaddr, int maxa
|
||||
http_setup(request, httpMimeTypeJson);
|
||||
hprintf255(request, "{\"size\":%d}", total);
|
||||
poststr(request, NULL);
|
||||
CFG_IncrementOTACount();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -2155,6 +2312,10 @@ static int http_rest_get_flash(http_request_t* request, int startaddr, int len)
|
||||
#elif PLATFORM_LN882H || PLATFORM_ESPIDF || PLATFORM_TR6260
|
||||
// TODO:LN882H flash read?
|
||||
res = 0;
|
||||
#elif PLATFORM_RTL87X0C
|
||||
device_mutex_lock(RT_DEV_LOCK_FLASH);
|
||||
flash_stream_read(&flash, startaddr, readlen, (uint8_t*)buffer);
|
||||
device_mutex_unlock(RT_DEV_LOCK_FLASH);
|
||||
#else
|
||||
res = flash_read((char*)buffer, readlen, startaddr);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user