mirror of
https://github.com/drasko/open-ameba.git
synced 2024-11-24 23:14:17 +00:00
add WDT, new console, ...
This commit is contained in:
parent
e851661fa4
commit
de57c04fb4
21 changed files with 3158 additions and 2639 deletions
|
@ -2753,6 +2753,9 @@ static portTASK_FUNCTION( prvIdleTask, pvParameters )
|
||||||
{
|
{
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
|
#ifdef CONFIG_WDG_ON_IDLE
|
||||||
|
WDGRefresh();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#endif /* configUSE_TICKLESS_IDLE */
|
#endif /* configUSE_TICKLESS_IDLE */
|
||||||
}
|
}
|
||||||
|
@ -3641,7 +3644,7 @@ TCB_t *pxTCB;
|
||||||
/* What percentage of the total run time has the task used?
|
/* What percentage of the total run time has the task used?
|
||||||
This will always be rounded down to the nearest integer.
|
This will always be rounded down to the nearest integer.
|
||||||
ulTotalRunTimeDiv100 has already been divided by 100. */
|
ulTotalRunTimeDiv100 has already been divided by 100. */
|
||||||
#if 0
|
#if 1
|
||||||
ulStatsAsPercentage = pxTaskStatusArray[ x ].ulRunTimeCounter / ulTotalTime;
|
ulStatsAsPercentage = pxTaskStatusArray[ x ].ulRunTimeCounter / ulTotalTime;
|
||||||
#else
|
#else
|
||||||
ulStatsAsPercentage = (100*pxTaskStatusArray[ x ].ulDelataRunTimeCounterOfPeroid) / ulDeltaTotalRunTime;
|
ulStatsAsPercentage = (100*pxTaskStatusArray[ x ].ulDelataRunTimeCounterOfPeroid) / ulDeltaTotalRunTime;
|
||||||
|
@ -3651,25 +3654,30 @@ TCB_t *pxTCB;
|
||||||
else
|
else
|
||||||
ulDeltaRunTimeCounter = portCONFIGURE_STATS_PEROID_VALUE*ulStatsAsPercentage/100;
|
ulDeltaRunTimeCounter = portCONFIGURE_STATS_PEROID_VALUE*ulStatsAsPercentage/100;
|
||||||
#endif
|
#endif
|
||||||
|
int cnt = sprintf( pcWriteBuffer, "%s", pxTaskStatusArray[ x ].pcTaskName);
|
||||||
|
pcWriteBuffer += cnt;
|
||||||
|
while(cnt < configMAX_TASK_NAME_LEN) {
|
||||||
|
cnt++;
|
||||||
|
*pcWriteBuffer++ = ' ';
|
||||||
|
}
|
||||||
if( ulStatsAsPercentage > 0UL )
|
if( ulStatsAsPercentage > 0UL )
|
||||||
{
|
{
|
||||||
#ifdef portLU_PRINTF_SPECIFIER_REQUIRED
|
#ifdef portLU_PRINTF_SPECIFIER_REQUIRED
|
||||||
{
|
{
|
||||||
#if 0
|
#if 1
|
||||||
sprintf( pcWriteBuffer, "%s\t\t%lu\t\t%lu%%\n", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter, ulStatsAsPercentage );
|
sprintf( pcWriteBuffer, "\t%lu\t\t%lu%%\n", pxTaskStatusArray[ x ].ulRunTimeCounter, ulStatsAsPercentage );
|
||||||
#else
|
#else
|
||||||
sprintf( pcWriteBuffer, "%s\t\t%lu\t\t%lu%%\n", pxTaskStatusArray[ x ].pcTaskName, ulDeltaRunTimeCounter, ulStatsAsPercentage );
|
sprintf( pcWriteBuffer, "\t%lu\t\t%lu%%\n", ulDeltaRunTimeCounter, ulStatsAsPercentage );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
/* sizeof( int ) == sizeof( long ) so a smaller
|
/* sizeof( int ) == sizeof( long ) so a smaller
|
||||||
printf() library can be used. */
|
printf() library can be used. */
|
||||||
#if 0
|
#if 1
|
||||||
sprintf( pcWriteBuffer, "%s\t\t%u\t\t%u%%\n", pxTaskStatusArray[ x ].pcTaskName, ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter, ( unsigned int ) ulStatsAsPercentage );
|
sprintf( pcWriteBuffer, "\t%lu\t\t%u%%\n", ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter, ( unsigned int ) ulStatsAsPercentage );
|
||||||
#else
|
#else
|
||||||
sprintf( pcWriteBuffer, "%s\t\t%u\t\t%u%%\n", pxTaskStatusArray[ x ].pcTaskName, ( unsigned int ) ulDeltaRunTimeCounter, ( unsigned int ) ulStatsAsPercentage );
|
sprintf( pcWriteBuffer, "\t%u\t\t%u%%\n", ( unsigned int ) ulDeltaRunTimeCounter, ( unsigned int ) ulStatsAsPercentage );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -3680,20 +3688,20 @@ TCB_t *pxTCB;
|
||||||
consumed less than 1% of the total run time. */
|
consumed less than 1% of the total run time. */
|
||||||
#ifdef portLU_PRINTF_SPECIFIER_REQUIRED
|
#ifdef portLU_PRINTF_SPECIFIER_REQUIRED
|
||||||
{
|
{
|
||||||
#if 0
|
#if 1
|
||||||
sprintf( pcWriteBuffer, "%s\t\t%lu\t\t<1%%\n", pxTaskStatusArray[ x ].pcTaskName, pxTaskStatusArray[ x ].ulRunTimeCounter );
|
sprintf( pcWriteBuffer, "\t%lu\t\t<1%%\n", pxTaskStatusArray[ x ].ulRunTimeCounter );
|
||||||
#else
|
#else
|
||||||
sprintf( pcWriteBuffer, "%s\t\t%lu\t\t<1%%\n", pxTaskStatusArray[ x ].pcTaskName, ulDeltaRunTimeCounter );
|
sprintf( pcWriteBuffer, "\t%lu\t\t<1%%\n", ulDeltaRunTimeCounter );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
/* sizeof( int ) == sizeof( long ) so a smaller
|
/* sizeof( int ) == sizeof( long ) so a smaller
|
||||||
printf() library can be used. */
|
printf() library can be used. */
|
||||||
#if 0
|
#if 1
|
||||||
sprintf( pcWriteBuffer, "%s\t\t%u\t\t<1%%\n", pxTaskStatusArray[ x ].pcTaskName, ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter );
|
sprintf( pcWriteBuffer, "\t%lu\t\t<1%%\n", ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter );
|
||||||
#else
|
#else
|
||||||
sprintf( pcWriteBuffer, "%s\t\t%u\t\t<1%%\n", pxTaskStatusArray[ x ].pcTaskName, ( unsigned int ) ulDeltaRunTimeCounter );
|
sprintf( pcWriteBuffer, "\t%u\t\t<1%%\n", ( unsigned int ) ulDeltaRunTimeCounter );
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -89,6 +89,32 @@ prvDiagSPrintf(
|
||||||
IN const char *fmt, ...
|
IN const char *fmt, ...
|
||||||
);
|
);
|
||||||
|
|
||||||
|
#if CONFIG_DEBUG_LOG > 3
|
||||||
|
#define debug_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__)
|
||||||
|
#define info_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__)
|
||||||
|
#define warning_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__)
|
||||||
|
#define error_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__)
|
||||||
|
#elif CONFIG_DEBUG_LOG > 2
|
||||||
|
#define debug_printf(fmt, ...)
|
||||||
|
#define info_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__)
|
||||||
|
#define warning_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__)
|
||||||
|
#define error_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__)
|
||||||
|
#elif CONFIG_DEBUG_LOG > 1
|
||||||
|
#define debug_printf(fmt, ...)
|
||||||
|
#define info_printf(fmt, ...)
|
||||||
|
#define warning_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__)
|
||||||
|
#define error_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__)
|
||||||
|
#elif CONFIG_DEBUG_LOG > 0
|
||||||
|
#define debug_printf(fmt, ...)
|
||||||
|
#define info_printf(fmt, ...)
|
||||||
|
#define warning_printf(fmt, ...)
|
||||||
|
#define error_printf(fmt, ...) rtl_printf(fmt, ##__VA_ARGS__)
|
||||||
|
#else
|
||||||
|
#define debug_printf(fmt, ...)
|
||||||
|
#define info_printf(fmt, ...)
|
||||||
|
#define warning_printf(fmt, ...)
|
||||||
|
#define error_printf(fmt, ...)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define _DbgDump DiagPrintf
|
#define _DbgDump DiagPrintf
|
||||||
|
|
||||||
|
|
|
@ -624,6 +624,7 @@ SECTIONS
|
||||||
rom_wps_rcons = 0x35d88;
|
rom_wps_rcons = 0x35d88;
|
||||||
rom_wps_Td4s = 0x35d94;
|
rom_wps_Td4s = 0x35d94;
|
||||||
rom_wps_Td0 = 0x35e94;
|
rom_wps_Td0 = 0x35e94;
|
||||||
|
str_rom_hex_addr = 0x442D6;
|
||||||
__rom_b_cut_end__ = 0x4467c;
|
__rom_b_cut_end__ = 0x4467c;
|
||||||
__rom_c_cut_text_start__ = 0x4467c;
|
__rom_c_cut_text_start__ = 0x4467c;
|
||||||
HalInitPlatformLogUartV02 = 0x4467d;
|
HalInitPlatformLogUartV02 = 0x4467d;
|
||||||
|
|
|
@ -150,7 +150,13 @@ SECTIONS
|
||||||
LONG(__sdram_heap_end__ - __sdram_heap_start__)
|
LONG(__sdram_heap_end__ - __sdram_heap_start__)
|
||||||
LONG(0)
|
LONG(0)
|
||||||
LONG(0)
|
LONG(0)
|
||||||
|
UartLogRamCmdTable = .;
|
||||||
|
KEEP(*(SORT(.mon.tab*)))
|
||||||
|
UartLogRamCmdTable_end = .;
|
||||||
|
LONG(0)
|
||||||
} > BD_RAM
|
} > BD_RAM
|
||||||
|
|
||||||
|
PROVIDE(UartLogRamCmdTableSize = UartLogRamCmdTable_end - UartLogRamCmdTable);
|
||||||
|
|
||||||
.ram.data :
|
.ram.data :
|
||||||
{
|
{
|
||||||
|
|
|
@ -230,7 +230,7 @@ RtlConsolInitRam(
|
||||||
pUartLogCtl->TaskRdy = 0;
|
pUartLogCtl->TaskRdy = 0;
|
||||||
#ifdef PLATFORM_FREERTOS
|
#ifdef PLATFORM_FREERTOS
|
||||||
#define LOGUART_STACK_SIZE 200 //USE_MIN_STACK_SIZE modify from 512 to 128
|
#define LOGUART_STACK_SIZE 200 //USE_MIN_STACK_SIZE modify from 512 to 128
|
||||||
#if CONFIG_USE_TCM_HEAP
|
#if 0 //CONFIG_USE_TCM_HEAP
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
void *stack_addr = tcm_heap_malloc(LOGUART_STACK_SIZE*sizeof(int));
|
void *stack_addr = tcm_heap_malloc(LOGUART_STACK_SIZE*sizeof(int));
|
||||||
|
@ -249,13 +249,13 @@ RtlConsolInitRam(
|
||||||
NULL);
|
NULL);
|
||||||
if (pdTRUE != ret)
|
if (pdTRUE != ret)
|
||||||
{
|
{
|
||||||
DiagPrintf("Create Log UART Task Err!!\n");
|
DiagPrintf("Create Log UART Task Err!\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (pdTRUE != xTaskCreate( RtlConsolTaskRam, (const signed char * const)"log_uart", LOGUART_STACK_SIZE, NULL, tskIDLE_PRIORITY + 5 + PRIORITIE_OFFSET, NULL))
|
if (pdTRUE != xTaskCreate( RtlConsolTaskRam, (const signed char * const)"log_uart", LOGUART_STACK_SIZE, NULL, tskIDLE_PRIORITY + 5 + PRIORITIE_OFFSET, NULL))
|
||||||
{
|
{
|
||||||
DiagPrintf("Create Log UART Task Err!!\n");
|
DiagPrintf("Create Log UART Task Err!\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -312,6 +312,10 @@ RtlConsolTaskRam(
|
||||||
{
|
{
|
||||||
#if SUPPORT_LOG_SERVICE
|
#if SUPPORT_LOG_SERVICE
|
||||||
log_service_init();
|
log_service_init();
|
||||||
|
#else
|
||||||
|
#ifdef CONFIG_AT_USR
|
||||||
|
at_user_init();
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
//4 Set this for UartLog check cmd history
|
//4 Set this for UartLog check cmd history
|
||||||
#ifdef CONFIG_KERNEL
|
#ifdef CONFIG_KERNEL
|
||||||
|
|
|
@ -29,17 +29,16 @@
|
||||||
#define UART_LOG_CMD_BUFLEN 127
|
#define UART_LOG_CMD_BUFLEN 127
|
||||||
#define MAX_ARGV 10
|
#define MAX_ARGV 10
|
||||||
|
|
||||||
|
extern COMMAND_TABLE UartLogRomCmdTable[6]; // in ROM (hal_diag.h)
|
||||||
|
|
||||||
typedef u32 (*ECHOFUNC)(IN u8*,...); //UART LOG echo-function type.
|
typedef u32 (*ECHOFUNC)(IN u8*,...); //UART LOG echo-function type.
|
||||||
|
|
||||||
typedef struct _UART_LOG_BUF_ {
|
typedef struct _UART_LOG_BUF_ {
|
||||||
u8 BufCount; //record the input cmd char number.
|
u8 BufCount; //record the input cmd char number.
|
||||||
u8 UARTLogBuf[UART_LOG_CMD_BUFLEN]; //record the input command.
|
u8 UARTLogBuf[UART_LOG_CMD_BUFLEN]; //record the input command.
|
||||||
} UART_LOG_BUF, *PUART_LOG_BUF;
|
} UART_LOG_BUF, *PUART_LOG_BUF;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct _UART_LOG_CTL_ {
|
typedef struct _UART_LOG_CTL_ {
|
||||||
u8 NewIdx; //+0x00
|
u8 NewIdx; //+0x00
|
||||||
u8 SeeIdx; //+0x01
|
u8 SeeIdx; //+0x01
|
||||||
|
@ -49,19 +48,17 @@ typedef struct _UART_LOG_CTL_ {
|
||||||
u8 ExecuteEsc; //+0x05
|
u8 ExecuteEsc; //+0x05
|
||||||
u8 BootRdy; //+0x06
|
u8 BootRdy; //+0x06
|
||||||
u8 Resvd; //+0x07
|
u8 Resvd; //+0x07
|
||||||
PUART_LOG_BUF pTmpLogBuf;
|
PUART_LOG_BUF pTmpLogBuf; //+0x08 = UartLogBuf
|
||||||
VOID *pfINPUT;
|
VOID *pfINPUT; //+0x0C = DiagPrintf
|
||||||
PCOMMAND_TABLE pCmdTbl;
|
PCOMMAND_TABLE pCmdTbl; //+0x10
|
||||||
u32 CmdTblSz;
|
u32 CmdTblSz; //+0x14
|
||||||
#ifdef CONFIG_UART_LOG_HISTORY
|
#ifdef CONFIG_UART_LOG_HISTORY
|
||||||
u32 CRSTS;
|
u32 CRSTS; //+0x18
|
||||||
#endif
|
u8 (*pHistoryBuf)[UART_LOG_CMD_BUFLEN]; //+0x1C UartLogHistoryBuf[UART_LOG_HISTORY_LEN][UART_LOG_CMD_BUFLEN]
|
||||||
#ifdef CONFIG_UART_LOG_HISTORY
|
|
||||||
u8 (*pHistoryBuf)[UART_LOG_CMD_BUFLEN];
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_KERNEL
|
#ifdef CONFIG_KERNEL
|
||||||
u32 TaskRdy;
|
u32 TaskRdy; //+0x20
|
||||||
_Sema Sema;
|
_Sema Sema; //+0x24
|
||||||
#else
|
#else
|
||||||
// Since ROM code will reference this typedef, so keep the typedef same size
|
// Since ROM code will reference this typedef, so keep the typedef same size
|
||||||
u32 TaskRdy;
|
u32 TaskRdy;
|
||||||
|
@ -128,6 +125,8 @@ Strtoul(
|
||||||
IN u32 base
|
IN u32 base
|
||||||
);
|
);
|
||||||
|
|
||||||
|
_LONG_CALL_ extern VOID UartLogIrqHandle(VOID * Data); // in ROM
|
||||||
|
|
||||||
void console_init(void);
|
void console_init(void);
|
||||||
|
|
||||||
extern _LONG_CALL_ROM_ int GetArgc(const u8 *string);
|
extern _LONG_CALL_ROM_ int GetArgc(const u8 *string);
|
||||||
|
|
|
@ -203,6 +203,8 @@
|
||||||
#define MON_RAM_BSS_SECTION \
|
#define MON_RAM_BSS_SECTION \
|
||||||
SECTION(".mon.ram.bss")
|
SECTION(".mon.ram.bss")
|
||||||
|
|
||||||
|
#define MON_RAM_TAB_SECTION \
|
||||||
|
SECTION(".mon.tab.rodata")
|
||||||
|
|
||||||
//3 SDIO Section
|
//3 SDIO Section
|
||||||
#define SECTION_SDIO_RAM
|
#define SECTION_SDIO_RAM
|
||||||
|
|
|
@ -39,7 +39,7 @@ void test_sha1(void)
|
||||||
if ( rtl_memcmpb((void*)digest, (void*)&sha1_test_digest[i][0], 20) == 0 )
|
if ( rtl_memcmpb((void*)digest, (void*)&sha1_test_digest[i][0], 20) == 0 )
|
||||||
DiagPrintf("SHA1 test result is correct, ret=%d\r\n", ret);
|
DiagPrintf("SHA1 test result is correct, ret=%d\r\n", ret);
|
||||||
else
|
else
|
||||||
DiagPrintf("SHA test result is WRONG!!, ret=%d\r\n", ret);
|
DiagPrintf("SHA test result is WRONG!, ret=%d\r\n", ret);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//static const u8 plaintext[] = "The quick brown fox jumps over the lazy dog";
|
//static const u8 plaintext[] = "The quick brown fox jumps over the lazy dog";
|
||||||
|
@ -144,7 +144,7 @@ void test_md5(void)
|
||||||
if ( rtl_memcmpb(digest, md5_digest, 16) == 0 ) {
|
if ( rtl_memcmpb(digest, md5_digest, 16) == 0 ) {
|
||||||
DiagPrintf("MD5 test result is correct, ret=%d\r\n", ret);
|
DiagPrintf("MD5 test result is correct, ret=%d\r\n", ret);
|
||||||
} else {
|
} else {
|
||||||
DiagPrintf("MD5 test result is WRONG!!, ret=%d\r\n", ret);
|
DiagPrintf("MD5 test result is WRONG!, ret=%d\r\n", ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
for( i = 0; i < 16; i++ )
|
for( i = 0; i < 16; i++ )
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
4824
build/obj/build.nmap
4824
build/obj/build.nmap
File diff suppressed because it is too large
Load diff
|
@ -61,6 +61,7 @@
|
||||||
#define CONFIG_WDG 1
|
#define CONFIG_WDG 1
|
||||||
#undef CONFIG_WDG_NON
|
#undef CONFIG_WDG_NON
|
||||||
#define CONFIG_WDG_NORMAL 1
|
#define CONFIG_WDG_NORMAL 1
|
||||||
|
#define CONFIG_WDG_ON_IDLE 1 // add pvvx: wdt on -> main.c + tasks.c
|
||||||
#define CONFIG_GDMA_EN 1
|
#define CONFIG_GDMA_EN 1
|
||||||
#define CONFIG_GDMA_NORMAL 1
|
#define CONFIG_GDMA_NORMAL 1
|
||||||
#undef CONFIG_GDMA_TEST
|
#undef CONFIG_GDMA_TEST
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
/**
|
/**
|
||||||
* For AT cmd Log service configurations
|
* For AT cmd Log service configurations
|
||||||
*/
|
*/
|
||||||
#define SUPPORT_LOG_SERVICE 1
|
#define SUPPORT_LOG_SERVICE 0
|
||||||
#if SUPPORT_LOG_SERVICE
|
#if SUPPORT_LOG_SERVICE
|
||||||
#define LOG_SERVICE_BUFLEN 100 //can't larger than UART_LOG_CMD_BUFLEN(127)
|
#define LOG_SERVICE_BUFLEN 100 //can't larger than UART_LOG_CMD_BUFLEN(127)
|
||||||
#define CONFIG_LOG_HISTORY 0
|
#define CONFIG_LOG_HISTORY 0
|
||||||
|
|
|
@ -79,7 +79,7 @@ typedef struct _USR_server_setings
|
||||||
} mp3_server_setings;
|
} mp3_server_setings;
|
||||||
|
|
||||||
extern mp3_server_setings mp3_serv;
|
extern mp3_server_setings mp3_serv;
|
||||||
extern void at_USR_init(void);
|
extern void start_init(void);
|
||||||
|
|
||||||
#endif // CONFIG_AT_USR
|
#endif // CONFIG_AT_USR
|
||||||
|
|
||||||
|
|
332
project/src/driver/console_api.c
Normal file
332
project/src/driver/console_api.c
Normal file
|
@ -0,0 +1,332 @@
|
||||||
|
/*
|
||||||
|
* console_api.c
|
||||||
|
*
|
||||||
|
* Created on: 24/02/17
|
||||||
|
* Author: pvvx
|
||||||
|
*/
|
||||||
|
//======================================================
|
||||||
|
#define LOGUART_STACK_SIZE 400 // USE_MIN_STACK_SIZE modify from 512 to 128
|
||||||
|
#define CONSOLE_PRIORITY 1
|
||||||
|
//======================================================
|
||||||
|
#include "rtl8195a.h"
|
||||||
|
#include "rtl_bios_data.h"
|
||||||
|
#include "osdep_api.h"
|
||||||
|
#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1)
|
||||||
|
#include "freertos_pmu.h"
|
||||||
|
#else
|
||||||
|
#error "Define configUSE_WAKELOCK_PMU = 1 & configUSE_WAKELOCK_PMU = 1!"
|
||||||
|
#endif
|
||||||
|
#if defined(CONFIG_KERNEL) && !TASK_SCHEDULER_DISABLED
|
||||||
|
#else
|
||||||
|
#error "Define CONFIG_KERNEL & TASK_SCHEDULER_DISABLED = 0!"
|
||||||
|
#endif
|
||||||
|
#ifndef CONFIG_UART_LOG_HISTORY
|
||||||
|
#error "Define CONFIG_UART_LOG_HISTORY!"
|
||||||
|
#endif
|
||||||
|
//======================================================
|
||||||
|
// #define USE_ROM_CONSOLE
|
||||||
|
//======================================================
|
||||||
|
_LONG_CALL_ extern u8 UartLogCmdChk(
|
||||||
|
IN u8 RevData, IN UART_LOG_CTL *prvUartLogCtl,
|
||||||
|
IN u8 EchoFlag);
|
||||||
|
|
||||||
|
_LONG_CALL_ extern void ArrayInitialize(
|
||||||
|
IN u8 *pArrayToInit,
|
||||||
|
IN u8 ArrayLen,
|
||||||
|
IN u8 InitValue);
|
||||||
|
|
||||||
|
_LONG_CALL_ extern void UartLogHistoryCmd(
|
||||||
|
IN u8 RevData, IN UART_LOG_CTL *prvUartLogCtl,
|
||||||
|
IN u8 EchoFlag);
|
||||||
|
|
||||||
|
_LONG_CALL_ extern void UartLogCmdExecute(IN PUART_LOG_CTL pUartLogCtlExe);
|
||||||
|
//======================================================
|
||||||
|
extern PCOMMAND_TABLE UartLogRamCmdTable[];
|
||||||
|
extern UartLogRamCmdTableSize;
|
||||||
|
//======================================================
|
||||||
|
//<Function>: UartLogIrqHandleRam
|
||||||
|
//<Usage >: To deal with Uart-Log RX IRQ
|
||||||
|
//<Argus >: void
|
||||||
|
//<Return >: void
|
||||||
|
//<Notes >: NA
|
||||||
|
//======================================================
|
||||||
|
// overload original UartLogIrqHandle
|
||||||
|
MON_RAM_TEXT_SECTION
|
||||||
|
void UartLogIrqHandleRam(void * Data) {
|
||||||
|
uint32 IrqEn = DiagGetIsrEnReg(); // HAL_UART_READ32(UART_INTERRUPT_EN_REG_OFF)
|
||||||
|
DiagSetIsrEnReg(0); // HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, 0)
|
||||||
|
uint8 UartReceiveData = DiagGetChar(_FALSE); // if(flg) while(!(HAL_UART_READ32(UART_LINE_STATUS_REG_OFF)&1)); return HAL_UART_READ32(UART_REV_BUF_OFF);
|
||||||
|
if (UartReceiveData == 0) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
PUART_LOG_CTL p = pUartLogCtl;
|
||||||
|
//KB_ESC chk is for cmd history, it's a special case here.
|
||||||
|
if (UartReceiveData == KB_ASCII_ESC) {
|
||||||
|
// Esc detection is only valid in the first stage of boot sequence (few seconds)
|
||||||
|
if (p->ExecuteEsc != _TRUE) {
|
||||||
|
p->ExecuteEsc = _TRUE;
|
||||||
|
p->EscSTS = 0;
|
||||||
|
} else {
|
||||||
|
//4 the input commands are valid only when the task is ready to execute commands
|
||||||
|
if (p->BootRdy == 1 || p->TaskRdy == 1) {
|
||||||
|
if (p->EscSTS == 0) {
|
||||||
|
p->EscSTS = 1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
p->EscSTS = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (p->EscSTS == 1) {
|
||||||
|
if (UartReceiveData != KB_ASCII_LBRKT) { // '['
|
||||||
|
p->EscSTS = 0;
|
||||||
|
} else {
|
||||||
|
p->EscSTS = 2;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (p->EscSTS == 2) {
|
||||||
|
p->EscSTS = 0;
|
||||||
|
if (UartReceiveData == 'A' || UartReceiveData == 'B') {
|
||||||
|
// if(UartReceiveData == ...) set pUartLogCtl->SeeIdx ...
|
||||||
|
// prvStrCpy(pUartLogCtl->pTmpLogBuf->UARTLogBuf, pUartLogCtl->pHistoryBuf[pUartLogCtl->SeeIdx]);
|
||||||
|
// pUartLogCtl->pTmpLogBuf->BufCount = prvStrLen(pUartLogCtl->pTmpLogBuf->UARTLogBuf);
|
||||||
|
// if(EchoFlag) pUartLogCtl->pfINPUT(pUartLogCtl->pTmpLogBuf->UARTLogBuf);
|
||||||
|
UartLogHistoryCmd(UartReceiveData, (UART_LOG_CTL *) pUartLogCtl,
|
||||||
|
1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (UartLogCmdChk(UartReceiveData, (UART_LOG_CTL *) pUartLogCtl, 1)
|
||||||
|
== 2) {
|
||||||
|
// check UartLog buffer to prevent from incorrect access
|
||||||
|
if (p->pTmpLogBuf != NULL) {
|
||||||
|
p->ExecuteCmd = _TRUE;
|
||||||
|
if (p->TaskRdy) {
|
||||||
|
RtlUpSemaFromISR((_Sema *) &pUartLogCtl->Sema);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ArrayInitialize((u8 *) pUartLogCtl->pTmpLogBuf->UARTLogBuf,
|
||||||
|
UART_LOG_CMD_BUFLEN, '\0');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
exit:
|
||||||
|
DiagSetIsrEnReg(IrqEn); // HAL_UART_WRITE32(UART_INTERRUPT_EN_REG_OFF, IrqEn)
|
||||||
|
}
|
||||||
|
//======================================================
|
||||||
|
//<Function>: GetArgvRam
|
||||||
|
//<Usage >: парсигн аргументов строки
|
||||||
|
//<Argus >: pstr - указатель на строку
|
||||||
|
//<Return >: кол-во аргументов
|
||||||
|
//<Notes >: 2 формата:
|
||||||
|
// 1) cmd=arg1,arg2,...
|
||||||
|
// 2) cmd arg1 arg2
|
||||||
|
// arg может быть обрамлен '"' или '\''
|
||||||
|
// для передачи ' ' или ','.
|
||||||
|
// Начальные пробелы cmd или arg удаляются.
|
||||||
|
//======================================================
|
||||||
|
int GetArgvRam(IN u8 *pstr) {
|
||||||
|
int arvc = 0;
|
||||||
|
u8** argv = ArgvArray;
|
||||||
|
u8* p = pstr;
|
||||||
|
u8 t, n = ' ';
|
||||||
|
int m = 0;
|
||||||
|
while(*p != 0
|
||||||
|
&& *p != '\r'
|
||||||
|
&& *p != '\n'
|
||||||
|
&& arvc < MAX_ARGV
|
||||||
|
&& p < &pstr[UART_LOG_CMD_BUFLEN-1]) {
|
||||||
|
switch(m) {
|
||||||
|
case 0: // wait cmd
|
||||||
|
if(*p == ' ') {
|
||||||
|
// *p = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*argv++ = p;
|
||||||
|
arvc++;
|
||||||
|
m++;
|
||||||
|
break;
|
||||||
|
case 1: // test end cmd, type format parm
|
||||||
|
if(*p == ' ') { // format cmd arg1 arg2 ...
|
||||||
|
m++;
|
||||||
|
*p = 0;
|
||||||
|
} else if(*p == '=') { // "at" format cmd=arg1,arg2,...
|
||||||
|
n = ',';
|
||||||
|
m++;
|
||||||
|
*p = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2: // wait start arg
|
||||||
|
if(*p == ' ') {
|
||||||
|
*p = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if(*p == '"' || *p == '\'') {
|
||||||
|
t = *p;
|
||||||
|
m = 4;
|
||||||
|
*p = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*argv++ = p;
|
||||||
|
arvc++;
|
||||||
|
m++;
|
||||||
|
case 3: // end arg
|
||||||
|
if(*p == n) { // ' ' or ','
|
||||||
|
m = 2;
|
||||||
|
*p = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
*argv++ = p;
|
||||||
|
arvc++;
|
||||||
|
m++;
|
||||||
|
case 5:
|
||||||
|
if(*p == t) { // '\'' or '"'
|
||||||
|
m = 3;
|
||||||
|
*p = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
return arvc;
|
||||||
|
}
|
||||||
|
//======================================================
|
||||||
|
//<Function>: RtlConsolTaskRam
|
||||||
|
//<Usage >: overload original RtlConsolTaskRam
|
||||||
|
//<Argus >: Data - указатель PUART_LOG_CTL
|
||||||
|
//<Return >: none
|
||||||
|
//<Notes >:
|
||||||
|
//======================================================
|
||||||
|
MON_RAM_TEXT_SECTION void RtlConsolTaskRam(void *Data) {
|
||||||
|
PUART_LOG_CTL p = pUartLogCtl;
|
||||||
|
#ifdef USE_ROM_CONSOLE // show Help
|
||||||
|
p->pTmpLogBuf->UARTLogBuf[0] = '?';
|
||||||
|
p->pTmpLogBuf->BufCount = 1;
|
||||||
|
p->ExecuteCmd = _TRUE;
|
||||||
|
#endif
|
||||||
|
do {
|
||||||
|
p->TaskRdy = _TRUE;
|
||||||
|
RtlDownSema(&p->Sema);
|
||||||
|
if (p->ExecuteCmd) {
|
||||||
|
// UartLogCmdExecute(pUartLogCtl);
|
||||||
|
int argc = GetArgvRam(p->pTmpLogBuf->UARTLogBuf);
|
||||||
|
if(argc) {
|
||||||
|
StrUpr(ArgvArray[0]);
|
||||||
|
PCOMMAND_TABLE pcmd = p->pCmdTbl;
|
||||||
|
int flg = 1;
|
||||||
|
#ifdef USE_ROM_CONSOLE
|
||||||
|
for(int i = 0; i < p->CmdTblSz; i++) {
|
||||||
|
#else
|
||||||
|
while(pcmd->cmd) {
|
||||||
|
#endif
|
||||||
|
if(prvStrCmp(ArgvArray[0], pcmd->cmd) == 0) {
|
||||||
|
flg = 0;
|
||||||
|
if(pcmd->ArgvCnt < argc) {
|
||||||
|
#ifdef USE_ROM_CONSOLE
|
||||||
|
pcmd->func(argc-1, &ArgvArray[1]);
|
||||||
|
#else
|
||||||
|
pcmd->func(argc, &ArgvArray);
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
#ifdef USE_ROM_CONSOLE
|
||||||
|
DiagPrintf(pcmd->msg);
|
||||||
|
#else
|
||||||
|
DiagPrintf("%s%s\n", pcmd->cmd, pcmd->msg);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pcmd++;
|
||||||
|
}
|
||||||
|
if(flg) DiagPrintf("cmd: %s - nothing!\n", ArgvArray[0]);
|
||||||
|
#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1)
|
||||||
|
release_wakelock(WAKELOCK_LOGUART);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#if defined(configUSE_WAKELOCK_PMU) && (configUSE_WAKELOCK_PMU == 1)
|
||||||
|
else acquire_wakelock(WAKELOCK_LOGUART);
|
||||||
|
#endif
|
||||||
|
p->pTmpLogBuf->BufCount = 0;
|
||||||
|
p->pTmpLogBuf->UARTLogBuf[0] = 0;
|
||||||
|
HalSerialPutcRtl8195a('\r');
|
||||||
|
HalSerialPutcRtl8195a('>');
|
||||||
|
p->ExecuteCmd = _FALSE;
|
||||||
|
}
|
||||||
|
} while (1);
|
||||||
|
}
|
||||||
|
//======================================================
|
||||||
|
//<Function>: console_init
|
||||||
|
//<Usage >: Initialize rtl console
|
||||||
|
//<Argus >: none
|
||||||
|
//<Return >: none
|
||||||
|
//<Notes >: delete rtl_concole.h from project
|
||||||
|
//======================================================
|
||||||
|
MON_RAM_TEXT_SECTION void console_init(void) {
|
||||||
|
IRQ_HANDLE UartIrqHandle;
|
||||||
|
// Register Log Uart Callback function
|
||||||
|
UartIrqHandle.Data = 0; // (u32)&UartAdapter;
|
||||||
|
UartIrqHandle.IrqNum = UART_LOG_IRQ;
|
||||||
|
UartIrqHandle.IrqFun = (IRQ_FUN) UartLogIrqHandleRam;
|
||||||
|
UartIrqHandle.Priority = 0; // ??
|
||||||
|
// Register Isr handle
|
||||||
|
InterruptUnRegister(&UartIrqHandle);
|
||||||
|
#ifdef USE_ROM_CONSOLE // use ROM Consol init & printf "<RTL8195A>"
|
||||||
|
RtlConsolInit(RAM_STAGE, (u32) 6, (void*) UartLogRomCmdTable);
|
||||||
|
#else
|
||||||
|
UartLogBuf.BufCount = 0;
|
||||||
|
ArrayInitialize(&UartLogBuf.UARTLogBuf[0], UART_LOG_CMD_BUFLEN, '\0');
|
||||||
|
pUartLogCtl = &UartLogCtl;
|
||||||
|
pUartLogCtl->NewIdx = 0;
|
||||||
|
pUartLogCtl->SeeIdx = 0;
|
||||||
|
pUartLogCtl->EscSTS = 0;
|
||||||
|
pUartLogCtl->BootRdy = 0;
|
||||||
|
pUartLogCtl->pTmpLogBuf = &UartLogBuf;
|
||||||
|
pUartLogCtl->CRSTS = 0;
|
||||||
|
pUartLogCtl->pHistoryBuf = UartLogHistoryBuf;
|
||||||
|
pUartLogCtl->pfINPUT = (void*) &DiagPrintf;
|
||||||
|
pUartLogCtl->pCmdTbl = (PCOMMAND_TABLE) UartLogRamCmdTable;
|
||||||
|
pUartLogCtl->CmdTblSz = UartLogRamCmdTableSize/16; //6; // GetRomCmdNum()
|
||||||
|
pUartLogCtl->TaskRdy = 0;
|
||||||
|
#endif
|
||||||
|
pUartLogCtl->RevdNo = UART_LOG_HISTORY_LEN;
|
||||||
|
// Create a Semaphone
|
||||||
|
RtlInitSema(&pUartLogCtl->Sema, 1);
|
||||||
|
// executing boot sequence
|
||||||
|
pUartLogCtl->ExecuteCmd = _FALSE;
|
||||||
|
pUartLogCtl->ExecuteEsc = _TRUE; //don't check Esc anymore
|
||||||
|
InterruptRegister(&UartIrqHandle);
|
||||||
|
if (pdTRUE
|
||||||
|
!= xTaskCreate(RtlConsolTaskRam,
|
||||||
|
(const signed char * const )"loguart", LOGUART_STACK_SIZE,
|
||||||
|
NULL, tskIDLE_PRIORITY + CONSOLE_PRIORITY + PRIORITIE_OFFSET, NULL)) {
|
||||||
|
DiagPrintf("Create Log UART Task Err!!\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef USE_ROM_CONSOLE
|
||||||
|
//======================================================
|
||||||
|
//<Function>: console_help
|
||||||
|
//<Usage >: Initialize rtl console
|
||||||
|
//<Argus >: argc - кол-во аргуметов, argv - список аргументов
|
||||||
|
//<Return >: none
|
||||||
|
//<Notes >:
|
||||||
|
//======================================================
|
||||||
|
_WEAK void console_help(int argc, char *argv[]) { // Help
|
||||||
|
DiagPrintf("CONSOLE COMMAND SET:\n");
|
||||||
|
DiagPrintf("==============================\n");
|
||||||
|
PCOMMAND_TABLE pcmdtab = UartLogRamCmdTable;
|
||||||
|
while(pcmdtab->cmd) {
|
||||||
|
#ifdef USE_ROM_CONSOLE
|
||||||
|
DiagPrintf(pcmdtab->msg);
|
||||||
|
#else
|
||||||
|
DiagPrintf("%s%s\n", pcmdtab->cmd, pcmdtab->msg);
|
||||||
|
#endif
|
||||||
|
pcmdtab++;
|
||||||
|
}
|
||||||
|
DiagPrintf("==============================\n");
|
||||||
|
}
|
||||||
|
// (!) размещается в специальном сегменте '.mon.tab*' (см. *.ld файл)
|
||||||
|
MON_RAM_TAB_SECTION COMMAND_TABLE console_commands[] = {
|
||||||
|
{"?", 0, console_help, ": This Help"} // Help
|
||||||
|
// {"HELP", 0, console_help, ": Help"} // Help
|
||||||
|
};
|
||||||
|
#endif
|
|
@ -16,21 +16,14 @@
|
||||||
#include "user/atcmd_user.h"
|
#include "user/atcmd_user.h"
|
||||||
#include "user/playerconfig.h"
|
#include "user/playerconfig.h"
|
||||||
|
|
||||||
|
#include "sleep_ex_api.h"
|
||||||
|
|
||||||
|
#include "lwip/tcp_impl.h"
|
||||||
|
|
||||||
rtw_mode_t wifi_mode = RTW_MODE_STA;
|
rtw_mode_t wifi_mode = RTW_MODE_STA;
|
||||||
|
|
||||||
mp3_server_setings mp3_serv = {0,{0}}; //{ PLAY_PORT, { PLAY_SERVER }};
|
mp3_server_setings mp3_serv = {0,{0}}; //{ PLAY_PORT, { PLAY_SERVER }};
|
||||||
|
|
||||||
#define DEBUG_AT_USER_LEVEL 1
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
/*
|
|
||||||
#define _AT_WLAN_SET_SSID_ "ATW0"
|
|
||||||
#define _AT_WLAN_SET_PASSPHRASE_ "ATW1"
|
|
||||||
#define _AT_WLAN_SET_KEY_ID_ "ATW2"
|
|
||||||
#define _AT_WLAN_JOIN_NET_ "ATWC"
|
|
||||||
#define _AT_WLAN_SET_MP3_URL_ "ATWS"
|
|
||||||
*/
|
|
||||||
//extern struct netif xnetif[NET_IF_NUM];
|
|
||||||
|
|
||||||
/* fastconnect use wifi AT command. Not init_wifi_struct when log service disabled
|
/* fastconnect use wifi AT command. Not init_wifi_struct when log service disabled
|
||||||
* static initialize all values for using fastconnect when log service disabled
|
* static initialize all values for using fastconnect when log service disabled
|
||||||
*/
|
*/
|
||||||
|
@ -48,6 +41,9 @@ static unsigned char password[65] = {0};
|
||||||
|
|
||||||
_WEAK void connect_start(void)
|
_WEAK void connect_start(void)
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_DEBUG_LOG
|
||||||
|
printf("Time at start %d ms.\n", xTaskGetTickCount());
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
_WEAK void connect_close(void)
|
_WEAK void connect_close(void)
|
||||||
|
@ -70,65 +66,7 @@ static void init_wifi_struct(void)
|
||||||
ap.channel = 1;
|
ap.channel = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fATW0(void *arg){
|
static int mp3_cfg_read(void)
|
||||||
if(!arg){
|
|
||||||
printf("ATW0: Usage: ATW0=SSID\n");
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
#if DEBUG_AT_USER_LEVEL > 1
|
|
||||||
printf("ATW0: %s\n", (char*)arg);
|
|
||||||
#endif
|
|
||||||
strcpy((char *)wifi.ssid.val, (char*)arg);
|
|
||||||
wifi.ssid.len = strlen((char*)arg);
|
|
||||||
exit:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
void fATW1(void *arg){
|
|
||||||
#if DEBUG_AT_USER_LEVEL > 1
|
|
||||||
printf("ATW1: %s\n", (char*)arg);
|
|
||||||
#endif
|
|
||||||
strcpy((char *)password, (char*)arg);
|
|
||||||
wifi.password = password;
|
|
||||||
wifi.password_len = strlen((char*)arg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
void fATW2(void *arg){
|
|
||||||
#if DEBUG_AT_USER_LEVEL > 1
|
|
||||||
printf("ATW2: %s\n", (char*)arg);
|
|
||||||
#endif
|
|
||||||
if((strlen((const char *)arg) != 1 ) || (*(char*)arg <'0' ||*(char*)arg >'3')) {
|
|
||||||
printf("ATW2: Wrong WEP key id. Must be one of 0,1,2, or 3.\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
wifi.key_id = atoi((const char *)(arg));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test
|
|
||||||
void fATST(void *arg){
|
|
||||||
// AT_PRINTK("[ATS#]: _AT_SYSTEM_TEST_");
|
|
||||||
DBG_8195A("\nCLK CPU\t\t%d Hz\nRAM heap\t%d bytes\nTCM heap\t%d bytes\n",
|
|
||||||
HalGetCpuClk(), xPortGetFreeHeapSize(), tcm_heap_freeSpace());
|
|
||||||
dump_mem_block_list();
|
|
||||||
u32 saved = ConfigDebugInfo;
|
|
||||||
DBG_INFO_MSG_ON(_DBG_TCM_HEAP_); // On Debug TCM MEM
|
|
||||||
tcm_heap_dump();
|
|
||||||
ConfigDebugInfo = saved;
|
|
||||||
printf("\n");
|
|
||||||
#if (configGENERATE_RUN_TIME_STATS == 1)
|
|
||||||
char *cBuffer = pvPortMalloc(512);
|
|
||||||
if(cBuffer != NULL) {
|
|
||||||
vTaskGetRunTimeStats((char *)cBuffer);
|
|
||||||
printf("%s", cBuffer);
|
|
||||||
}
|
|
||||||
vPortFree(cBuffer);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int mp3_cfg_read(void)
|
|
||||||
{
|
{
|
||||||
bzero(&mp3_serv, sizeof(mp3_serv));
|
bzero(&mp3_serv, sizeof(mp3_serv));
|
||||||
if(flash_read_cfg(mp3_serv, 0x5000, sizeof(mp3_serv.port) + 2) >= sizeof(mp3_serv.port) + 2) {
|
if(flash_read_cfg(mp3_serv, 0x5000, sizeof(mp3_serv.port) + 2) >= sizeof(mp3_serv.port) + 2) {
|
||||||
|
@ -138,35 +76,37 @@ int mp3_cfg_read(void)
|
||||||
return mp3_serv.port;
|
return mp3_serv.port;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void start_init(void)
|
||||||
|
{
|
||||||
|
init_wifi_struct();
|
||||||
|
mp3_cfg_read();
|
||||||
|
}
|
||||||
|
|
||||||
// MP3 Set server, Close connect
|
// MP3 Set server, Close/Open connect
|
||||||
void fATWS(void *arg){
|
void fATWS(int argc, char *argv[]){
|
||||||
int argc = 0;
|
|
||||||
char *argv[MAX_ARGC] = {0};
|
|
||||||
if(arg) {
|
|
||||||
argc = parse_param(arg, argv);
|
|
||||||
if (argc == 2) {
|
if (argc == 2) {
|
||||||
|
StrUpr(argv[1]);
|
||||||
if(argv[1][0] == '?') {
|
if(argv[1][0] == '?') {
|
||||||
printf("ATWS: %s,%d\n", mp3_serv.url, mp3_serv.port);
|
printf("ATWS: %s,%d\n", mp3_serv.url, mp3_serv.port);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if(strcmp(argv[1], "open") == 0) {
|
else if(argv[1][0] == 'O') { // strcmp(argv[1], "open") == 0
|
||||||
printf("ATWS: open %s:%d\n", mp3_serv.url, mp3_serv.port);
|
printf("ATWS: open %s:%d\n", mp3_serv.url, mp3_serv.port);
|
||||||
connect_close();
|
connect_close();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if(strcmp(argv[1], "close") == 0) {
|
else if(argv[1][0] == 'C') { // strcmp(argv[1], "close") == 0
|
||||||
printf("ATWS: close\n");
|
printf("ATWS: close\n");
|
||||||
connect_close();
|
connect_close();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if(strcmp(argv[1], "read") == 0) {
|
else if(argv[1][0] == 'R') { // strcmp(argv[1], "read") == 0
|
||||||
mp3_cfg_read();
|
mp3_cfg_read();
|
||||||
connect_start();
|
connect_start();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if(strcmp(argv[1], "save") == 0) {
|
else if(argv[1][0] == 'S') { // strcmp(argv[1], "save") == 0
|
||||||
printf("ATWS: %s,%d\n", mp3_serv.url, mp3_serv.port);
|
printf("%s: %s,%d\n", argv[0], mp3_serv.url, mp3_serv.port);
|
||||||
if(flash_write_cfg(&mp3_serv, 0x5000, strlen(mp3_serv.port) + strlen(mp3_serv.url)))
|
if(flash_write_cfg(&mp3_serv, 0x5000, strlen(mp3_serv.port) + strlen(mp3_serv.url)))
|
||||||
printf("ATWS: saved\n", mp3_serv.url, mp3_serv.port);
|
printf("ATWS: saved\n", mp3_serv.url, mp3_serv.port);
|
||||||
return;
|
return;
|
||||||
|
@ -175,29 +115,64 @@ void fATWS(void *arg){
|
||||||
else if (argc >= 3 ) {
|
else if (argc >= 3 ) {
|
||||||
strcpy((char *)mp3_serv.url, (char*)argv[1]);
|
strcpy((char *)mp3_serv.url, (char*)argv[1]);
|
||||||
mp3_serv.port = atoi((char*)argv[2]);
|
mp3_serv.port = atoi((char*)argv[2]);
|
||||||
printf("ATWS: %s,%d\r\n", mp3_serv.url, mp3_serv.port);
|
printf("%s: %s,%d\r\n", argv[0], mp3_serv.url, mp3_serv.port);
|
||||||
connect_start();
|
connect_start();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
printf("ATWS: Usage: ATWS=URL,PORT or ATWS=close, ATWS=read, ATWS=save\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mem info
|
||||||
|
void fATST(void){
|
||||||
|
extern u8 __HeapLimit, __StackTop;
|
||||||
|
extern struct Heap g_tcm_heap;
|
||||||
|
printf("\nCLK CPU\t\t%d Hz\nRAM heap\t%d bytes\nTCM heap\t%d bytes\n",
|
||||||
|
HalGetCpuClk(), xPortGetFreeHeapSize(), tcm_heap_freeSpace());
|
||||||
|
dump_mem_block_list();
|
||||||
|
u32 saved = ConfigDebugInfo;
|
||||||
|
DBG_INFO_MSG_ON(_DBG_TCM_HEAP_); // On Debug TCM MEM
|
||||||
|
tcm_heap_dump();
|
||||||
|
ConfigDebugInfo = saved;
|
||||||
|
printf("\n");
|
||||||
|
#if (configGENERATE_RUN_TIME_STATS == 1)
|
||||||
|
char *cBuffer = pvPortMalloc(512);
|
||||||
|
if(cBuffer != NULL) {
|
||||||
|
vTaskGetRunTimeStats((char *)cBuffer);
|
||||||
|
printf("%s", cBuffer);
|
||||||
|
}
|
||||||
|
vPortFree(cBuffer);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void fATWC(void *arg){
|
void fATWC(int argc, char *argv[]){
|
||||||
int mode, ret;
|
int mode, ret;
|
||||||
unsigned long tick1 = xTaskGetTickCount();
|
unsigned long tick1 = xTaskGetTickCount();
|
||||||
unsigned long tick2, tick3;
|
unsigned long tick2, tick3;
|
||||||
char empty_bssid[6] = {0}, assoc_by_bssid = 0;
|
char empty_bssid[6] = {0}, assoc_by_bssid = 0;
|
||||||
|
|
||||||
connect_close();
|
if(argc > 1) {
|
||||||
#if DEBUG_AT_USER_LEVEL > 1
|
if(argv[1][0] == '?') {
|
||||||
printf("ATWC: Connect to AP...\n");
|
printf("Not released!\n");
|
||||||
#endif
|
return;
|
||||||
|
}
|
||||||
|
strcpy((char *)wifi.ssid.val, argv[1]);
|
||||||
|
wifi.ssid.len = strlen((char*)wifi.ssid.val);
|
||||||
|
}
|
||||||
|
if(argc > 2) {
|
||||||
|
strcpy((char *)password, argv[2]);
|
||||||
|
wifi.password = password;
|
||||||
|
wifi.password_len = strlen(password);
|
||||||
|
}
|
||||||
|
if(argc > 3) {
|
||||||
|
if((strlen(argv[3][0]) != 1 ) || (argv[3][0] <'0' || argv[3][0] >'3')) {
|
||||||
|
printf("%s: Wrong WEP key id. Must be one of 0,1,2, or 3.\n", argv[0]);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
wifi.key_id = atoi(argv[1]);
|
||||||
|
}
|
||||||
if(memcmp (wifi.bssid.octet, empty_bssid, 6))
|
if(memcmp (wifi.bssid.octet, empty_bssid, 6))
|
||||||
assoc_by_bssid = 1;
|
assoc_by_bssid = 1;
|
||||||
else if(wifi.ssid.val[0] == 0){
|
else if(wifi.ssid.val[0] == 0){
|
||||||
printf("ATWC: Error: SSID can't be empty\n");
|
printf("%s: Error: SSID can't be empty\n", argv[0]);
|
||||||
ret = RTW_BADARG;
|
ret = RTW_BADARG;
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
|
@ -212,12 +187,13 @@ void fATWC(void *arg){
|
||||||
else{
|
else{
|
||||||
wifi.security_type = RTW_SECURITY_OPEN;
|
wifi.security_type = RTW_SECURITY_OPEN;
|
||||||
}
|
}
|
||||||
|
connect_close();
|
||||||
//Check if in AP mode
|
//Check if in AP mode
|
||||||
wext_get_mode(WLAN0_NAME, &mode);
|
wext_get_mode(WLAN0_NAME, &mode);
|
||||||
if(mode == IW_MODE_MASTER) {
|
if(mode == IW_MODE_MASTER) {
|
||||||
dhcps_deinit();
|
dhcps_deinit();
|
||||||
wifi_off();
|
wifi_off();
|
||||||
vTaskDelay(20);
|
vTaskDelay(wifi_test_timeout_step_ms/portTICK_RATE_MS);
|
||||||
if (wifi_on(RTW_MODE_STA) < 0){
|
if (wifi_on(RTW_MODE_STA) < 0){
|
||||||
printf("ERROR: Wifi on failed!\n");
|
printf("ERROR: Wifi on failed!\n");
|
||||||
ret = RTW_ERROR;
|
ret = RTW_ERROR;
|
||||||
|
@ -225,6 +201,8 @@ void fATWC(void *arg){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///wifi_set_channel(1);
|
||||||
|
|
||||||
if(assoc_by_bssid){
|
if(assoc_by_bssid){
|
||||||
printf("Joining BSS by BSSID "MAC_FMT" ...\n", MAC_ARG(wifi.bssid.octet));
|
printf("Joining BSS by BSSID "MAC_FMT" ...\n", MAC_ARG(wifi.bssid.octet));
|
||||||
ret = wifi_connect_bssid(wifi.bssid.octet, (char*)wifi.ssid.val, wifi.security_type, (char*)wifi.password,
|
ret = wifi_connect_bssid(wifi.bssid.octet, (char*)wifi.ssid.val, wifi.security_type, (char*)wifi.password,
|
||||||
|
@ -240,27 +218,24 @@ void fATWC(void *arg){
|
||||||
goto EXIT;
|
goto EXIT;
|
||||||
}
|
}
|
||||||
tick2 = xTaskGetTickCount();
|
tick2 = xTaskGetTickCount();
|
||||||
printf("Connected after %dms\n", (tick2-tick1));
|
printf("Connected after %d ms\n", (tick2-tick1));
|
||||||
/* Start DHCPClient */
|
/* Start DHCPClient */
|
||||||
LwIP_DHCP(0, DHCP_START);
|
LwIP_DHCP(0, DHCP_START);
|
||||||
tick3 = xTaskGetTickCount();
|
tick3 = xTaskGetTickCount();
|
||||||
printf("Got IP after %dms\n", (tick3-tick1));
|
printf("Got IP after %d ms\n\n", (tick3-tick1));
|
||||||
printf("\n\r");
|
|
||||||
connect_start();
|
connect_start();
|
||||||
EXIT:
|
EXIT:
|
||||||
init_wifi_struct( );
|
init_wifi_struct( );
|
||||||
}
|
}
|
||||||
|
|
||||||
void fATWD(void *arg){
|
// WIFI Disconnect
|
||||||
int timeout = 20;
|
void fATWD(int argc, char *argv[]){
|
||||||
|
int timeout = wifi_test_timeout_ms/wifi_test_timeout_step_ms;;
|
||||||
char essid[33];
|
char essid[33];
|
||||||
int ret = RTW_SUCCESS;
|
int ret = RTW_SUCCESS;
|
||||||
|
|
||||||
connect_close();
|
connect_close();
|
||||||
#if DEBUG_AT_USER_LEVEL > 1
|
printf("Deassociating AP ...\n");
|
||||||
printf("ATWD: Disconnect...\n");
|
|
||||||
#endif
|
|
||||||
printf("Dissociating AP ...\n");
|
|
||||||
if(wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) < 0) {
|
if(wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) < 0) {
|
||||||
printf("WIFI disconnected\n");
|
printf("WIFI disconnected\n");
|
||||||
goto exit;
|
goto exit;
|
||||||
|
@ -283,7 +258,7 @@ void fATWD(void *arg){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
vTaskDelay(1 * configTICK_RATE_HZ);
|
vTaskDelay(wifi_test_timeout_step_ms/portTICK_RATE_MS);
|
||||||
timeout --;
|
timeout --;
|
||||||
}
|
}
|
||||||
printf("\n\r");
|
printf("\n\r");
|
||||||
|
@ -292,89 +267,250 @@ exit:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dump register
|
/*-------------------------------------------------------------------------------------
|
||||||
void fATSD(void *arg)
|
Копирует данные из области align(4) (flash, registers, ...) в область align(1) (ram)
|
||||||
|
--------------------------------------------------------------------------------------*/
|
||||||
|
extern void copy_align4_to_align1(unsigned char * pd, void * ps, unsigned int len);
|
||||||
|
/*
|
||||||
|
static void copy_align4_to_align1(unsigned char * pd, void * ps, unsigned int len)
|
||||||
{
|
{
|
||||||
int argc = 0;
|
union {
|
||||||
char *argv[MAX_ARGC] = {0};
|
unsigned char uc[4];
|
||||||
|
unsigned int ud;
|
||||||
|
}tmp;
|
||||||
|
unsigned int *p = (unsigned int *)((unsigned int)ps & (~3));
|
||||||
|
unsigned int xlen = (unsigned int)ps & 3;
|
||||||
|
// unsigned int size = len;
|
||||||
|
|
||||||
#if DEBUG_AT_USER_LEVEL > 1
|
if(xlen) {
|
||||||
printf("ATSD: dump registers\n");
|
tmp.ud = *p++;
|
||||||
#endif
|
while (len) {
|
||||||
if(!arg){
|
len--;
|
||||||
printf("ATSD: Usage: ATSD=REGISTER");
|
*pd++ = tmp.uc[xlen++];
|
||||||
return;
|
if(xlen & 4) break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
argc = parse_param(arg, argv);
|
xlen = len >> 2;
|
||||||
if(argc == 2 || argc == 3)
|
while(xlen) {
|
||||||
CmdDumpWord(argc-1, (unsigned char**)(argv+1));
|
tmp.ud = *p++;
|
||||||
|
*pd++ = tmp.uc[0];
|
||||||
|
*pd++ = tmp.uc[1];
|
||||||
|
*pd++ = tmp.uc[2];
|
||||||
|
*pd++ = tmp.uc[3];
|
||||||
|
xlen--;
|
||||||
|
}
|
||||||
|
if(len & 3) {
|
||||||
|
tmp.ud = *p;
|
||||||
|
pd[0] = tmp.uc[0];
|
||||||
|
if(len & 2) {
|
||||||
|
pd[1] = tmp.uc[1];
|
||||||
|
if(len & 1) {
|
||||||
|
pd[2] = tmp.uc[2];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// return size;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
int print_hex_dump(uint8_t *buf, int len, unsigned char k) {
|
||||||
|
uint32_t ss[2];
|
||||||
|
ss[0] = 0x78323025; // "%02x"
|
||||||
|
ss[1] = k; // ","...'\0'
|
||||||
|
uint8_t * ptr = buf;
|
||||||
|
int result = 0;
|
||||||
|
while (len--) {
|
||||||
|
if (len == 0)
|
||||||
|
ss[1] = 0;
|
||||||
|
result += printf((uint8_t *) &ss, *ptr++);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fATSW(void *arg)
|
extern char str_rom_hex_addr[]; // in *.ld "[Addr] .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F\n"
|
||||||
|
// Dump byte register
|
||||||
|
void fATSB(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int argc = 0;
|
uint8 buf[17];
|
||||||
char *argv[MAX_ARGC] = {0};
|
int size = 0;
|
||||||
|
int addr = Strtoul(argv[1],0,16);
|
||||||
#if DEBUG_AT_USER_LEVEL > 1
|
if (argc > 2)
|
||||||
printf("ATSW: write register\n");
|
size = Strtoul(argv[2],0,10);
|
||||||
#endif
|
if (size <= 0 || size > 16384)
|
||||||
if(!arg){
|
size = 1;
|
||||||
printf("ATSW: Usage: ATSW=REGISTER,DATA");
|
u32 symbs_line = sizeof(buf)-1;
|
||||||
return;
|
printf(str_rom_hex_addr);
|
||||||
|
while (size) {
|
||||||
|
if (symbs_line > size) symbs_line = size;
|
||||||
|
printf("%08X ", addr);
|
||||||
|
copy_align4_to_align1(buf, addr, symbs_line);
|
||||||
|
print_hex_dump(buf, symbs_line, ' ');
|
||||||
|
int i;
|
||||||
|
for(i = 0 ; i < symbs_line ; i++) {
|
||||||
|
if(buf[i] < 0x20 || buf[i] > 0x7E) {
|
||||||
|
buf[i] = '.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buf[symbs_line] = 0;
|
||||||
|
i = (sizeof(buf)-1) - symbs_line;
|
||||||
|
while(i--) printf(" ");
|
||||||
|
printf(" %s\r\n", buf);
|
||||||
|
addr += symbs_line;
|
||||||
|
size -= symbs_line;
|
||||||
}
|
}
|
||||||
argc = parse_param(arg, argv);
|
|
||||||
if(argc == 2 || argc == 3)
|
|
||||||
CmdWriteWord(argc-1, (unsigned char**)(argv+1));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///// MP3 Set Mode
|
// Dump dword register
|
||||||
// MP3 Off
|
void fATSD(int argc, char *argv[])
|
||||||
void fATOF(void *arg)
|
{
|
||||||
|
CmdDumpWord(argc-1, (unsigned char**)(argv+1));
|
||||||
|
}
|
||||||
|
|
||||||
|
void fATSW(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
CmdWriteWord(argc-1, (unsigned char**)(argv+1));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close connections
|
||||||
|
void fATOF(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
#if DEBUG_AT_USER_LEVEL > 1
|
|
||||||
printf("ATOF: MP3 off...\n");
|
|
||||||
#endif
|
|
||||||
connect_close();
|
connect_close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Open connections
|
||||||
void print_wlan_help(void *arg){
|
void fATON(int argc, char *argv[])
|
||||||
printf("WLAN AT COMMAND SET:\n");
|
{
|
||||||
printf("==============================\n");
|
connect_start();
|
||||||
printf(" Set MP3 server\n");
|
|
||||||
printf("\t# ATWS=URL,PORT\n");
|
|
||||||
printf("\tSample:\tATWS=icecast.omroep.nl/3fm-sb-mp3,80\n");
|
|
||||||
printf("\t\tATWS=meuk.spritesserver.nl/Ii.Romanzeandante.mp3,80\n");
|
|
||||||
printf("\t\tATWS=?, ATWS=close, ATWS=save, ATWS=read\n");
|
|
||||||
printf(" Connect to an AES AP\n");
|
|
||||||
printf("\t# ATW0=SSID\n");
|
|
||||||
printf("\t# ATW1=PASSPHRASE\n");
|
|
||||||
printf("\t# ATWC\n");
|
|
||||||
printf(" DisConnect AP\n");
|
|
||||||
printf("\t# ATWD\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
log_item_t at_user_items[ ] = {
|
/* Get one byte from the 4-byte address */
|
||||||
{"ATW0", fATW0,},
|
#define ip4_addr1(ipaddr) (((u8_t*)(ipaddr))[0])
|
||||||
{"ATW1", fATW1,},
|
#define ip4_addr2(ipaddr) (((u8_t*)(ipaddr))[1])
|
||||||
{"ATW2", fATW2,},
|
#define ip4_addr3(ipaddr) (((u8_t*)(ipaddr))[2])
|
||||||
{"ATWC", fATWC,},
|
#define ip4_addr4(ipaddr) (((u8_t*)(ipaddr))[3])
|
||||||
{"ATST", fATST,},
|
/* These are cast to u16_t, with the intent that they are often arguments
|
||||||
{"ATSD", fATSD,}, // Dump register
|
* to printf using the U16_F format from cc.h. */
|
||||||
{"ATSW", fATSW,}, // Set register
|
#define ip4_addr1_16(ipaddr) ((u16_t)ip4_addr1(ipaddr))
|
||||||
{"ATWD", fATWD,}, //
|
#define ip4_addr2_16(ipaddr) ((u16_t)ip4_addr2(ipaddr))
|
||||||
{"ATWS", fATWS,}, // MP3 Set server, Close connect
|
#define ip4_addr3_16(ipaddr) ((u16_t)ip4_addr3(ipaddr))
|
||||||
{"ATOF", fATOF,}, // MP3 Set Mode
|
#define ip4_addr4_16(ipaddr) ((u16_t)ip4_addr4(ipaddr))
|
||||||
|
|
||||||
|
#define IP2STR(ipaddr) ip4_addr1_16(ipaddr), \
|
||||||
|
ip4_addr2_16(ipaddr), \
|
||||||
|
ip4_addr3_16(ipaddr), \
|
||||||
|
ip4_addr4_16(ipaddr)
|
||||||
|
|
||||||
|
#define IPSTR "%d.%d.%d.%d"
|
||||||
|
|
||||||
|
extern const char * const tcp_state_str[];
|
||||||
|
/*
|
||||||
|
static const char * const tcp_state_str[] = {
|
||||||
|
"CLOSED",
|
||||||
|
"LISTEN",
|
||||||
|
"SYN_SENT",
|
||||||
|
"SYN_RCVD",
|
||||||
|
"ESTABLISHED",
|
||||||
|
"FIN_WAIT_1",
|
||||||
|
"FIN_WAIT_2",
|
||||||
|
"CLOSE_WAIT",
|
||||||
|
"CLOSING",
|
||||||
|
"LAST_ACK",
|
||||||
|
"TIME_WAIT"
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
/******************************************************************************
|
||||||
|
* FunctionName : debug
|
||||||
|
* Parameters :
|
||||||
|
* Returns :
|
||||||
|
*******************************************************************************/
|
||||||
|
void print_udp_pcb(void)
|
||||||
|
{
|
||||||
|
struct udp_pcb *pcb;
|
||||||
|
bool prt_none = true;
|
||||||
|
rtl_printf("UDP pcbs:\n");
|
||||||
|
for(pcb = udp_pcbs; pcb != NULL; pcb = pcb->next) {
|
||||||
|
rtl_printf("flg:%02x\t" IPSTR ":%d\t" IPSTR ":%d\trecv:%p\n", pcb->flags, IP2STR(&pcb->local_ip), pcb->local_port, IP2STR(&pcb->remote_ip), pcb->remote_port, pcb->recv );
|
||||||
|
prt_none = false;
|
||||||
|
}
|
||||||
|
if(prt_none) rtl_printf("none\n");
|
||||||
|
}
|
||||||
|
/******************************************************************************
|
||||||
|
* FunctionName : debug
|
||||||
|
* Parameters :
|
||||||
|
* Returns :
|
||||||
|
*******************************************************************************/
|
||||||
|
void print_tcp_pcb(void)
|
||||||
|
{
|
||||||
|
struct tcp_pcb *pcb;
|
||||||
|
rtl_printf("Active PCB states:\n");
|
||||||
|
bool prt_none = true;
|
||||||
|
for(pcb = tcp_active_pcbs; pcb != NULL; pcb = pcb->next) {
|
||||||
|
rtl_printf("Port %d|%d\tflg:%02x\ttmr:%p\t%s\n", pcb->local_port, pcb->remote_port, pcb->flags, pcb->tmr, tcp_state_str[pcb->state]);
|
||||||
|
prt_none = false;
|
||||||
|
}
|
||||||
|
if(prt_none) rtl_printf("none\n");
|
||||||
|
rtl_printf("Listen PCB states:\n");
|
||||||
|
prt_none = true;
|
||||||
|
for(pcb = (struct tcp_pcb *)tcp_listen_pcbs.pcbs; pcb != NULL; pcb = pcb->next) {
|
||||||
|
rtl_printf("Port %d|%d\tflg:%02x\ttmr:%p\t%s\n", pcb->local_port, pcb->remote_port, pcb->flags, pcb->tmr, tcp_state_str[pcb->state]);
|
||||||
|
prt_none = false;
|
||||||
|
}
|
||||||
|
if(prt_none) rtl_printf("none\n");
|
||||||
|
rtl_printf("TIME-WAIT PCB states:\n");
|
||||||
|
prt_none = true;
|
||||||
|
for(pcb = tcp_tw_pcbs; pcb != NULL; pcb = pcb->next) {
|
||||||
|
rtl_printf("Port %d|%d\tflg:%02x\ttmr:%p\t%s\n", pcb->local_port, pcb->remote_port, pcb->flags, pcb->tmr, tcp_state_str[pcb->state]);
|
||||||
|
prt_none = false;
|
||||||
|
}
|
||||||
|
if(prt_none) rtl_printf("none\n");
|
||||||
|
}
|
||||||
|
/******************************************************************************
|
||||||
|
* FunctionName : debug
|
||||||
|
* Parameters :
|
||||||
|
* Returns :
|
||||||
|
*******************************************************************************/
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
void fATLW(int argc, char *argv[]) // Info Lwip
|
||||||
|
{
|
||||||
|
print_udp_pcb();
|
||||||
|
print_tcp_pcb();
|
||||||
|
}
|
||||||
|
|
||||||
|
void fATDS(int argc, char *argv[]) // Deep sleep
|
||||||
|
{
|
||||||
|
uint32 sleep_ms = 10000;
|
||||||
|
if(argc > 2) sleep_ms = atoi(argv[1]);
|
||||||
|
#if 0
|
||||||
|
// turn off log uart
|
||||||
|
sys_log_uart_off();
|
||||||
|
// initialize wakeup pin at PB_1
|
||||||
|
gpio_t gpio_wake;
|
||||||
|
gpio_init(&gpio_wake, PB_1);
|
||||||
|
gpio_dir(&gpio_wake, PIN_INPUT);
|
||||||
|
gpio_mode(&gpio_wake, PullDown);
|
||||||
|
|
||||||
|
// enter deep sleep
|
||||||
|
deepsleep_ex(DSLEEP_WAKEUP_BY_GPIO | DSLEEP_WAKEUP_BY_TIMER, 10000); */
|
||||||
|
// standby_wakeup_event_add(STANDBY_WAKEUP_BY_STIMER, 10000, 0);
|
||||||
|
// deepstandby_ex();
|
||||||
|
// sleep_ex(SLEEP_WAKEUP_BY_STIMER, 8000); // sleep_ex can't be put in irq handler
|
||||||
|
// release_wakelock(WAKELOCK_OS);
|
||||||
|
#else
|
||||||
|
deepsleep_ex(DSLEEP_WAKEUP_BY_TIMER, sleep_ms);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
MON_RAM_TAB_SECTION COMMAND_TABLE console_commands1[] = {
|
||||||
|
{"ATPN", 1, fATWC, "=<SSID>[,<PASSPHRASE>[,WEPKEY]]: WIFI Connect to AP"},
|
||||||
|
{"ATWS", 1, fATWS, "=<URL,PORT>: MP3 Connect to URL\nATWS=<c>[lose]: Close MP3\nATWS=<r>[ead]: Read MP3 URL\nATWS=<s>[ave]: Save MP3 URL\nATWS=<?>: URL Info"},
|
||||||
|
{"ATWD", 0, fATWD, ": WIFI Disconnect"},
|
||||||
|
{"ATST", 0, fATST, ": Memory info"},
|
||||||
|
{"ATLW", 0, fATLW, ": Lwip Info"},
|
||||||
|
{"ATSB", 1, fATSB, "=<ADDRES(hex)>[,COUNT(dec)]: Dump byte register"},
|
||||||
|
{"ATSD", 1, fATSD, "=<ADDRES(hex)>[,COUNT(dec)]: Dump dword register"},
|
||||||
|
{"ATSW", 2, fATSW, "=<ADDRES(hex)>,<DATA(hex)>: Set register"},
|
||||||
|
{"ATDS", 0, fATDS, "=[TIME(ms)]: Deep sleep"},
|
||||||
|
{"ATON", 0, fATON, ": Open connections"},
|
||||||
|
{"ATOF", 0, fATOF, ": Close connections"}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void at_user_init(void)
|
|
||||||
{
|
|
||||||
init_wifi_struct();
|
|
||||||
mp3_cfg_read();
|
|
||||||
log_service_add_table(at_user_items, sizeof(at_user_items)/sizeof(at_user_items[0]));
|
|
||||||
}
|
|
||||||
|
|
||||||
log_module_init(at_user_init);
|
|
||||||
|
|
||||||
#endif //#ifdef CONFIG_AT_USR
|
#endif //#ifdef CONFIG_AT_USR
|
||||||
|
|
|
@ -471,7 +471,7 @@ void connect_start(void) {
|
||||||
tskreader_enable = 1;
|
tskreader_enable = 1;
|
||||||
if (xTaskCreate(tskreader, "tskreader", 300, NULL, PRIO_READER, NULL) != pdPASS) {
|
if (xTaskCreate(tskreader, "tskreader", 300, NULL, PRIO_READER, NULL) != pdPASS) {
|
||||||
#if DEBUG_MAIN_LEVEL > 0
|
#if DEBUG_MAIN_LEVEL > 0
|
||||||
DBG_8195A("\n\r%s xTaskCreate(tskreader) failed", __FUNCTION__);
|
DBG_8195A("\n%s xTaskCreate(tskreader) failed!\n", __FUNCTION__);
|
||||||
#endif
|
#endif
|
||||||
tskreader_enable = 0;
|
tskreader_enable = 0;
|
||||||
}
|
}
|
||||||
|
@ -483,17 +483,16 @@ void connect_start(void) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Main program.
|
* @brief Main program.
|
||||||
* @param None
|
* @param None
|
||||||
* @retval None
|
* @retval None
|
||||||
*/
|
*/
|
||||||
|
void main(void)
|
||||||
void main(void) {
|
{
|
||||||
#if DEBUG_MAIN_LEVEL > 3
|
#if DEBUG_MAIN_LEVEL > 3
|
||||||
ConfigDebugErr = -1;
|
ConfigDebugErr = -1;
|
||||||
ConfigDebugInfo = -1; //~_DBG_SPI_FLASH_;
|
ConfigDebugInfo = ~(_DBG_SPI_FLASH_);//|_DBG_TCM_HEAP_);
|
||||||
ConfigDebugWarn = -1;
|
ConfigDebugWarn = -1;
|
||||||
CfgSysDebugErr = -1;
|
CfgSysDebugErr = -1;
|
||||||
CfgSysDebugInfo = -1;
|
CfgSysDebugInfo = -1;
|
||||||
|
@ -503,10 +502,10 @@ void main(void) {
|
||||||
#if CPU_CLOCK_SEL_DIV5_3
|
#if CPU_CLOCK_SEL_DIV5_3
|
||||||
// 6 - 200000000 Hz, 7 - 10000000 Hz, 8 - 50000000 Hz, 9 - 25000000 Hz, 10 - 12500000 Hz, 11 - 4000000 Hz
|
// 6 - 200000000 Hz, 7 - 10000000 Hz, 8 - 50000000 Hz, 9 - 25000000 Hz, 10 - 12500000 Hz, 11 - 4000000 Hz
|
||||||
HalCpuClkConfig(CPU_CLOCK_SEL_VALUE);
|
HalCpuClkConfig(CPU_CLOCK_SEL_VALUE);
|
||||||
*((int *)0x40000074) |= (1<<17); // REG_SYS_SYSPLL_CTRL1 |= BIT_SYS_SYSPLL_DIV5_3
|
*((int *)(SYSTEM_CTRL_BASE+REG_SYS_SYSPLL_CTRL1)) |= (1<<17); // REG_SYS_SYSPLL_CTRL1 |= BIT_SYS_SYSPLL_DIV5_3
|
||||||
#else
|
#else
|
||||||
// 0 - 166666666 Hz, 1 - 83333333 Hz, 2 - 41666666 Hz, 3 - 20833333 Hz, 4 - 10416666 Hz, 5 - 4000000 Hz
|
// 0 - 166666666 Hz, 1 - 83333333 Hz, 2 - 41666666 Hz, 3 - 20833333 Hz, 4 - 10416666 Hz, 5 - 4000000 Hz
|
||||||
*((int *)0x40000074) &= ~(1<<17); // REG_SYS_SYSPLL_CTRL1 &= ~BIT_SYS_SYSPLL_DIV5_3
|
*((int *)(SYSTEM_CTRL_BASE+REG_SYS_SYSPLL_CTRL1)) &= ~(1<<17); // REG_SYS_SYSPLL_CTRL1 &= ~BIT_SYS_SYSPLL_DIV5_3
|
||||||
HalCpuClkConfig(CPU_CLOCK_SEL_VALUE);
|
HalCpuClkConfig(CPU_CLOCK_SEL_VALUE);
|
||||||
#endif
|
#endif
|
||||||
HAL_LOG_UART_ADAPTER pUartAdapter;
|
HAL_LOG_UART_ADAPTER pUartAdapter;
|
||||||
|
@ -515,17 +514,24 @@ void main(void) {
|
||||||
SystemCoreClockUpdate();
|
SystemCoreClockUpdate();
|
||||||
En32KCalibration();
|
En32KCalibration();
|
||||||
}
|
}
|
||||||
|
#ifdef CONFIG_WDG_ON_IDLE
|
||||||
#if defined(CONFIG_CRYPTO_STARTUP) && (CONFIG_CRYPTO_STARTUP)
|
HAL_PERI_ON_WRITE32(REG_SOC_FUNC_EN, HAL_PERI_ON_READ32(REG_SOC_FUNC_EN) & 0x1FFFFF);
|
||||||
if ( rtl_cryptoEngine_init() != 0 ) {
|
WDGInitial(5000); // 5 s
|
||||||
DBG_8195A("crypto engine init failed\r\n");
|
WDGStart();
|
||||||
|
#endif
|
||||||
|
#if (defined(CONFIG_CRYPTO_STARTUP) && (CONFIG_CRYPTO_STARTUP))
|
||||||
|
if(rtl_cryptoEngine_init() != 0 ) {
|
||||||
|
DBG_8195A("Crypto engine init failed!\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if DEBUG_MAIN_LEVEL > 0
|
#if DEBUG_MAIN_LEVEL > 0
|
||||||
vPortFree(pvPortMalloc(4)); // Init RAM heap
|
vPortFree(pvPortMalloc(4)); // Init RAM heap
|
||||||
fATST(NULL); // RAM/TCM/Heaps info
|
fATST(); // RAM/TCM/Heaps info
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
start_init(); // in atcmd_user.c
|
||||||
|
|
||||||
/* pre-processor of application example */
|
/* pre-processor of application example */
|
||||||
pre_example_entry();
|
pre_example_entry();
|
||||||
|
|
||||||
|
@ -537,7 +543,7 @@ void main(void) {
|
||||||
console_init();
|
console_init();
|
||||||
|
|
||||||
/* Execute application example */
|
/* Execute application example */
|
||||||
example_entry();
|
// example_entry();
|
||||||
|
|
||||||
/*Enable Schedule, Start Kernel*/
|
/*Enable Schedule, Start Kernel*/
|
||||||
#if defined(CONFIG_KERNEL) && !TASK_SCHEDULER_DISABLED
|
#if defined(CONFIG_KERNEL) && !TASK_SCHEDULER_DISABLED
|
||||||
|
|
16
sdkset.mk
16
sdkset.mk
|
@ -89,13 +89,13 @@ SRC_C += sdk/component/soc/realtek/8195a/misc/rtl_std_lib/lib_rtlstd/rtl_math_ra
|
||||||
SRC_C += sdk/component/soc/realtek/8195a/cmsis/device/system_8195a.c
|
SRC_C += sdk/component/soc/realtek/8195a/cmsis/device/system_8195a.c
|
||||||
|
|
||||||
#console
|
#console
|
||||||
SRC_C += sdk/component/common/api/at_cmd/atcmd_ethernet.c
|
#SRC_C += sdk/component/common/api/at_cmd/atcmd_ethernet.c
|
||||||
SRC_C += sdk/component/common/api/at_cmd/atcmd_lwip.c
|
#SRC_C += sdk/component/common/api/at_cmd/atcmd_lwip.c
|
||||||
SRC_C += sdk/component/common/api/at_cmd/atcmd_sys.c
|
#SRC_C += sdk/component/common/api/at_cmd/atcmd_sys.c
|
||||||
SRC_C += sdk/component/common/api/at_cmd/atcmd_wifi.c
|
#SRC_C += sdk/component/common/api/at_cmd/atcmd_wifi.c
|
||||||
SRC_C += sdk/component/common/api/at_cmd/log_service.c
|
#SRC_C += sdk/component/common/api/at_cmd/log_service.c
|
||||||
SRC_C += sdk/component/soc/realtek/8195a/misc/driver/low_level_io.c
|
SRC_C += sdk/component/soc/realtek/8195a/misc/driver/low_level_io.c
|
||||||
SRC_C += sdk/component/soc/realtek/8195a/misc/driver/rtl_consol.c
|
#SRC_C += sdk/component/soc/realtek/8195a/misc/driver/rtl_consol.c
|
||||||
|
|
||||||
#network - api
|
#network - api
|
||||||
SRC_C += sdk/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_eap_config.c
|
SRC_C += sdk/component/common/api/wifi/rtw_wpa_supplicant/wpa_supplicant/wifi_eap_config.c
|
||||||
|
@ -187,7 +187,7 @@ SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/analogin_api.c
|
||||||
SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/dma_api.c
|
SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/dma_api.c
|
||||||
SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/efuse_api.c
|
SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/efuse_api.c
|
||||||
SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/ethernet_api.c
|
SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/ethernet_api.c
|
||||||
SRC_C += sdk/component/common/drivers/ethernet_mii/ethernet_mii.c
|
#SRC_C += sdk/component/common/drivers/ethernet_mii/ethernet_mii.c
|
||||||
SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/flash_api.c
|
SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/flash_api.c
|
||||||
SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/gpio_api.c
|
SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/gpio_api.c
|
||||||
SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/gpio_irq_api.c
|
SRC_C += sdk/component/common/mbed/targets/hal/rtl8195a/gpio_irq_api.c
|
||||||
|
@ -401,6 +401,8 @@ ADD_SRC_C += project/src/mad/stream.c
|
||||||
|
|
||||||
#driver
|
#driver
|
||||||
ADD_SRC_C += project/src/driver/i2s_freertos.c
|
ADD_SRC_C += project/src/driver/i2s_freertos.c
|
||||||
|
#ADD_SRC_C += project/src/driver/wifi_api.c
|
||||||
|
ADD_SRC_C += project/src/driver/console_api.c
|
||||||
|
|
||||||
#include
|
#include
|
||||||
INCLUDES += project/inc/mad
|
INCLUDES += project/inc/mad
|
||||||
|
|
Loading…
Reference in a new issue