Linting & bringing the config closer to the ST7365

This commit is contained in:
Clément Grennerat 2025-08-18 23:08:08 +02:00
parent 6e6abff60c
commit 3bd65d37a5
11 changed files with 671 additions and 765 deletions

8
.idea/.gitignore generated vendored
View File

@ -1,8 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

102
.idea/editor.xml generated
View File

@ -1,102 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="BackendCodeEditorSettings">
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_ARGUMENT/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_BINARY_EXPRESSIONS_CHAIN/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_CALLS_CHAIN/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXPRESSION/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_EXTENDS_LIST/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_FOR_STMT/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_PARAMETER/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_ARGUMENT/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTILINE_TYPE_PARAMETER/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_MULTIPLE_DECLARATION/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ALIGN_TERNARY/@EntryValue" value="ALIGN_ALL" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/ANONYMOUS_METHOD_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_CLASS_DEFINITION/@EntryValue" value="1" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_DECLARATIONS/@EntryValue" value="0" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DECLARATION/@EntryValue" value="1" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BLANK_LINES_AROUND_FUNCTION_DEFINITION/@EntryValue" value="1" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/BREAK_TEMPLATE_DECLARATION/@EntryValue" value="LINE_BREAK" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CASE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/CONTINUOUS_LINE_INDENT/@EntryValue" value="Double" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/FREE_BLOCK_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_ACCESS_SPECIFIERS_FROM_CLASS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CASE_FROM_SWITCH/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_CLASS_MEMBERS_FROM_ACCESS_SPECIFIERS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_COMMENT/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_SIZE/@EntryValue" value="4" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INDENT_STYLE/@EntryValue" value="Space" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INITIALIZER_BRACES/@EntryValue" value="END_OF_LINE_NO_SPACE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INT_ALIGN_EQ/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/INVOCABLE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_CODE/@EntryValue" value="2" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_BLANK_LINES_IN_DECLARATIONS/@EntryValue" value="2" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/KEEP_USER_LINEBREAKS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/LINE_BREAK_AFTER_COLON_IN_MEMBER_INITIALIZER_LISTS/@EntryValue" value="ON_SINGLE_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/MEMBER_INITIALIZER_LIST_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/NAMESPACE_INDENTATION/@EntryValue" value="All" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/OTHER_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_CATCH_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_ELSE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_NAMESPACE_DEFINITIONS_ON_SAME_LINE/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/PLACE_WHILE_ON_NEW_LINE/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SIMPLE_BLOCK_STYLE/@EntryValue" value="DO_NOT_CHANGE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_COMMA_IN_TEMPLATE_PARAMS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_COLON/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_FOR_SEMICOLON/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_METHOD/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_PTR_IN_NESTED_DECLARATOR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBER/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_DATA_MEMBERS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_REF_IN_METHOD/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_AFTER_UNARY_OPERATOR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_COLON_IN_BITFIELD_DECLARATOR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_EXTENDS_COLON/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_COLON/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_FOR_SEMICOLON/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_PTR_IN_METHOD/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_ABSTRACT_DECL/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBER/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_DATA_MEMBERS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_REF_IN_METHOD/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BEFORE_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_BETWEEN_CLOSING_ANGLE_BRACKETS_IN_TEMPLATE_ARGS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_ARRAY_ACCESS_BRACKETS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_CAST_EXPRESSION_PARENTHESES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_DECLARATION_PARENTHESES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_BLOCKS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_METHOD_PARENTHESES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_EMPTY_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_INITIALIZER_BRACES/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_ARGS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPACE_WITHIN_TEMPLATE_PARAMS/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/SPECIAL_ELSE_IF_TREATMENT/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TAB_WIDTH/@EntryValue" value="4" type="int" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/TYPE_DECLARATION_BRACES/@EntryValue" value="END_OF_LINE" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_BINARY_OPSIGN/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_AFTER_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_ARGUMENTS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_LPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_DECLARATION_RPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_LPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_INVOCATION_RPAR/@EntryValue" value="false" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_BEFORE_TERNARY_OPSIGNS/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppFormatting/WRAP_PARAMETERS_STYLE/@EntryValue" value="WRAP_IF_LONG" type="string" />
<option name="/Default/CodeStyle/EditorConfig/EnableClangFormatSupport/@EntryValue" value="false" type="bool" />
</component>
</project>

View File

@ -1,12 +0,0 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredIdentifiers">
<list>
<option value="src.*" />
</list>
</option>
</inspection_tool>
</profile>
</component>

7
.idea/misc.xml generated
View File

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakePythonSetting">
<option name="pythonIntegrationState" value="YES" />
</component>
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
</project>

8
.idea/modules.xml generated
View File

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/ow-dash-cube.iml" filepath="$PROJECT_DIR$/.idea/ow-dash-cube.iml" />
</modules>
</component>
</project>

View File

@ -1,2 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module classpath="CMake" type="CPP_MODULE" version="4" />

4
.idea/vcs.xml generated
View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings" defaultProject="true" />
</project>

View File

