* Xradios

* deep sleep

* xr806

* small adjustments
This commit is contained in:
NonPIayerCharacter
2025-06-30 19:47:47 +03:00
committed by GitHub
parent b9bdc0bc79
commit 3b99b17cc2
53 changed files with 1480 additions and 633 deletions

View File

@@ -33,8 +33,9 @@
#include <wifi_mgmr_ext.h> //For BL602 WiFi AP Scan
#elif PLATFORM_W600 || PLATFORM_W800
#elif PLATFORM_XR809
#elif PLATFORM_XRADIO
#include <image/flash.h>
#include "ota/ota.h"
#elif defined(PLATFORM_BK7231N)
// tuya-iotos-embeded-sdk-wifi-ble-bk7231n/sdk/include/tuya_hal_storage.h
#include "tuya_hal_storage.h"
@@ -1009,11 +1010,7 @@ typedef enum {
#endif
#if WINDOWS
#elif PLATFORM_BL602
#elif PLATFORM_W600 || PLATFORM_W800
#elif PLATFORM_XR809
#elif PLATFORM_BK7231N || PLATFORM_BK7231T
#if PLATFORM_BK7231N || PLATFORM_BK7231T
if (ota_progress() >= 0)
{
hprintf255(request, "<h5>OTA In Progress. Downloaded: %i B Flashed: %06lXh</h5>", OTA_GetTotalBytes(), ota_progress());
@@ -3165,8 +3162,6 @@ int http_fn_cfg_dgr(http_request_t* request) {
}
#endif
void XR809_RequestOTAHTTP(const char* s);
void OTA_RequestDownloadFromHTTP(const char* s) {
#if WINDOWS
@@ -3186,10 +3181,35 @@ void OTA_RequestDownloadFromHTTP(const char* s) {
else ota_done(0);
#elif PLATFORM_W600 || PLATFORM_W800
t_http_fwup(s);
#elif PLATFORM_XR809
XR809_RequestOTAHTTP(s);
#elif PLATFORM_XR872
#elif PLATFORM_XRADIO
uint32_t* verify_value;
ota_verify_t verify_type;
ota_verify_data_t verify_data;
if(ota_get_image(OTA_PROTOCOL_HTTP, s) != OTA_STATUS_OK)
{
addLogAdv(LOG_ERROR, LOG_FEATURE_HTTP, "OTA http get image failed");
return;
}
if(ota_get_verify_data(&verify_data) != OTA_STATUS_OK)
{
verify_type = OTA_VERIFY_NONE;
verify_value = NULL;
}
else
{
verify_type = verify_data.ov_type;
verify_value = (uint32_t*)(verify_data.ov_data);
}
if(ota_verify_image(verify_type, verify_value) != OTA_STATUS_OK)
{
addLogAdv(LOG_ERROR, LOG_FEATURE_HTTP, "OTA http verify image failed");
return;
}
ota_reboot();
#else
otarequest(s);
#endif

View File

@@ -385,20 +385,6 @@ static int http_tasmota_json_status_SNS(void* request, jsonCb_t printer, bool bA
return 0;
}
#ifdef PLATFORM_XR809
//XR809 does not support drivers but its build script compiles many drivers including ntp.
#else
#ifndef ENABLE_NTP
unsigned int NTP_GetCurrentTime() {
return 0;
}
unsigned int NTP_GetCurrentTimeWithoutOffset() {
return 0;
}
#endif
#endif
// Topic: tele/tasmota_48E7F3/STATE
// Sample:
/*

View File

@@ -29,6 +29,7 @@ typedef struct
} tcp_thread_t;
static xTaskHandle g_http_thread = NULL;
static const size_t max_socks = MAX_SOCKETS_TCP - 1;
static int listen_sock = INVALID_SOCK;
static tcp_thread_t sock[MAX_SOCKETS_TCP - 1] =
{
@@ -137,6 +138,32 @@ static inline char* get_clientaddr(struct sockaddr_storage* source_addr)
return address_str;
}
void HTTPServer_Stop(void* arg)
{
if(g_http_thread != NULL)
{
rtos_delete_thread(&g_http_thread);
}
if(listen_sock != INVALID_SOCK)
{
close(listen_sock);
}
for(int i = 0; i < max_socks; ++i)
{
if(sock[i].thread != NULL)
{
rtos_delete_thread(&sock[i].thread);
sock[i].thread = NULL;
}
if(sock[i].fd != INVALID_SOCK)
{
close(sock[i].fd);
sock[i].fd = INVALID_SOCK;
}
}
}
void restart_tcp_server(void* arg)
{
HTTPServer_Start();
@@ -147,7 +174,6 @@ static void tcp_server_thread(beken_thread_arg_t arg)
{
OSStatus err = kNoErr;
int reuse = 1;
const size_t max_socks = MAX_SOCKETS_TCP - 1;
struct sockaddr_in server_addr =
{

View File

@@ -13,9 +13,10 @@
#define DEFAULT_FLASH_LEN 0x200000
#if PLATFORM_XR809
#if PLATFORM_XRADIO
#include <image/flash.h>
#include "ota/ota.h"
uint32_t flash_read(uint32_t flash, uint32_t addr, void* buf, uint32_t size);
#define FLASH_INDEX_XR809 0
@@ -314,6 +315,8 @@ static int http_rest_post(http_request_t* request) {
return http_rest_post_flash(request, 0, -1);
#elif PLATFORM_ECR6600 || PLATFORM_TR6260
return http_rest_post_flash(request, -1, -1);
#elif PLATFORM_XRADIO && !PLATFORM_XR809
return http_rest_post_flash(request, 0, -1);
#else
// TODO
ADDLOG_DEBUG(LOG_FEATURE_API, "No OTA");
@@ -1596,11 +1599,6 @@ static int ota_verify_download(void)
static int http_rest_post_flash(http_request_t* request, int startaddr, int maxaddr)
{
#if PLATFORM_XR809 || PLATFORM_XR872
return 0; //Operation not supported yet
#endif
int total = 0;
int towrite = request->bodylen;
char* writebuf = request->bodystart;
@@ -3074,6 +3072,117 @@ update_ota_exit:
return http_rest_error(request, ret, "error");
}
#elif PLATFORM_XRADIO
bool recvfp = true;
ota_status_t ota_update_rest_init(void* url)
{
return OTA_STATUS_OK;
}
ota_status_t ota_update_rest_get(uint8_t* buf, uint32_t buf_size, uint32_t* recv_size, uint8_t* eof_flag)
{
if(recvfp)
{
//free(buf);
//recvfp = false;
//buf = writebuf;
//*recv_size = writelen;
//return OTA_STATUS_OK;
int bsize = (writelen > buf_size ? buf_size : writelen);
memcpy(buf, writebuf + startaddr, bsize);
ADDLOG_DEBUG(LOG_FEATURE_OTA, "Writelen %i at %i", bsize, startaddr);
startaddr += bsize;
*recv_size = bsize;
*eof_flag = 0;
total += bsize;
towrite -= bsize;
writelen -= bsize;
recvfp = writelen > 0;
return OTA_STATUS_OK;
}
if(towrite > 0)
{
*recv_size = writelen = recv(request->fd, buf, (request->receivedLenmax > buf_size ? buf_size : request->receivedLenmax), 0);
//*recv_size = writelen = recv(request->fd, writebuf, request->receivedLenmax, 0);
ADDLOG_DEBUG(LOG_FEATURE_OTA, "Writelen %i at %i", writelen, total);
if(writelen < 0)
{
ADDLOG_INFO(LOG_FEATURE_OTA, "recv returned %d - end of data - remaining %d", writelen, towrite);
*eof_flag = 1;
*recv_size = 0;
return OTA_STATUS_OK;
//return OTA_STATUS_ERROR;
}
}
total += writelen;
towrite -= writelen;
if((towrite > 0) && (writelen >= 0))
{
*eof_flag = 0;
rtos_delay_milliseconds(10);
return OTA_STATUS_OK;
}
*eof_flag = 1;
return OTA_STATUS_OK;
}
int ret = 0;
uint32_t* verify_value;
ota_verify_t verify_type;
ota_verify_data_t verify_data;
if(request->contentLength > 0)
{
towrite = request->contentLength;
}
else
{
ret = -1;
ADDLOG_ERROR(LOG_FEATURE_OTA, "Content-length is 0");
goto update_ota_exit;
}
ota_init();
if(ota_update_image(NULL, ota_update_rest_init, ota_update_rest_get) != OTA_STATUS_OK)
{
ret = -1;
ADDLOG_ERROR(LOG_FEATURE_OTA, "ota_update_image failed");
goto update_ota_exit;
}
if(ota_get_verify_data(&verify_data) != OTA_STATUS_OK)
{
ADDLOG_INFO(LOG_FEATURE_OTA, "ota_get_verify_data not ok, OTA_VERIFY_NONE");
verify_type = OTA_VERIFY_NONE;
verify_value = NULL;
}
else
{
verify_type = verify_data.ov_type;
ADDLOG_INFO(LOG_FEATURE_OTA, "ota_get_verify_data ok");
verify_value = (uint32_t*)(verify_data.ov_data);
}
if(ota_verify_image(verify_type, verify_value) != OTA_STATUS_OK)
{
ret = -1;
ADDLOG_ERROR(LOG_FEATURE_OTA, "OTA verify image failed");
goto update_ota_exit;
}
update_ota_exit:
if(ret != -1)
{
ADDLOG_INFO(LOG_FEATURE_OTA, "OTA is successful");
}
else
{
ADDLOG_ERROR(LOG_FEATURE_OTA, "OTA failed.");
return http_rest_error(request, ret, "error");
}
#else
init_ota(startaddr);
@@ -3169,10 +3278,9 @@ static int http_rest_get_flash(http_request_t* request, int startaddr, int len)
}
#if PLATFORM_BEKEN
res = flash_read((char*)buffer, readlen, startaddr);
#elif PLATFORM_XR809
#elif PLATFORM_XRADIO
//uint32_t flash_read(uint32_t flash, uint32_t addr,void *buf, uint32_t size)
#define FLASH_INDEX_XR809 0
res = flash_read(FLASH_INDEX_XR809, startaddr, buffer, readlen);
res = flash_read(0, startaddr, buffer, readlen);
#elif PLATFORM_XR872
res = 0;
#elif PLATFORM_BL602