Mercurial > public > ostc4
annotate Discovery/Src/display.c @ 809:9602a7338f28
DevBugfix CO2 sensor in streaming mode:
In standalone mode (no multiplexer) the CO2 sensor is working in streaming mode => it could happen that the OSTC received data before the scaling factor was requested. As result the CO2 values were calculated with a zero value. This problem has been fixed.
In addition some code cleanup has been done. Unifying usage of changeBaudrate function instead of old baud selection based on protocol request of Discovery firmware.
author | Ideenmodellierer |
---|---|
date | Sun, 27 Aug 2023 20:51:13 +0200 |
parents | 5ca177d2df5d |
children | f7318457df4d |
rev | line source |
---|---|
38 | 1 |
2 #include "stm32f4xx_hal.h" /* for HAL_Delay() */ | |
3 #include "ostc.h" | |
4 #include "display.h" | |
5 | |
6 #define ENABLE_EXTENDED_COMMANDS 0xB9 | |
7 #define SET_POWER 0xB1 | |
8 #define SLEEP_OUT 0x11 | |
9 #define DISPLAY_INVERSION_OFF 0x20 | |
10 #define MEMORY_ACCESS_ONTROL 0x36 | |
11 #define INTERFACE_PIXEL_FORMAT 0x3A | |
12 #define SET_RGB_INTERFACE_RELATED 0xB3 | |
13 #define SET_DISPLAY_WAVEFORM 0xB4 | |
14 #define SET_PANEL 0xCC | |
15 #define SET_GAMMA_CURVE_RELATED 0xE0 | |
16 #define DISPLAY_ON 0x29 | |
17 #define DISPLAY_OFF 0x28 | |
18 #define SLEEP_IN 0x10 | |
19 | |
20 | |
21 static void Display_Error_Handler(void); | |
22 | |
23 void display_power_on__1_of_2__pre_RGB(void) | |
24 { | |
25 /* reset system */ | |
26 HAL_GPIO_WritePin(DISPLAY_CSB_GPIO_PORT,DISPLAY_CSB_PIN,GPIO_PIN_SET); // chip select | |
27 | |
28 HAL_GPIO_WritePin(DISPLAY_RESETB_GPIO_PORT,DISPLAY_RESETB_PIN,GPIO_PIN_RESET); | |
29 HAL_Delay(10); | |
30 HAL_GPIO_WritePin(DISPLAY_RESETB_GPIO_PORT,DISPLAY_RESETB_PIN,GPIO_PIN_SET); | |
31 HAL_Delay(10); | |
32 | |
33 /* RGB signals should be now for 2 frames or more (datasheet) */ | |
34 } | |
35 | |
36 | |
300
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
38
diff
changeset
|
37 static void send(uint8_t *pData, uint16_t inputlength) |
38 | 38 { |
39 HAL_GPIO_WritePin(DISPLAY_CSB_GPIO_PORT,DISPLAY_CSB_PIN,GPIO_PIN_RESET); // chip select | |
40 | |
41 if(HAL_SPI_Transmit(&hspiDisplay,(uint8_t*)pData, inputlength, 10000) != HAL_OK) | |
42 Display_Error_Handler(); | |
43 | |
44 while (HAL_SPI_GetState(&hspiDisplay) != HAL_SPI_STATE_READY) | |
45 { | |
46 } | |
47 HAL_GPIO_WritePin(DISPLAY_CSB_GPIO_PORT,DISPLAY_CSB_PIN,GPIO_PIN_SET); // chip select | |
48 } | |
49 | |
50 | |
300
5ca177d2df5d
cleanup: remove commented/unused code, make static
Jan Mulder <jlmulder@xs4all.nl>
parents:
38
diff
changeset
|
51 static uint16_t convert8to9to8(uint8_t *pInput, uint8_t *pOutput,uint16_t inputlength) |
38 | 52 { |
53 uint16_t outputlength; | |
54 uint8_t readbit = 0x80;//0b1000000; | |
55 uint8_t writebit = 0x40;//0b0100000; | |
56 uint16_t i,j,k; | |
57 | |
58 outputlength = ((inputlength+7)/8)*9; | |
59 | |
60 for(i=0;i<outputlength;i++) | |
61 pOutput[i] = 0; | |
62 | |
63 k = 0; | |
64 for(i=0;i<inputlength;i++) | |
65 { | |
66 if(i != 0) | |
67 { | |
68 pOutput[k] |= writebit; // 9. bit | |
69 writebit = writebit >> 1; | |
70 if(writebit == 0) | |
71 { | |
72 writebit = 0x80; | |
73 k++; | |
74 } | |
75 } | |
76 for(j=0;j<8;j++) | |
77 { | |
78 if((pInput[i] & readbit) != 0) | |
79 { | |
80 pOutput[k] |= writebit; | |
81 } | |
82 readbit = readbit >> 1; | |
83 if(readbit == 0) | |
84 readbit = 0x80; | |
85 writebit = writebit >> 1; | |
86 if(writebit == 0) | |
87 { | |
88 writebit = 0x80; | |
89 k++; | |
90 } | |
91 } | |
92 } | |
93 return outputlength; | |
94 } | |
95 | |
96 void display_power_on__2_of_2__post_RGB(void) | |
97 { | |
98 uint8_t aTxBuffer[32]; | |
99 uint8_t bTxBuffer[36]; | |
100 uint16_t i,length; | |
101 | |
102 for(i=0;i<32;i++) | |
103 aTxBuffer[i] = 0; | |
104 for(i=0;i<36;i++) | |
105 bTxBuffer[i] = 0; | |
106 | |
107 aTxBuffer[0] = ENABLE_EXTENDED_COMMANDS; | |
108 aTxBuffer[1] = 0xFF; | |
109 aTxBuffer[2] = 0x83; | |
110 aTxBuffer[3] = 0x63; | |
111 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,4); | |
112 send((uint8_t*)bTxBuffer, length); | |
113 | |
114 aTxBuffer[0] = SET_POWER; | |
115 aTxBuffer[1] = 0x81; | |
116 aTxBuffer[2] = 0x24; | |
117 aTxBuffer[3] = 0x04; | |
118 aTxBuffer[4] = 0x02; | |
119 aTxBuffer[5] = 0x02; | |
120 aTxBuffer[6] = 0x03; | |
121 aTxBuffer[7] = 0x10; | |
122 aTxBuffer[8] = 0x10; | |
123 aTxBuffer[9] = 0x34; | |
124 aTxBuffer[10] = 0x3C; | |
125 aTxBuffer[11] = 0x3F; | |
126 aTxBuffer[12] = 0x3F; | |
127 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,13); | |
128 send((uint8_t*)bTxBuffer, length); | |
129 | |
130 aTxBuffer[0] = SLEEP_OUT; | |
131 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,1); | |
132 send((uint8_t*)bTxBuffer, length); | |
133 HAL_Delay(5+1); | |
134 | |
135 aTxBuffer[0] = DISPLAY_INVERSION_OFF; | |
136 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,1); | |
137 send((uint8_t*)bTxBuffer, length); | |
138 | |
139 aTxBuffer[0] = MEMORY_ACCESS_ONTROL; | |
140 aTxBuffer[1] = 0x00; | |
141 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,2); | |
142 send((uint8_t*)bTxBuffer, length); | |
143 | |
144 aTxBuffer[0] = INTERFACE_PIXEL_FORMAT; | |
145 aTxBuffer[1] = 0x70; | |
146 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,2); | |
147 send((uint8_t*)bTxBuffer, length); | |
148 HAL_Delay(120+20); | |
149 | |
150 aTxBuffer[0] = SET_POWER; | |
151 aTxBuffer[1] = 0x78; | |
152 aTxBuffer[2] = 0x24; | |
153 aTxBuffer[3] = 0x04, | |
154 aTxBuffer[4] = 0x02; | |
155 aTxBuffer[5] = 0x02; | |
156 aTxBuffer[6] = 0x03; | |
157 aTxBuffer[7] = 0x10; | |
158 aTxBuffer[8] = 0x10; | |
159 aTxBuffer[9] = 0x34; | |
160 aTxBuffer[10] = 0x3C; | |
161 aTxBuffer[11] = 0x3F; | |
162 aTxBuffer[12] = 0x3F; | |
163 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,13); | |
164 send((uint8_t*)bTxBuffer, length); | |
165 | |
166 aTxBuffer[0] = SET_RGB_INTERFACE_RELATED; | |
167 aTxBuffer[1] = 0x01; | |
168 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,2); | |
169 send((uint8_t*)bTxBuffer, length); | |
170 | |
171 aTxBuffer[0] = SET_DISPLAY_WAVEFORM; | |
172 aTxBuffer[1] = 0x00; | |
173 aTxBuffer[2] = 0x08; | |
174 aTxBuffer[3] = 0x56; | |
175 aTxBuffer[4] = 0x07; | |
176 aTxBuffer[5] = 0x01; | |
177 aTxBuffer[6] = 0x01; | |
178 aTxBuffer[7] = 0x4D; | |
179 aTxBuffer[8] = 0x01; | |
180 aTxBuffer[9] = 0x42; | |
181 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,10); | |
182 send((uint8_t*)bTxBuffer, length); | |
183 | |
184 aTxBuffer[0] = SET_PANEL; | |
185 aTxBuffer[1] = 0x0B; | |
186 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,2); | |
187 send((uint8_t*)bTxBuffer, length); | |
188 | |
189 aTxBuffer[0] = SET_GAMMA_CURVE_RELATED; | |
190 aTxBuffer[1] = 0x01; | |
191 aTxBuffer[2] = 0x48; | |
192 aTxBuffer[3] = 0x4D; | |
193 aTxBuffer[4] = 0x4E; | |
194 aTxBuffer[5] = 0x58; | |
195 aTxBuffer[6] = 0xF6; | |
196 aTxBuffer[7] = 0x0B; | |
197 aTxBuffer[8] = 0x4E; | |
198 aTxBuffer[9] = 0x12; | |
199 aTxBuffer[10] = 0xD5; | |
200 aTxBuffer[11] = 0x15; | |
201 aTxBuffer[12] = 0x95; | |
202 aTxBuffer[13] = 0x55; | |
203 aTxBuffer[14] = 0x8E; | |
204 aTxBuffer[15] = 0x11; | |
205 aTxBuffer[16] = 0x01; | |
206 aTxBuffer[17] = 0x48; | |
207 aTxBuffer[18] = 0x4D; | |
208 aTxBuffer[19] = 0x55; | |
209 aTxBuffer[20] = 0x5F; | |
210 aTxBuffer[21] = 0xFD; | |
211 aTxBuffer[22] = 0x0A; | |
212 aTxBuffer[23] = 0x4E; | |
213 aTxBuffer[24] = 0x51; | |
214 aTxBuffer[25] = 0xD3; | |
215 aTxBuffer[26] = 0x17; | |
216 aTxBuffer[27] = 0x95; | |
217 aTxBuffer[28] = 0x96; | |
218 aTxBuffer[29] = 0x4E; | |
219 aTxBuffer[30] = 0x11; | |
220 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,31); | |
221 send((uint8_t*)bTxBuffer, length); | |
222 HAL_Delay(5+1); | |
223 | |
224 aTxBuffer[0] = DISPLAY_ON; | |
225 length = convert8to9to8((uint8_t*)aTxBuffer,(uint8_t*)bTxBuffer,1); | |
226 send((uint8_t*)bTxBuffer, length); | |
227 } | |
228 | |
229 | |
230 static void Display_Error_Handler(void) | |
231 { | |
232 while(1) | |
233 { | |
234 } | |
235 } |