build: W600-SDK importiert, Firmware-Build und Hello am EVK

Docker-Build mit gcc-arm-none-eabi 4.9-2014q4 (statt Homebrew-Cask) verwendet,
Dockerfile/tools/docker.sh dafür aus Task 13 vorgezogen. cmake/sdk.cmake schont
gcc 4.9 (kennt -fcommon/-Wno-error=... nicht). Zwei zusätzliche SDK-Stubs
(EarlyInit, pre_gpio_config) in src/sys/sdk_stubs.c ergänzt, siehe sdk/PATCHES.md.
This commit is contained in:
Michael Sauer
2026-09-11 12:52:26 +02:00
parent 4e7ff78fc6
commit 1b0501179d
610 changed files with 224089 additions and 0 deletions
+235
View File
@@ -0,0 +1,235 @@
#include <string.h>
#include "wm_include.h"
#include "wm_config.h"
#include "wm_http_client.h"
#include "lwip/sys.h"
#include "wm_wl_task.h"
#if TLS_CONFIG_HTTP_CLIENT_TASK
#define HTTP_CLIENT_STK_SIZE 256
static sys_mbox_t http_client_mbox = SYS_MBOX_NULL;
static OS_STK httpClientStk[HTTP_CLIENT_STK_SIZE];
#define HTTP_CLIENT_BUFFER_SIZE 1024
extern u8 pSession_flag;
static UINT32 http_snd_req_local(
HTTP_SESSION_HANDLE pHTTP, HTTPParameters ClientParams, HTTP_VERB verb, CHAR* pSndData, u32 dataLen,
http_client_recv_callback_fn recv_fn)
{
INT32 nRetCode;
UINT32 nSize,nTotal = 0;
CHAR* Buffer = NULL;
UINT32 nSndDataLen ;
CHAR token[32];
UINT32 size=32;
char *pRecvData=NULL;
u32 totallen;
do
{
Buffer = (CHAR*)tls_mem_alloc(HTTP_CLIENT_BUFFER_SIZE);
if(Buffer == NULL)
{
return HTTP_CLIENT_ERROR_NO_MEMORY;
}
memset(Buffer, 0, HTTP_CLIENT_BUFFER_SIZE);
//printf("\nHTTP Client v1.0\n\n");
nSndDataLen = (pSndData==NULL ? 0 : dataLen);
// Set the Verb
nRetCode = HTTPClientSetVerb(pHTTP,verb);
if(nRetCode != HTTP_CLIENT_SUCCESS)
{
break;
}
#if TLS_CONFIG_HTTP_CLIENT_AUTH
// Set authentication
if(ClientParams.AuthType != AuthSchemaNone)
{
if((nRetCode = HTTPClientSetAuth(pHTTP,ClientParams.AuthType,NULL)) != HTTP_CLIENT_SUCCESS)
{
break;
}
// Set authentication
if((nRetCode = HTTPClientSetCredentials(pHTTP,ClientParams.UserName,ClientParams.Password)) != HTTP_CLIENT_SUCCESS)
{
break;
}
}
#endif //TLS_CONFIG_HTTP_CLIENT_AUTH
#if TLS_CONFIG_HTTP_CLIENT_PROXY
// Use Proxy server
if(ClientParams.UseProxy == TRUE)
{
if((nRetCode = HTTPClientSetProxy(pHTTP,ClientParams.ProxyHost,ClientParams.ProxyPort,NULL,NULL)) != HTTP_CLIENT_SUCCESS)
{
break;
}
}
#endif //TLS_CONFIG_HTTP_CLIENT_PROXY
if((nRetCode = HTTPClientSendRequest(pHTTP,ClientParams.Uri,pSndData,nSndDataLen,verb==VerbPost || verb==VerbPut,0,0)) != HTTP_CLIENT_SUCCESS)
{
break;
}
// Retrieve the the headers and analyze them
if((nRetCode = HTTPClientRecvResponse(pHTTP,30)) != HTTP_CLIENT_SUCCESS)
{
break;
}
memset(token, 0, 32);
if((nRetCode = HTTPClientFindFirstHeader(pHTTP, "content-length", token, &size)) != HTTP_CLIENT_SUCCESS)
{
totallen = HTTP_CLIENT_BUFFER_SIZE;
}
else
{
totallen = atol(strstr(token,":")+1);
}
HTTPClientFindCloseHeader(pHTTP);
//printf("Start to receive data from remote server...\n");
// Get the data until we get an error or end of stream code
pSession_flag = 0;
while(nRetCode == HTTP_CLIENT_SUCCESS || nRetCode != HTTP_CLIENT_EOS)
{
// Set the size of our buffer
nSize = HTTP_CLIENT_BUFFER_SIZE;
// Get the data
nRetCode = HTTPClientReadData(pHTTP,Buffer,nSize,300,&nSize);
if(nRetCode != HTTP_CLIENT_SUCCESS && nRetCode != HTTP_CLIENT_EOS)
break;
pRecvData = tls_mem_alloc(nSize);
if(pRecvData == NULL)
{
nRetCode = HTTP_CLIENT_ERROR_NO_MEMORY;
break;
}
memcpy(pRecvData, Buffer, nSize);
recv_fn(pHTTP, pRecvData, totallen, nSize);
}
} while(0); // Run only once
if(Buffer)
tls_mem_free(Buffer);
if(pHTTP)
HTTPClientCloseRequest(&pHTTP);
if(ClientParams.Verbose == TRUE)
{
printf("\n\nHTTP Client terminated %d (got %d kb)\n\n",nRetCode,(nTotal/ 1024));
}
return nRetCode;
}
static void http_client_rx(void *sdata)
{
int ret;
void *msg;
http_client_msg *http_msg;
for(;;)
{
sys_arch_mbox_fetch(&http_client_mbox, (void **)&msg, 0);
http_msg = (http_client_msg *)msg;
ret = http_snd_req_local(http_msg->pSession,
http_msg->param,
http_msg->method,
http_msg->sendData,
http_msg->dataLen,
http_msg->recv_fn);
//printf("http_client_rx ret=%d\n", ret);
if(ret == HTTP_CLIENT_SUCCESS || ret == HTTP_CLIENT_EOS)
{
;
}
else
{
if(http_msg->err_fn != NULL)
http_msg->err_fn(http_msg->pSession, ret);
}
if(http_msg->sendData != NULL)
tls_mem_free(http_msg->sendData);
if(http_msg->param.Uri)
tls_mem_free(http_msg->param.Uri);
tls_mem_free(http_msg);
}
}
int http_client_task_init(void)
{
if(sys_mbox_new(&http_client_mbox, 32) != ERR_OK) {
return WM_FAILED;
}
tls_os_task_create(NULL, "HTTPCLNT",
http_client_rx,
NULL,
(void *)httpClientStk, /* task's stack start address */
HTTP_CLIENT_STK_SIZE * sizeof(u32), /* task's stack size, unit:byte */
TLS_HTTP_CLIENT_TASK_PRIO,
0);
return WM_SUCCESS;
}
int http_client_post(http_client_msg * msg)
{
int len;
err_t err;
http_client_msg * msg1 = tls_mem_alloc(sizeof(http_client_msg));
if(!msg1)
return HTTP_CLIENT_ERROR_NO_MEMORY;
memset(msg1, 0, sizeof(http_client_msg));
memcpy(msg1, msg, sizeof(http_client_msg));
if(msg->dataLen > 0)
{
msg1->sendData = tls_mem_alloc(msg->dataLen);
if(msg1->sendData == NULL)
{
tls_mem_free(msg1);
return HTTP_CLIENT_ERROR_NO_MEMORY;
}
memcpy(msg1->sendData, msg->sendData, msg->dataLen);
}
else
msg1->sendData = NULL;
if(msg->param.Uri != NULL)
{
len = strlen(msg->param.Uri);
msg1->param.Uri = tls_mem_alloc(len + 1);
if(msg1->param.Uri == NULL)
{
if(msg1->sendData)
tls_mem_free(msg1->sendData);
tls_mem_free(msg1);
return HTTP_CLIENT_ERROR_NO_MEMORY;
}
memset(msg1->param.Uri, 0, len + 1);
memcpy(msg1->param.Uri,msg->param.Uri,len);
}
// Open the HTTP request handle
msg->pSession= HTTPClientOpenRequest(0);
if(!msg->pSession)
{
if(msg1->sendData)
tls_mem_free(msg1->sendData);
if(msg1->param.Uri)
tls_mem_free(msg1->param.Uri);
tls_mem_free(msg1);
return HTTP_CLIENT_ERROR_INVALID_HANDLE;
}
msg1->pSession = msg->pSession;
err = sys_mbox_trypost(&http_client_mbox, msg1);
//printf("post err=%d\n", err);
if(err != ERR_OK)
{
HTTPClientCloseRequest(&msg->pSession);
if(msg1->sendData)
tls_mem_free(msg1->sendData);
if(msg1->param.Uri)
tls_mem_free(msg1->param.Uri);
tls_mem_free(msg1);
}
return err;
}
#endif //TLS_CONFIG_HTTP_CLIENT_TASK