91 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**
 | |
|  * Copyright (c) 2022 Raspberry Pi (Trading) Ltd.
 | |
|  *
 | |
|  * SPDX-License-Identifier: BSD-3-Clause
 | |
|  */
 | |
| 
 | |
| #include "pico/cyw43_arch.h"
 | |
| #include "pico/stdlib.h"
 | |
| 
 | |
| #include "lwip/ip4_addr.h"
 | |
| 
 | |
| #include "FreeRTOS.h"
 | |
| #include "task.h"
 | |
| #include "ping.h"
 | |
| 
 | |
| #ifndef PING_ADDR
 | |
| #define PING_ADDR "142.251.35.196"
 | |
| #endif
 | |
| #ifndef RUN_FREERTOS_ON_CORE
 | |
| #define RUN_FREERTOS_ON_CORE 0
 | |
| #endif
 | |
| 
 | |
| #define TEST_TASK_PRIORITY				( tskIDLE_PRIORITY + 1UL )
 | |
| 
 | |
| void main_task(__unused void *params) {
 | |
|     if (cyw43_arch_init()) {
 | |
|         printf("failed to initialise\n");
 | |
|         return;
 | |
|     }
 | |
|     cyw43_arch_enable_sta_mode();
 | |
|     printf("Connecting to WiFi...\n");
 | |
|     if (cyw43_arch_wifi_connect_timeout_ms(WIFI_SSID, WIFI_PASSWORD, CYW43_AUTH_WPA2_AES_PSK, 30000)) {
 | |
|         printf("failed to connect.\n");
 | |
|         exit(1);
 | |
|     } else {
 | |
|         printf("Connected.\n");
 | |
|     }
 | |
| 
 | |
|     ip_addr_t ping_addr;
 | |
|     ip4_addr_set_u32(&ping_addr, ipaddr_addr(PING_ADDR));
 | |
|     ping_init(&ping_addr);
 | |
| 
 | |
|     while(true) {
 | |
|         // not much to do as LED is in another task, and we're using RAW (callback) lwIP API
 | |
|         vTaskDelay(100);
 | |
|     }
 | |
| 
 | |
|     cyw43_arch_deinit();
 | |
| }
 | |
| 
 | |
| void vLaunch( void) {
 | |
|     TaskHandle_t task;
 | |
|     xTaskCreate(main_task, "TestMainThread", configMINIMAL_STACK_SIZE, NULL, TEST_TASK_PRIORITY, &task);
 | |
| 
 | |
| #if NO_SYS && configUSE_CORE_AFFINITY && configNUM_CORES > 1
 | |
|     // we must bind the main task to one core (well at least while the init is called)
 | |
|     // (note we only do this in NO_SYS mode, because cyw43_arch_freertos
 | |
|     // takes care of it otherwise)
 | |
|     vTaskCoreAffinitySet(task, 1);
 | |
| #endif
 | |
| 
 | |
|     /* Start the tasks and timer running. */
 | |
|     vTaskStartScheduler();
 | |
| }
 | |
| 
 | |
| int main( void )
 | |
| {
 | |
|     stdio_init_all();
 | |
| 
 | |
|     /* Configure the hardware ready to run the demo. */
 | |
|     const char *rtos_name;
 | |
| #if ( portSUPPORT_SMP == 1 )
 | |
|     rtos_name = "FreeRTOS SMP";
 | |
| #else
 | |
|     rtos_name = "FreeRTOS";
 | |
| #endif
 | |
| 
 | |
| #if ( portSUPPORT_SMP == 1 ) && ( configNUM_CORES == 2 )
 | |
|     printf("Starting %s on both cores:\n", rtos_name);
 | |
|     vLaunch();
 | |
| #elif ( RUN_FREE_RTOS_ON_CORE == 1 )
 | |
|     printf("Starting %s on core 1:\n", rtos_name);
 | |
|     multicore_launch_core1(vLaunch);
 | |
|     while (true);
 | |
| #else
 | |
|     printf("Starting %s on core 0:\n", rtos_name);
 | |
|     vLaunch();
 | |
| #endif
 | |
|     return 0;
 | |
| }
 |