/** * @brief Create and send a dynamic Web Page. This page contains the list of * running tasks and the number of page hits. * @param conn connection socket * @retval None */ void DynWebPage(int conn) { portCHAR pagehits[10]; memset(PAGE_BODY, 0,512); /* Update the hit count */ nPageHits++; sprintf( pagehits, "%d", (int)nPageHits ); strcat(PAGE_BODY, pagehits); strcat((char *) PAGE_BODY, "<pre><br>Name State Priority Stack Num" ); strcat((char *) PAGE_BODY, "<br>---------------------------------------------<br>"); /* The list of tasks and their status */ osThreadList((unsigned char *)(PAGE_BODY + strlen(PAGE_BODY))); strcat((char *) PAGE_BODY, "<br><br>---------------------------------------------"); strcat((char *) PAGE_BODY, "<br>B : Blocked, R : Ready, D : Deleted, S : Suspended<br>"); /* Send the dynamically generated page */ write(conn, PAGE_START, strlen((char*)PAGE_START)); write(conn, PAGE_BODY, strlen(PAGE_BODY)); }
static portCHAR *http_generate_platform_stats_page( void ) { portCHAR dynamic_text[ 128 ] = { 0 }; portCHAR headerRow[ 128 ]; rtems_interval elapsed_time = rtems_clock_get_ticks_since_boot() / rtems_clock_get_ticks_per_second(); uint32_t hours; uint32_t minutes; uint32_t seconds; hours = elapsed_time / 3600UL; elapsed_time -= hours * 3600UL; minutes = elapsed_time / 60; elapsed_time -= minutes * 60; seconds = elapsed_time; memset( DYNAMIC_PAGE_CONTENT, 0, sizeof( DYNAMIC_PAGE_CONTENT ) ); /* Update the hit count */ nPageHits++; strncat( DYNAMIC_PAGE_CONTENT, PAGE_HEADER_DYNAMIC, sizeof( DYNAMIC_PAGE_CONTENT ) - strlen( DYNAMIC_PAGE_CONTENT ) ); snprintf( dynamic_text, sizeof( dynamic_text ), "Page refresh count %d", (int) nPageHits ); strncat( DYNAMIC_PAGE_CONTENT, dynamic_text, sizeof( DYNAMIC_PAGE_CONTENT ) - strlen( DYNAMIC_PAGE_CONTENT ) ); snprintf( dynamic_text, sizeof( dynamic_text ), "<p>Number of Ethernet Packets (RX: %lu, TX %lu)", stm32f_ethernet_get_num_rx_msg(), stm32f_ethernet_get_num_tx_msg() ); strncat( DYNAMIC_PAGE_CONTENT, dynamic_text, sizeof( DYNAMIC_PAGE_CONTENT ) - strlen( DYNAMIC_PAGE_CONTENT ) ); snprintf( dynamic_text, sizeof( dynamic_text ), "<p>Uptime: %lu hours, %lu minutes, %lu second", hours, minutes, seconds); strncat( DYNAMIC_PAGE_CONTENT, dynamic_text, sizeof( DYNAMIC_PAGE_CONTENT ) - strlen( DYNAMIC_PAGE_CONTENT ) ); #ifdef REPORT_STACK_USAGE static uint32_t last_stack_report = 0; if(last_stack_report != minutes) { rtems_stack_checker_report_usage(); last_stack_report = minutes; } #endif snprintf( headerRow, sizeof( headerRow ), "<pre><br>%4s\t%16s\t%8s\t%10s\t%8s", "Name", "Task State", "Stk Addr", "Stk Sz", "rtems_id" ); strncat( (char *) DYNAMIC_PAGE_CONTENT, headerRow, sizeof( DYNAMIC_PAGE_CONTENT ) - strlen( DYNAMIC_PAGE_CONTENT ) ); strncat( (char *) DYNAMIC_PAGE_CONTENT, "<br>------------------------------------------------------------------------------<br>", sizeof( DYNAMIC_PAGE_CONTENT ) - strlen( DYNAMIC_PAGE_CONTENT ) ); /* The list of tasks and their status */ osThreadList( (unsigned char *) ( DYNAMIC_PAGE_CONTENT + strlen( DYNAMIC_PAGE_CONTENT ) ) ); strncat( (char *) DYNAMIC_PAGE_CONTENT, "<br>--------------------------------------------------------------------------</pre></body></html>", sizeof( DYNAMIC_PAGE_CONTENT ) - strlen( DYNAMIC_PAGE_CONTENT ) ); return (portCHAR *) DYNAMIC_PAGE_CONTENT; }