@@ -40,7 +40,7 @@ typedef struct _dcm_data_t {
4040
4141typedef struct {
4242 pbio_iodev_t * iodev ;
43- const pbdrv_ioport_lpf2_platform_port_t * pins ;
43+ const pbdrv_ioport_lpf2_port_platform_data_t * pdata ;
4444 dcm_data_t dcm ;
4545 struct pt pt ;
4646 pbio_iodev_type_id_t connected_type_id ;
@@ -209,60 +209,32 @@ static const pbio_iodev_type_id_t ioport_type_id_lookup[3][3] = {
209209
210210PROCESS (pbdrv_ioport_lpf2_process , "I/O port" );
211211
212- static ioport_dev_t ioport_devs [PBDRV_CONFIG_IOPORT_LPF2_NUM_PORTS ] = {
213- #if PBDRV_CONFIG_IOPORT_LPF2_NUM_PORTS > 0
214- [0 ] = {
215- .pins = & pbdrv_ioport_lpf2_platform_port_0 ,
216- },
217- #endif
218- #if PBDRV_CONFIG_IOPORT_LPF2_NUM_PORTS > 1
219- [1 ] = {
220- .pins = & pbdrv_ioport_lpf2_platform_port_1 ,
221- },
222- #endif
223- #if PBDRV_CONFIG_IOPORT_LPF2_NUM_PORTS > 2
224- [2 ] = {
225- .pins = & pbdrv_ioport_lpf2_platform_port_2 ,
226- },
227- #endif
228- #if PBDRV_CONFIG_IOPORT_LPF2_NUM_PORTS > 3
229- [3 ] = {
230- .pins = & pbdrv_ioport_lpf2_platform_port_3 ,
231- },
232- #endif
233- #if PBDRV_CONFIG_IOPORT_LPF2_NUM_PORTS > 4
234- [4 ] = {
235- .pins = & pbdrv_ioport_lpf2_platform_port_4 ,
236- },
237- #endif
238- #if PBDRV_CONFIG_IOPORT_LPF2_NUM_PORTS > 5
239- [5 ] = {
240- .pins = & pbdrv_ioport_lpf2_platform_port_5 ,
241- },
242- #endif
243- };
212+ static ioport_dev_t ioport_devs [PBDRV_CONFIG_IOPORT_LPF2_NUM_PORTS ];
244213
245214static void ioport_enable_uart (ioport_dev_t * ioport ) {
246- const pbdrv_ioport_lpf2_platform_port_t * pins = ioport -> pins ;
215+ const pbdrv_ioport_lpf2_port_platform_data_t * pdata = ioport -> pdata ;
247216
248- pbdrv_gpio_alt (& pins -> uart_rx , pins -> alt );
249- pbdrv_gpio_alt (& pins -> uart_tx , pins -> alt );
250- pbdrv_gpio_out_low (& pins -> uart_buf );
217+ pbdrv_gpio_alt (& pdata -> uart_rx , pdata -> alt );
218+ pbdrv_gpio_alt (& pdata -> uart_tx , pdata -> alt );
219+ pbdrv_gpio_out_low (& pdata -> uart_buf );
251220}
252221
253222static const pbio_iodev_ops_t basic_dev_ops = {
254223};
255224
256225static void init_one (uint8_t ioport ) {
257- const pbdrv_ioport_lpf2_platform_port_t * pins = ioport_devs [ioport ].pins ;
226+ const pbdrv_ioport_lpf2_port_platform_data_t * pdata =
227+ & pbdrv_ioport_lpf2_platform_data .ports [ioport ];
228+
229+ ioport_devs [ioport ].pdata = pdata ;
258230
259231 PT_INIT (& ioport_devs [ioport ].pt );
260232
261- pbdrv_gpio_input (& pins -> id1 );
262- pbdrv_gpio_input (& pins -> id2 );
263- pbdrv_gpio_input (& pins -> uart_buf );
264- pbdrv_gpio_input (& pins -> uart_tx );
265- pbdrv_gpio_input (& pins -> uart_rx );
233+ pbdrv_gpio_input (& pdata -> id1 );
234+ pbdrv_gpio_input (& pdata -> id2 );
235+ pbdrv_gpio_input (& pdata -> uart_buf );
236+ pbdrv_gpio_input (& pdata -> uart_tx );
237+ pbdrv_gpio_input (& pdata -> uart_rx );
266238
267239 basic_devs [ioport ].port = PBDRV_CONFIG_IOPORT_LPF2_FIRST_PORT + ioport ;
268240 basic_devs [ioport ].ops = & basic_dev_ops ;
@@ -288,62 +260,62 @@ pbio_error_t pbdrv_ioport_get_iodev(pbio_port_t port, pbio_iodev_t **iodev) {
288260static PT_THREAD (poll_dcm (ioport_dev_t * ioport )) {
289261 struct pt * pt = & ioport -> pt ;
290262 dcm_data_t * data = & ioport -> dcm ;
291- const pbdrv_ioport_lpf2_platform_port_t pins = * ioport -> pins ;
263+ const pbdrv_ioport_lpf2_port_platform_data_t pdata = * ioport -> pdata ;
292264
293265 PT_BEGIN (pt );
294266
295267 data -> type_id = PBIO_IODEV_TYPE_ID_NONE ;
296268 data -> dev_id1_group = DEV_ID1_GROUP_OPEN ;
297269
298270 // set ID1 high
299- pbdrv_gpio_out_high (& pins .uart_tx );
300- pbdrv_gpio_out_low (& pins .uart_buf );
271+ pbdrv_gpio_out_high (& pdata .uart_tx );
272+ pbdrv_gpio_out_low (& pdata .uart_buf );
301273
302274 // set ID2 as input
303- pbdrv_gpio_input (& pins .id2 );
275+ pbdrv_gpio_input (& pdata .id2 );
304276
305277 PT_YIELD (pt );
306278
307279 // save current ID2 value
308- data -> prev_gpio_value = pbdrv_gpio_input (& pins .id2 );
280+ data -> prev_gpio_value = pbdrv_gpio_input (& pdata .id2 );
309281
310282 // set ID1 low
311- pbdrv_gpio_out_low (& pins .uart_tx );
283+ pbdrv_gpio_out_low (& pdata .uart_tx );
312284
313285 PT_YIELD (pt );
314286
315287 // read ID2
316- data -> gpio_value = pbdrv_gpio_input (& pins .id2 );
288+ data -> gpio_value = pbdrv_gpio_input (& pdata .id2 );
317289
318290 // if ID2 changed from high to low
319291 if (data -> prev_gpio_value == 1 && data -> gpio_value == 0 ) {
320292 // we have touch sensor
321293 data -> type_id = PBIO_IODEV_TYPE_ID_LPF2_TOUCH ;
322294
323295 // set ID1 as input
324- pbdrv_gpio_out_high (& pins .uart_buf );
325- pbdrv_gpio_input (& pins .uart_tx );
296+ pbdrv_gpio_out_high (& pdata .uart_buf );
297+ pbdrv_gpio_input (& pdata .uart_tx );
326298
327299 PT_YIELD (pt );
328300
329301 // ID1 is inverse of touch sensor value
330302 // TODO: save this value to sensor data
331- // sensor_data = !pbdrv_gpio_input(&pins .id1);
303+ // sensor_data = !pbdrv_gpio_input(&pdata .id1);
332304 }
333305 // if ID2 changed from low to high
334306 else if (data -> prev_gpio_value == 0 && data -> gpio_value == 1 ) {
335307 data -> type_id = PBIO_IODEV_TYPE_ID_LPF2_TPOINT ;
336308 } else {
337309 // read ID1
338- data -> prev_gpio_value = pbdrv_gpio_input (& pins .id1 );
310+ data -> prev_gpio_value = pbdrv_gpio_input (& pdata .id1 );
339311
340312 // set ID1 high
341- pbdrv_gpio_out_high (& pins .uart_tx );
313+ pbdrv_gpio_out_high (& pdata .uart_tx );
342314
343315 PT_YIELD (pt );
344316
345317 // read ID1
346- data -> gpio_value = pbdrv_gpio_input (& pins .id1 );
318+ data -> gpio_value = pbdrv_gpio_input (& pdata .id1 );
347319
348320 // if ID1 did not change and is high
349321 if (data -> prev_gpio_value == 1 && data -> gpio_value == 1 ) {
@@ -356,13 +328,13 @@ static PT_THREAD(poll_dcm(ioport_dev_t * ioport)) {
356328 data -> dev_id1_group = DEV_ID1_GROUP_GND ;
357329 } else {
358330 // set ID1 as input
359- pbdrv_gpio_out_high (& pins .uart_buf );
360- pbdrv_gpio_input (& pins .uart_tx );
331+ pbdrv_gpio_out_high (& pdata .uart_buf );
332+ pbdrv_gpio_input (& pdata .uart_tx );
361333
362334 PT_YIELD (pt );
363335
364336 // read ID1
365- if (pbdrv_gpio_input (& pins .id1 ) == 1 ) {
337+ if (pbdrv_gpio_input (& pdata .id1 ) == 1 ) {
366338 // we have ID1 == open
367339 data -> dev_id1_group = DEV_ID1_GROUP_OPEN ;
368340 } else {
@@ -374,24 +346,24 @@ static PT_THREAD(poll_dcm(ioport_dev_t * ioport)) {
374346 PT_YIELD (pt );
375347
376348 // set ID1 as input
377- pbdrv_gpio_out_high (& pins .uart_buf );
378- pbdrv_gpio_input (& pins .uart_tx );
349+ pbdrv_gpio_out_high (& pdata .uart_buf );
350+ pbdrv_gpio_input (& pdata .uart_tx );
379351
380352 // set ID2 high
381- pbdrv_gpio_out_high (& pins .id2 );
353+ pbdrv_gpio_out_high (& pdata .id2 );
382354
383355 PT_YIELD (pt );
384356
385357 // read ID1
386- data -> prev_gpio_value = pbdrv_gpio_input (& pins .id1 );
358+ data -> prev_gpio_value = pbdrv_gpio_input (& pdata .id1 );
387359
388360 // set ID2 low
389- pbdrv_gpio_out_low (& pins .id2 );
361+ pbdrv_gpio_out_low (& pdata .id2 );
390362
391363 PT_YIELD (pt );
392364
393365 // read ID1
394- data -> gpio_value = pbdrv_gpio_input (& pins .id1 );
366+ data -> gpio_value = pbdrv_gpio_input (& pdata .id1 );
395367
396368 // if ID1 changed from high to low
397369 if (data -> prev_gpio_value == 1 && data -> gpio_value == 0 ) {
@@ -407,23 +379,23 @@ static PT_THREAD(poll_dcm(ioport_dev_t * ioport)) {
407379 data -> type_id = PBIO_IODEV_TYPE_ID_LPF2_EXPLOD ;
408380 } else {
409381 // set ID1 high
410- pbdrv_gpio_out_high (& pins .uart_tx );
411- pbdrv_gpio_out_low (& pins .uart_buf );
382+ pbdrv_gpio_out_high (& pdata .uart_tx );
383+ pbdrv_gpio_out_low (& pdata .uart_buf );
412384
413385 // set ID2 high
414- pbdrv_gpio_out_high (& pins .id2 );
386+ pbdrv_gpio_out_high (& pdata .id2 );
415387
416388 PT_YIELD (pt );
417389
418390 // if ID2 is high
419- if (pbdrv_gpio_input (& pins .uart_rx ) == 1 ) {
391+ if (pbdrv_gpio_input (& pdata .uart_rx ) == 1 ) {
420392 // set ID2 low
421- pbdrv_gpio_out_low (& pins .id2 );
393+ pbdrv_gpio_out_low (& pdata .id2 );
422394
423395 PT_YIELD (pt );
424396
425397 // if ID2 is low
426- if (pbdrv_gpio_input (& pins .uart_rx ) == 0 ) {
398+ if (pbdrv_gpio_input (& pdata .uart_rx ) == 0 ) {
427399 if (data -> dev_id1_group < 3 ) {
428400 data -> type_id = ioport_type_id_lookup [data -> dev_id1_group ][2 ];
429401 }
@@ -446,11 +418,11 @@ static PT_THREAD(poll_dcm(ioport_dev_t * ioport)) {
446418 PT_YIELD (pt );
447419
448420 // set ID2 as input
449- pbdrv_gpio_input (& pins .id2 );
421+ pbdrv_gpio_input (& pdata .id2 );
450422
451423 // set ID1 high
452- pbdrv_gpio_out_high (& pins .uart_tx );
453- pbdrv_gpio_out_low (& pins .uart_buf );
424+ pbdrv_gpio_out_high (& pdata .uart_tx );
425+ pbdrv_gpio_out_low (& pdata .uart_buf );
454426
455427 if (data -> type_id == data -> prev_type_id ) {
456428 if (++ data -> dev_id_match_count >= 20 ) {
0 commit comments