diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 671c2492c4aa2f13ad4ea8b4ddcbd078d7a6043d..feb307badd2e6ca8436f9b65d497f5eb1c3912e3 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -93,10 +93,6 @@ void Error_Handler(void); #define USB_PowerSwitchOn_GPIO_Port GPIOG #define USB_OverCurrent_Pin GPIO_PIN_7 #define USB_OverCurrent_GPIO_Port GPIOG -#define LED1_Pin GPIO_PIN_8 -#define LED1_GPIO_Port GPIOC -#define LED2_Pin GPIO_PIN_9 -#define LED2_GPIO_Port GPIOC #define USB_SOF_Pin GPIO_PIN_8 #define USB_SOF_GPIO_Port GPIOA #define USB_VBUS_Pin GPIO_PIN_9 @@ -111,10 +107,6 @@ void Error_Handler(void); #define TMS_GPIO_Port GPIOA #define TCK_Pin GPIO_PIN_14 #define TCK_GPIO_Port GPIOA -#define LED3_Pin GPIO_PIN_10 -#define LED3_GPIO_Port GPIOC -#define LED4_Pin GPIO_PIN_11 -#define LED4_GPIO_Port GPIOC #define btn1_Pin GPIO_PIN_4 #define btn1_GPIO_Port GPIOD #define btn1_EXTI_IRQn EXTI4_IRQn diff --git a/Core/Src/main.c b/Core/Src/main.c index 112eb151861409a21f9ba5a4773a58949aa5694b..7923db85fb488835020840a307e1de90a6dc923e 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -24,9 +24,12 @@ /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include <stdlib.h> +#include <stdio.h> +#include <math.h> #include "ws2812b.h" #include "queue.h" #include "semphr.h" +//#define DEBUG /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ @@ -101,6 +104,10 @@ SemaphoreHandle_t SemBtn1Handle; SemaphoreHandle_t SemBtn2Handle; SemaphoreHandle_t SemBtn3Handle; SemaphoreHandle_t SemBtn4Handle; +SemaphoreHandle_t SemBtnRelease1Handle; +SemaphoreHandle_t SemBtnRelease2Handle; +SemaphoreHandle_t SemBtnRelease3Handle; +SemaphoreHandle_t SemBtnRelease4Handle; SemaphoreHandle_t SemStartGameHandle; typedef enum { false, true } bool; @@ -113,6 +120,15 @@ typedef struct matrix_s { uint16_t delay; } matrix_s; +typedef struct activeLED_s { + uint8_t leds; + uint16_t delay; +} activeLED_s; + +typedef struct point_s { + uint16_t p; +} point_s; + /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ @@ -123,7 +139,7 @@ static void MX_USART3_UART_Init(void); static void MX_USB_OTG_FS_PCD_Init(void); static void MX_TIM2_Init(void); void Levels(void *argument); -void Task02(void *argument); +void LEDMatrix(void *argument); void Validate(void *argument); void Display(void *argument); @@ -131,19 +147,11 @@ void Display(void *argument); extern int rand(void); extern TIM_HandleTypeDef htim7; -void lcd_init(void); -void lcd_put_cur(int, int); -void lcd_send_data(char); -void ldc_send_cmd(char); -void send_to_lcd(char,int); -void lcd_send_string(char*); -void lcd_clear(void); - /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ - +uint8_t CarRet[]={'\r', '\n'}; /* USER CODE END 0 */ /** @@ -179,20 +187,6 @@ int main(void) MX_USB_OTG_FS_PCD_Init(); MX_TIM2_Init(); /* USER CODE BEGIN 2 */ - - -// lcd_init(); -// lcd_clear(); -// lcd_put_cur(0, 0); -// lcd_send_string("HELLO "); -// // lcd_send_string("WORLD "); -// // lcd_send_string("FROM"); -// // HAL_Delay(1000); -// lcd_put_cur(1, 0); -// lcd_send_string("CONTROLLERSTECH"); -// lcd_clear(); - // HAL_Delay(2000); - // lcd_clear(); /* USER CODE END 2 */ @@ -210,15 +204,19 @@ int main(void) /* creation of SemBtn1 */ SemBtn1Handle = xSemaphoreCreateBinary(); + SemBtnRelease1Handle = xSemaphoreCreateBinary(); /* creation of SemBtn2 */ SemBtn2Handle = xSemaphoreCreateBinary(); + SemBtnRelease2Handle = xSemaphoreCreateBinary(); /* creation of SemBtn3 */ SemBtn3Handle = xSemaphoreCreateBinary(); + SemBtnRelease3Handle = xSemaphoreCreateBinary(); /* creation of SemBtn4 */ SemBtn4Handle = xSemaphoreCreateBinary(); + SemBtnRelease4Handle = xSemaphoreCreateBinary(); /* creation of SemStartGame */ SemStartGameHandle = xSemaphoreCreateBinary(); @@ -234,7 +232,7 @@ int main(void) toLEDMatrixHandle = osMessageQueueNew (16, sizeof(matrix_s), &toLEDMatrix_attributes); /* creation of fromLEDMatrix */ - fromLEDMatrixHandle = osMessageQueueNew (16, sizeof(matrix_s), &fromLEDMatrix_attributes); + fromLEDMatrixHandle = osMessageQueueNew (16, sizeof(activeLED_s), &fromLEDMatrix_attributes); /* creation of toDisplayQueue */ toDisplayQueueHandle = osMessageQueueNew (16, sizeof(uint16_t), &toDisplayQueue_attributes); @@ -248,18 +246,17 @@ int main(void) Task1Handle = osThreadNew(Levels, NULL, &Task1_attributes); /* creation of Task2 */ - Task2Handle = osThreadNew(Task02, NULL, &Task2_attributes); + Task2Handle = osThreadNew(LEDMatrix, NULL, &Task2_attributes); /* creation of Task3 */ -// Task3Handle = osThreadNew(Validate, NULL, &Task3_attributes); + Task3Handle = osThreadNew(Validate, NULL, &Task3_attributes); -// /* creation of Task4 */ -// Task4Handle = osThreadNew(Display, NULL, &Task4_attributes); + /* creation of Task4 */ + Task4Handle = osThreadNew(Display, NULL, &Task4_attributes); /* USER CODE BEGIN RTOS_THREADS */ /* add threads, ... */ -// osThreadTerminate(Task1Handle); -// osThreadTerminate(Task3Handle); + /* USER CODE END RTOS_THREADS */ /* USER CODE BEGIN RTOS_EVENTS */ @@ -510,9 +507,6 @@ static void MX_GPIO_Init(void) /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(USB_PowerSwitchOn_GPIO_Port, USB_PowerSwitchOn_Pin, GPIO_PIN_RESET); - /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOC, LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin, GPIO_PIN_RESET); - /*Configure GPIO pins : LCD_D7_Pin LCD_D4_Pin LCD_D5_Pin LCD_D6_Pin */ GPIO_InitStruct.Pin = LCD_D7_Pin|LCD_D4_Pin|LCD_D5_Pin|LCD_D6_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; @@ -553,17 +547,10 @@ static void MX_GPIO_Init(void) GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(USB_OverCurrent_GPIO_Port, &GPIO_InitStruct); - /*Configure GPIO pins : LED1_Pin LED2_Pin LED3_Pin LED4_Pin */ - GPIO_InitStruct.Pin = LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); - /*Configure GPIO pins : btn1_Pin btn2_Pin btn3_Pin btn4_Pin */ GPIO_InitStruct.Pin = btn1_Pin|btn2_Pin|btn3_Pin|btn4_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; - GPIO_InitStruct.Pull = GPIO_PULLDOWN; + GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); /* EXTI interrupt init*/ @@ -580,144 +567,56 @@ static void MX_GPIO_Init(void) /* USER CODE BEGIN 4 */ -void send_to_lcd (char data, int rs) -{ - HAL_GPIO_WritePin(LCD_RS_GPIO_Port, LCD_RS_Pin, rs); // rs = 1 for data, rs=0 for command - /* write the data to the respective pin */ - HAL_GPIO_WritePin(LCD_D7_GPIO_Port, LCD_D7_Pin, ((data>>3)&0x01)); - HAL_GPIO_WritePin(LCD_D6_GPIO_Port, LCD_D6_Pin, ((data>>2)&0x01)); - HAL_GPIO_WritePin(LCD_D5_GPIO_Port, LCD_D5_Pin, ((data>>1)&0x01)); - HAL_GPIO_WritePin(LCD_D4_GPIO_Port, LCD_D4_Pin, ((data>>0)&0x01)); - /* Toggle EN PIN to send the data - * if the HCLK > 100 MHz, use the 20 us delay - * if the LCD still doesn't work, increase the delay to 50, 80 or 100.. - */ - HAL_GPIO_WritePin(LCD_E_GPIO_Port, LCD_E_Pin, 1); - vTaskDelay(20); - HAL_GPIO_WritePin(LCD_E_GPIO_Port, LCD_E_Pin, 0); - vTaskDelay(20); -} - -void lcd_send_cmd (char cmd) -{ - char datatosend; - /* send upper nibble first */ - datatosend = ((cmd>>4)&0x0f); - send_to_lcd(datatosend,0); // RS must be while sending command - /* send Lower Nibble */ - datatosend = ((cmd)&0x0f); - send_to_lcd(datatosend, 0); -} - -void lcd_send_data (char data) -{ - char datatosend; - - /* send higher nibble */ - datatosend = ((data>>4)&0x0f); - send_to_lcd(datatosend, 1); // rs =1 for sending data - /* send Lower nibble */ - datatosend = ((data)&0x0f); - send_to_lcd(datatosend, 1); -} - -void lcd_init (void) -{ - // 4 bit initialisation - HAL_Delay(50); // wait for >40ms - lcd_send_cmd (0x30); - HAL_Delay(5); // wait for >4.1ms - lcd_send_cmd (0x30); - HAL_Delay(1); // wait for >100us - lcd_send_cmd (0x30); - HAL_Delay(10); - lcd_send_cmd (0x20); // 4bit mode - HAL_Delay(10); - - // dislay initialisation - lcd_send_cmd (0x28); // Function set --> DL=0 (4 bit mode), N = 1 (2 line display) F = 0 (5x8 characters) - HAL_Delay(1); - lcd_send_cmd (0x08); //Display on/off control --> D=0,C=0, B=0 ---> display off - HAL_Delay(1); - lcd_send_cmd (0x01); // clear display - HAL_Delay(1); - HAL_Delay(1); - lcd_send_cmd (0x06); //Entry mode set --> I/D = 1 (increment cursor) & S = 0 (no shift) - HAL_Delay(1); - lcd_send_cmd (0x0C); //Display on/off control --> D = 1, C and B = 0. (Cursor and blink, last two bits) -} - -void lcd_put_cur(int row, int col) -{ - switch (row) - { - case 0: - col |= 0x80; - break; - case 1: - col |= 0xC0; - break; - } - - lcd_send_cmd (col); -} - -void lcd_send_string (char *str) -{ - while (*str) lcd_send_data (*str++); -} - -void lcd_clear (void) -{ - lcd_send_cmd(0x01); - HAL_Delay(2); -} - - void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { - - int buttonState; // the current reading from the input pin -int lastButtonState = 1; // the previous reading from the input pin - unsigned long lastDebounceTime = 0; // the last time the output pin was toggled -unsigned long debounceDelay = 5000; // the debounce time; increase if the output flickers - - if(GPIO_Pin == btn1) { - if (HAL_GetTick() - lastDebounceTime >= debounceDelay) { - HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_8); - xSemaphoreGiveFromISR(SemBtn1Handle, NULL); - HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0|GPIO_PIN_7|GPIO_PIN_14); - lastDebounceTime = HAL_GetTick(); + if(xSemaphoreTakeFromISR(SemBtnRelease1Handle, NULL) == pdTRUE) { + xSemaphoreGiveFromISR(SemBtn1Handle, NULL); + #ifdef DEBUG + uint8_t msg[]={"gB1 "}; + HAL_UART_Transmit(&huart3,msg,sizeof(msg),10); + #endif } } else if(GPIO_Pin == btn2) { - HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9); - xSemaphoreGiveFromISR(SemBtn2Handle, NULL); - //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7); + if(xSemaphoreTakeFromISR(SemBtnRelease2Handle, NULL) == pdTRUE) { + xSemaphoreGiveFromISR(SemBtn2Handle, NULL); + #ifdef DEBUG + uint8_t msg[]={"gB2 "}; + HAL_UART_Transmit(&huart3,msg,sizeof(msg),10); + #endif + } } else if(GPIO_Pin == btn3) { - HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_10); - xSemaphoreGiveFromISR(SemBtn3Handle, NULL); - //HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_14); + if(xSemaphoreTakeFromISR(SemBtnRelease3Handle, NULL) == pdTRUE) { + xSemaphoreGiveFromISR(SemBtn3Handle, NULL); + #ifdef DEBUG + uint8_t msg[]={"gB3 "}; + HAL_UART_Transmit(&huart3,msg,sizeof(msg),10); + #endif + } } else if(GPIO_Pin == btn4) { - HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_11); - xSemaphoreGiveFromISR(SemBtn4Handle, NULL); -// HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0|GPIO_PIN_7|GPIO_PIN_14); + if(xSemaphoreTakeFromISR(SemBtnRelease4Handle, NULL) == pdTRUE) { + xSemaphoreGiveFromISR(SemBtn4Handle, NULL); + #ifdef DEBUG + uint8_t msg[]={"gB4 "}; + HAL_UART_Transmit(&huart3,msg,sizeof(msg),10); + #endif + } } else if(GPIO_Pin == USER_Btn_Pin) { srand( xTaskGetTickCountFromISR() ); xSemaphoreGiveFromISR(SemStartGameHandle, NULL); -// HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0|GPIO_PIN_7|GPIO_PIN_14); - //HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|GPIO_PIN_7|GPIO_PIN_14, GPIO_PIN_RESET); - //HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11); - HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_9); + xSemaphoreGiveFromISR(SemBtnRelease1Handle, NULL); + xSemaphoreGiveFromISR(SemBtnRelease2Handle, NULL); + xSemaphoreGiveFromISR(SemBtnRelease3Handle, NULL); + xSemaphoreGiveFromISR(SemBtnRelease4Handle, NULL); } } @@ -737,7 +636,6 @@ void Levels(void *argument) int random; int rand1; int rand2; - int rand3; int counter=0; int number; int delay = 758; @@ -820,160 +718,165 @@ void Levels(void *argument) /* USER CODE END 5 */ } -/* USER CODE BEGIN Header_Task02 */ +/* USER CODE BEGIN Header_LEDMatrix */ /** * @brief Function implementing the Task2 thread. * @param argument: Not used * @retval None */ -/* USER CODE END Header_Task02 */ -void Task02(void *argument) +/* USER CODE END Header_LEDMatrix */ +void LEDMatrix(void *argument) { - /* USER CODE BEGIN Task02 */ - - // init constants & variables - enum ROW { ROW1, ROW2, ROW3, ROW4 }; - const uint8_t ROWS = 4; - const uint8_t FIELDS = 16; // 4 rows and 4 columns = 16 - uint32_t colors[] = { - WHITE - ,BLUE - ,PURPLE - ,RED - ,GREEN - ,ORANGE - ,TURQUOISE - ,YELLOW - ,SPRINGGREEN - ,OCEAN - ,CYAN - ,RASPBERRY - }; - uint32_t led_matrix[] = { - 0,0,0,0, - 0,0,0,0, - 0,0,0,0, - 0,0,0,0 - }; - - uint8_t num_colors = sizeof(colors) / sizeof(uint32_t); - LED led = *get_instance(); - const uint8_t gameRowXOR = 0xf; - uint16_t delay = 400; - bool isRunning = false; - bool scrollOut = false; - uint8_t scrollCounter = 0; - - // init Matrix - const uint8_t say_hi[] = {1,2,3,6,9,10,11,12,14,15}; - const uint8_t say_hi_length = sizeof(say_hi) / sizeof(uint8_t); - for(uint8_t i=0; i < say_hi_length-3; i++) led_matrix[say_hi[i]] = TURQUOISE; - for(uint8_t i=say_hi_length-3; i < say_hi_length; i++) led_matrix[say_hi[i]] = RED; - - /* Infinite loop */ - while(1) { - - // set led matrix to current colors - led.LED_set_all_off(0); - uint8_t LEDMatrixIndex = 0; - for(uint8_t cube = 0; cube < FIELDS;) { - for(uint8_t column = 0; column <= 6; column+=2) { - led.LED_set_RGB_32(LEDMatrixIndex , led_matrix[cube]); - led.LED_set_RGB_32(LEDMatrixIndex ^ gameRowXOR , led_matrix[cube]); - led.LED_set_RGB_32(LEDMatrixIndex+1 , led_matrix[cube]); - led.LED_set_RGB_32(LEDMatrixIndex+1 ^ gameRowXOR, led_matrix[cube]); - cube++; - LEDMatrixIndex += 2; - } - LEDMatrixIndex += 8; - } - led.LED_transmit(); - // end set colors - - // try to take Semaphore from IRQ if user pressed USER_BTN to start game - if ( scrollOut || xSemaphoreTake( SemStartGameHandle, ( TickType_t ) 10 ) == pdTRUE ) { - //scroll out "Hi" - scrollOut = true; - scrollCounter++; - if (scrollCounter > 5) { - isRunning = true; - // release Levels Semaphore - xSemaphoreGive( SemLevelsHandle ); - } - } - // end take sem from IRQ - - if (isRunning) { - // check matrix if set a color - // 3,7,11,15 = last elements in each row - uint8_t activeLEDs = 0; - if (led_matrix[3] > 0) activeLEDs += 1; - if (led_matrix[7] > 0) activeLEDs += 2; - if (led_matrix[11] > 0) activeLEDs += 4; - if (led_matrix[15] > 0) activeLEDs += 8; - if (activeLEDs > 0) xQueueSend(fromLEDMatrixHandle, &activeLEDs, (portTickType) 1); - // end check last row - } - - if (isRunning || scrollOut) { - // shift matrix to next LED in each row after vTaskDelay - for(uint8_t row = 0; row < FIELDS; row+=ROWS) { - for(uint8_t i = row+ROW4; i > row; i--) { - led_matrix[i] = led_matrix[i-1]; - //if (i%1 == 0) - led_matrix[i-1] = OFF; - } - } - // end shifting down - } - - if (isRunning) { - // checking queue for new incoming elements - matrix_s recvQueue; - if (xQueueReceive(toLEDMatrixHandle, &recvQueue, (portTickType) 10 ) == true) - { - // player lost, showing "ToT", reseting values - if (recvQueue.hasLost) { - const uint8_t say_tot[] = { - 1,9,10,11,12,13,14,17, // 8 - 20,21,25,28,35,38,42, // 7 - 43,46,49,50,51,52,53,54,62}; // 9 - led.LED_set_all_off(0); - const uint8_t say_tot_length = sizeof(say_tot) / sizeof(uint8_t); - for(uint8_t i=0; i < 8; i++) led.LED_set_RGB_32(say_tot[i], TURQUOISE); - for(uint8_t i=15; i < say_tot_length; i++) led.LED_set_RGB_32(say_tot[i], RED); - for(uint8_t i=8; i < 8+8; i++) led.LED_set_RGB_32(say_tot[i], YELLOW); - led.LED_transmit(); - - isRunning = false; - delay = 250; - for(uint8_t i = 0; i < FIELDS; i++) led_matrix[i] = 0; // Reset game table - xSemaphoreGive( SemStartGameHandle ); - } - // end "hasLost" - - // set color if received a specific 1-bit - // first in row: 0, 4, 8, 12 - if (recvQueue.nextLED > 0) { - for(uint8_t i=ROW1; i <= ROW4; i++) { - uint8_t checkBit = 1 << i; - if ((recvQueue.nextLED & checkBit) == checkBit) { - // select a random color from color_array - uint32_t newColor = colors[rand() % num_colors]; - led_matrix[i*4] = newColor; - } - } - delay = recvQueue.delay; - } - // end set nextLED - xSemaphoreGive( SemLevelsHandle ); - } - // end queue check - } - // end isRunning - vTaskDelay(delay); - } - /* USER CODE END Task02 */ + /* USER CODE BEGIN LEDMatrix */ + + // init constants & variables + enum ROW { ROW1, ROW2, ROW3, ROW4 }; + const uint8_t ROWS = 4; + const uint8_t FIELDS = 16; // 4 rows and 4 columns = 16 + uint32_t colors[] = { + WHITE + ,BLUE + ,PURPLE + ,RED + ,GREEN + ,ORANGE + ,TURQUOISE + ,YELLOW + ,SPRINGGREEN + ,OCEAN + ,CYAN + ,RASPBERRY + }; + uint32_t led_matrix[] = { + 0,0,0,0, + 0,0,0,0, + 0,0,0,0, + 0,0,0,0 + }; + + uint8_t num_colors = sizeof(colors) / sizeof(uint32_t); + LED led = *get_instance(); + const uint8_t gameRowXOR = 0xf; + uint16_t delay = 400; + bool isRunning = false; + bool scrollOut = false; + uint8_t scrollCounter = 0; + + // init Matrix + const uint8_t say_hi[] = {1,2,3,6,9,10,11,12,14,15}; + const uint8_t say_hi_length = sizeof(say_hi) / sizeof(uint8_t); + for(uint8_t i=0; i < say_hi_length-3; i++) led_matrix[say_hi[i]] = TURQUOISE; + for(uint8_t i=say_hi_length-3; i < say_hi_length; i++) led_matrix[say_hi[i]] = RED; + + /* Infinite loop */ + while(1) { + + // set led matrix to current colors + led.LED_set_all_off(0); + uint8_t LEDMatrixIndex = 0; + for(uint8_t cube = 0; cube < FIELDS;) { + for(uint8_t column = 0; column <= 6; column+=2) { + led.LED_set_RGB_32(LEDMatrixIndex, led_matrix[cube]); + led.LED_set_RGB_32(LEDMatrixIndex ^ gameRowXOR , led_matrix[cube]); + led.LED_set_RGB_32(LEDMatrixIndex+1, led_matrix[cube]); + led.LED_set_RGB_32(LEDMatrixIndex+1 ^ gameRowXOR, led_matrix[cube]); + cube++; + LEDMatrixIndex += 2; + } + LEDMatrixIndex += 8; + } + led.LED_transmit(); + // end set colors + + // try to take Semaphore from IRQ if user pressed USER_BTN to start game + if ( scrollOut || xSemaphoreTake( SemStartGameHandle, ( TickType_t ) 10 ) == pdTRUE ) { + //scroll out "Hi" + scrollOut = true; + scrollCounter++; + if (scrollCounter > 5) { + isRunning = true; + // release Levels Semaphore + xSemaphoreGive( SemLevelsHandle ); + } + } + // end take sem from IRQ + + if (isRunning) { + // check matrix if set a color + // 3,7,11,15 = last elements in each row + activeLED_s activeLEDs; + activeLEDs.leds = 0; + activeLEDs.delay = delay; + if (led_matrix[3] > 0) activeLEDs.leds += 1; + if (led_matrix[7] > 0) activeLEDs.leds += 2; + if (led_matrix[11] > 0) activeLEDs.leds += 4; + if (led_matrix[15] > 0) activeLEDs.leds += 8; + + if (activeLEDs.leds > 0) xQueueSend(fromLEDMatrixHandle, &activeLEDs, (portTickType) 1); + // end check last row + } + + if (isRunning || scrollOut) { + // shift matrix to next LED in each row after vTaskDelay + for(uint8_t row = 0; row < FIELDS; row+=ROWS) { + for(uint8_t i = row+ROW4; i > row; i--) { + led_matrix[i] = led_matrix[i-1]; + //if (i%1 == 0) + led_matrix[i-1] = OFF; + } + } + // end shifting down + } + + if (isRunning) { + // checking queue for new incoming elements + matrix_s recvQueue; + if (xQueueReceive(toLEDMatrixHandle, &recvQueue, (portTickType) 10 ) == true) + { + // player lost, showing "ToT", reseting values + if (recvQueue.hasLost) { + while(true) { + const uint8_t say_tot[] = { + 1,9,10,11,12,13,14,17, // 8 + 20,21,25,28,35,38,42, // 7 + 43,46,49,50,51,52,53,54,62}; // 9 + led.LED_set_all_off(0); + const uint8_t say_tot_length = sizeof(say_tot) / sizeof(uint8_t); + for(uint8_t i=0; i < 8; i++) led.LED_set_RGB_32(say_tot[i], TURQUOISE); + for(uint8_t i=15; i < say_tot_length; i++) led.LED_set_RGB_32(say_tot[i], RED); + for(uint8_t i=8; i < 8+8; i++) led.LED_set_RGB_32(say_tot[i], YELLOW); + led.LED_transmit(); + delay = 250; + vTaskDelay(delay); + led.LED_set_all_off(0); + led.LED_transmit(); + vTaskDelay(delay); + } + } + // end "hasLost" + + // set color if received a specific 1-bit + // first in row: 0, 4, 8, 12 + if (recvQueue.nextLED > 0) { + for(uint8_t i=ROW1; i <= ROW4; i++) { + uint8_t checkBit = 1 << i; + if ((recvQueue.nextLED & checkBit) == checkBit) { + // select a random color from color_array + uint32_t newColor = colors[rand() % num_colors]; + led_matrix[i*4] = newColor; + } + } + delay = recvQueue.delay; + } + // end set nextLED + xSemaphoreGive( SemLevelsHandle ); + } + // end queue check + } + // end isRunning + vTaskDelay(delay); + } + /* USER CODE END LEDMatrix */ } /* USER CODE BEGIN Header_Validate */ @@ -990,36 +893,50 @@ void Validate(void *argument) /* Infinite loop */ for(;;) { - int recv; - int points; - if(xQueueReceive(fromLEDMatrixHandle, &recv , (portTickType)0) == true) + activeLED_s recv; + point_s points; + if(xQueueReceive(fromLEDMatrixHandle, &recv , (portTickType)10) == true) { - bool B1; - bool B2; - bool B3; - bool B4; + uint16_t delay = recv.delay; + bool B1=false; + bool B2=false; + bool B3=false; + bool B4=false; + bool gavepoints = false; // erkennen ob Punkte gesetzt wurden. - for(int i = 1 ; i < 3; i++) + for(int i = 1 ; i < 4; i++) { - points = 5 * i % 11; - vTaskDelay(points * 50); + points.p = (((i+1) % 2) + 1) * 5; + vTaskDelay(delay /(((i%2)+1)*2)-31); - if(xSemaphoreTake(SemBtn1Handle,10)) + if(xSemaphoreTake(SemBtn1Handle,10)) { B1 = true; - if(xSemaphoreTake(SemBtn2Handle,10)) + } + if(xSemaphoreTake(SemBtn2Handle,10)) { B2 = true; - if(xSemaphoreTake(SemBtn3Handle,10)) + } + if(xSemaphoreTake(SemBtn3Handle,10)) { B3 = true; - if(xSemaphoreTake(SemBtn4Handle,10)) + } + if(xSemaphoreTake(SemBtn4Handle,10)) { B4 = true; + } - switch(recv) + if(gavepoints) + { + B1=false; + B2=false; + B3=false; + B4=false; + } + switch(recv.leds) { case 1: { if(B1 && !B2 && !B3 && !B4) { xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + gavepoints = true; } break; } @@ -1028,6 +945,7 @@ void Validate(void *argument) if(!B1 && B2 && !B3 && !B4) { xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + gavepoints = true; } break; } @@ -1036,6 +954,7 @@ void Validate(void *argument) if(B1 && B2 && !B3 && !B4) { xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + gavepoints = true; } break; } @@ -1044,6 +963,7 @@ void Validate(void *argument) if(!B1 && !B2 && B3 && !B4) { xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + gavepoints = true; } break; } @@ -1052,6 +972,7 @@ void Validate(void *argument) if(B1 && !B2 && B3 && !B4) { xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + gavepoints = true; } break; } @@ -1060,6 +981,7 @@ void Validate(void *argument) if(!B1 && B2 && B3 && !B4) { xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + gavepoints = true; } break; } @@ -1068,6 +990,7 @@ void Validate(void *argument) if(B1 && B2 && B3 && !B4) { xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + gavepoints = true; } break; } @@ -1076,6 +999,7 @@ void Validate(void *argument) if(!B1 && !B2 && !B3 && B4) { xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + gavepoints = true; } break; } @@ -1084,6 +1008,7 @@ void Validate(void *argument) if(B1 && !B2 && !B3 && B4) { xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + gavepoints = true; } break; } @@ -1092,6 +1017,7 @@ void Validate(void *argument) if(!B1 && B2 && !B3 && B4) { xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + gavepoints = true; } break; } @@ -1100,6 +1026,7 @@ void Validate(void *argument) if(B1 && B2 && !B3 && B4) { xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + gavepoints = true; } break; } @@ -1108,6 +1035,7 @@ void Validate(void *argument) if(!B1 && !B2 && B3 && B4) { xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + gavepoints = true; } break; } @@ -1116,6 +1044,7 @@ void Validate(void *argument) if(B1 && !B2 && B3 && B4) { xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + gavepoints = true; } break; } @@ -1124,6 +1053,7 @@ void Validate(void *argument) if(!B1 && B2 && B3 && B4) { xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + gavepoints = true; } break; } @@ -1132,16 +1062,33 @@ void Validate(void *argument) if(B1 && B2 && B3 && B4) { xQueueSend(toDisplayQueueHandle, &points, (portTickType)1); // Punkte ans Display senden + gavepoints = true; } break; } default: { - xQueueSend(toDisplayQueueHandle, 0, (portTickType)1); // Punkte ans Display senden break; } } } + xSemaphoreGiveFromISR(SemBtnRelease1Handle, NULL); + xSemaphoreGiveFromISR(SemBtnRelease2Handle, NULL); + xSemaphoreGiveFromISR(SemBtnRelease3Handle, NULL); + xSemaphoreGiveFromISR(SemBtnRelease4Handle, NULL); + if(!gavepoints) + { + matrix_s sendQueue; + while (xQueueReceive(toLEDMatrixHandle, &sendQueue, (portTickType) 10 ) == true) { vTaskDelay(1); } + sendQueue.nextLED= 0; + sendQueue.isRunning = false; + sendQueue.hasLost = true; + sendQueue.delay = 1; + xQueueSend( toLEDMatrixHandle, &sendQueue, ( TickType_t ) 10 ); + points.p=0; + xQueueSend(toDisplayQueueHandle, &points, (portTickType)10); // 0 ans Display senden, sodass der die LOST Message bekommt + while(1) { vTaskDelay(1); } + } } } /* USER CODE END Validate */ @@ -1157,28 +1104,31 @@ void Validate(void *argument) void Display(void *argument) { /* USER CODE BEGIN Display */ + point_s rec; + rec.p = 1;// Initialisierung mit 1 damit am Anfang nicht die Todesnachricht ausgegeben wird + uint16_t points = 0; /* Infinite loop */ for(;;) { - int rec = 1; // Initialisierung mit 1 damit am Anfang nicht die Todesnachricht ausgegeben wird - int points = 0; - char punkte[] = "1000"; - if(xQueueReceive(toDisplayQueueHandle, &rec , (portTickType)0) == true) - { - points += rec; - punkte[0] = points / 100; - punkte[1] = (points %100) / 10; - punkte[2] = points % 10; - } - // LCD_init(); - // LCD_setCursor(0,0); - - // LCD_print(punkte); - if(rec == 0) + + if(xQueueReceive(toDisplayQueueHandle, &rec , (portTickType)10) == true) { - // LCD_print("You are dead"); + points += rec.p; + uint8_t lenPoints = log10(points) + 1; + uint8_t charPoints[lenPoints]; + sprintf((char *) charPoints,"%d",points); + uint8_t PointsMessage[]={" points"}; + + if(rec.p == 0) + { + uint8_t DeadMessage[]={"You are Dead, you reached "}; + HAL_UART_Transmit(&huart3,DeadMessage,sizeof(DeadMessage),1000); + } + HAL_UART_Transmit(&huart3,charPoints,sizeof(charPoints),1000); + HAL_UART_Transmit(&huart3,PointsMessage,sizeof(PointsMessage),1000); + HAL_UART_Transmit(&huart3,CarRet,sizeof(CarRet),1000); } - } + } /* USER CODE END Display */ } diff --git a/F413_FreeRTOS_LED_Matrix_Game.ioc b/F413_FreeRTOS_LED_Matrix_Game.ioc index 3a25561d109294828e0b73ea8af163418255c7f2..c3df331b60eeb3200c9d4941f22b10ae3f59db62 100644 --- a/F413_FreeRTOS_LED_Matrix_Game.ioc +++ b/F413_FreeRTOS_LED_Matrix_Game.ioc @@ -13,8 +13,8 @@ Dma.TIM2_CH1.0.Priority=DMA_PRIORITY_VERY_HIGH Dma.TIM2_CH1.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode FREERTOS.FootprintOK=true FREERTOS.IPParameters=Tasks01,FootprintOK,configUSE_PREEMPTION,configUSE_OS2_TIMER,Queues01 -FREERTOS.Queues01=toLEDMatrix,16,matrix_s,0,Dynamic,NULL,NULL;fromLEDMatrix,16,matrix_s,0,Dynamic,NULL,NULL;toDisplayQueue,16,uint16_t,0,Dynamic,NULL,NULL -FREERTOS.Tasks01=Task1,24,128,Levels,Default,NULL,Dynamic,NULL,NULL;Task2,24,128,Task02,Default,NULL,Dynamic,NULL,NULL;Task3,24,128,Validate,Default,NULL,Dynamic,NULL,NULL;Task4,8,128,Display,Default,NULL,Dynamic,NULL,NULL +FREERTOS.Queues01=toLEDMatrix,16,matrix_s,0,Dynamic,NULL,NULL;fromLEDMatrix,16,activeLED_s,0,Dynamic,NULL,NULL;toDisplayQueue,16,uint16_t,0,Dynamic,NULL,NULL +FREERTOS.Tasks01=Task1,24,128,Levels,Default,NULL,Dynamic,NULL,NULL;Task2,24,128,LEDMatrix,Default,NULL,Dynamic,NULL,NULL;Task3,24,128,Validate,Default,NULL,Dynamic,NULL,NULL;Task4,8,128,Display,Default,NULL,Dynamic,NULL,NULL FREERTOS.configUSE_OS2_TIMER=1 FREERTOS.configUSE_PREEMPTION=1 File.Version=6 @@ -43,35 +43,31 @@ Mcu.Pin15=PD8 Mcu.Pin16=PD9 Mcu.Pin17=PG6 Mcu.Pin18=PG7 -Mcu.Pin19=PC8 +Mcu.Pin19=PA8 Mcu.Pin2=PE5 -Mcu.Pin20=PC9 -Mcu.Pin21=PA8 -Mcu.Pin22=PA9 -Mcu.Pin23=PA10 -Mcu.Pin24=PA11 -Mcu.Pin25=PA12 -Mcu.Pin26=PA13 -Mcu.Pin27=PA14 -Mcu.Pin28=PC10 -Mcu.Pin29=PC11 +Mcu.Pin20=PA9 +Mcu.Pin21=PA10 +Mcu.Pin22=PA11 +Mcu.Pin23=PA12 +Mcu.Pin24=PA13 +Mcu.Pin25=PA14 +Mcu.Pin26=PD4 +Mcu.Pin27=PD5 +Mcu.Pin28=PD6 +Mcu.Pin29=PD7 Mcu.Pin3=PE6 -Mcu.Pin30=PD4 -Mcu.Pin31=PD5 -Mcu.Pin32=PD6 -Mcu.Pin33=PD7 -Mcu.Pin34=PB3 -Mcu.Pin35=PB7 -Mcu.Pin36=VP_FREERTOS_VS_CMSIS_V2 -Mcu.Pin37=VP_SYS_VS_tim7 -Mcu.Pin38=VP_TIM2_VS_ClockSourceINT +Mcu.Pin30=PB3 +Mcu.Pin31=PB7 +Mcu.Pin32=VP_FREERTOS_VS_CMSIS_V2 +Mcu.Pin33=VP_SYS_VS_tim7 +Mcu.Pin34=VP_TIM2_VS_ClockSourceINT Mcu.Pin4=PC13 Mcu.Pin5=PC14-OSC32_IN Mcu.Pin6=PC15-OSC32_OUT Mcu.Pin7=PF7 Mcu.Pin8=PF8 Mcu.Pin9=PF9 -Mcu.PinsNb=39 +Mcu.PinsNb=35 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F413ZHTx @@ -155,14 +151,6 @@ PB7.GPIOParameters=GPIO_Label PB7.GPIO_Label=LED_blue PB7.Locked=true PB7.Signal=GPIO_Output -PC10.GPIOParameters=GPIO_Label -PC10.GPIO_Label=LED3 -PC10.Locked=true -PC10.Signal=GPIO_Output -PC11.GPIOParameters=GPIO_Label -PC11.GPIO_Label=LED4 -PC11.Locked=true -PC11.Signal=GPIO_Output PC13.GPIOParameters=GPIO_Label PC13.GPIO_Label=USER_Btn [B1] PC13.Locked=true @@ -173,32 +161,24 @@ PC14-OSC32_IN.Signal=RCC_OSC32_IN PC15-OSC32_OUT.Locked=true PC15-OSC32_OUT.Mode=LSE-External-Oscillator PC15-OSC32_OUT.Signal=RCC_OSC32_OUT -PC8.GPIOParameters=GPIO_Label -PC8.GPIO_Label=LED1 -PC8.Locked=true -PC8.Signal=GPIO_Output -PC9.GPIOParameters=GPIO_Label -PC9.GPIO_Label=LED2 -PC9.Locked=true -PC9.Signal=GPIO_Output PD4.GPIOParameters=GPIO_PuPd,GPIO_Label PD4.GPIO_Label=btn1 -PD4.GPIO_PuPd=GPIO_PULLDOWN +PD4.GPIO_PuPd=GPIO_PULLUP PD4.Locked=true PD4.Signal=GPXTI4 PD5.GPIOParameters=GPIO_PuPd,GPIO_Label PD5.GPIO_Label=btn2 -PD5.GPIO_PuPd=GPIO_PULLDOWN +PD5.GPIO_PuPd=GPIO_PULLUP PD5.Locked=true PD5.Signal=GPXTI5 PD6.GPIOParameters=GPIO_PuPd,GPIO_Label PD6.GPIO_Label=btn3 -PD6.GPIO_PuPd=GPIO_PULLDOWN +PD6.GPIO_PuPd=GPIO_PULLUP PD6.Locked=true PD6.Signal=GPXTI6 PD7.GPIOParameters=GPIO_PuPd,GPIO_Label PD7.GPIO_Label=btn4 -PD7.GPIO_PuPd=GPIO_PULLDOWN +PD7.GPIO_PuPd=GPIO_PULLUP PD7.Locked=true PD7.Signal=GPXTI7 PD8.GPIOParameters=GPIO_Label diff --git a/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvguix.TiSpOkEs b/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvguix.TiSpOkEs index dca19f082b256ced98fa5b6e1a5184ac7b6c923a..0f1ca3a8fff1c2a2311f319e4cd9a53cd145b18a 100644 --- a/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvguix.TiSpOkEs +++ b/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvguix.TiSpOkEs @@ -15,17 +15,17 @@ <View> <WinId>38003</WinId> <ViewName>Registers</ViewName> - <TableColWidths>133 85</TableColWidths> + <TableColWidths>133 160</TableColWidths> </View> <View> <WinId>346</WinId> <ViewName>Code Coverage</ViewName> - <TableColWidths>952 160</TableColWidths> + <TableColWidths>952 636</TableColWidths> </View> <View> <WinId>204</WinId> <ViewName>Performance Analyzer</ViewName> - <TableColWidths>1112</TableColWidths> + <TableColWidths>1156 166 166 100</TableColWidths> </View> </SECTreeCtrl> @@ -70,7 +70,7 @@ <WinId>466</WinId> <ViewName>Source Browser</ViewName> <UserString>500</UserString> - <TableColWidths>300</TableColWidths> + <TableColWidths>166</TableColWidths> </View> </TreeListPane> @@ -110,8 +110,8 @@ <MDIClientArea> <RegID>0</RegID> <MDITabState> - <Len>765</Len> - <Data>01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000005000000000000000100000059433A5C55736572735C546953704F6B45735C53544D3332437562655C437562654D585F50726F6A656374735C463431335F4672656552544F535F4C45445F4D61747269785F47616D655C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF59433A5C55736572735C546953704F6B45735C53544D3332437562655C437562654D585F50726F6A656374735C463431335F4672656552544F535F4C45445F4D61747269785F47616D655C436F72655C496E635C6D61696E2E6800000000066D61696E2E6800000000FFDC7800FFFFFFFF61433A5C55736572735C546953704F6B45735C53544D3332437562655C437562654D585F50726F6A656374735C463431335F4672656552544F535F4C45445F4D61747269785F47616D655C436F72655C5372635C73746D3332663478785F69742E63000000000E73746D3332663478785F69742E6300000000BECEA100FFFFFFFF5C433A5C55736572735C546953704F6B45735C53544D3332437562655C437562654D585F50726F6A656374735C463431335F4672656552544F535F4C45445F4D61747269785F47616D655C436F72655C5372635C777332383132622E630000000009777332383132622E6300000000F0A0A100FFFFFFFF5C433A5C55736572735C546953704F6B45735C53544D3332437562655C437562654D585F50726F6A656374735C463431335F4672656552544F535F4C45445F4D61747269785F47616D655C436F72655C496E635C777332383132622E680000000009777332383132622E6800000000BCA8E100FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000096FAFFFFF6F7FFFF7005000003FDFFFF</Data> + <Len>1053</Len> + <Data>01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000007000000000000000100000059433A5C55736572735C546953704F6B45735C53544D3332437562655C437562654D585F50726F6A656374735C463431335F4672656552544F535F4C45445F4D61747269785F47616D655C436F72655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF59433A5C55736572735C546953704F6B45735C53544D3332437562655C437562654D585F50726F6A656374735C463431335F4672656552544F535F4C45445F4D61747269785F47616D655C436F72655C496E635C6D61696E2E6800000000066D61696E2E6800000000FFDC7800FFFFFFFF61433A5C55736572735C546953704F6B45735C53544D3332437562655C437562654D585F50726F6A656374735C463431335F4672656552544F535F4C45445F4D61747269785F47616D655C436F72655C5372635C73746D3332663478785F69742E63000000000E73746D3332663478785F69742E6300000000BECEA100FFFFFFFF5C433A5C55736572735C546953704F6B45735C53544D3332437562655C437562654D585F50726F6A656374735C463431335F4672656552544F535F4C45445F4D61747269785F47616D655C436F72655C5372635C777332383132622E630000000009777332383132622E6300000000F0A0A100FFFFFFFF5C433A5C55736572735C546953704F6B45735C53544D3332437562655C437562654D585F50726F6A656374735C463431335F4672656552544F535F4C45445F4D61747269785F47616D655C436F72655C496E635C777332383132622E680000000009777332383132622E6800000000BCA8E100FFFFFFFF67433A5C55736572735C546953704F6B45735C53544D3332437562655C437562654D585F50726F6A656374735C463431335F4672656552544F535F4C45445F4D61747269785F47616D655C4D444B2D41524D5C737461727475705F73746D33326634313378782E730000000015737461727475705F73746D33326634313378782E73000000009CC1B600FFFFFFFF79433A5C55736572735C546953704F6B45735C53544D3332437562655C437562654D585F50726F6A656374735C463431335F4672656552544F535F4C45445F4D61747269785F47616D655C4D6964646C6577617265735C54686972645F50617274795C4672656552544F535C536F757263655C7461736B732E6300000000077461736B732E6300000000F7B88600FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD50001000000000000000200000096FAFFFFF6F7FFFF7005000003FDFFFF</Data> </MDITabState> </MDIClientArea> <ViewEx> @@ -1805,8 +1805,8 @@ <RegID>59392</RegID> <Name>File</Name> <Buttons> - <Len>2774</Len> - <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE80300000000000000000000000000000000000000000000000100000001000000960000000200205000000000077361795F746F749600000000000000140006626572656974033230300564656C617900097363726F6C6C6F757408636865636B426974067461736B3032033530350773656E647175650D73656D737461727467616D65680C73656D737461727467616D651253656D537461727447616D6548616E646C650472616E64054F4345414E06427574746F6E06627574746F6E0475736572057372616E640679656C6C6F7704756172740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data> + <Len>2793</Len> + <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001366726F6D4C45444D617472697848616E646C65960000000000000012001366726F6D4C45444D617472697848616E646C650766726F6D6C65640011746F4C45444D617472697848616E646C65086D61747269785F7304555345520C6163746976654C4544735F730B6163746976654C45445F73096163746976656C6564076E6578744C45440973656E6451756575650A6163746976656C6564730A636F6E66696775726564044C454433044C454432044C45443104746F646F0875696E7431365F74000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data> </Buttons> <OriginalItems> <Len>1423</Len> @@ -1822,7 +1822,7 @@ <Name>Build</Name> <Buttons> <Len>1018</Len> - <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000001D463431335F4672656552544F535F4C45445F4D61747269785F47616D65960000000000000001001D463431335F4672656552544F535F4C45445F4D61747269785F47616D65000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data> + <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000001D463431335F4672656552544F535F4C45445F4D61747269785F47616D65960000000000000001001D463431335F4672656552544F535F4C45445F4D61747269785F47616D65000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000</Data> </Buttons> <OriginalItems> <Len>583</Len> @@ -1838,7 +1838,7 @@ <Name>Debug</Name> <Buttons> <Len>2373</Len> - <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data> + <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000</Data> </Buttons> <OriginalItems> <Len>898</Len> @@ -3546,8 +3546,8 @@ <RegID>59392</RegID> <Name>File</Name> <Buttons> - <Len>2817</Len> - <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000A6E756D5F636F6C6F7273960000000000000014000A6E756D5F636F6C6F72730572616E64280472616E64044E554C4C0462746E33000668756172743306697372756E6E046C6564731366726F6D4C45444D617472697848616E646C65056C65643174066C656432746F0D53656D42746E3148616E646C6514746F446973706C6179517565756548616E646C650956616C6964617465280856616C696461746511746F4C45444D617472697848616E646C6503746F741253656D537461727447616D6548616E646C6509737461727467616D650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000300150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data> + <Len>2793</Len> + <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001366726F6D4C45444D617472697848616E646C65960000000000000012001366726F6D4C45444D617472697848616E646C650766726F6D6C65640011746F4C45444D617472697848616E646C65086D61747269785F7304555345520C6163746976654C4544735F730B6163746976654C45445F73096163746976656C6564076E6578744C45440973656E6451756575650A6163746976656C6564730A636F6E66696775726564044C454433044C454432044C45443104746F646F0875696E7431365F74000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000300150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000000180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000</Data> </Buttons> <OriginalItems> <Len>1423</Len> @@ -3606,9 +3606,9 @@ <ActiveTab>0</ActiveTab> <Doc> <Name>../Core/Src/main.c</Name> - <ColumnNumber>30</ColumnNumber> - <TopLine>727</TopLine> - <CurrentLine>750</CurrentLine> + <ColumnNumber>32</ColumnNumber> + <TopLine>995</TopLine> + <CurrentLine>1050</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> @@ -3633,7 +3633,7 @@ </Doc> <Doc> <Name>..\Core\Src\ws2812b.c</Name> - <ColumnNumber>7</ColumnNumber> + <ColumnNumber>10</ColumnNumber> <TopLine>1</TopLine> <CurrentLine>34</CurrentLine> <Folding>1</Folding> @@ -3643,12 +3643,30 @@ <Doc> <Name>../Core/Inc/ws2812b.h</Name> <ColumnNumber>31</ColumnNumber> - <TopLine>57</TopLine> + <TopLine>41</TopLine> <CurrentLine>74</CurrentLine> <Folding>1</Folding> <ContractedFolders></ContractedFolders> <PaneID>0</PaneID> </Doc> + <Doc> + <Name>startup_stm32f413xx.s</Name> + <ColumnNumber>0</ColumnNumber> + <TopLine>173</TopLine> + <CurrentLine>194</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> + <Doc> + <Name>../Middlewares/Third_Party/FreeRTOS/Source/tasks.c</Name> + <ColumnNumber>0</ColumnNumber> + <TopLine>3628</TopLine> + <CurrentLine>3650</CurrentLine> + <Folding>1</Folding> + <ContractedFolders></ContractedFolders> + <PaneID>0</PaneID> + </Doc> </MDIGroup> </MDIGroups> diff --git a/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvoptx b/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvoptx index c5730090c49535fbaac2b49494079e35d3d088cb..b6e931c1aebd9f312ce55718a2c4ce84b316aa83 100644 --- a/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvoptx +++ b/MDK-ARM/F413_FreeRTOS_LED_Matrix_Game.uvoptx @@ -152,25 +152,25 @@ <Bp> <Number>0</Number> <Type>0</Type> - <LineNumber>840</LineNumber> + <LineNumber>1200</LineNumber> <EnabledFlag>1</EnabledFlag> - <Address>0</Address> + <Address>134232518</Address> <ByteObject>0</ByteObject> <HtxType>0</HtxType> <ManyObjects>0</ManyObjects> <SizeOfObject>0</SizeOfObject> <BreakByAccess>0</BreakByAccess> - <BreakIfRCount>0</BreakIfRCount> + <BreakIfRCount>1</BreakIfRCount> <Filename>../Core/Src/main.c</Filename> <ExecCommand></ExecCommand> - <Expression></Expression> + <Expression>\\F413_FreeRTOS_LED_Matrix_Game\../Core/Src/main.c\1200</Expression> </Bp> <Bp> <Number>1</Number> <Type>0</Type> - <LineNumber>1007</LineNumber> + <LineNumber>1187</LineNumber> <EnabledFlag>1</EnabledFlag> - <Address>134230456</Address> + <Address>134232454</Address> <ByteObject>0</ByteObject> <HtxType>0</HtxType> <ManyObjects>0</ManyObjects> @@ -179,60 +179,60 @@ <BreakIfRCount>1</BreakIfRCount> <Filename>../Core/Src/main.c</Filename> <ExecCommand></ExecCommand> - <Expression>\\F413_FreeRTOS_LED_Matrix_Game\../Core/Src/main.c\1007</Expression> + <Expression>\\F413_FreeRTOS_LED_Matrix_Game\../Core/Src/main.c\1187</Expression> </Bp> <Bp> <Number>2</Number> <Type>0</Type> - <LineNumber>838</LineNumber> + <LineNumber>1010</LineNumber> <EnabledFlag>1</EnabledFlag> - <Address>0</Address> + <Address>134231804</Address> <ByteObject>0</ByteObject> <HtxType>0</HtxType> <ManyObjects>0</ManyObjects> <SizeOfObject>0</SizeOfObject> <BreakByAccess>0</BreakByAccess> - <BreakIfRCount>0</BreakIfRCount> + <BreakIfRCount>1</BreakIfRCount> <Filename>../Core/Src/main.c</Filename> <ExecCommand></ExecCommand> - <Expression></Expression> + <Expression>\\F413_FreeRTOS_LED_Matrix_Game\../Core/Src/main.c\1010</Expression> </Bp> <Bp> <Number>3</Number> <Type>0</Type> - <LineNumber>839</LineNumber> + <LineNumber>921</LineNumber> <EnabledFlag>1</EnabledFlag> - <Address>0</Address> + <Address>134230354</Address> <ByteObject>0</ByteObject> <HtxType>0</HtxType> <ManyObjects>0</ManyObjects> <SizeOfObject>0</SizeOfObject> <BreakByAccess>0</BreakByAccess> - <BreakIfRCount>0</BreakIfRCount> + <BreakIfRCount>1</BreakIfRCount> <Filename>../Core/Src/main.c</Filename> <ExecCommand></ExecCommand> - <Expression></Expression> + <Expression>\\F413_FreeRTOS_LED_Matrix_Game\../Core/Src/main.c\921</Expression> </Bp> <Bp> <Number>4</Number> <Type>0</Type> - <LineNumber>1008</LineNumber> + <LineNumber>917</LineNumber> <EnabledFlag>1</EnabledFlag> - <Address>0</Address> + <Address>134230302</Address> <ByteObject>0</ByteObject> <HtxType>0</HtxType> <ManyObjects>0</ManyObjects> <SizeOfObject>0</SizeOfObject> <BreakByAccess>0</BreakByAccess> - <BreakIfRCount>0</BreakIfRCount> + <BreakIfRCount>1</BreakIfRCount> <Filename>../Core/Src/main.c</Filename> <ExecCommand></ExecCommand> - <Expression></Expression> + <Expression>\\F413_FreeRTOS_LED_Matrix_Game\../Core/Src/main.c\917</Expression> </Bp> <Bp> <Number>5</Number> <Type>0</Type> - <LineNumber>1014</LineNumber> + <LineNumber>945</LineNumber> <EnabledFlag>1</EnabledFlag> <Address>0</Address> <ByteObject>0</ByteObject> @@ -248,7 +248,7 @@ <Bp> <Number>6</Number> <Type>0</Type> - <LineNumber>1035</LineNumber> + <LineNumber>1195</LineNumber> <EnabledFlag>1</EnabledFlag> <Address>0</Address> <ByteObject>0</ByteObject> @@ -264,6 +264,22 @@ <Bp> <Number>7</Number> <Type>0</Type> + <LineNumber>1208</LineNumber> + <EnabledFlag>1</EnabledFlag> + <Address>0</Address> + <ByteObject>0</ByteObject> + <HtxType>0</HtxType> + <ManyObjects>0</ManyObjects> + <SizeOfObject>0</SizeOfObject> + <BreakByAccess>0</BreakByAccess> + <BreakIfRCount>0</BreakIfRCount> + <Filename>../Core/Src/main.c</Filename> + <ExecCommand></ExecCommand> + <Expression></Expression> + </Bp> + <Bp> + <Number>8</Number> + <Type>0</Type> <LineNumber>45</LineNumber> <EnabledFlag>1</EnabledFlag> <Address>0</Address> @@ -278,7 +294,7 @@ <Expression></Expression> </Bp> <Bp> - <Number>8</Number> + <Number>9</Number> <Type>0</Type> <LineNumber>148</LineNumber> <EnabledFlag>1</EnabledFlag> @@ -294,7 +310,7 @@ <Expression></Expression> </Bp> <Bp> - <Number>9</Number> + <Number>10</Number> <Type>0</Type> <LineNumber>277</LineNumber> <EnabledFlag>1</EnabledFlag> @@ -369,9 +385,42 @@ <Ww> <count>11</count> <WinNumber>1</WinNumber> + <ItemText>recvQueue</ItemText> + </Ww> + <Ww> + <count>12</count> + <WinNumber>1</WinNumber> + <ItemText>sendQueue</ItemText> + </Ww> + <Ww> + <count>13</count> + <WinNumber>1</WinNumber> + <ItemText>toLEDMatrixHandle</ItemText> + </Ww> + <Ww> + <count>14</count> + <WinNumber>1</WinNumber> + <ItemText>fromLEDMatrixHandle</ItemText> + </Ww> + <Ww> + <count>15</count> + <WinNumber>1</WinNumber> <ItemText>recv</ItemText> </Ww> + <Ww> + <count>16</count> + <WinNumber>1</WinNumber> + <ItemText>activeLEDs</ItemText> + </Ww> </WatchWindow1> + <MemoryWindow1> + <Mm> + <WinNumber>1</WinNumber> + <SubType>0</SubType> + <ItemText>\\F413_FreeRTOS_LED_Matrix_Game\../Core/Src/main.c\toLEDMatrixHandle</ItemText> + <AccSizeX>0</AccSizeX> + </Mm> + </MemoryWindow1> <Tracepoint> <THDelay>0</THDelay> </Tracepoint>