@ -31,7 +31,6 @@
#define LCD_SCREEN_HEIGHT 320 #define LCD_SCREEN_HEIGHT 320
#define LCD_SCREEN_WIDTH 480 #define LCD_SCREEN_WIDTH 480
//CHIP SELECT PIN AND PORT, STANDARD GPIO //CHIP SELECT PIN AND PORT, STANDARD GPIO
#define LCD_CS_PIN (1<<8) #define LCD_CS_PIN (1<<8)
#define LCD_DC_PIN (1<<11) #define LCD_DC_PIN (1<<11)
@ -45,7 +44,6 @@
//#define LCD_RST_PORT GPIOC //#define LCD_RST_PORT GPIOC
//#define LCD_RST_PIN RST_Pin //#define LCD_RST_PIN RST_Pin
#define BURST_MAX_SIZE 100 //buffer burst stocké sur pile. Par défaut stackSiZE=256 dans FreeRTOS. #define BURST_MAX_SIZE 100 //buffer burst stocké sur pile. Par défaut stackSiZE=256 dans FreeRTOS.
#define BLACK 0x0000 #define BLACK 0x0000
@ -98,13 +96,25 @@ void LCD_Draw_Pixel(uint16_t X,uint16_t Y,uint16_t Colour);
//@param X : coordonnee x //@param X : coordonnee x
//@param Y : coordonnee y //@param Y : coordonnee y
//@param Colour : voir #define de quelques couleurs 16 bits standard ci-dessus //@param Colour : voir #define de quelques couleurs 16 bits standard ci-dessus
void LCD_Draw_Horizontal_Line(uint16_t X, uint16_t Y, uint16_t Width, uint16_t Colour); void LCD_Draw_Horizontal_Line(
void LCD_Draw_Vertical_Line(uint16_t X, uint16_t Y, uint16_t Height, uint16_t Colour); uint16_t X,
void LCD_Draw_Rectangle(uint16_t X, uint16_t Y, uint16_t Width, uint16_t Height, uint16_t Colour); uint16_t Y,
uint16_t Width,
uint16_t Colour);
void LCD_Draw_Vertical_Line(
uint16_t X,
uint16_t Y,
uint16_t Height,
uint16_t Colour);
void LCD_Draw_Rectangle(
uint16_t X,
uint16_t Y,
uint16_t Width,
uint16_t Height,
uint16_t Colour);
void LCD_Draw_Colour_Burst(uint16_t Colour, uint32_t Size); void LCD_Draw_Colour_Burst(uint16_t Colour, uint32_t Size);
#endif #endif
/*******************PARTIE ISSUE DE LA LIB ILI9193_GFX.h***************************/ /*******************PARTIE ISSUE DE LA LIB ILI9193_GFX.h***************************/
@ -115,22 +125,60 @@ void LCD_Draw_Colour_Burst(uint16_t Colour, uint32_t Size);
#define HORIZONTAL_IMAGE 0 #define HORIZONTAL_IMAGE 0
#define VERTICAL_IMAGE 1 #define VERTICAL_IMAGE 1
void LCD_Draw_Hollow_Circle(uint16_t X, uint16_t Y, uint16_t Radius, uint16_t Colour); void LCD_Draw_Hollow_Circle(
void LCD_Draw_Filled_Circle(uint16_t X, uint16_t Y, uint16_t Radius, uint16_t Colour); uint16_t X,
void LCD_Draw_Hollow_Rectangle_Coord(uint16_t X0, uint16_t Y0, uint16_t X1, uint16_t Y1, uint16_t Colour); uint16_t Y,
void LCD_Draw_Filled_Rectangle_Coord(uint16_t X0, uint16_t Y0, uint16_t X1, uint16_t Y1, uint16_t Colour); uint16_t Radius,
void LCD_Draw_Char(char Character, uint16_t X, uint16_t Y, uint16_t Colour, uint16_t Size, uint16_t Background_Colour); uint16_t Colour);
void LCD_Draw_Filled_Circle(
uint16_t X,
uint16_t Y,
uint16_t Radius,
uint16_t Colour);
void LCD_Draw_Hollow_Rectangle_Coord(
uint16_t X0,
uint16_t Y0,
uint16_t X1,
uint16_t Y1,
uint16_t Colour);
void LCD_Draw_Filled_Rectangle_Coord(
uint16_t X0,
uint16_t Y0,
uint16_t X1,
uint16_t Y1,
uint16_t Colour);
void LCD_Draw_Char(
char Character,
uint16_t X,
uint16_t Y,
uint16_t Colour,
uint16_t Size,
uint16_t Background_Colour);
void LCD_Draw_Text(const char* Text, uint16_t X, uint16_t Y, uint16_t Colour, uint16_t Size, uint16_t Background_Colour); void LCD_Draw_Text(
const char *Text,
uint16_t X,
uint16_t Y,
uint16_t Colour,
uint16_t Size,
uint16_t Background_Colour);
/*Draws a character (fonts imported from fonts.h) at X,Y location with specified font colour, size and Background colour*/ /*Draws a character (fonts imported from fonts.h) at X,Y location with specified font colour, size and Background colour*/
void LCD_Draw_Filled_Rectangle_Size_Text(uint16_t X0, uint16_t Y0, uint16_t Size_X, uint16_t Size_Y, uint16_t Colour); void LCD_Draw_Filled_Rectangle_Size_Text(
uint16_t X0,
uint16_t Y0,
uint16_t Size_X,
uint16_t Size_Y,
uint16_t Colour);
void LCD_Draw_Image_XY(
void LCD_Draw_Image_XY(const char* Image_Array, uint16_t X, uint16_t Y, uint16_t Width, uint16_t Height); const char *Image_Array,
uint16_t X,
uint16_t Y,
uint16_t Width,
uint16_t Height);
/*Dessine une image 65K couleurs (2Bytes / Pixel) dans une zone de l'ecran, aux coordonnées X et Y*/ /*Dessine une image 65K couleurs (2Bytes / Pixel) dans une zone de l'ecran, aux coordonnées X et Y*/
//CONVERTISSEUR: http://www.digole.com/tools/PicturetoC_Hex_converter.php //CONVERTISSEUR: http://www.digole.com/tools/PicturetoC_Hex_converter.php
void LCD_Draw_Image_Full(const char *Image_Array, uint8_t Orientation); void LCD_Draw_Image_Full(const char *Image_Array, uint8_t Orientation);
#endif #endif

View File

