21
21
22
22
#define ARRAY_SIZE (arr ) (sizeof(arr) / sizeof((arr)[0]))
23
23
24
+ // GPIO Pins
24
25
uint32_t EPD_MOSI_PIN = 5 ;
25
26
uint32_t EPD_SCLK_PIN = 8 ;
26
27
uint32_t EPD_CS_PIN = 9 ;
@@ -31,6 +32,13 @@ uint32_t EPD_BS_PIN = 13;
31
32
uint32_t EPD_EN_PIN = 0xFF ;
32
33
uint32_t EPD_LED_PIN = 0xFF ;
33
34
35
+ // Display resolution
36
+ uint16_t EPD_WIDTH = 400 ;
37
+ uint16_t EPD_HEIGHT = 300 ;
38
+
39
+ // BWR mode
40
+ bool EPD_BWR_MODE = true;
41
+
34
42
// Arduino like function wrappers
35
43
36
44
void pinMode (uint32_t pin , uint32_t mode )
@@ -82,50 +90,13 @@ void delay(uint32_t ms)
82
90
nrf_delay_ms (ms );
83
91
}
84
92
85
- // GPIO
86
- void DEV_Module_Init (void )
87
- {
88
- pinMode (EPD_CS_PIN , OUTPUT );
89
- pinMode (EPD_DC_PIN , OUTPUT );
90
- pinMode (EPD_RST_PIN , OUTPUT );
91
- pinMode (EPD_BUSY_PIN , INPUT );
92
-
93
- if (EPD_EN_PIN != 0xFF ) {
94
- pinMode (EPD_EN_PIN , OUTPUT );
95
- digitalWrite (EPD_EN_PIN , HIGH );
96
- }
97
-
98
- pinMode (EPD_BS_PIN , OUTPUT );
99
- digitalWrite (EPD_BS_PIN , LOW );
100
-
101
- digitalWrite (EPD_DC_PIN , LOW );
102
- digitalWrite (EPD_CS_PIN , LOW );
103
- digitalWrite (EPD_RST_PIN , HIGH );
104
-
105
- if (EPD_LED_PIN != 0xFF ) {
106
- pinMode (EPD_LED_PIN , OUTPUT );
107
- EPD_LED_ON ();
108
- }
109
- }
110
-
111
- void DEV_Module_Exit (void )
112
- {
113
- digitalWrite (EPD_DC_PIN , LOW );
114
- digitalWrite (EPD_CS_PIN , LOW );
115
- digitalWrite (EPD_RST_PIN , LOW );
116
-
117
- DEV_SPI_Exit ();
118
-
119
- EPD_LED_OFF ();
120
- }
121
-
122
93
// Hardware SPI (write only)
123
94
124
95
#define SPI_INSTANCE 0 /**< SPI instance index. */
125
96
static const nrf_drv_spi_t spi = NRF_DRV_SPI_INSTANCE (SPI_INSTANCE ); /**< SPI instance. */
126
97
static bool spi_initialized = false;
127
98
128
- void DEV_SPI_Init (void )
99
+ static void EPD_SPI_Init (void )
129
100
{
130
101
if (spi_initialized ) return ;
131
102
nrf_drv_spi_config_t spi_config = NRF_DRV_SPI_DEFAULT_CONFIG ;
@@ -140,30 +111,30 @@ void DEV_SPI_Init(void)
140
111
spi_initialized = true;
141
112
}
142
113
143
- void DEV_SPI_Exit (void )
114
+ static void EPD_SPI_Uninit (void )
144
115
{
145
116
if (!spi_initialized ) return ;
146
117
nrf_drv_spi_uninit (& spi );
147
118
spi_initialized = false;
148
119
}
149
120
150
- void DEV_SPI_WriteByte (uint8_t value )
121
+ void EPD_SPI_WriteByte (uint8_t value )
151
122
{
152
- DEV_SPI_Init ();
123
+ EPD_SPI_Init ();
153
124
APP_ERROR_CHECK (nrf_drv_spi_transfer (& spi , & value , 1 , NULL , 0 ));
154
125
}
155
126
156
- void DEV_SPI_WriteBytes (uint8_t * value , uint8_t len )
127
+ void EPD_SPI_WriteBytes (uint8_t * value , uint8_t len )
157
128
{
158
- DEV_SPI_Init ();
129
+ EPD_SPI_Init ();
159
130
APP_ERROR_CHECK (nrf_drv_spi_transfer (& spi , value , len , NULL , 0 ));
160
131
}
161
132
162
133
163
134
// Software SPI (read / write)
164
- void DEV_SPI_WriteByte_SW (uint8_t data )
135
+ void EPD_SPI_WriteByte_SW (uint8_t data )
165
136
{
166
- DEV_SPI_Exit ();
137
+ EPD_SPI_Uninit ();
167
138
pinMode (EPD_MOSI_PIN , OUTPUT );
168
139
digitalWrite (EPD_CS_PIN , LOW );
169
140
for (int i = 0 ; i < 8 ; i ++ )
@@ -178,9 +149,9 @@ void DEV_SPI_WriteByte_SW(uint8_t data)
178
149
digitalWrite (EPD_CS_PIN , HIGH );
179
150
}
180
151
181
- uint8_t DEV_SPI_ReadByte_SW (void )
152
+ uint8_t EPD_SPI_ReadByte_SW (void )
182
153
{
183
- DEV_SPI_Exit ();
154
+ EPD_SPI_Uninit ();
184
155
uint8_t j = 0xff ;
185
156
pinMode (EPD_MOSI_PIN , INPUT );
186
157
digitalWrite (EPD_CS_PIN , LOW );
@@ -202,42 +173,42 @@ void EPD_WriteCommand_SW(uint8_t Reg)
202
173
{
203
174
digitalWrite (EPD_DC_PIN , LOW );
204
175
digitalWrite (EPD_CS_PIN , LOW );
205
- DEV_SPI_WriteByte_SW (Reg );
176
+ EPD_SPI_WriteByte_SW (Reg );
206
177
digitalWrite (EPD_CS_PIN , HIGH );
207
178
}
208
179
209
180
void EPD_WriteByte_SW (uint8_t Data )
210
181
{
211
182
digitalWrite (EPD_DC_PIN , HIGH );
212
183
digitalWrite (EPD_CS_PIN , LOW );
213
- DEV_SPI_WriteByte_SW (Data );
184
+ EPD_SPI_WriteByte_SW (Data );
214
185
digitalWrite (EPD_CS_PIN , HIGH );
215
186
}
216
187
217
188
uint8_t EPD_ReadByte_SW (void )
218
189
{
219
190
digitalWrite (EPD_DC_PIN , HIGH );
220
- return DEV_SPI_ReadByte_SW ();
191
+ return EPD_SPI_ReadByte_SW ();
221
192
}
222
193
223
194
224
195
// Hardware SPI
225
196
void EPD_WriteCommand (uint8_t Reg )
226
197
{
227
198
digitalWrite (EPD_DC_PIN , LOW );
228
- DEV_SPI_WriteByte (Reg );
199
+ EPD_SPI_WriteByte (Reg );
229
200
}
230
201
231
202
void EPD_WriteByte (uint8_t Data )
232
203
{
233
204
digitalWrite (EPD_DC_PIN , HIGH );
234
- DEV_SPI_WriteByte (Data );
205
+ EPD_SPI_WriteByte (Data );
235
206
}
236
207
237
208
void EPD_WriteData (uint8_t * Data , uint8_t Len )
238
209
{
239
210
digitalWrite (EPD_DC_PIN , HIGH );
240
- DEV_SPI_WriteBytes (Data , Len );
211
+ EPD_SPI_WriteBytes (Data , Len );
241
212
}
242
213
243
214
void EPD_Reset (uint32_t value , uint16_t duration )
@@ -266,6 +237,44 @@ void EPD_WaitBusy(uint32_t value, uint16_t timeout)
266
237
NRF_LOG_DEBUG ("[EPD]: busy release\n" );
267
238
}
268
239
240
+ // GPIO
241
+ void EPD_GPIO_Init (void )
242
+ {
243
+ pinMode (EPD_CS_PIN , OUTPUT );
244
+ pinMode (EPD_DC_PIN , OUTPUT );
245
+ pinMode (EPD_RST_PIN , OUTPUT );
246
+ pinMode (EPD_BUSY_PIN , INPUT );
247
+
248
+ if (EPD_EN_PIN != 0xFF ) {
249
+ pinMode (EPD_EN_PIN , OUTPUT );
250
+ digitalWrite (EPD_EN_PIN , HIGH );
251
+ }
252
+
253
+ pinMode (EPD_BS_PIN , OUTPUT );
254
+ digitalWrite (EPD_BS_PIN , LOW );
255
+
256
+ EPD_SPI_Init ();
257
+
258
+ digitalWrite (EPD_DC_PIN , LOW );
259
+ digitalWrite (EPD_CS_PIN , LOW );
260
+ digitalWrite (EPD_RST_PIN , HIGH );
261
+
262
+ if (EPD_LED_PIN != 0xFF ) {
263
+ pinMode (EPD_LED_PIN , OUTPUT );
264
+ EPD_LED_ON ();
265
+ }
266
+ }
267
+
268
+ void EPD_GPIO_Uninit (void )
269
+ {
270
+ digitalWrite (EPD_DC_PIN , LOW );
271
+ digitalWrite (EPD_CS_PIN , LOW );
272
+ digitalWrite (EPD_RST_PIN , LOW );
273
+
274
+ EPD_SPI_Uninit ();
275
+
276
+ EPD_LED_OFF ();
277
+ }
269
278
270
279
// lED
271
280
void EPD_LED_ON (void )
@@ -286,41 +295,28 @@ void EPD_LED_TOGGLE(void)
286
295
nrf_gpio_pin_toggle (EPD_LED_PIN );
287
296
}
288
297
298
+ // EPD models
299
+ extern epd_model_t epd_4in2 ;
300
+ extern epd_model_t epd_4in2bv2 ;
289
301
290
- extern epd_driver_t epd_driver_4in2 ;
291
- extern epd_driver_t epd_driver_4in2bv2 ;
292
-
293
- /** EPD drivers */
294
- static epd_driver_t * epd_drivers [] = {
295
- & epd_driver_4in2 , // UC8176: 4.2 inch, BW
296
- & epd_driver_4in2bv2 , // UC8176: 4.2 inch, BWR
302
+ static epd_model_t * epd_models [] = {
303
+ & epd_4in2 ,
304
+ & epd_4in2bv2 ,
297
305
};
298
306
299
- /**< current EPD driver */
300
- static epd_driver_t * m_driver = NULL ;
301
-
302
- epd_driver_t * epd_driver_get (void )
307
+ static epd_model_t * epd_model_get (epd_model_id_t id )
303
308
{
304
- if (m_driver == NULL )
305
- m_driver = epd_drivers [0 ];
306
- return m_driver ;
307
- }
308
-
309
- epd_driver_t * epd_driver_by_id (uint8_t id )
310
- {
311
- for (uint8_t i = 0 ; i < ARRAY_SIZE (epd_drivers ); i ++ ) {
312
- if (epd_drivers [i ]-> id == id )
313
- return epd_drivers [i ];
309
+ for (uint8_t i = 0 ; i < ARRAY_SIZE (epd_models ); i ++ ) {
310
+ if (epd_models [i ]-> id == id ) {
311
+ return epd_models [i ];
312
+ }
314
313
}
315
- return NULL ;
314
+ return epd_models [ 0 ] ;
316
315
}
317
316
318
- bool epd_driver_set ( uint8_t id )
317
+ epd_driver_t * epd_model_init ( epd_model_id_t id )
319
318
{
320
- epd_driver_t * driver = epd_driver_by_id (id );
321
- if (driver ) {
322
- m_driver = driver ;
323
- return true;
324
- }
325
- return false;
319
+ epd_model_t * model = epd_model_get (id );
320
+ model -> drv -> init (model -> res , model -> bwr );
321
+ return model -> drv ;
326
322
}
0 commit comments