main.c 2.22 KB
Newer Older
Rahix's avatar
Rahix committed
1
#include <stdio.h>
Rahix's avatar
Rahix committed
2
3
#include <stdlib.h>

Rahix's avatar
Rahix committed
4
#include "uart.h"
5
#include "cdcacm.h"
Rahix's avatar
Rahix committed
6
7

#include "card10.h"
Rahix's avatar
Rahix committed
8
#include "leds.h"
Rahix's avatar
Rahix committed
9
#include "api/dispatcher.h"
Rahix's avatar
Rahix committed
10
#include "serial.h"
Rahix's avatar
Rahix committed
11

Rahix's avatar
Rahix committed
12
13
#include "FreeRTOS.h"
#include "task.h"
Rahix's avatar
Rahix committed
14

Rahix's avatar
Rahix committed
15
void epic_leds_set(int led, uint8_t r, uint8_t g, uint8_t b)
Rahix's avatar
Rahix committed
16
{
Rahix's avatar
Rahix committed
17
18
	leds_set(led, r, g, b);
	leds_update();
Rahix's avatar
Rahix committed
19
20
}

Rahix's avatar
Rahix committed
21
void vApiDispatcher(void*pvParameters)
Rahix's avatar
Rahix committed
22
{
Rahix's avatar
Rahix committed
23
24
25
	while (1) {
		api_dispatcher_poll();
		vTaskDelay(portTICK_PERIOD_MS * 10);
Rahix's avatar
Rahix committed
26
	}
Rahix's avatar
Rahix committed
27
}
Rahix's avatar
Rahix committed
28

Rahix's avatar
Rahix committed
29
30
31
32
void vApplicationGetIdleTaskMemory(
	StaticTask_t**ppxIdleTaskTCBBuffer,
	StackType_t**ppxIdleTaskStackBuffer,
	uint32_t *pulIdleTaskStackSize)
33
{
Rahix's avatar
Rahix committed
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
	/*
	 * If the buffers to be provided to the Idle task are declared inside this
	 * function then they must be declared static - otherwise they will be allocated on
	 * the stack and so not exists after this function exits.
	 */
	static StaticTask_t xIdleTaskTCB;
	static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ];

	/*
	 * Pass out a pointer to the StaticTask_t structure in which the Idle task's
	 * ktate will be stored.
	 */
	*ppxIdleTaskTCBBuffer = &xIdleTaskTCB;

	/* Pass out the array that will be used as the Idle task's stack. */
	*ppxIdleTaskStackBuffer = uxIdleTaskStack;

	/*
	 * Pass out the size of the array pointed to by *ppxIdleTaskStackBuffer.
	 * Note that, as the array is necessarily of type StackType_t,
	 * configMINIMAL_STACK_SIZE is specified in words, not bytes.
	 */
	*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
57
58
}

Rahix's avatar
Rahix committed
59
60
61
62
int main(void)
{
	card10_init();
	card10_diag();
Rahix's avatar
Rahix committed
63

Rahix's avatar
Rahix committed
64
	cdcacm_init();
65

Rahix's avatar
Rahix committed
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
	printf("Initializing tasks ...\n");

	/* Serial */
	if (xTaskCreate(
		vSerialTask,
		(const char*)"Serial",
		configMINIMAL_STACK_SIZE,
		NULL,
		tskIDLE_PRIORITY + 1,
		NULL
	) != pdPASS) {
		printf("Failed to create serial-comms task!\n");
		abort();
	}

	if (xTaskCreate(
		vApiDispatcher,
		(const char*)"API Dispatcher",
		configMINIMAL_STACK_SIZE,
		NULL,
		tskIDLE_PRIORITY  + 2,
		NULL
	) != pdPASS) {
		printf("Failed to create api dispatcher task!\n");
		abort();
	}

Rahix's avatar
Rahix committed
93
94
95
	printf("Initializing dispatcher ...\n");
	api_dispatcher_init();

Rahix's avatar
Rahix committed
96
97
	printf("Staring core1 payload ...\n");
	core1_start();
Rahix's avatar
Rahix committed
98

Rahix's avatar
Rahix committed
99
100
101
102
	vTaskStartScheduler();
	printf("ERROR: FreeRTOS did not start due to above error!\n");

#if 0
Rahix's avatar
Rahix committed
103
104
105
106
	while(1) {
		__WFE();
		api_dispatcher_poll();
	}
Rahix's avatar
Rahix committed
107
#endif
Rahix's avatar
Rahix committed
108
}