mirror of
https://github.com/openshwprojects/OpenBK7231T_App.git
synced 2025-10-29 11:33:20 +00:00
rda5981 ota (#1839)
* rda5981 ota * easyflash and lfs * adjust offsets * mac change
This commit is contained in:
parent
5a83d0268b
commit
365a0dbcf9
2
.github/workflows/workflow.yaml
vendored
2
.github/workflows/workflow.yaml
vendored
@ -261,7 +261,7 @@ jobs:
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- uses: actions/setup-python@v5
|
||||
if: ${{ matrix.platform == 'OpenBL602' || matrix.platform == 'OpenRTL8721DA' || matrix.platform == 'OpenRTL8720E' }}
|
||||
if: ${{ matrix.platform == 'OpenBL602' || matrix.platform == 'OpenRTL8721DA' || matrix.platform == 'OpenRTL8720E' || matrix.platform == 'OpenRDA5981' }}
|
||||
with:
|
||||
python-version: '3.10'
|
||||
architecture: 'x64'
|
||||
|
||||
15
Makefile
15
Makefile
@ -371,6 +371,10 @@ prebuild_OpenTXW81X: berry
|
||||
fi
|
||||
|
||||
prebuild_OpenRDA5981: berry
|
||||
ifdef GITHUB_ACTIONS
|
||||
# just so that there would be no cache error
|
||||
pip3 install fdt toml configobj pycryptodomex
|
||||
endif
|
||||
git submodule update --init --recursive --depth=1 sdk/OpenRDA5981
|
||||
@if [ -e platforms/RDA5981/pre_build.sh ]; then \
|
||||
echo "prebuild found for OpenRDA5981"; \
|
||||
@ -684,11 +688,12 @@ OpenTXW81X: prebuild_OpenTXW81X
|
||||
OpenRDA5981: prebuild_OpenRDA5981
|
||||
$(MAKE) -C sdk/OpenRDA5981 APP_VERSION=$(APP_VERSION) OBK_VARIANT=$(OBK_VARIANT) -j $(shell nproc)
|
||||
mkdir -p output/$(APP_VERSION)
|
||||
cp sdk/OpenRDA5981/.build/OpenBeken.bin output/$(APP_VERSION)/OpenRDA5981_$(APP_VERSION).img
|
||||
#cp sdk/OpenRDA5981/ota_lzma/bootloader_lzma.bin output/$(APP_VERSION)/OpenRDA5981_$(APP_VERSION).bin
|
||||
#dd conv=notrunc bs=1K if=sdk/OpenRDA5981/.build/OpenBeken.bin of=output/$(APP_VERSION)/OpenRDA5981_$(APP_VERSION).bin seek=12
|
||||
#./sdk/OpenRDA5981/ota_lzma/imgpkt e sdk/OpenRDA5981/.build/OpenBeken.bin sdk/OpenRDA5981/.build/OpenBeken.bin.lzma
|
||||
#python3 sdk/OpenRDA5981/ota_lzma/ota_pack_image_lzma.py sdk/OpenRDA5981/.build/OpenBeken.bin sdk/OpenRDA5981/.build/OpenBeken.bin.lzma output/$(APP_VERSION)/OpenRDA5981_$(APP_VERSION)_ota.img
|
||||
#cp sdk/OpenRDA5981/.build/OpenBeken.bin output/$(APP_VERSION)/OpenRDA5981_$(APP_VERSION).img
|
||||
python3 sdk/OpenRDA5981/ota_lzma/image_pack_firmware.py sdk/OpenRDA5981/.build/OpenBeken.bin $(APP_VERSION) 0
|
||||
cp sdk/OpenRDA5981/ota_lzma/bootloader_lzma.bin output/$(APP_VERSION)/OpenRDA5981_$(APP_VERSION).bin
|
||||
dd conv=notrunc bs=1K if=sdk/OpenRDA5981/.build/OpenBeken_fwpacked.bin of=output/$(APP_VERSION)/OpenRDA5981_$(APP_VERSION).bin seek=8
|
||||
./sdk/OpenRDA5981/ota_lzma/imgpkt e sdk/OpenRDA5981/.build/OpenBeken.bin sdk/OpenRDA5981/.build/OpenBeken.bin.lzma
|
||||
python3 sdk/OpenRDA5981/ota_lzma/ota_pack_image_lzma.py sdk/OpenRDA5981/.build/OpenBeken.bin sdk/OpenRDA5981/.build/OpenBeken.bin.lzma output/$(APP_VERSION)/OpenRDA5981_$(APP_VERSION)_ota.img $(APP_VERSION)
|
||||
|
||||
# Add custom Makefile if required
|
||||
-include custom.mk
|
||||
|
||||
@ -139,8 +139,8 @@
|
||||
|
||||
#elif PLATFORM_RDA5981
|
||||
|
||||
#define EF_START_ADDR 0xF7000
|
||||
#define ENV_AREA_SIZE 0x4000
|
||||
#define EF_START_ADDR 0xF4000
|
||||
#define ENV_AREA_SIZE 0xA000
|
||||
|
||||
#elif WINDOWS
|
||||
|
||||
|
||||
@ -1 +1 @@
|
||||
Subproject commit 5567e5398be98328d4e2d544c41063b7a89b4fce
|
||||
Subproject commit 7f22eafe2d6d054d4d24552c43a7185d00544008
|
||||
@ -1,17 +1,29 @@
|
||||
#ifdef PLATFORM_RDA5981
|
||||
#if PLATFORM_RDA5981
|
||||
|
||||
#include "../hal_flashConfig.h"
|
||||
#include "wland_flash.h"
|
||||
#include <easyflash.h>
|
||||
|
||||
static int g_easyFlash_Ready = 0;
|
||||
void InitEasyFlashIfNeeded()
|
||||
{
|
||||
if(g_easyFlash_Ready == 0)
|
||||
{
|
||||
easyflash_init();
|
||||
g_easyFlash_Ready = 1;
|
||||
}
|
||||
}
|
||||
|
||||
int HAL_Configuration_ReadConfigMemory(void* target, int dataLen)
|
||||
{
|
||||
return rda5981_read_flash(0x180fc000, target, dataLen) == 0;
|
||||
InitEasyFlashIfNeeded();
|
||||
return ef_get_env_blob("ObkCfg", target, dataLen, NULL);
|
||||
}
|
||||
|
||||
int HAL_Configuration_SaveConfigMemory(void* src, int dataLen)
|
||||
{
|
||||
rda5981_erase_flash(0x180fc000, 0x1000);
|
||||
return rda5981_write_flash(0x180fc000, src, dataLen) == 0;
|
||||
InitEasyFlashIfNeeded();
|
||||
ef_set_env_blob("ObkCfg", src, dataLen);
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif // PLATFORM_RDA5981
|
||||
|
||||
@ -3,11 +3,12 @@
|
||||
#include "../../new_common.h"
|
||||
#include "../hal_flashVars.h"
|
||||
#include "../../logging/logging.h"
|
||||
#include "wland_flash.h"
|
||||
#include <easyflash.h>
|
||||
|
||||
FLASH_VARS_STRUCTURE flash_vars;
|
||||
static int g_loaded = 0;
|
||||
|
||||
#define KV_KEY_FLASH_VARS "OBK_FV"
|
||||
#define SAVE_CHANGE_IF_REQUIRED_AND_COUNT(target, source, counter) \
|
||||
if((target) != (source)) { \
|
||||
(target) = (source); \
|
||||
@ -18,14 +19,32 @@ extern void InitEasyFlashIfNeeded();
|
||||
|
||||
static int ReadFlashVars(void* target, int dataLen)
|
||||
{
|
||||
g_loaded = rda5981_read_flash(0x180fd000, target, dataLen) == 0;
|
||||
InitEasyFlashIfNeeded();
|
||||
int readLen;
|
||||
ADDLOG_DEBUG(LOG_FEATURE_CFG, "ReadFlashVars: will read %d bytes", dataLen);
|
||||
readLen = ef_get_env_blob(KV_KEY_FLASH_VARS, target, dataLen, NULL);
|
||||
ADDLOG_DEBUG(LOG_FEATURE_CFG, "ReadFlashVars: really loaded %d bytes", readLen);
|
||||
g_loaded = 1;
|
||||
return dataLen;
|
||||
}
|
||||
|
||||
static int SaveFlashVars(void* src, int dataLen)
|
||||
{
|
||||
rda5981_erase_flash(0x180fd000, 0x1000);
|
||||
rda5981_write_flash(0x180fd000, src, dataLen);
|
||||
InitEasyFlashIfNeeded();
|
||||
EfErrCode res;
|
||||
|
||||
res = ef_set_env_blob(KV_KEY_FLASH_VARS, src, dataLen);
|
||||
if(res == EF_ENV_INIT_FAILED)
|
||||
{
|
||||
ADDLOG_DEBUG(LOG_FEATURE_CFG, "SaveFlashVars: EF_ENV_INIT_FAILED for %d bytes", dataLen);
|
||||
return 0;
|
||||
}
|
||||
if(res == EF_ENV_NAME_ERR)
|
||||
{
|
||||
ADDLOG_DEBUG(LOG_FEATURE_CFG, "SaveFlashVars: EF_ENV_ARG_ERR for %d bytes", dataLen);
|
||||
return 0;
|
||||
}
|
||||
ADDLOG_DEBUG(LOG_FEATURE_CFG, "SaveFlashVars: saved %d bytes", dataLen);
|
||||
return dataLen;
|
||||
}
|
||||
|
||||
@ -160,3 +179,4 @@ void HAL_FlashVars_SaveTotalConsumption(float total_consumption)
|
||||
}
|
||||
|
||||
#endif // PLATFORM_RDA5981
|
||||
|
||||
|
||||
@ -34,9 +34,77 @@ int HAL_FlashRead(char* buffer, int readlen, int startaddr)
|
||||
return rda5981_read_flash(0x18000000 + startaddr, (uint8_t*)buffer, readlen);
|
||||
}
|
||||
|
||||
int HAL_FlashWrite(char* buffer, int writelen, int startaddr)
|
||||
int HAL_FlashWrite(char* buf, unsigned int len, unsigned int addr)
|
||||
{
|
||||
return rda5981_write_flash(0x18000000 + startaddr, (uint8_t*)buffer, writelen);
|
||||
if(len == 0) return 0;
|
||||
addr += 0x18000000;
|
||||
int ret;
|
||||
int left;
|
||||
unsigned int addr_t, len_t;
|
||||
char* temp_buf = NULL;
|
||||
addr_t = addr & 0xffffff00;
|
||||
len_t = addr - addr_t + len;
|
||||
if(len_t % 256)
|
||||
len_t += 256 - len_t % 256;
|
||||
//printf("addr %x addr_t %x\r\n", addr, addr_t);
|
||||
//printf("len %d len_t %d\r\n", len, len_t);
|
||||
temp_buf = (char*)malloc(256);
|
||||
if(temp_buf == NULL)
|
||||
return -1;
|
||||
|
||||
ret = rda5981_read_flash(addr_t, temp_buf, 256);
|
||||
if(ret)
|
||||
{
|
||||
free(temp_buf);
|
||||
return -1;
|
||||
}
|
||||
left = 256 - (addr - addr_t);
|
||||
if(len < left)
|
||||
memcpy(temp_buf + addr - addr_t, buf, len);//256-(addr-addr_t));
|
||||
else
|
||||
memcpy(temp_buf + addr - addr_t, buf, left);
|
||||
ret = rda5981_write_flash(addr_t, temp_buf, 256);
|
||||
if(ret)
|
||||
{
|
||||
free(temp_buf);
|
||||
return -1;
|
||||
}
|
||||
|
||||
len_t -= 256;
|
||||
buf += 256 - (addr - addr_t);
|
||||
len -= 256 - (addr - addr_t);
|
||||
addr_t += 256;
|
||||
|
||||
while(len_t != 0)
|
||||
{
|
||||
//printf("len_t %d buf %x len %d addr_t %x\r\n", len_t, buf, len, addr_t);
|
||||
if(len >= 256)
|
||||
{
|
||||
memcpy(temp_buf, buf, 256);
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = rda5981_read_flash(addr_t, temp_buf, 256);
|
||||
if(ret)
|
||||
{
|
||||
free(temp_buf);
|
||||
return -1;
|
||||
}
|
||||
memcpy(temp_buf, buf, len);
|
||||
}
|
||||
ret = rda5981_write_flash(addr_t, temp_buf, 256);
|
||||
if(ret)
|
||||
{
|
||||
free(temp_buf);
|
||||
return -1;
|
||||
}
|
||||
len_t -= 256;
|
||||
buf += 256;
|
||||
len -= 256;
|
||||
addr_t += 256;
|
||||
}
|
||||
free(temp_buf);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HAL_FlashEraseSector(int startaddr)
|
||||
|
||||
@ -9,15 +9,21 @@
|
||||
extern "C" {
|
||||
extern void Main_Init();
|
||||
extern void Main_OnEverySecond();
|
||||
extern uint32_t OTA_Offset;
|
||||
uint8_t macaddr[6];
|
||||
}
|
||||
|
||||
extern WiFiStackInterface wifi;
|
||||
|
||||
__attribute__((used)) int main()
|
||||
{
|
||||
//rda5981_set_user_data_addr(0x180FB000, 0x180FC000, 3584);
|
||||
rda5981_set_user_data_addr(0x180FF000, 0x180FE000, 0x1000);
|
||||
wifi.init();
|
||||
rda5981_flash_read_mac_addr((unsigned char*)&macaddr);
|
||||
Main_Init();
|
||||
char* temp_buf = (char*)malloc(256);
|
||||
rda5981_read_flash(OTA_Offset, temp_buf, 256);
|
||||
if(temp_buf[0] == 0xAE && temp_buf[1] == 0xAE) rda5981_erase_flash(OTA_Offset, 1024);
|
||||
while(true)
|
||||
{
|
||||
osDelay(1000);
|
||||
|
||||
@ -9,6 +9,8 @@
|
||||
|
||||
#include "rda5981_ota.h"
|
||||
|
||||
uint32_t OTA_Offset = 0x18095000;
|
||||
|
||||
int http_rest_post_flash(http_request_t* request, int startaddr, int maxaddr)
|
||||
{
|
||||
int total = 0;
|
||||
@ -26,25 +28,27 @@ int http_rest_post_flash(http_request_t* request, int startaddr, int maxaddr)
|
||||
ADDLOG_ERROR(LOG_FEATURE_OTA, "Content-length is 0");
|
||||
goto update_ota_exit;
|
||||
}
|
||||
startaddr = 0x1807E000;
|
||||
// if compressed ota
|
||||
//startaddr = 0x1809C000;
|
||||
int ret1 = rda5981_write_partition_start(startaddr, towrite + (towrite % 4096));
|
||||
else
|
||||
{
|
||||
towrite = request->contentLength;
|
||||
}
|
||||
startaddr = OTA_Offset;
|
||||
int ret1 = rda5981_erase_flash(startaddr, towrite);
|
||||
if(ret1 != 0)
|
||||
{
|
||||
//ret = -1;
|
||||
ADDLOG_ERROR(LOG_FEATURE_OTA, "rda5981_write_partition_start failed. %i", ret);
|
||||
//goto update_ota_exit;
|
||||
ret = -1;
|
||||
ADDLOG_ERROR(LOG_FEATURE_OTA, "rda5981_erase_flash failed. %i", ret);
|
||||
goto update_ota_exit;
|
||||
}
|
||||
|
||||
do
|
||||
{
|
||||
ADDLOG_DEBUG(LOG_FEATURE_OTA, "Writelen %i at %i", writelen, total);
|
||||
ret1 = rda5981_write_partition(startaddr, (unsigned char*)writebuf, writelen);
|
||||
ret1 = HAL_FlashWrite(writebuf, writelen, startaddr - 0x18000000);
|
||||
if(ret1 != 0)
|
||||
{
|
||||
ret = -1;
|
||||
ADDLOG_ERROR(LOG_FEATURE_OTA, "rda5981_write_partition failed. %i", ret1);
|
||||
ADDLOG_ERROR(LOG_FEATURE_OTA, "flash_write failed. %i", ret1);
|
||||
goto update_ota_exit;
|
||||
}
|
||||
delay_ms(5);
|
||||
@ -59,16 +63,11 @@ int http_rest_post_flash(http_request_t* request, int startaddr, int maxaddr)
|
||||
{
|
||||
ADDLOG_DEBUG(LOG_FEATURE_OTA, "recv returned %d - end of data - remaining %d", writelen, towrite);
|
||||
ret = -1;
|
||||
goto update_ota_exit;
|
||||
}
|
||||
}
|
||||
} while ((towrite > 0) && (writelen >= 0));
|
||||
|
||||
int check = rda5981_write_partition_end();
|
||||
if(check != 0)
|
||||
{
|
||||
ADDLOG_ERROR(LOG_FEATURE_OTA, "rda5981_write_partition_end failed, %i", check);
|
||||
ret = -1;
|
||||
}
|
||||
update_ota_exit:
|
||||
if (ret != -1)
|
||||
{
|
||||
|
||||
@ -14,6 +14,7 @@ extern "C" {
|
||||
bool g_bOpenAccessPointMode = 0;
|
||||
static void (*g_wifiStatusCallback)(int code);
|
||||
extern struct netif lwip_sta_netif;
|
||||
extern uint8_t macaddr[6];
|
||||
|
||||
const char* HAL_GetMyIPString()
|
||||
{
|
||||
@ -37,9 +38,12 @@ const char* HAL_GetMyMaskString()
|
||||
|
||||
void WiFI_GetMacAddress(char* mac)
|
||||
{
|
||||
r_u8 addr[6];
|
||||
rda59xx_get_macaddr((r_u8*)&addr, 0);
|
||||
memcpy(mac, addr, sizeof(mac));
|
||||
memcpy(mac, macaddr, sizeof(mac));
|
||||
}
|
||||
|
||||
int WiFI_SetMacAddress(char* mac)
|
||||
{
|
||||
return rda5981_flash_write_mac_addr((uint8_t*)mac) == 0;
|
||||
}
|
||||
|
||||
uint8_t HAL_GetWiFiChannel(uint8_t *chan)
|
||||
|
||||
@ -159,9 +159,9 @@
|
||||
|
||||
#elif PLATFORM_RDA5981
|
||||
|
||||
#define LFS_BLOCKS_START 0xFE000
|
||||
#define LFS_BLOCKS_START_MIN 0xFE000
|
||||
#define LFS_BLOCKS_END 0x100000
|
||||
#define LFS_BLOCKS_START 0xE0000
|
||||
#define LFS_BLOCKS_START_MIN 0xE0000
|
||||
#define LFS_BLOCKS_END 0xF4000
|
||||
|
||||
#else
|
||||
// TODO
|
||||
|
||||
@ -567,7 +567,7 @@
|
||||
#define NO_CHIP_TEMPERATURE 1
|
||||
#define ENABLE_DRIVER_AHT2X 1
|
||||
#define ENABLE_I2C 1
|
||||
#undef ENABLE_HTTP_MAC
|
||||
#define ENABLE_LITTLEFS 1
|
||||
|
||||
#else
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user