blob: 515ed6a986e3c7bd9519e6ffcbc3aa879d6dc91f [file] [log] [blame]
Gordon Henderson02a3bd82013-06-27 21:57:09 +01001/*
2 * readall.c:
3 * The readall functions - getting a bit big, so split them out.
Gordon Hendersone687f3f2017-01-24 12:13:39 +00004 * Copyright (c) 2012-2017 Gordon Henderson
Gordon Henderson02a3bd82013-06-27 21:57:09 +01005 ***********************************************************************
6 * This file is part of wiringPi:
7 * https://projects.drogon.net/raspberry-pi/wiringpi/
8 *
9 * wiringPi is free software: you can redistribute it and/or modify
10 * it under the terms of the GNU Lesser General Public License as published by
11 * the Free Software Foundation, either version 3 of the License, or
12 * (at your option) any later version.
13 *
14 * wiringPi is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU Lesser General Public License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public License
20 * along with wiringPi. If not, see <http://www.gnu.org/licenses/>.
21 ***********************************************************************
22 */
Gordon Henderson02a3bd82013-06-27 21:57:09 +010023#include <stdio.h>
24#include <stdlib.h>
25#include <stdint.h>
26#include <ctype.h>
27#include <string.h>
28#include <unistd.h>
29#include <errno.h>
30#include <fcntl.h>
31#include <sys/types.h>
32#include <sys/stat.h>
33
34#include <wiringPi.h>
joshua-yang4b08e7f2019-02-21 12:05:24 +090035/*----------------------------------------------------------------------------*/
Gordon Henderson02a3bd82013-06-27 21:57:09 +010036
37extern int wpMode ;
38
joshua-yang4b08e7f2019-02-21 12:05:24 +090039/*----------------------------------------------------------------------------*/
Gordon Henderson6fba4032014-06-24 19:23:31 +010040#ifndef TRUE
joshua-yang4b08e7f2019-02-21 12:05:24 +090041# define TRUE (1==1)
42# define FALSE (1==2)
Gordon Henderson6fba4032014-06-24 19:23:31 +010043#endif
44
joshua-yang4b08e7f2019-02-21 12:05:24 +090045/*----------------------------------------------------------------------------*/
Deokgyu Yang2c7e86b2020-04-28 10:56:11 +090046/*
47 * doReadallExternal:
48 * A relatively crude way to read the pins on an external device.
49 * We don't know the input/output mode of pins, but we can tell
50 * if it's an analog pin or a digital one...
51 */
52/*----------------------------------------------------------------------------*/
53static void doReadallExternal (void)
54{
55 int pin ;
56
57 printf ("+------+---------+--------+\n") ;
58 printf ("| Pin | Digital | Analog |\n") ;
59 printf ("+------+---------+--------+\n") ;
60
61 for (pin = wiringPiNodes->pinBase ; pin <= wiringPiNodes->pinMax ; ++pin)
62 printf ("| %4d | %4d | %4d |\n", pin, digitalRead (pin), analogRead (pin)) ;
63
64 printf ("+------+---------+--------+\n") ;
65}
66
67/*----------------------------------------------------------------------------*/
joshua-yang4b08e7f2019-02-21 12:05:24 +090068static const char *alts [] =
69{
Steve Jeong47402612024-03-07 08:12:33 +000070 "IN", "OUT",
71 "ALT1", "ALT2", "ALT3", "ALT4", "ALT5", "ALT6", "ALT7",
72 "ALT8", "ALT9", "ALTa", "ALTb", "ALTc", "ALTd", "ALTe",
joshua-yang4b08e7f2019-02-21 12:05:24 +090073} ;
Gordon Henderson02a3bd82013-06-27 21:57:09 +010074
joshua-yang4b08e7f2019-02-21 12:05:24 +090075static const char *pupd [] =
76{
77 "DSBLD", "P/U", "P/D"
78} ;
79
80/*----------------------------------------------------------------------------*/
81static const int physToWpi [64] =
82{
83 -1, // 0
84 -1, -1, // 1, 2
85 8, -1,
86 9, -1,
87 7, 15,
88 -1, 16,
89 0, 1,
90 2, -1,
91 3, 4,
92 -1, 5,
93 12, -1,
94 13, 6,
95 14, 10,
96 -1, 11, // 25, 26
97 30, 31, // Actually I2C, but not used
98 21, -1,
99 22, 26,
100 23, -1,
101 24, 27,
102 25, 28,
103 -1, 29,
104 -1, -1,
105 -1, -1,
106 -1, -1,
107 -1, -1,
108 -1, -1,
109 17, 18,
110 19, 20,
111 -1, -1, -1, -1, -1, -1, -1, -1, -1
112} ;
113
114/*----------------------------------------------------------------------------*/
Deokgyu Yange94695f2020-11-13 12:56:17 +0900115static const int physToWpiHC4 [64] =
116{
117 -1, // 0
118 -1, 0, // 1, 2
119 1, 2,
120 -1,
121} ;
122
123/*----------------------------------------------------------------------------*/
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900124static const char *physNamesOdroidC1All [64] =
joshua-yang4b08e7f2019-02-21 12:05:24 +0900125{
126 NULL,
127
128 " 3.3V", "5V ",
129 " SDA.1", "5V ",
130 " SCL.1", "GND(0V) ",
131 "GPIO. 83", "TxD1 ",
132 " GND(0V)", "RxD1 ",
133 "GPIO. 88", "GPIO. 87",
134 "GPIO.116", "GND(0V) ",
135 "GPIO.115", "GPIO.104",
136 " 3.3V", "GPIO.102",
137 " MOSI", "GND(0V) ",
138 " MISO", "GPIO.103",
139 " SCLK", "CE0 ",
140 " GND(0V)", "GPIO.118",
141 " SDA.2", "SCL.2 ",
142 "GPIO.101", "GND(0V) ",
143 "GPIO.100", "GPIO. 99",
144 "GPIO.108", "GND(0V) ",
145 "GPIO.97 ", "GPIO. 98",
146 " AIN.1", "1V8 ",
147 " GND(0V)", "AIN.0 ",
148
149 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
150 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
151 NULL,NULL,NULL,
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900152};
joshua-yang4b08e7f2019-02-21 12:05:24 +0900153
154/*----------------------------------------------------------------------------*/
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900155static const char *physNamesOdroidC1 [64] =
156{
157 NULL,
158
159 " 3.3V", "5V ",
160 " SDA.1", "5V ",
161 " SCL.1", "0V ",
162 " IO. 83", "TxD1 ",
163 " 0V", "RxD1 ",
164 " IO. 88", "IO. 87 ",
165 " IO.116", "0V ",
166 " IO.115", "IO.104 ",
167 " 3.3V", "IO.102 ",
168 " MOSI", "0V ",
169 " MISO", "IO.103 ",
170 " SCLK", "CE0 ",
171 " 0V", "IO.118 ",
172 " SDA.2", "SCL.2 ",
173 " IO.101", "0V ",
174 " IO.100", "IO. 99 ",
175 " IO.108", "0V ",
176 " IO.97 ", "IO. 98 ",
177 " AIN.1", "1V8 ",
178 " 0V", "AIN.0 ",
179
180 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
181 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
182 NULL,NULL,NULL,
183};
184
185/*----------------------------------------------------------------------------*/
186static const char *physNamesOdroidC2All_Rev2 [64] =
joshua-yang4b08e7f2019-02-21 12:05:24 +0900187{
188 NULL,
189
190 " 3.3V", "5V ",
191 " SDA.1", "5V ",
192 " SCL.1", "GND(0V) ",
193 "GPIO.249", "TxD1 ",
194 " GND(0V)", "RxD1 ",
195 "GPIO.247", "GPIO.238",
196 "GPIO.239", "GND(0V) ",
197 "GPIO.237", "GPIO.236",
198 " 3.3V", "GPIO.233",
199 "GPIO.235", "GND(0V) ",
200 "GPIO.232", "GPIO.231",
201 "GPIO.230", "GPIO.229",
202 " GND(0V)", "GPIO.225",
203 " SDA.2", "SCL.2 ",
204 "GPIO.228", "GND(0V) ",
205 "GPIO.219", "GPIO.224",
206 "GPIO.234", "GND(0V) ",
207 "GPIO.214", "GPIO.218",
208 " AIN.1", "1V8 ",
209 " GND(0V)", "AIN.0 ",
210
211 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
212 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
213 NULL,NULL,NULL,
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900214};
215
216/*----------------------------------------------------------------------------*/
217static const char *physNamesOdroidC2_Rev2 [64] =
218{
219 NULL,
220
221 " 3.3V", "5V ",
222 " SDA.1", "5V ",
223 " SCL.1", "0V ",
224 " IO.249", "TxD1 ",
225 " 0V", "RxD1 ",
226 " IO.247", "IO.238 ",
227 " IO.239", "0V ",
228 " IO.237", "IO.236 ",
229 " 3.3V", "IO.233 ",
230 " IO.235", "0V ",
231 " IO.232", "IO.231 ",
232 " IO.230", "IO.229 ",
233 " 0V", "IO.225 ",
234 " SDA.2", "SCL.2 ",
235 " IO.228", "0V ",
236 " IO.219", "IO.224 ",
237 " IO.234", "0V ",
238 " IO.214", "IO.218 ",
239 " AIN.1", "1V8 ",
240 " 0V", "AIN.0 ",
241
242 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
243 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
244 NULL,NULL,NULL,
joshua-yang4b08e7f2019-02-21 12:05:24 +0900245} ;
246
247/*----------------------------------------------------------------------------*/
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900248static const char *physNamesOdroidC2All_Rev1 [64] =
joshua-yang4b08e7f2019-02-21 12:05:24 +0900249{
250 NULL,
251
252 " 3.3V", "5V ",
253 " SDA.1", "5V ",
254 " SCL.1", "GND(0V) ",
255 "GPIO.214", "--------",
256 " GND(0V)", "--------",
257 "GPIO.219", "GPIO.218",
258 "GPIO.247", "GND(0V) ",
259 "--------", "GPIO.235",
260 " 3.3V", "GPIO.233",
261 "GPIO.238", "GND(0V) ",
262 "GPIO.237", "GPIO.234",
263 "GPIO.236", "GPIO.248",
264 " GND(0V)", "GPIO.249",
265 " SDA.2", "SCL.2 ",
266 "GPIO.232", "GND(0V) ",
267 "GPIO.231", "GPIO.230",
268 "GPIO.239", "GND(0V) ",
269 "GPIO.228", "GPIO.229",
270 " AIN.1", "1V8 ",
271 " GND(0V)", "AIN.0 ",
272
273 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
274 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
275 NULL,NULL,NULL,
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900276};
joshua-yang4b08e7f2019-02-21 12:05:24 +0900277
278/*----------------------------------------------------------------------------*/
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900279static const char *physNamesOdroidC2_Rev1 [64] =
280{
281 NULL,
282
283 " 3.3V", "5V ",
284 " SDA.1", "5V ",
285 " SCL.1", "0V ",
286 " IO.214", "-------",
287 " 0V", "-------",
288 " IO.219", "IO.218 ",
289 " IO.247", "0V ",
290 "-------", "IO.235 ",
291 " 3.3V", "IO.233 ",
292 " IO.238", "0V ",
293 " IO.237", "IO.234 ",
294 " IO.236", "IO.248 ",
295 " 0V", "IO.249 ",
296 " SDA.2", "SCL.2 ",
297 " IO.232", "0V ",
298 " IO.231", "IO.230 ",
299 " IO.239", "0V ",
300 " IO.228", "IO.229 ",
301 " AIN.1", "1V8 ",
302 " 0V", "AIN.0 ",
303
304 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
305 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
306 NULL,NULL,NULL,
307};
308
309/*----------------------------------------------------------------------------*/
310static const char *physNamesOdroidXU3All [64] =
joshua-yang4b08e7f2019-02-21 12:05:24 +0900311{
312 NULL,
313
314 " 3.3V", "5V ",
315 "I2C1.SDA", "5V ",
316 "I2C1.SCL", "GND(0V) ",
317 "GPIO. 18", "UART0.TX",
318 " GND(0V)", "UART0.RX",
319 "GPIO.174", "GPIO.173",
320 "GPIO. 21", "GND(0V) ",
321 "GPIO. 22", "GPIO. 19",
322 " 3.3V", "GPIO. 23",
323 " MOSI", "GND(0V) ",
324 " MISO", "GPIO. 24",
325 " SCLK", "CE0 ",
326 " GND(0V)", "GPIO. 25",
327 "I2C5.SDA", "I2C5.SCL",
328 "GPIO. 28", "GND(0V) ",
329 "GPIO. 30", "GPIO. 29",
330 "GPIO. 31", "GND(0V) ",
331 "POWER ON", "GPIO. 33",
332 " AIN.0", "1V8 ",
333 " GND(0V)", "AIN.3 ",
334
335 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
336 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
337 NULL,NULL,NULL,
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900338};
joshua-yang4b08e7f2019-02-21 12:05:24 +0900339
340/*----------------------------------------------------------------------------*/
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900341static const char *physNamesOdroidXU3 [64] =
342{
343 NULL,
344
345 " 3.3V", "5V ",
346 "I2C1.DA", "5V ",
347 "I2C1.CL", "0V ",
348 " IO. 18", "UART.TX",
349 " 0V", "UART.RX",
350 " IO.174", "IO.173 ",
351 " IO. 21", "0V ",
352 " IO. 22", "IO. 19 ",
353 " 3.3V", "IO. 23 ",
354 " MOSI", "0V ",
355 " MISO", "IO. 24 ",
356 " SCLK", "CE0 ",
357 " 0V", "IO. 25 ",
358 "I2C5.DA", "I2C5.CL",
359 " IO. 28", "0V ",
360 " IO. 30", "IO. 29 ",
361 " IO. 31", "0V ",
362 " PWR ON", "IO. 33 ",
363 " AIN.0", "1V8 ",
364 " 0V", "AIN.3 ",
365
366 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
367 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
368 NULL,NULL,NULL,
369};
370
371/*----------------------------------------------------------------------------*/
372static const char *physNamesOdroidN1All [64] =
joshua-yang4b08e7f2019-02-21 12:05:24 +0900373{
374 NULL,
375
376 " 3.0V", "5V ",
377 "I2C4_SDA", "5V ",
378 "I2C4_SCL", "GND(0V) ",
379 "GPIO1A.0", "UART0_TX",
380 " GND(0V)", "UART0_RX",
381 "GPIO1A.1", "GPIO1A.2",
382 "GPIO1A.3", "GND(0V) ",
383 "GPIO1A.4", "GPIO1B.5",
384 " 3.0V", "GPIO1C.2",
385 "SPI1_TXD", "GND(0V) ",
386 "SPI1_RXD", "GPIO1D.0",
387 "SPI1_CLK", "SPI1_CSN",
388 " GND(0V)", "GPIO1C.6",
389 "I2C8_SDA", "I2C8_SCL",
390 "SPDIF_TX", "GND(0V) ",
391 " PWM1", "GPIO4D.4",
392 "GPIO4D.0", "GND(0V) ",
393 "GPIO4D.5", "GPIO4D.6",
394 "ADC.AIN1", "1V8 ",
395 " GND(0V)", "ADC.AIN0",
396
397 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
398 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
399 NULL,NULL,NULL,
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900400};
joshua-yang4b08e7f2019-02-21 12:05:24 +0900401
402/*----------------------------------------------------------------------------*/
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900403static const char *physNamesOdroidN1 [64] =
404{
405 NULL,
406
407 " 3.0V", "5V ",
408 "I2C4.DA", "5V ",
409 "I2C4.CL", "0V ",
410 " IO1A.0", "UART.TX",
411 " 0V", "UART.RX",
412 " IO1A.1", "IO1A.2 ",
413 " IO1A.3", "0V ",
414 " IO1A.4", "IO1B.5 ",
415 " 3.0V", "IO1C.2 ",
416 "SPI.TXD", "0V ",
417 "SPI.RXD", "IO1D.0 ",
418 "SPI.CLK", "SPI.CSN",
419 " 0V", "IO1C.6 ",
420 "I2C8.DA", "I2C8.CL",
421 "SPDIF.T", "0V ",
422 " PWM1", "IO4D.4 ",
423 " IO4D.0", "0V ",
424 " IO4D.5", "IO4D.6 ",
425 " AIN1", "1V8 ",
426 " 0V", "AIN0 ",
427
428 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
429 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
430 NULL,NULL,NULL,
431};
432
433/*----------------------------------------------------------------------------*/
434static const char *physNamesOdroidN2All [64] =
joshua-yang4b08e7f2019-02-21 12:05:24 +0900435{
436 NULL,
437
438 " 3.3V", "5V ",
439 " SDA.2", "5V ",
440 " SCL.2", "GND(0V) ",
441 "GPIO.473", "TxD1 ",
442 " GND(0V)", "RxD1 ",
443 "GPIO.479", "GPIO.492",
444 "GPIO.480", "GND(0V) ",
445 "GPIO.483", "GPIO.476",
446 " 3.3V", "GPIO.477",
447 " MOSI", "GND(0V) ",
448 " MISO", "GPIO.478",
449 " SCLK", "CE0 ",
450 " GND(0V)", "GPIO.464",
451 " SDA.3", "SCL.3 ",
452 "GPIO.490", "GND(0V) ",
453 "GPIO.491", "GPIO.472",
454 "GPIO.481", "GND(0V) ",
455 "GPIO.482", "GPIO.495",
456 " AIN.3", "1V8 ",
457 " GND(0V)", "AIN.2 ",
458
459 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
460 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
461 NULL,NULL,NULL,
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900462};
463
464/*----------------------------------------------------------------------------*/
465static const char *physNamesOdroidN2 [64] =
466{
467 NULL,
468
469 " 3.3V", "5V ",
470 " SDA.2", "5V ",
471 " SCL.2", "0V ",
472 " IO.473", "TxD1 ",
473 " 0V", "RxD1 ",
474 " IO.479", "IO.492 ",
475 " IO.480", "0V ",
476 " IO.483", "IO.476 ",
477 " 3.3V", "IO.477 ",
478 " MOSI", "0V ",
479 " MISO", "IO.478 ",
480 " SCLK", "CE0 ",
481 " 0V", "IO.464 ",
482 " SDA.3", "SCL.3 ",
483 " IO.490", "0V ",
484 " IO.491", "IO.472 ",
485 " IO.481", "0V ",
486 " IO.482", "IO.495 ",
487 " AIN.3", "1V8 ",
488 " 0V", "AIN.2 ",
489
490 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
491 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
492 NULL,NULL,NULL,
493};
joshua-yang4b08e7f2019-02-21 12:05:24 +0900494
495/*----------------------------------------------------------------------------*/
Yang Deokgyuffeba7f2019-07-01 17:22:01 +0900496static const char *physNamesOdroidC4All [64] =
497{
498 NULL,
499
500 " 3.3V", "5V ",
501 " SDA.2", "5V ",
502 " SCL.2", "GND(0V) ",
503 "GPIO.481", "TxD1 ",
504 " GND(0V)", "RxD1 ",
505 "GPIO.479", "GPIO.492",
506 "GPIO.480", "GND(0V) ",
507 "GPIO.483", "GPIO.476",
508 " 3.3V", "GPIO.477",
509 " MOSI", "GND(0V) ",
510 " MISO", "GPIO.478",
511 " SLCK", "SS ",
512 " GND(0V)", "GPIO. 23",
513 " SDA.3", "SCL.3 ",
514 "GPIO.490", "GND(0V) ",
515 "GPIO.491", "GPIO. 24",
516 "GPIO.482", "GND(0V) ",
517 "GPIO.495", "GPIO. 22",
518 " AIN.2", "1V8 ",
519 " GND(0V)", "AIN.0 ",
520
521 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
522 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
523 NULL,NULL,NULL,
524};
525
526/*----------------------------------------------------------------------------*/
527static const char *physNamesOdroidC4 [64] =
528{
529 NULL,
530
531 " 3.3V", "5V ",
532 " SDA.2", "5V ",
533 " SCL.2", "0V ",
534 " IO.481", "TxD1 ",
535 " 0V", "RxD1 ",
536 " IO.479", "IO.492 ",
537 " IO.480", "0V ",
538 " IO.483", "IO.476 ",
539 " 3.3V", "IO.477 ",
540 " MOSI", "0V ",
541 " MISO", "IO.478 ",
542 " SLCK", "SS ",
543 " 0V", "IO. 23 ",
544 " SDA.3", "SCL.3 ",
545 " IO.490", "0V ",
546 " IO.491", "IO. 24 ",
547 " IO.482", "0V ",
548 " IO.495", "IO. 22 ",
549 " AIN.2", "1V8 ",
550 " 0V", "AIN.0 ",
551
552 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
553 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
554 NULL,NULL,NULL,
555};
556
557/*----------------------------------------------------------------------------*/
Deokgyu Yange94695f2020-11-13 12:56:17 +0900558static const char *physNamesOdroidHC4All [64] =
559{
560 NULL,
561
562 " 3.3V",
563 " SDA.2",
564 " SCL.2",
565 "GPIO.481",
566 " 0V",
567
568 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
569 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
570 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
571 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
572 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
573 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
574};
575
576/*----------------------------------------------------------------------------*/
577static const char *physNamesOdroidHC4 [64] =
578{
579 NULL,
580
581 " 3.3V",
582 " SDA.2",
583 " SCL.2",
584 " IO.481",
585 " 0V",
586
587 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
588 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
589 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
590 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
591 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
592 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
593};
594
595/*----------------------------------------------------------------------------*/
Steve Jeongf78d9822022-01-20 03:02:38 +0000596static const char *physNamesOdroidM1All [64] =
597{
598 NULL,
599
600 " 3.3V", "5V ",
601 "I2C0_SDA", "5V ",
602 "I2C0_SCL", "GND(0V) ",
603 "GPIO0_B6", "UART1_TX",
604 " GND(0V)", "UART1_RX",
605 "GPIO0_C0", "GPIO3_D0",
606 "GPIO0_C1", "GND(0V) ",
607 "GPIO3_B2", "GPIO3_C6",
608 " 3.3V", "GPIO3_C7",
609 "SPI_MOSI", "GND(0V) ",
610 "SPI_MISO", "GPIO3_D1",
611 " SPI_CLK", "SPI_CS0 ",
612 " GND(0V)", "GPIO3_D2",
613 "I2C1_SDA", "I2C1_SCL",
614 "GPIO4_C1", "GND(0V) ",
615 "GPIO4_B6", "GPIO3_D3",
616 "GPIO0_B5", "GND(0V) ",
617 "GPIO3_D5", "GPIO3_D4",
618 "ADC.AIN1", "1V8 ",
619 " GND(0V)", "ADC.AIN0",
620
621 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
622 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
623 NULL,NULL,NULL,
624};
625
626/*----------------------------------------------------------------------------*/
627static const char *physNamesOdroidM1 [64] =
628{
629 NULL,
630
631 " 3.3V", "5V ",
632 " SDA0", "5V ",
633 " SCL0", "0V ",
634 " IO0_B6", "UART.TX",
635 " 0V", "UART.RX",
636 " IO0_C0", "IO3_D0 ",
637 " IO0_C1", "0V ",
638 " IO3_B2", "IO3_C6 ",
639 " 3.3V", "IO3_C7 ",
640 "SPI.TXD", "0V ",
641 "SPI.RXD", "IO3_D1 ",
642 "SPI.CLK", "SPI.CS0",
643 " 0V", "IO3_D2 ",
644 " SDA1", "SCL1 ",
645 " IO4_C1", "0V ",
646 " IO4_B6", "IO3_D3 ",
647 " IO0_B5", "0V ",
648 " IO3_D5", "IO3_D4 ",
649 " AIN1", "1V8 ",
650 " 0V", "AIN0 ",
651
652 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
653 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
654 NULL,NULL,NULL,
655};
656
657/*----------------------------------------------------------------------------*/
Steve Jeong329b9d72023-08-11 07:15:13 +0000658static const char *physNamesOdroidM1SAll [64] =
659{
660 NULL,
661
662 " 3.3V", "5V ",
663 "I2C0_SDA", "5V ",
664 "I2C0_SCL", "GND(0V) ",
665 "GPIO0_B6", "UART1_TX",
666 " GND(0V)", "UART1_RX",
667 "GPIO0_C0", "GPIO2_A7",
668 "GPIO0_C1", "GND(0V) ",
669 "GPIO0_C2", "GPIO2_B5",
670 " 3.3V", "GPIO2_B6",
671 "SPI_MOSI", "GND(0V) ",
672 "SPI_MISO", "GPIO2_B0",
673 " SPI_CLK", "SPI_CS0 ",
674 " GND(0V)", "GPIO2_B1",
675 "I2C1_SDA", "I2C1_SCL",
676 "GPIO2_C0", "GND(0V) ",
677 "GPIO2_B7", "GPIO2_B2",
678 "GPIO0_B5", "GND(0V) ",
679 "GPIO2_A5", "GPIO2_A6",
680 "ADC.AIN1", "1V8 ",
681 " GND(0V)", "ADC.AIN0",
682
683 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
684 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
685 NULL,NULL,NULL,
686};
687
688/*----------------------------------------------------------------------------*/
689static const char *physNamesOdroidM1S [64] =
690{
691 NULL,
692
693 " 3.3V", "5V ",
694 " SDA0", "5V ",
695 " SCL0", "0V ",
696 " IO0_B6", "UART.TX",
697 " 0V", "UART.RX",
698 " IO0_C0", "IO2_A7 ",
699 " IO0_C1", "0V ",
700 " IO0_C2", "IO2_B5 ",
701 " 3.3V", "IO2_B6 ",
702 "SPI.TXD", "0V ",
703 "SPI.RXD", "IO2_B0 ",
704 "SPI.CLK", "SPI.CS0",
705 " 0V", "IO2_B1 ",
706 " SDA1", "SCL1 ",
707 " IO2_C0", "0V ",
708 " IO2_B7", "IO2_B2 ",
709 " IO0_B5", "0V ",
710 " IO2_A5", "IO2_A6 ",
711 " AIN1", "1V8 ",
712 " 0V", "AIN0 ",
713
714 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
715 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
716 NULL,NULL,NULL,
717};
718
Steve Jeong47402612024-03-07 08:12:33 +0000719/*----------------------------------------------------------------------------*/
720static const char *physNamesOdroidM2All [64] =
721{
722 NULL,
723
724 " 3.3V", "5V ",
725 "I2C0_SDA", "5V ",
726 "I2C0_SCL", "GND(0V) ",
727 "GPIO0_D0", "UART1_TX",
728 " GND(0V)", "UART1_RX",
729 "GPIO3_D4", "GPIO3_B2",
730 "GPIO3_D5", "GND(0V) ",
731 "GPIO4_B3", "GPIO1_B2",
732 " 3.3V", "GPIO1_B3",
733 "SPI_MOSI", "GND(0V) ",
734 "SPI_MISO", "GPIO0_D4",
735 " SPI_CLK", "SPI_CS0 ",
736 " GND(0V)", "GPIO1_B4",
737 "I2C1_SDA", "I2C1_SCL",
738 "GPIO1_B7", "GND(0V) ",
739 "GPIO1_B6", "GPIO4_B4",
740 "GPIO3_D0", "GND(0V) ",
741 "GPIO3_C7", "GPIO4_B5",
742 "ADC.AIN4", "1V8 ",
743 " GND(0V)", "ADC.AIN5",
744
745 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
746 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
747 NULL,NULL,NULL,
748};
749
750/*----------------------------------------------------------------------------*/
751static const char *physNamesOdroidM2 [64] =
752{
753 NULL,
754
755 " 3.3V", "5V ",
756 " SDA0", "5V ",
757 " SCL0", "0V ",
758 " IO0_D0", "UART.TX",
759 " 0V", "UART.RX",
760 " IO3_D4", "IO3_B2 ",
761 " IO3_D5", "0V ",
762 " IO4_B3", "IO1_B2 ",
763 " 3.3V", "IO1_B3 ",
764 "SPI.TXD", "0V ",
765 "SPI.RXD", "IO0_D4 ",
766 "SPI.CLK", "SPI.CS0",
767 " 0V", "IO1_B4 ",
768 " SDA1", "SCL1 ",
769 " IO1_B7", "0V ",
770 " IO1_B6", "IO4_B4 ",
771 " IO3_D0", "0V ",
772 " IO3_C7", "IO4_B5 ",
773 " AIN4", "1V8 ",
774 " 0V", "AIN5 ",
775
776 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
777 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
778 NULL,NULL,NULL,
779};
Steve Jeong329b9d72023-08-11 07:15:13 +0000780
781/*----------------------------------------------------------------------------*/
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900782static void readallPhys(int model, int UNU rev, int physPin, const char *physNames[], int isAll) {
joshua-yang4b08e7f2019-02-21 12:05:24 +0900783 int pin ;
784
785 // GPIO, wPi pin number
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900786 if (isAll == TRUE) {
787 if ((physPinToGpio (physPin) == -1) && (physToWpi [physPin] == -1))
788 printf(" | | ");
789 else if (physPinToGpio (physPin) != -1) {
790 printf(" | %3d | %3d", physPinToGpio(physPin), physToWpi[physPin]);
791 } else
792 printf(" | | %3d", physToWpi [physPin]);
793 } else {
794 if ((physPinToGpio (physPin) == -1) && (physToWpi [physPin] == -1))
795 printf(" | | ");
796 else if (physPinToGpio (physPin) != -1) {
797 printf(" | %3d | %3d", physPinToGpio(physPin), physToWpi[physPin]);
798 } else
799 printf(" | | %3d", physToWpi [physPin]);
800 }
joshua-yang4b08e7f2019-02-21 12:05:24 +0900801
802 // GPIO pin name
803 printf (" | %s", physNames [physPin]) ;
804
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900805 // GPIO pin mode, value
806 if ((physToWpi [physPin] == -1) || (physPinToGpio (physPin) == -1)) {
807 printf(" | | ");
808 if (isAll == TRUE)
809 printf(" | | ");
810 } else {
joshua-yang4b08e7f2019-02-21 12:05:24 +0900811 if (wpMode == MODE_GPIO)
812 pin = physPinToGpio (physPin);
813 else if (wpMode == MODE_PHYS)
814 pin = physPin ;
815 else
816 pin = physToWpi [physPin];
817
818 printf (" | %4s", alts [getAlt (pin)]) ;
819 printf (" | %d", digitalRead (pin)) ;
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900820
821 // GPIO pin drive strength, pu/pd
822 if (isAll == TRUE) {
823 switch (model) {
824 case MODEL_ODROID_N1:
825 printf (" | | ");
826 break;
827 case MODEL_ODROID_C1:
828 case MODEL_ODROID_C2:
829 printf (" | | %5s", pupd[getPUPD(pin)]);
830 break;
831 case MODEL_ODROID_XU3:
832 case MODEL_ODROID_N2:
Yang Deokgyuffeba7f2019-07-01 17:22:01 +0900833 case MODEL_ODROID_C4:
Steve Jeongf78d9822022-01-20 03:02:38 +0000834 case MODEL_ODROID_M1:
Steve Jeong329b9d72023-08-11 07:15:13 +0000835 case MODEL_ODROID_M1S:
Steve Jeong47402612024-03-07 08:12:33 +0000836 case MODEL_ODROID_M2:
Deokgyu Yanga0bd5eb2020-03-20 11:16:06 +0900837 printf (" | %2d | %5s", getDrive(pin), pupd[getPUPD(pin)]);
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900838 break;
839 default:
840 break;
841 }
joshua-yang4b08e7f2019-02-21 12:05:24 +0900842 }
843 }
844
845 // Physical pin number
846 printf (" | %2d", physPin) ;
847 ++physPin ;
848 printf (" || %-2d", physPin) ;
849
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900850 // GPIO pin mode, value
851 if ((physToWpi [physPin] == -1) || (physPinToGpio (physPin) == -1)) {
852 printf(" |");
853 if (isAll == TRUE)
854 printf(" | |");
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900855 printf(" | ");
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900856 } else {
joshua-yang4b08e7f2019-02-21 12:05:24 +0900857 if (wpMode == MODE_GPIO)
858 pin = physPinToGpio (physPin);
859 else if (wpMode == MODE_PHYS)
860 pin = physPin ;
861 else
862 pin = physToWpi [physPin];
863
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900864
865 // GPIO pin drive strength, pu/pd
866 if (isAll == TRUE) {
867 switch (model) {
868 case MODEL_ODROID_N1:
869 printf (" | | ");
870 break;
871 case MODEL_ODROID_C1:
872 case MODEL_ODROID_C2:
873 printf (" | %-5s | ", pupd[getPUPD(pin)]);
874 break;
875 case MODEL_ODROID_XU3:
876 case MODEL_ODROID_N2:
Yang Deokgyuffeba7f2019-07-01 17:22:01 +0900877 case MODEL_ODROID_C4:
Steve Jeongf78d9822022-01-20 03:02:38 +0000878 case MODEL_ODROID_M1:
Steve Jeong329b9d72023-08-11 07:15:13 +0000879 case MODEL_ODROID_M1S:
Steve Jeong47402612024-03-07 08:12:33 +0000880 case MODEL_ODROID_M2:
Deokgyu Yanga0bd5eb2020-03-20 11:16:06 +0900881 printf (" | %-5s | %-2d", pupd[getPUPD(pin)], getDrive(pin));
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900882 break;
883 default:
884 break;
885 }
joshua-yang4b08e7f2019-02-21 12:05:24 +0900886 }
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900887 printf(" | %d", digitalRead (pin));
888 printf(" | %-4s", alts [getAlt (pin)]);
joshua-yang4b08e7f2019-02-21 12:05:24 +0900889 }
890
891 // GPIO pin name
892 printf (" | %-6s", physNames [physPin]);
893
894 // GPIO, wPi pin number
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900895 if (isAll == TRUE) {
896 if ((physPinToGpio (physPin) == -1) && (physToWpi [physPin] == -1))
897 printf(" | | ");
898 else if (physPinToGpio (physPin) != -1)
899 printf(" | %-3d | %-3d ", physToWpi [physPin], physPinToGpio (physPin));
900 else
901 printf(" | %-3d | ", physToWpi [physPin]);
902 } else {
903 if ((physPinToGpio (physPin) == -1) && (physToWpi [physPin] == -1))
904 printf(" | | ");
905 else if (physPinToGpio (physPin) != -1)
906 printf(" | %-3d | %-3d", physToWpi [physPin], physPinToGpio (physPin));
907 else
908 printf(" | %-3d | ", physToWpi [physPin]);
909 }
joshua-yang4b08e7f2019-02-21 12:05:24 +0900910
911 printf (" |\n") ;
912}
913
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900914static void printHeader(const char *headerName, int isAll) {
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900915 const char *headerLeft = " +-----+-----+---------+------+---+";
916 const char *headerRight = "+---+------+---------+-----+-----+\n";
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900917 const char *headerLeftAll = " +------+-----+----------+------+---+----+";
918 const char *headerRightAll = "+----+---+------+----------+-----+------+\n";
joshua-yang4b08e7f2019-02-21 12:05:24 +0900919
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900920 (isAll == FALSE) ? printf("%s", headerLeft) : printf("%s", headerLeftAll);
921 printf("%s", headerName);
922 (isAll == FALSE) ? printf("%s", headerRight) : printf("%s", headerRightAll);
923}
924
925/*----------------------------------------------------------------------------*/
926static void printBody(int model, int rev, const char *physNames[], int isAll) {
927 (isAll == FALSE)
928 ? printf(
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900929 " | I/O | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | I/O |\n"
930 " +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n")
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900931 : printf(
932 " | GPIO | wPi | Name | Mode | V | DS | PU/PD | Physical | PU/PD | DS | V | Mode | Name | wPi | GPIO |\n"
933 " +------+-----+----------+------+---+----+-------+----++----+-------+----+---+------+----------+-----+------+\n");
934 for (int pin = 1; pin <= 40; pin += 2)
935 readallPhys(model, rev, pin, physNames, isAll);
936 (isAll == FALSE)
937 ? printf(
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900938 " +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n"
939 " | I/O | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | I/O |\n")
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900940 : printf(
941 " +------+-----+----------+------+---+----+-------+----++----+-------+----+---+------+----------+-----+------+\n"
942 " | GPIO | wPi | Name | Mode | V | DS | PU/PD | Physical | PU/PD | DS | V | Mode | Name | wPi | GPIO |\n");
joshua-yang4b08e7f2019-02-21 12:05:24 +0900943}
944
945/*----------------------------------------------------------------------------*/
Deokgyu Yange94695f2020-11-13 12:56:17 +0900946static void readallPhysHC4(int model, int UNU rev, int physPin, const char *physNames[], int isAll) {
947 int pin ;
948
949 // GPIO, wPi pin number
950 if (isAll == TRUE) {
951 if ((physPinToGpio (physPin) == -1) && (physToWpiHC4 [physPin] == -1))
952 printf(" | | ");
953 else if (physPinToGpio (physPin) != -1) {
954 printf(" | %3d | %3d", physPinToGpio(physPin), physToWpiHC4[physPin]);
955 } else
956 printf(" | | %3d", physToWpiHC4 [physPin]);
957 } else {
958 if ((physPinToGpio (physPin) == -1) && (physToWpiHC4 [physPin] == -1))
959 printf(" | | ");
960 else if (physPinToGpio (physPin) != -1) {
961 printf(" | %3d | %3d", physPinToGpio(physPin), physToWpiHC4[physPin]);
962 } else
963 printf(" | | %3d", physToWpiHC4 [physPin]);
964 }
965
966 // GPIO pin name
967 printf (" | %s", physNames [physPin]) ;
968
969 // GPIO pin mode, value
970 if ((physToWpiHC4 [physPin] == -1) || (physPinToGpio (physPin) == -1)) {
971 printf(" | | ");
972 if (isAll == TRUE)
973 printf(" | | ");
974 } else {
975 if (wpMode == MODE_GPIO)
976 pin = physPinToGpio (physPin);
977 else if (wpMode == MODE_PHYS)
978 pin = physPin ;
979 else
980 pin = physToWpiHC4 [physPin];
981
982 printf (" | %4s", alts [getAlt (pin)]) ;
983 printf (" | %d", digitalRead (pin)) ;
984
985 // GPIO pin drive strength, pu/pd
986 if (isAll == TRUE) {
987 switch (model) {
988 case MODEL_ODROID_HC4:
989 printf (" | %2d | %5s", getDrive(pin), pupd[getPUPD(pin)]);
990 break;
991 default:
992 break;
993 }
994 }
995 }
996
997 // Physical pin number
998 printf(" | %2d |\n", physPin);
999}
1000
1001/*----------------------------------------------------------------------------*/
1002static void printHeaderHC4(const char *headerName, int isAll) {
1003 const char *header = " +-----+-----+---------+------+---+-----+";
1004 const char *headerAll = " +------+-----+----------+------+---+----+-------+-----+";
1005
1006 (isAll == FALSE) ? printf("%s\n", header) : printf("%s\n", headerAll);
1007 (isAll == FALSE)
1008 ? printf(" | %s |\n", headerName)
1009 : printf(" | %s |\n", headerName);
1010 (isAll == FALSE) ? printf("%s\n", header) : printf("%s\n", headerAll);
1011}
1012
1013/*----------------------------------------------------------------------------*/
1014static void printBodyHC4(int model, int rev, const char *physNames[], int isAll) {
1015 (isAll == FALSE)
1016 ? printf(
1017 " | I/O | wPi | Name | Mode | V | Phy |\n"
1018 " +-----+-----+---------+------+---+-----+\n")
1019 : printf(
1020 " | GPIO | wPi | Name | Mode | V | DS | PU/PD | Phy |\n"
1021 " +------+-----+----------+------+---+----+-------+-----+\n");
1022 for (int pin = 1; pin <= 5; pin ++)
1023 readallPhysHC4(model, rev, pin, physNames, isAll);
1024 (isAll == FALSE)
1025 ? printf(
1026 " +-----+-----+---------+------+---+-----+\n"
1027 " | I/O | wPi | Name | Mode | V | Phy |\n")
1028 : printf(
1029 " +------+-----+----------+------+---+----+-------+-----+\n"
1030 " | GPIO | wPi | Name | Mode | V | DS | PU/PD | Phy |\n");
1031}
1032
1033/*----------------------------------------------------------------------------*/
Gordon Henderson02a3bd82013-06-27 21:57:09 +01001034/*
1035 * doReadall:
1036 * Read all the GPIO pins
1037 * We also want to use this to read the state of pins on an externally
1038 * connected device, so we need to do some fiddling with the internal
1039 * wiringPi node structures - since the gpio command can only use
1040 * one external device at a time, we'll use that to our advantage...
Gordon Henderson02a3bd82013-06-27 21:57:09 +01001041 */
joshua-yang4b08e7f2019-02-21 12:05:24 +09001042/*----------------------------------------------------------------------------*/
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001043void doReadall(int argc, char *argv[]) {
1044 int model, rev, mem, maker, overVolted, isAll;
1045 char *headerName, *physNames;
Gordon Henderson02a3bd82013-06-27 21:57:09 +01001046
Deokgyu Yang2c7e86b2020-04-28 10:56:11 +09001047 // External readall
1048 if (wiringPiNodes != NULL) {
1049 doReadallExternal();
1050 return;
1051 }
1052
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001053 if (argc <= 2) {
1054 isAll = FALSE;
1055 } else if (argc == 3 && (strcasecmp(argv[2], "-a") == 0 || strcasecmp(argv[2], "--all") == 0)) {
1056 isAll = TRUE;
1057 } else {
1058 printf("Oops - unknown readall option:\n");
1059 for (int i = 3; i < argc + 1; i++)
1060 printf("\targv[%d]: %s\n", i, argv[i - 1]);
1061
1062 return;
1063 }
1064
1065 piBoardId (&model, &rev, &mem, &maker, &overVolted);
Gordon Henderson6fba4032014-06-24 19:23:31 +01001066
joshua-yang4b08e7f2019-02-21 12:05:24 +09001067 switch (model) {
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001068 case MODEL_ODROID_C1:
1069 headerName = (isAll == FALSE) ? "--- C1 ---" : "---- Model ODROID-C1 ----";
Yang Deokgyu01a38bd2019-09-20 14:43:44 +09001070 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidC1 : physNamesOdroidC1All);
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001071 break;
1072 case MODEL_ODROID_C2:
1073 headerName = (isAll == FALSE) ? "--- C2 ---" : "---- Model ODROID-C2 ----";
1074 if (rev == 1)
Yang Deokgyu01a38bd2019-09-20 14:43:44 +09001075 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidC2_Rev1 : physNamesOdroidC2All_Rev1);
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001076 else
Yang Deokgyu01a38bd2019-09-20 14:43:44 +09001077 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidC2_Rev2 : physNamesOdroidC2All_Rev2);
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001078 break;
1079 case MODEL_ODROID_XU3:
1080 headerName = (isAll == FALSE) ? "- XU3, 4 -" : "--- Model ODROID-XU3/4 ---";
Yang Deokgyu01a38bd2019-09-20 14:43:44 +09001081 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidXU3 : physNamesOdroidXU3All);
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001082 break;
1083 case MODEL_ODROID_N1:
1084 headerName = (isAll == FALSE) ? "--- N1 ---" : "---- Model ODROID-N1 ----";
Yang Deokgyu01a38bd2019-09-20 14:43:44 +09001085 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidN1 : physNamesOdroidN1All);
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001086 break;
1087 case MODEL_ODROID_N2:
1088 headerName = (isAll == FALSE) ? "--- N2 ---" : "---- Model ODROID-N2 ----";
Yang Deokgyu01a38bd2019-09-20 14:43:44 +09001089 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidN2 : physNamesOdroidN2All);
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001090 break;
Yang Deokgyuffeba7f2019-07-01 17:22:01 +09001091 case MODEL_ODROID_C4:
1092 headerName = (isAll == FALSE) ? "--- C4 ---" : "---- Model ODROID-C4 ----";
1093 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidC4 : physNamesOdroidC4All);
1094 break;
Deokgyu Yange94695f2020-11-13 12:56:17 +09001095 case MODEL_ODROID_HC4:
1096 headerName = (isAll == FALSE) ? " HC4 " : " Model ODROID-HC4 ";
1097 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidHC4 : physNamesOdroidHC4All);
1098 break;
Steve Jeongf78d9822022-01-20 03:02:38 +00001099 case MODEL_ODROID_M1:
1100 headerName = (isAll == FALSE) ? "--- M1 ---" : "---- Model ODROID-M1 ----";
1101 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidM1 : physNamesOdroidM1All);
1102 break;
Steve Jeong329b9d72023-08-11 07:15:13 +00001103 case MODEL_ODROID_M1S:
1104 headerName = (isAll == FALSE) ? " M1S " : " Model ODROID-M1S ";
1105 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidM1S : physNamesOdroidM1SAll);
1106 break;
Steve Jeong47402612024-03-07 08:12:33 +00001107 case MODEL_ODROID_M2:
1108 headerName = (isAll == FALSE) ? "--- M2 ---" : "---- Model ODROID-M2 ----";
1109 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidM2 : physNamesOdroidM2All);
1110 break;
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001111 default:
1112 printf("Oops - unknown model: %d\n", model);
1113 return;
joshua-yang4b08e7f2019-02-21 12:05:24 +09001114 }
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001115
Deokgyu Yange94695f2020-11-13 12:56:17 +09001116 switch (model) {
1117 case MODEL_ODROID_HC4:
1118 printHeaderHC4((const char *) headerName, isAll);
1119 printBodyHC4(model, rev, (const char **) physNames, isAll);
1120 printHeaderHC4((const char *) headerName, isAll);
1121 break;
1122 default:
1123 printHeader((const char *) headerName, isAll);
1124 printBody(model, rev, (const char **) physNames, isAll);
1125 printHeader((const char *) headerName, isAll);
1126 break;
1127 }
Gordon Henderson02a3bd82013-06-27 21:57:09 +01001128}
Gordon Hendersonb0a60c32016-02-29 06:57:38 +00001129
joshua-yang4b08e7f2019-02-21 12:05:24 +09001130/*----------------------------------------------------------------------------*/
Gordon Hendersonb0a60c32016-02-29 06:57:38 +00001131/*
1132 * doAllReadall:
1133 * Force reading of all pins regardless of Pi model
Gordon Hendersonb0a60c32016-02-29 06:57:38 +00001134 */
joshua-yang4b08e7f2019-02-21 12:05:24 +09001135/*----------------------------------------------------------------------------*/
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001136void doAllReadall(void) {
1137 char *fakeArgv[3] = { "", "", "--all" };
1138
1139 doReadall(3, fakeArgv);
Gordon Hendersonb0a60c32016-02-29 06:57:38 +00001140}
joshua-yang4b08e7f2019-02-21 12:05:24 +09001141
1142/*----------------------------------------------------------------------------*/
1143/*----------------------------------------------------------------------------*/