@ -16,6 +16,7 @@
* *
****************************************************************************** ******************************************************************************
*/ */
//@formatter:off
/* USER CODE END Header */ /* USER CODE END Header */
/* Define to prevent recursive inclusion -------------------------------------*/ /* Define to prevent recursive inclusion -------------------------------------*/
@ -31,29 +32,34 @@ extern "C" {
/* Private includes ----------------------------------------------------------*/ /* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */ /* USER CODE BEGIN Includes */
//@formatter:on
//@formatter:off
/* USER CODE END Includes */ /* USER CODE END Includes */
/* Exported types ------------------------------------------------------------*/ /* Exported types ------------------------------------------------------------*/
/* USER CODE BEGIN ET */ /* USER CODE BEGIN ET */
//@formatter:on
//@formatter:off
/* USER CODE END ET */ /* USER CODE END ET */
/* Exported constants --------------------------------------------------------*/ /* Exported constants --------------------------------------------------------*/
/* USER CODE BEGIN EC */ /* USER CODE BEGIN EC */
//@formatter:on
//@formatter:off
/* USER CODE END EC */ /* USER CODE END EC */
/* Exported macro ------------------------------------------------------------*/ /* Exported macro ------------------------------------------------------------*/
/* USER CODE BEGIN EM */ /* USER CODE BEGIN EM */
//@formatter:on
//@formatter:off
/* USER CODE END EM */ /* USER CODE END EM */
/* Exported functions prototypes ---------------------------------------------*/ /* Exported functions prototypes ---------------------------------------------*/
void Error_Handler(void); void Error_Handler(void);
/* USER CODE BEGIN EFP */ /* USER CODE BEGIN EFP */
//@formatter:on
//@formatter:off
/* USER CODE END EFP */ /* USER CODE END EFP */
/* Private defines -----------------------------------------------------------*/ /* Private defines -----------------------------------------------------------*/
@ -105,7 +111,8 @@ void Error_Handler(void);
#define DB12_GPIO_Port GPIOB #define DB12_GPIO_Port GPIOB
/* USER CODE BEGIN Private defines */ /* USER CODE BEGIN Private defines */
//@formatter:on
//@formatter:off
/* USER CODE END Private defines */ /* USER CODE END Private defines */
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -32,10 +32,8 @@
volatile uint16_t LCD_HEIGHT = LCD_SCREEN_HEIGHT; volatile uint16_t LCD_HEIGHT = LCD_SCREEN_HEIGHT;
volatile uint16_t LCD_WIDTH = LCD_SCREEN_WIDTH; volatile uint16_t LCD_WIDTH = LCD_SCREEN_WIDTH;
/* SPI3 & GPIOs init function */ /* SPI3 & GPIOs init function */
void LCD_SPI_Init(void) void LCD_SPI_Init(void) {
{
//__HAL_RCC_SPI3_CLK_ENABLE(); //__HAL_RCC_SPI3_CLK_ENABLE();
RCC->APB1ENR1 |= RCC_APB1ENR1_SPI3EN;// SPI3 clock enable RCC->APB1ENR1 |= RCC_APB1ENR1_SPI3EN;// SPI3 clock enable
RCC->AHB2ENR |= RCC_AHB2ENR_GPIOCEN;// GPIOC clock enable RCC->AHB2ENR |= RCC_AHB2ENR_GPIOCEN;// GPIOC clock enable
@ -69,31 +67,29 @@ void LCD_SPI_Init(void)
} }
/* Send command (char) to LCD via SPI bus */ /* Send command (char) to LCD via SPI bus */
void LCD_Write_Command(uint8_t Command) void LCD_Write_Command(uint8_t Command) {
{ CMD
// principe : on attend toujours la fin du transfert, à cause du CS_OFF soft qui arrive après. ;
// donc à priori pas besoin de tester l'état du buffer TX avant l'envoi :
// le buffer devrait toujours vide
CMD; //Ligne de commande a '1'
//CS_ON; //CS_ON;
while ((SPI1->SR & SPI_SR_TXE) != 0); // SPI_SR_BSY si besoin dattendre la fin complète de lenvoi des trames SPI. while ((SPI1->SR & SPI_SR_TXE) != 0);// Waiting for TX register to be available.
*(uint8_t*) (SPI1_DR_ADR) = Command;// Cast sur pointeur, pour ecriture 8 bits. Sinon l'acces 16 bits provoque un tfert 16 bits *(uint8_t*) (SPI1_DR_ADR) = Command;// Cast sur pointeur, pour ecriture 8 bits. Sinon l'acces 16 bits provoque un tfert 16 bits
//while ((SPI1->SR & SPI_SR_BSY) != 0); //Attendre fin envoi trame (cf RM P1289)
//CS_OFF; //CS_OFF;
} }
/* Send Data (char) to LCD via SPI bus */ /* Send Data (char) to LCD via SPI bus */
void LCD_Write_Data(uint8_t Data) void LCD_Write_Data(uint8_t Data) {
{ DATA
DATA; //Ligne de data a '1' ;
CS_ON; //CS_ON;
while ((SPI1->SR & SPI_SR_TXE) != 0);// Waiting for TX register to be available.
*(uint8_t*) (SPI1_DR_ADR) = Data; *(uint8_t*) (SPI1_DR_ADR) = Data;
while ((SPI1->SR & SPI_SR_BSY) != 0); //Attendre fin envoi trame (cf RM P1289) //while ((SPI1->SR & SPI_SR_BSY) != 0); //Attendre fin envoi trame (cf RM P1289)
CS_OFF; //CS_OFF;
} }
/* Set Address - Location block - to draw into */ /* Set the frame to draw into and sends a write into frame command */
void LCD_Set_Address(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2) void LCD_Set_Address(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2) {
{
LCD_Write_Command(0x2A); LCD_Write_Command(0x2A);
LCD_Write_Data(X1 >> 8); LCD_Write_Data(X1 >> 8);
LCD_Write_Data(X1); LCD_Write_Data(X1);
@ -119,18 +115,15 @@ LCD_Write_Command(0x2C);
// HAL_Delay(200); // HAL_Delay(200);
// HAL_GPIO_WritePin(LCD_RST_PORT, LCD_RST_PIN, GPIO_PIN_SET); // HAL_GPIO_WritePin(LCD_RST_PORT, LCD_RST_PIN, GPIO_PIN_SET);
// } // }
/*Ser rotation of the screen - changes x0 and y0*/ /*Ser rotation of the screen - changes x0 and y0*/
void LCD_Set_Rotation(uint8_t Rotation) void LCD_Set_Rotation(uint8_t Rotation) {
{
uint8_t screen_rotation = Rotation; uint8_t screen_rotation = Rotation;
LCD_Write_Command(0x36); LCD_Write_Command(0x36);
for (volatile uint32_t i = 0; i < TEMPO1MS_80M; i++);//~1ms attente for (volatile uint32_t i = 0; i < TEMPO1MS_80M; i++);//~1ms attente
switch(screen_rotation) switch (screen_rotation) {
{
case SCREEN_VERTICAL_1: case SCREEN_VERTICAL_1:
LCD_Write_Data(0x40 | 0x08); LCD_Write_Data(0x40 | 0x08);
LCD_WIDTH = 240; LCD_WIDTH = 240;
@ -159,15 +152,12 @@ switch(screen_rotation)
/*Enable LCD display*/ /*Enable LCD display*/
//Reset n'est pas cable sur aff ADA1983 //Reset n'est pas cable sur aff ADA1983
// void LCD_Enable(void) // void LCD_Enable(void)
// { // {
// HAL_GPIO_WritePin(LCD_RST_PORT, LCD_RST_PIN, GPIO_PIN_SET); // HAL_GPIO_WritePin(LCD_RST_PORT, LCD_RST_PIN, GPIO_PIN_SET);
// } // }
/*Initialize LCD display*/ /*Initialize LCD display*/
void LCD_Init(void) void LCD_Init(void) {
{
volatile uint32_t i;//Boucle att volatile uint32_t i;//Boucle att
//Reset n'est pas cable sur aff ADA1983 //Reset n'est pas cable sur aff ADA1983
@ -177,53 +167,53 @@ void LCD_Init(void)
//SOFTWARE RESET //SOFTWARE RESET
LCD_Write_Command(0x01); LCD_Write_Command(0x01);
for(i=0; i<(1000*TEMPO1MS_80M); i++); //~1s attente @80M for (i = 0; i < (1000 * TEMPO1MS_80M); i++);// ~1s sleep @80M
//POWER CONTROL A //POWER CONTROL A -- command not existing
LCD_Write_Command(0xCB); // LCD_Write_Command(0xCB);
LCD_Write_Data(0x39); // LCD_Write_Data(0x39);
LCD_Write_Data(0x2C); // LCD_Write_Data(0x2C);
LCD_Write_Data(0x00); // LCD_Write_Data(0x00);
LCD_Write_Data(0x34); // LCD_Write_Data(0x34);
LCD_Write_Data(0x02); // LCD_Write_Data(0x02);
//POWER CONTROL B //POWER CONTROL B -- command not existing
LCD_Write_Command(0xCF); // LCD_Write_Command(0xCF);
LCD_Write_Data(0x00); // LCD_Write_Data(0x00);
LCD_Write_Data(0xC1); // LCD_Write_Data(0xC1);
LCD_Write_Data(0x30); // LCD_Write_Data(0x30);
//DRIVER TIMING CONTROL A //DRIVER TIMING CONTROL A -- Display Output Ctrl Adjust
LCD_Write_Command(0xE8); LCD_Write_Command(0xE8);
LCD_Write_Data(0x85); LCD_Write_Data(0x85);
LCD_Write_Data(0x00); LCD_Write_Data(0x00);
LCD_Write_Data(0x78); LCD_Write_Data(0x78);
//DRIVER TIMING CONTROL B //DRIVER TIMING CONTROL B -- command not existing
LCD_Write_Command(0xEA); // LCD_Write_Command(0xEA);
LCD_Write_Data(0x00); // LCD_Write_Data(0x00);
LCD_Write_Data(0x00); // LCD_Write_Data(0x00);
//POWER ON SEQUENCE CONTROL //POWER ON SEQUENCE CONTROL -- command not existing
LCD_Write_Command(0xED); // LCD_Write_Command(0xED);
LCD_Write_Data(0x64); // LCD_Write_Data(0x64);
LCD_Write_Data(0x03); // LCD_Write_Data(0x03);
LCD_Write_Data(0x12); // LCD_Write_Data(0x12);
LCD_Write_Data(0x81); // LCD_Write_Data(0x81);
//PUMP RATIO CONTROL //PUMP RATIO CONTROL -- command not existing
LCD_Write_Command(0xF7); // LCD_Write_Command(0xF7);
LCD_Write_Data(0x20); // LCD_Write_Data(0x20);
//POWER CONTROL,VRH[5:0] //POWER CONTROL,VRH[5:0] -- Power Control 1
LCD_Write_Command(0xC0); LCD_Write_Command(0xC0);
LCD_Write_Data(0x23); LCD_Write_Data(0x23);
//POWER CONTROL,SAP[2:0];BT[3:0] //POWER CONTROL,SAP[2:0];BT[3:0] -- Power Control 2
LCD_Write_Command(0xC1); LCD_Write_Command(0xC1);
LCD_Write_Data(0x10); LCD_Write_Data(0x10);
//VCM CONTROL //VCM CONTROL -- VCOM Control
LCD_Write_Command(0xC5); LCD_Write_Command(0xC5);
LCD_Write_Data(0x3E); LCD_Write_Data(0x3E);
LCD_Write_Data(0x28); LCD_Write_Data(0x28);
@ -297,7 +287,7 @@ void LCD_Init(void)
//EXIT SLEEP //EXIT SLEEP
LCD_Write_Command(0x11); LCD_Write_Command(0x11);
for(i=0; i<(120/TEMPO1MS_80M); i++); //~120ms attente for (i = 0; i < (120 / TEMPO1MS_80M); i++); // ~120ms sleep
//TURN ON DISPLAY //TURN ON DISPLAY
LCD_Write_Command(0x29); LCD_Write_Command(0x29);
@ -308,13 +298,13 @@ void LCD_Init(void)
//INTERNAL FUNCTION OF LIBRARY //INTERNAL FUNCTION OF LIBRARY
/*Sends block colour information to LCD*/ /*Sends block colour information to LCD*/
void LCD_Draw_Colour_Burst(uint16_t Colour, uint32_t Size) void LCD_Draw_Colour_Burst(uint16_t Colour, uint32_t Size) {
{
short bufColour; short bufColour;
// On envoie la même couleur sur Size pixels // On envoie la même couleur sur Size pixels
bufColour = Colour >> 8;// pour le tfert dans DR en 1 seul write mais bufColour = Colour >> 8;// pour le tfert dans DR en 1 seul write mais
bufColour |= Colour << 8;// en mode 8 bits, il faut inverser les octets MSB/LSB bufColour |= Colour << 8;// en mode 8 bits, il faut inverser les octets MSB/LSB
DATA; DATA
;
CS_ON; CS_ON;
for (uint32_t j = 0; j < Size; j++) { for (uint32_t j = 0; j < Size; j++) {
while ((SPI3->SR & SPI_SR_TXE) == 0);//Si FIFO full (TX buffer Empty=0), on attend while ((SPI3->SR & SPI_SR_TXE) == 0);//Si FIFO full (TX buffer Empty=0), on attend
@ -326,8 +316,7 @@ void LCD_Draw_Colour_Burst(uint16_t Colour, uint32_t Size)
//FILL THE ENTIRE SCREEN WITH SELECTED COLOUR (either #define-d ones or custom 16bit) //FILL THE ENTIRE SCREEN WITH SELECTED COLOUR (either #define-d ones or custom 16bit)
/*Sets address (entire screen) and Sends Height*Width ammount of colour information to LCD*/ /*Sets address (entire screen) and Sends Height*Width ammount of colour information to LCD*/
void LCD_Fill_Screen(uint16_t Colour) void LCD_Fill_Screen(uint16_t Colour) {
{
LCD_Set_Address(0, 0, LCD_WIDTH, LCD_HEIGHT); LCD_Set_Address(0, 0, LCD_WIDTH, LCD_HEIGHT);
LCD_Draw_Colour_Burst(Colour, LCD_WIDTH * LCD_HEIGHT); LCD_Draw_Colour_Burst(Colour, LCD_WIDTH * LCD_HEIGHT);
} }
@ -338,15 +327,15 @@ void LCD_Fill_Screen(uint16_t Colour)
//Using pixels to draw big simple structures is not recommended as it is really slow //Using pixels to draw big simple structures is not recommended as it is really slow
//Try using either rectangles or lines if possible //Try using either rectangles or lines if possible
// //
void LCD_Draw_Pixel(uint16_t X,uint16_t Y,uint16_t Colour) void LCD_Draw_Pixel(uint16_t X, uint16_t Y, uint16_t Colour) {
{
if ((X >= LCD_WIDTH) || (Y >= LCD_HEIGHT)) return;//OUT OF BOUNDS! if ((X >= LCD_WIDTH) || (Y >= LCD_HEIGHT)) return;//OUT OF BOUNDS!
//ADDRESS //ADDRESS
LCD_Write_Command(0x2A); LCD_Write_Command(0x2A);
//XDATA //XDATA
DATA; DATA
;
CS_ON; CS_ON;
SPI3->DR = (X >> 8) | (X << 8);//inversion MSB / LSB pour envoi des 2 mots 8 bits en 1W 16bits SPI3->DR = (X >> 8) | (X << 8);//inversion MSB / LSB pour envoi des 2 mots 8 bits en 1W 16bits
//Pas d'att si FIFO full (TX buffer Empty=0) car juste 2 écriture 16 bits tiennent dans FIFO //Pas d'att si FIFO full (TX buffer Empty=0) car juste 2 écriture 16 bits tiennent dans FIFO
@ -354,25 +343,24 @@ void LCD_Draw_Pixel(uint16_t X,uint16_t Y,uint16_t Colour)
while ((SPI3->SR & SPI_SR_BSY) != 0);//Attendre fin envoi trame while ((SPI3->SR & SPI_SR_BSY) != 0);//Attendre fin envoi trame
CS_OFF; CS_OFF;
//ADDRESS //ADDRESS
LCD_Write_Command(0x2B); LCD_Write_Command(0x2B);
//YDATA //YDATA
DATA; DATA
;
CS_ON; CS_ON;
SPI3->DR = (Y >> 8) | (Y << 8); SPI3->DR = (Y >> 8) | (Y << 8);
SPI3->DR = ((Y + 1) >> 8) | ((Y + 1) << 8); SPI3->DR = ((Y + 1) >> 8) | ((Y + 1) << 8);
while ((SPI3->SR & SPI_SR_BSY) != 0);//Attendre fin envoi trame while ((SPI3->SR & SPI_SR_BSY) != 0);//Attendre fin envoi trame
CS_OFF; CS_OFF;
//ADDRESS //ADDRESS
LCD_Write_Command(0x2C); LCD_Write_Command(0x2C);
//COLOUR //COLOUR
DATA; DATA
;
CS_ON; CS_ON;
SPI3->DR = (Colour >> 8) | (Colour << 8); SPI3->DR = (Colour >> 8) | (Colour << 8);
while ((SPI3->SR & SPI_SR_BSY) != 0);//Attendre fin envoi trame while ((SPI3->SR & SPI_SR_BSY) != 0);//Attendre fin envoi trame
@ -385,15 +373,17 @@ void LCD_Draw_Pixel(uint16_t X,uint16_t Y,uint16_t Colour)
//As with all other draw calls x0 and y0 locations dependant on screen orientation //As with all other draw calls x0 and y0 locations dependant on screen orientation
// //
void LCD_Draw_Rectangle(uint16_t X, uint16_t Y, uint16_t Width, uint16_t Height, uint16_t Colour) void LCD_Draw_Rectangle(
{ uint16_t X,
uint16_t Y,
uint16_t Width,
uint16_t Height,
uint16_t Colour) {
if ((X >= LCD_WIDTH) || (Y >= LCD_HEIGHT)) return; if ((X >= LCD_WIDTH) || (Y >= LCD_HEIGHT)) return;
if((X+Width-1)>=LCD_WIDTH) if ((X + Width - 1) >= LCD_WIDTH) {
{
Width = LCD_WIDTH - X; Width = LCD_WIDTH - X;
} }
if((Y+Height-1)>=LCD_HEIGHT) if ((Y + Height - 1) >= LCD_HEIGHT) {
{
Height = LCD_HEIGHT - Y; Height = LCD_HEIGHT - Y;
} }
LCD_Set_Address(X, Y, X + Width - 1, Y + Height - 1); LCD_Set_Address(X, Y, X + Width - 1, Y + Height - 1);
@ -401,11 +391,13 @@ LCD_Draw_Colour_Burst(Colour, Height*Width);
} }
//DRAW LINE FROM X,Y LOCATION to X+Width,Y LOCATION //DRAW LINE FROM X,Y LOCATION to X+Width,Y LOCATION
void LCD_Draw_Horizontal_Line(uint16_t X, uint16_t Y, uint16_t Width, uint16_t Colour) void LCD_Draw_Horizontal_Line(
{ uint16_t X,
uint16_t Y,
uint16_t Width,
uint16_t Colour) {
if ((X >= LCD_WIDTH) || (Y >= LCD_HEIGHT)) return; if ((X >= LCD_WIDTH) || (Y >= LCD_HEIGHT)) return;
if((X+Width-1)>=LCD_WIDTH) if ((X + Width - 1) >= LCD_WIDTH) {
{
Width = LCD_WIDTH - X; Width = LCD_WIDTH - X;
} }
LCD_Set_Address(X, Y, X + Width - 1, Y); LCD_Set_Address(X, Y, X + Width - 1, Y);
@ -413,11 +405,13 @@ LCD_Draw_Colour_Burst(Colour, Width);
} }
//DRAW LINE FROM X,Y LOCATION to X,Y+Height LOCATION //DRAW LINE FROM X,Y LOCATION to X,Y+Height LOCATION
void LCD_Draw_Vertical_Line(uint16_t X, uint16_t Y, uint16_t Height, uint16_t Colour) void LCD_Draw_Vertical_Line(
{ uint16_t X,
uint16_t Y,
uint16_t Height,
uint16_t Colour) {
if ((X >= LCD_WIDTH) || (Y >= LCD_HEIGHT)) return; if ((X >= LCD_WIDTH) || (Y >= LCD_HEIGHT)) return;
if((Y+Height-1)>=LCD_HEIGHT) if ((Y + Height - 1) >= LCD_HEIGHT) {
{
Height = LCD_HEIGHT - Y; Height = LCD_HEIGHT - Y;
} }
LCD_Set_Address(X, Y, X, Y + Height - 1); LCD_Set_Address(X, Y, X, Y + Height - 1);
@ -427,16 +421,18 @@ LCD_Draw_Colour_Burst(Colour, Height);
/*********************Partie de la Lib issue de LCD_GFX**************************/ /*********************Partie de la Lib issue de LCD_GFX**************************/
/*Draw hollow circle at X,Y location with specified radius and colour. X and Y represent circles center */ /*Draw hollow circle at X,Y location with specified radius and colour. X and Y represent circles center */
void LCD_Draw_Hollow_Circle(uint16_t X, uint16_t Y, uint16_t Radius, uint16_t Colour) void LCD_Draw_Hollow_Circle(
{ uint16_t X,
uint16_t Y,
uint16_t Radius,
uint16_t Colour) {
int x = Radius - 1; int x = Radius - 1;
int y = 0; int y = 0;
int dx = 1; int dx = 1;
int dy = 1; int dy = 1;
int err = dx - (Radius << 1); int err = dx - (Radius << 1);
while (x >= y) while (x >= y) {
{
LCD_Draw_Pixel(X + x, Y + y, Colour); LCD_Draw_Pixel(X + x, Y + y, Colour);
LCD_Draw_Pixel(X + y, Y + x, Colour); LCD_Draw_Pixel(X + y, Y + x, Colour);
LCD_Draw_Pixel(X - y, Y + x, Colour); LCD_Draw_Pixel(X - y, Y + x, Colour);
@ -446,14 +442,12 @@ void LCD_Draw_Hollow_Circle(uint16_t X, uint16_t Y, uint16_t Radius, uint16_t Co
LCD_Draw_Pixel(X + y, Y - x, Colour); LCD_Draw_Pixel(X + y, Y - x, Colour);
LCD_Draw_Pixel(X + x, Y - y, Colour); LCD_Draw_Pixel(X + x, Y - y, Colour);
if (err <= 0) if (err <= 0) {
{
y++; y++;
err += dy; err += dy;
dy += 2; dy += 2;
} }
if (err > 0) if (err > 0) {
{
x--; x--;
dx += 2; dx += 2;
err += (-Radius << 1) + dx; err += (-Radius << 1) + dx;
@ -462,8 +456,11 @@ void LCD_Draw_Hollow_Circle(uint16_t X, uint16_t Y, uint16_t Radius, uint16_t Co
} }
/*Draw filled circle at X,Y location with specified radius and colour. X and Y represent circles center */ /*Draw filled circle at X,Y location with specified radius and colour. X and Y represent circles center */
void LCD_Draw_Filled_Circle(uint16_t X, uint16_t Y, uint16_t Radius, uint16_t Colour) void LCD_Draw_Filled_Circle(
{ uint16_t X,
uint16_t Y,
uint16_t Radius,
uint16_t Colour) {
int x = Radius; int x = Radius;
int y = 0; int y = 0;
@ -471,15 +468,12 @@ void LCD_Draw_Filled_Circle(uint16_t X, uint16_t Y, uint16_t Radius, uint16_t Co
int yChange = 0; int yChange = 0;
int radiusError = 0; int radiusError = 0;
while (x >= y) while (x >= y) {
{ for (int i = X - x; i <= X + x; i++) {
for (int i = X - x; i <= X + x; i++)
{
LCD_Draw_Pixel(i, Y + y, Colour); LCD_Draw_Pixel(i, Y + y, Colour);
LCD_Draw_Pixel(i, Y - y, Colour); LCD_Draw_Pixel(i, Y - y, Colour);
} }
for (int i = X - y; i <= X + y; i++) for (int i = X - y; i <= X + y; i++) {
{
LCD_Draw_Pixel(i, Y + x, Colour); LCD_Draw_Pixel(i, Y + x, Colour);
LCD_Draw_Pixel(i, Y - x, Colour); LCD_Draw_Pixel(i, Y - x, Colour);
} }
@ -487,8 +481,7 @@ void LCD_Draw_Filled_Circle(uint16_t X, uint16_t Y, uint16_t Radius, uint16_t Co
y++; y++;
radiusError += yChange; radiusError += yChange;
yChange += 2; yChange += 2;
if (((radiusError << 1) + xChange) > 0) if (((radiusError << 1) + xChange) > 0) {
{
x--; x--;
radiusError += xChange; radiusError += xChange;
xChange += 2; xChange += 2;
@ -499,8 +492,12 @@ void LCD_Draw_Filled_Circle(uint16_t X, uint16_t Y, uint16_t Radius, uint16_t Co
} }
/*Draw a hollow rectangle between positions X0,Y0 and X1,Y1 with specified colour*/ /*Draw a hollow rectangle between positions X0,Y0 and X1,Y1 with specified colour*/
void LCD_Draw_Hollow_Rectangle_Coord(uint16_t X0, uint16_t Y0, uint16_t X1, uint16_t Y1, uint16_t Colour) void LCD_Draw_Hollow_Rectangle_Coord(
{ uint16_t X0,
uint16_t Y0,
uint16_t X1,
uint16_t Y1,
uint16_t Colour) {
uint16_t X_length = 0; uint16_t X_length = 0;
uint16_t Y_length = 0; uint16_t Y_length = 0;
uint8_t Negative_X = 0; uint8_t Negative_X = 0;
@ -514,43 +511,37 @@ void LCD_Draw_Hollow_Rectangle_Coord(uint16_t X0, uint16_t Y0, uint16_t X1, uint
Calc_Negative = Y1 - Y0; Calc_Negative = Y1 - Y0;
if (Calc_Negative < 0) Negative_Y = 1; if (Calc_Negative < 0) Negative_Y = 1;
//DRAW HORIZONTAL! //DRAW HORIZONTAL!
if(!Negative_X) if (!Negative_X) {
{
X_length = X1 - X0; X_length = X1 - X0;
} } else {
else
{
X_length = X0 - X1; X_length = X0 - X1;
} }
LCD_Draw_Horizontal_Line(X0, Y0, X_length, Colour); LCD_Draw_Horizontal_Line(X0, Y0, X_length, Colour);
LCD_Draw_Horizontal_Line(X0, Y1, X_length, Colour); LCD_Draw_Horizontal_Line(X0, Y1, X_length, Colour);
//DRAW VERTICAL! //DRAW VERTICAL!
if(!Negative_Y) if (!Negative_Y) {
{
Y_length = Y1 - Y0; Y_length = Y1 - Y0;
} } else {
else
{
Y_length = Y0 - Y1; Y_length = Y0 - Y1;
} }
LCD_Draw_Vertical_Line(X0, Y0, Y_length, Colour); LCD_Draw_Vertical_Line(X0, Y0, Y_length, Colour);
LCD_Draw_Vertical_Line(X1, Y0, Y_length, Colour); LCD_Draw_Vertical_Line(X1, Y0, Y_length, Colour);
if((X_length > 0)||(Y_length > 0)) if ((X_length > 0) || (Y_length > 0)) {
{
LCD_Draw_Pixel(X1, Y1, Colour); LCD_Draw_Pixel(X1, Y1, Colour);
} }
} }
/*Draw a filled rectangle between positions X0,Y0 and X1,Y1 with specified colour*/ /*Draw a filled rectangle between positions X0,Y0 and X1,Y1 with specified colour*/
void LCD_Draw_Filled_Rectangle_Coord(uint16_t X0, uint16_t Y0, uint16_t X1, uint16_t Y1, uint16_t Colour) void LCD_Draw_Filled_Rectangle_Coord(
{ uint16_t X0,
uint16_t Y0,
uint16_t X1,
uint16_t Y1,
uint16_t Colour) {
uint16_t X_length = 0; uint16_t X_length = 0;
uint16_t Y_length = 0; uint16_t Y_length = 0;
uint8_t Negative_X = 0; uint8_t Negative_X = 0;
@ -567,27 +558,20 @@ void LCD_Draw_Filled_Rectangle_Coord(uint16_t X0, uint16_t Y0, uint16_t X1, uint
Calc_Negative = Y1 - Y0; Calc_Negative = Y1 - Y0;
if (Calc_Negative < 0) Negative_Y = 1; if (Calc_Negative < 0) Negative_Y = 1;
//DRAW HORIZONTAL! //DRAW HORIZONTAL!
if(!Negative_X) if (!Negative_X) {
{
X_length = X1 - X0; X_length = X1 - X0;
X0_true = X0; X0_true = X0;
} } else {
else
{
X_length = X0 - X1; X_length = X0 - X1;
X0_true = X1; X0_true = X1;
} }
//DRAW VERTICAL! //DRAW VERTICAL!
if(!Negative_Y) if (!Negative_Y) {
{
Y_length = Y1 - Y0; Y_length = Y1 - Y0;
Y0_true = Y0; Y0_true = Y0;
} } else {
else
{
Y_length = Y0 - Y1; Y_length = Y0 - Y1;
Y0_true = Y1; Y0_true = Y1;
} }
@ -597,8 +581,13 @@ void LCD_Draw_Filled_Rectangle_Coord(uint16_t X0, uint16_t Y0, uint16_t X1, uint
/*Draws a character (fonts imported from fonts.h) at X,Y location with specified font colour, size and Background colour*/ /*Draws a character (fonts imported from fonts.h) at X,Y location with specified font colour, size and Background colour*/
/*See fonts.h implementation of font on what is required for changing to a different font when switching fonts libraries*/ /*See fonts.h implementation of font on what is required for changing to a different font when switching fonts libraries*/
void LCD_Draw_Char(char Character, uint16_t X, uint16_t Y, uint16_t Colour, uint16_t Size, uint16_t Background_Colour) void LCD_Draw_Char(
{ char Character,
uint16_t X,
uint16_t Y,
uint16_t Colour,
uint16_t Size,
uint16_t Background_Colour) {
uint8_t function_char; uint8_t function_char;
uint8_t i, j; uint8_t i, j;
@ -611,23 +600,21 @@ void LCD_Draw_Char(char Character, uint16_t X, uint16_t Y, uint16_t Colour, uint
} }
char temp[CHAR_WIDTH]; char temp[CHAR_WIDTH];
for(uint8_t k = 0; k<CHAR_WIDTH; k++) for (uint8_t k = 0; k < CHAR_WIDTH; k++) {
{
temp[k] = font[function_char][k]; temp[k] = font[function_char][k];
} }
// Draw pixels // Draw pixels
LCD_Draw_Rectangle(X, Y, CHAR_WIDTH*Size, CHAR_HEIGHT*Size, Background_Colour); LCD_Draw_Rectangle(X, Y, CHAR_WIDTH * Size, CHAR_HEIGHT * Size,
Background_Colour);
for (j = 0; j < CHAR_WIDTH; j++) { for (j = 0; j < CHAR_WIDTH; j++) {
for (i = 0; i < CHAR_HEIGHT; i++) { for (i = 0; i < CHAR_HEIGHT; i++) {
if (temp[j] & (1 << i)) { if (temp[j] & (1 << i)) {
if(Size == 1) if (Size == 1) {
{
LCD_Draw_Pixel(X + j, Y + i, Colour); LCD_Draw_Pixel(X + j, Y + i, Colour);
} } else {
else LCD_Draw_Rectangle(X + (j * Size), Y + (i * Size), Size, Size,
{ Colour);
LCD_Draw_Rectangle(X+(j*Size), Y+(i*Size), Size, Size, Colour);
} }
} }
} }
@ -636,8 +623,13 @@ void LCD_Draw_Char(char Character, uint16_t X, uint16_t Y, uint16_t Colour, uint
/*Draws an array of characters (fonts imported from fonts.h) at X,Y location with specified font colour, size and Background colour*/ /*Draws an array of characters (fonts imported from fonts.h) at X,Y location with specified font colour, size and Background colour*/
/*See fonts.h implementation of font on what is required for changing to a different font when switching fonts libraries*/ /*See fonts.h implementation of font on what is required for changing to a different font when switching fonts libraries*/
void LCD_Draw_Text(const char* Text, uint16_t X, uint16_t Y, uint16_t Colour, uint16_t Size, uint16_t Background_Colour) void LCD_Draw_Text(
{ const char *Text,
uint16_t X,
uint16_t Y,
uint16_t Colour,
uint16_t Size,
uint16_t Background_Colour) {
while (*Text) { while (*Text) {
LCD_Draw_Char(*Text++, X, Y, Colour, Size, Background_Colour); LCD_Draw_Char(*Text++, X, Y, Colour, Size, Background_Colour);
X += CHAR_WIDTH * Size; X += CHAR_WIDTH * Size;
@ -647,15 +639,19 @@ void LCD_Draw_Text(const char* Text, uint16_t X, uint16_t Y, uint16_t Colour, ui
/*Dessine une image dans une zone de l'ecran, aux coordonnées X et Y*/ /*Dessine une image dans une zone de l'ecran, aux coordonnées X et Y*/
//CONVERTISSEUR: http://www.digole.com/tools/PicturetoC_Hex_converter.php //CONVERTISSEUR: http://www.digole.com/tools/PicturetoC_Hex_converter.php
//65K colour (2Bytes / Pixel) //65K colour (2Bytes / Pixel)
void LCD_Draw_Image_XY(const char* Image_Array, uint16_t X, uint16_t Y, uint16_t Width, uint16_t Height) void LCD_Draw_Image_XY(
{ const char *Image_Array,
uint16_t X,
uint16_t Y,
uint16_t Width,
uint16_t Height) {
LCD_Set_Address(X, Y, X + Width - 1, Y + Height - 1); LCD_Set_Address(X, Y, X + Width - 1, Y + Height - 1);
DATA; DATA
;
CS_ON; CS_ON;
for(uint32_t i = 0; i < Width*Height*2; i+=2) for (uint32_t i = 0; i < Width * Height * 2; i += 2) {
{
while ((SPI3->SR & SPI_SR_TXE) == 0);//Si FIFO full (TX buffer Empty=0), on attend while ((SPI3->SR & SPI_SR_TXE) == 0);//Si FIFO full (TX buffer Empty=0), on attend
// on utilise l'ecriture 16 bits dans DR, pour des envois 8 bits // on utilise l'ecriture 16 bits dans DR, pour des envois 8 bits
// Le LSB doit etre place ds le MSB : // Le LSB doit etre place ds le MSB :
@ -669,10 +665,8 @@ void LCD_Draw_Image_XY(const char* Image_Array, uint16_t X, uint16_t Y, uint16_t
/*Draws a full screen picture from flash. Image converted from RGB .jpeg/other to C array using online converter*/ /*Draws a full screen picture from flash. Image converted from RGB .jpeg/other to C array using online converter*/
//USING CONVERTER: http://www.digole.com/tools/PicturetoC_Hex_converter.php //USING CONVERTER: http://www.digole.com/tools/PicturetoC_Hex_converter.php
//65K colour (2Bytes / Pixel) //65K colour (2Bytes / Pixel)
void LCD_Draw_Image_Full(const char* Image_Array, uint8_t Orientation) void LCD_Draw_Image_Full(const char *Image_Array, uint8_t Orientation) {
{ switch (Orientation) {
switch(Orientation)
{
case SCREEN_HORIZONTAL_1: case SCREEN_HORIZONTAL_1:
LCD_Set_Rotation(SCREEN_HORIZONTAL_1); LCD_Set_Rotation(SCREEN_HORIZONTAL_1);
LCD_Set_Address(0, 0, LCD_SCREEN_WIDTH, LCD_SCREEN_HEIGHT); LCD_Set_Address(0, 0, LCD_SCREEN_WIDTH, LCD_SCREEN_HEIGHT);
@ -694,11 +688,11 @@ void LCD_Draw_Image_Full(const char* Image_Array, uint8_t Orientation)
break; break;
} }
DATA; DATA
;
CS_ON; CS_ON;
for(uint32_t i = 0; i < LCD_SCREEN_WIDTH*LCD_SCREEN_HEIGHT*2; i+=2) for (uint32_t i = 0; i < LCD_SCREEN_WIDTH * LCD_SCREEN_HEIGHT * 2; i += 2) {
{
while ((SPI3->SR & SPI_SR_TXE) == 0);//Si FIFO full (TX buffer Empty=0), on attend while ((SPI3->SR & SPI_SR_TXE) == 0);//Si FIFO full (TX buffer Empty=0), on attend
// on utilise l'ecriture 16 bits dans DR, pour des envois 8 bits // on utilise l'ecriture 16 bits dans DR, pour des envois 8 bits
// Le LSB doit etre place ds le MSB : // Le LSB doit etre place ds le MSB :

View File

@ -1,4 +1,4 @@
/* USER CODE BEGIN Header */ /* USER CODE BEGIN */
/** /**
****************************************************************************** ******************************************************************************
* @file : main.c * @file : main.c
@ -15,7 +15,7 @@
* *
****************************************************************************** ******************************************************************************
*/ */
/* USER CODE END Header */ /* USER CODE END */
/* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/
#include "main.h" #include "main.h"
#include "LCD_driver.h" #include "LCD_driver.h"
@ -23,47 +23,47 @@
#include "LogoIUT.h" #include "LogoIUT.h"
/* Private includes ----------------------------------------------------------*/ /* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */ /* USER CODE BEGIN */
/* USER CODE END Includes */ /* USER CODE END */
/* Private typedef -----------------------------------------------------------*/ /* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */ /* USER CODE BEGIN */
/* USER CODE END PTD */ /* USER CODE END */
/* Private define ------------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */ /* USER CODE BEGIN */
/* USER CODE END PD */ /* USER CODE END */
/* Private macro -------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */ /* USER CODE BEGIN */
/* USER CODE END PM */ /* USER CODE END */
/* Private variables ---------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/
SPI_HandleTypeDef hspi1; SPI_HandleTypeDef hspi1;
UART_HandleTypeDef huart1; UART_HandleTypeDef huart1;
/* USER CODE BEGIN PV */ /* USER CODE BEGIN */
/* USER CODE END PV */ /* USER CODE END */
/* Private function prototypes -----------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void); void SystemClock_Config(void);
static void MX_GPIO_Init(void); static void MX_GPIO_Init(void);
static void MX_SPI1_Init(void); static void MX_SPI1_Init(void);
static void MX_USART1_UART_Init(void); static void MX_USART1_UART_Init(void);
/* USER CODE BEGIN PFP */ /* USER CODE BEGIN */
/* USER CODE END PFP */ /* USER CODE END */
/* Private user code ---------------------------------------------------------*/ /* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */ /* USER CODE BEGIN */
/* USER CODE END 0 */ /* USER CODE END */
/** /**
* @brief The application entry point. * @brief The application entry point.
@ -72,47 +72,48 @@ static void MX_USART1_UART_Init(void);
int main(void) int main(void)
{ {
/* USER CODE BEGIN 1 */ /* USER CODE BEGIN */
/* USER CODE END 1 */ /* USER CODE END */
/* MCU Configuration--------------------------------------------------------*/ /* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init(); HAL_Init();
/* USER CODE BEGIN Init */ /* USER CODE BEGIN */
/* USER CODE END Init */ /* USER CODE END */
/* Configure the system clock */ /* Configure the system clock */
SystemClock_Config(); SystemClock_Config();
/* USER CODE BEGIN SysInit */ /* USER CODE BEGIN */
/* USER CODE END */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */ /* Initialize all configured peripherals */
MX_GPIO_Init(); MX_GPIO_Init();
MX_SPI1_Init(); MX_SPI1_Init();
MX_USART1_UART_Init(); MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN */
/* USER CODE END 2 */ LCD_Init();
LCD_Fill_Screen(PURPLE);
/* USER CODE END */
/* Infinite loop */ /* Infinite loop */
/* USER CODE BEGIN WHILE */ /* USER CODE BEGIN */
while (1) while (1) {
{
/* USER CODE END WHILE */ /* USER CODE END */
/* USER CODE BEGIN 3 */ /* USER CODE BEGIN */
} }
/* USER CODE END 3 */ /* USER CODE END */
} }
/** /**
@ -161,13 +162,13 @@ void SystemClock_Config(void)
static void MX_SPI1_Init(void) static void MX_SPI1_Init(void)
{ {
/* USER CODE BEGIN SPI1_Init 0 */ /* USER CODE BEGIN */
/* USER CODE END SPI1_Init 0 */ /* USER CODE END */
/* USER CODE BEGIN SPI1_Init 1 */ /* USER CODE BEGIN */
/* USER CODE END SPI1_Init 1 */ /* USER CODE END */
/* SPI1 parameter configuration*/ /* SPI1 parameter configuration*/
hspi1.Instance = SPI1; hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER; hspi1.Init.Mode = SPI_MODE_MASTER;
@ -185,9 +186,9 @@ static void MX_SPI1_Init(void)
{ {
Error_Handler(); Error_Handler();
} }
/* USER CODE BEGIN SPI1_Init 2 */ /* USER CODE BEGIN */
/* USER CODE END SPI1_Init 2 */ /* USER CODE END */
} }
@ -199,13 +200,13 @@ static void MX_SPI1_Init(void)
static void MX_USART1_UART_Init(void) static void MX_USART1_UART_Init(void)
{ {
/* USER CODE BEGIN USART1_Init 0 */ /* USER CODE BEGIN */
/* USER CODE END USART1_Init 0 */ /* USER CODE END */
/* USER CODE BEGIN USART1_Init 1 */ /* USER CODE BEGIN */
/* USER CODE END USART1_Init 1 */ /* USER CODE END */
huart1.Instance = USART1; huart1.Instance = USART1;
huart1.Init.BaudRate = 115200; huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.WordLength = UART_WORDLENGTH_8B;
@ -218,9 +219,9 @@ static void MX_USART1_UART_Init(void)
{ {
Error_Handler(); Error_Handler();
} }
/* USER CODE BEGIN USART1_Init 2 */ /* USER CODE BEGIN */
/* USER CODE END USART1_Init 2 */ /* USER CODE END */
} }
@ -232,9 +233,9 @@ static void MX_USART1_UART_Init(void)
static void MX_GPIO_Init(void) static void MX_GPIO_Init(void)
{ {
GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitTypeDef GPIO_InitStruct = {0};
/* USER CODE BEGIN MX_GPIO_Init_1 */ /* USER CODE BEGIN */
/* USER CODE END MX_GPIO_Init_1 */ /* USER CODE END */
/* GPIO Ports Clock Enable */ /* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE();
@ -319,14 +320,14 @@ static void MX_GPIO_Init(void)
/*Configure peripheral I/O remapping */ /*Configure peripheral I/O remapping */
__HAL_AFIO_REMAP_PD01_ENABLE(); __HAL_AFIO_REMAP_PD01_ENABLE();
/* USER CODE BEGIN MX_GPIO_Init_2 */ /* USER CODE BEGIN */
/* USER CODE END MX_GPIO_Init_2 */ /* USER CODE END */
} }
/* USER CODE BEGIN 4 */ /* USER CODE BEGIN */
/* USER CODE END 4 */ /* USER CODE END */
/** /**
* @brief This function is executed in case of error occurrence. * @brief This function is executed in case of error occurrence.
@ -334,13 +335,12 @@ static void MX_GPIO_Init(void)
*/ */
void Error_Handler(void) void Error_Handler(void)
{ {
/* USER CODE BEGIN Error_Handler_Debug */ /* USER CODE BEGIN */
/* User can add his own implementation to report the HAL error return state */ /* User can add his own implementation to report the HAL error return state */
__disable_irq(); __disable_irq();
while (1) while (1) {
{
} }
/* USER CODE END Error_Handler_Debug */ /* USER CODE END */
} }
#ifdef USE_FULL_ASSERT #ifdef USE_FULL_ASSERT
/** /**
@ -352,9 +352,9 @@ void Error_Handler(void)
*/ */
void assert_failed( uint8_t * file , uint32_t line) void assert_failed( uint8_t * file , uint32_t line)
{ {
/* USER CODE BEGIN 6 */ /* USER CODE BEGIN */
/* User can add his own implementation to report the file name and line number, /* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* USER CODE END 6 */ /* USER CODE END */
} }
#endif /* USE_FULL_ASSERT */ #endif /* USE_FULL_ASSERT */