blob: c5d4fc8f47a27050e3d506d571bc8c80d8c41abe [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{
70 "IN", "OUT", "ALT1", "ALT2", "ALT3", "ALT4", "ALT5", "ALT6", "ALT7"
71} ;
Gordon Henderson02a3bd82013-06-27 21:57:09 +010072
joshua-yang4b08e7f2019-02-21 12:05:24 +090073static const char *pupd [] =
74{
75 "DSBLD", "P/U", "P/D"
76} ;
77
78/*----------------------------------------------------------------------------*/
79static const int physToWpi [64] =
80{
81 -1, // 0
82 -1, -1, // 1, 2
83 8, -1,
84 9, -1,
85 7, 15,
86 -1, 16,
87 0, 1,
88 2, -1,
89 3, 4,
90 -1, 5,
91 12, -1,
92 13, 6,
93 14, 10,
94 -1, 11, // 25, 26
95 30, 31, // Actually I2C, but not used
96 21, -1,
97 22, 26,
98 23, -1,
99 24, 27,
100 25, 28,
101 -1, 29,
102 -1, -1,
103 -1, -1,
104 -1, -1,
105 -1, -1,
106 -1, -1,
107 17, 18,
108 19, 20,
109 -1, -1, -1, -1, -1, -1, -1, -1, -1
110} ;
111
112/*----------------------------------------------------------------------------*/
Deokgyu Yange94695f2020-11-13 12:56:17 +0900113static const int physToWpiHC4 [64] =
114{
115 -1, // 0
116 -1, 0, // 1, 2
117 1, 2,
118 -1,
119} ;
120
121/*----------------------------------------------------------------------------*/
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900122static const char *physNamesOdroidC1All [64] =
joshua-yang4b08e7f2019-02-21 12:05:24 +0900123{
124 NULL,
125
126 " 3.3V", "5V ",
127 " SDA.1", "5V ",
128 " SCL.1", "GND(0V) ",
129 "GPIO. 83", "TxD1 ",
130 " GND(0V)", "RxD1 ",
131 "GPIO. 88", "GPIO. 87",
132 "GPIO.116", "GND(0V) ",
133 "GPIO.115", "GPIO.104",
134 " 3.3V", "GPIO.102",
135 " MOSI", "GND(0V) ",
136 " MISO", "GPIO.103",
137 " SCLK", "CE0 ",
138 " GND(0V)", "GPIO.118",
139 " SDA.2", "SCL.2 ",
140 "GPIO.101", "GND(0V) ",
141 "GPIO.100", "GPIO. 99",
142 "GPIO.108", "GND(0V) ",
143 "GPIO.97 ", "GPIO. 98",
144 " AIN.1", "1V8 ",
145 " GND(0V)", "AIN.0 ",
146
147 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
148 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
149 NULL,NULL,NULL,
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900150};
joshua-yang4b08e7f2019-02-21 12:05:24 +0900151
152/*----------------------------------------------------------------------------*/
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900153static const char *physNamesOdroidC1 [64] =
154{
155 NULL,
156
157 " 3.3V", "5V ",
158 " SDA.1", "5V ",
159 " SCL.1", "0V ",
160 " IO. 83", "TxD1 ",
161 " 0V", "RxD1 ",
162 " IO. 88", "IO. 87 ",
163 " IO.116", "0V ",
164 " IO.115", "IO.104 ",
165 " 3.3V", "IO.102 ",
166 " MOSI", "0V ",
167 " MISO", "IO.103 ",
168 " SCLK", "CE0 ",
169 " 0V", "IO.118 ",
170 " SDA.2", "SCL.2 ",
171 " IO.101", "0V ",
172 " IO.100", "IO. 99 ",
173 " IO.108", "0V ",
174 " IO.97 ", "IO. 98 ",
175 " AIN.1", "1V8 ",
176 " 0V", "AIN.0 ",
177
178 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
179 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
180 NULL,NULL,NULL,
181};
182
183/*----------------------------------------------------------------------------*/
184static const char *physNamesOdroidC2All_Rev2 [64] =
joshua-yang4b08e7f2019-02-21 12:05:24 +0900185{
186 NULL,
187
188 " 3.3V", "5V ",
189 " SDA.1", "5V ",
190 " SCL.1", "GND(0V) ",
191 "GPIO.249", "TxD1 ",
192 " GND(0V)", "RxD1 ",
193 "GPIO.247", "GPIO.238",
194 "GPIO.239", "GND(0V) ",
195 "GPIO.237", "GPIO.236",
196 " 3.3V", "GPIO.233",
197 "GPIO.235", "GND(0V) ",
198 "GPIO.232", "GPIO.231",
199 "GPIO.230", "GPIO.229",
200 " GND(0V)", "GPIO.225",
201 " SDA.2", "SCL.2 ",
202 "GPIO.228", "GND(0V) ",
203 "GPIO.219", "GPIO.224",
204 "GPIO.234", "GND(0V) ",
205 "GPIO.214", "GPIO.218",
206 " AIN.1", "1V8 ",
207 " GND(0V)", "AIN.0 ",
208
209 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
210 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
211 NULL,NULL,NULL,
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900212};
213
214/*----------------------------------------------------------------------------*/
215static const char *physNamesOdroidC2_Rev2 [64] =
216{
217 NULL,
218
219 " 3.3V", "5V ",
220 " SDA.1", "5V ",
221 " SCL.1", "0V ",
222 " IO.249", "TxD1 ",
223 " 0V", "RxD1 ",
224 " IO.247", "IO.238 ",
225 " IO.239", "0V ",
226 " IO.237", "IO.236 ",
227 " 3.3V", "IO.233 ",
228 " IO.235", "0V ",
229 " IO.232", "IO.231 ",
230 " IO.230", "IO.229 ",
231 " 0V", "IO.225 ",
232 " SDA.2", "SCL.2 ",
233 " IO.228", "0V ",
234 " IO.219", "IO.224 ",
235 " IO.234", "0V ",
236 " IO.214", "IO.218 ",
237 " AIN.1", "1V8 ",
238 " 0V", "AIN.0 ",
239
240 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
241 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
242 NULL,NULL,NULL,
joshua-yang4b08e7f2019-02-21 12:05:24 +0900243} ;
244
245/*----------------------------------------------------------------------------*/
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900246static const char *physNamesOdroidC2All_Rev1 [64] =
joshua-yang4b08e7f2019-02-21 12:05:24 +0900247{
248 NULL,
249
250 " 3.3V", "5V ",
251 " SDA.1", "5V ",
252 " SCL.1", "GND(0V) ",
253 "GPIO.214", "--------",
254 " GND(0V)", "--------",
255 "GPIO.219", "GPIO.218",
256 "GPIO.247", "GND(0V) ",
257 "--------", "GPIO.235",
258 " 3.3V", "GPIO.233",
259 "GPIO.238", "GND(0V) ",
260 "GPIO.237", "GPIO.234",
261 "GPIO.236", "GPIO.248",
262 " GND(0V)", "GPIO.249",
263 " SDA.2", "SCL.2 ",
264 "GPIO.232", "GND(0V) ",
265 "GPIO.231", "GPIO.230",
266 "GPIO.239", "GND(0V) ",
267 "GPIO.228", "GPIO.229",
268 " AIN.1", "1V8 ",
269 " GND(0V)", "AIN.0 ",
270
271 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
272 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
273 NULL,NULL,NULL,
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900274};
joshua-yang4b08e7f2019-02-21 12:05:24 +0900275
276/*----------------------------------------------------------------------------*/
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900277static const char *physNamesOdroidC2_Rev1 [64] =
278{
279 NULL,
280
281 " 3.3V", "5V ",
282 " SDA.1", "5V ",
283 " SCL.1", "0V ",
284 " IO.214", "-------",
285 " 0V", "-------",
286 " IO.219", "IO.218 ",
287 " IO.247", "0V ",
288 "-------", "IO.235 ",
289 " 3.3V", "IO.233 ",
290 " IO.238", "0V ",
291 " IO.237", "IO.234 ",
292 " IO.236", "IO.248 ",
293 " 0V", "IO.249 ",
294 " SDA.2", "SCL.2 ",
295 " IO.232", "0V ",
296 " IO.231", "IO.230 ",
297 " IO.239", "0V ",
298 " IO.228", "IO.229 ",
299 " AIN.1", "1V8 ",
300 " 0V", "AIN.0 ",
301
302 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
303 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
304 NULL,NULL,NULL,
305};
306
307/*----------------------------------------------------------------------------*/
308static const char *physNamesOdroidXU3All [64] =
joshua-yang4b08e7f2019-02-21 12:05:24 +0900309{
310 NULL,
311
312 " 3.3V", "5V ",
313 "I2C1.SDA", "5V ",
314 "I2C1.SCL", "GND(0V) ",
315 "GPIO. 18", "UART0.TX",
316 " GND(0V)", "UART0.RX",
317 "GPIO.174", "GPIO.173",
318 "GPIO. 21", "GND(0V) ",
319 "GPIO. 22", "GPIO. 19",
320 " 3.3V", "GPIO. 23",
321 " MOSI", "GND(0V) ",
322 " MISO", "GPIO. 24",
323 " SCLK", "CE0 ",
324 " GND(0V)", "GPIO. 25",
325 "I2C5.SDA", "I2C5.SCL",
326 "GPIO. 28", "GND(0V) ",
327 "GPIO. 30", "GPIO. 29",
328 "GPIO. 31", "GND(0V) ",
329 "POWER ON", "GPIO. 33",
330 " AIN.0", "1V8 ",
331 " GND(0V)", "AIN.3 ",
332
333 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
334 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
335 NULL,NULL,NULL,
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900336};
joshua-yang4b08e7f2019-02-21 12:05:24 +0900337
338/*----------------------------------------------------------------------------*/
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900339static const char *physNamesOdroidXU3 [64] =
340{
341 NULL,
342
343 " 3.3V", "5V ",
344 "I2C1.DA", "5V ",
345 "I2C1.CL", "0V ",
346 " IO. 18", "UART.TX",
347 " 0V", "UART.RX",
348 " IO.174", "IO.173 ",
349 " IO. 21", "0V ",
350 " IO. 22", "IO. 19 ",
351 " 3.3V", "IO. 23 ",
352 " MOSI", "0V ",
353 " MISO", "IO. 24 ",
354 " SCLK", "CE0 ",
355 " 0V", "IO. 25 ",
356 "I2C5.DA", "I2C5.CL",
357 " IO. 28", "0V ",
358 " IO. 30", "IO. 29 ",
359 " IO. 31", "0V ",
360 " PWR ON", "IO. 33 ",
361 " AIN.0", "1V8 ",
362 " 0V", "AIN.3 ",
363
364 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
365 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
366 NULL,NULL,NULL,
367};
368
369/*----------------------------------------------------------------------------*/
370static const char *physNamesOdroidN1All [64] =
joshua-yang4b08e7f2019-02-21 12:05:24 +0900371{
372 NULL,
373
374 " 3.0V", "5V ",
375 "I2C4_SDA", "5V ",
376 "I2C4_SCL", "GND(0V) ",
377 "GPIO1A.0", "UART0_TX",
378 " GND(0V)", "UART0_RX",
379 "GPIO1A.1", "GPIO1A.2",
380 "GPIO1A.3", "GND(0V) ",
381 "GPIO1A.4", "GPIO1B.5",
382 " 3.0V", "GPIO1C.2",
383 "SPI1_TXD", "GND(0V) ",
384 "SPI1_RXD", "GPIO1D.0",
385 "SPI1_CLK", "SPI1_CSN",
386 " GND(0V)", "GPIO1C.6",
387 "I2C8_SDA", "I2C8_SCL",
388 "SPDIF_TX", "GND(0V) ",
389 " PWM1", "GPIO4D.4",
390 "GPIO4D.0", "GND(0V) ",
391 "GPIO4D.5", "GPIO4D.6",
392 "ADC.AIN1", "1V8 ",
393 " GND(0V)", "ADC.AIN0",
394
395 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
396 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
397 NULL,NULL,NULL,
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900398};
joshua-yang4b08e7f2019-02-21 12:05:24 +0900399
400/*----------------------------------------------------------------------------*/
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900401static const char *physNamesOdroidN1 [64] =
402{
403 NULL,
404
405 " 3.0V", "5V ",
406 "I2C4.DA", "5V ",
407 "I2C4.CL", "0V ",
408 " IO1A.0", "UART.TX",
409 " 0V", "UART.RX",
410 " IO1A.1", "IO1A.2 ",
411 " IO1A.3", "0V ",
412 " IO1A.4", "IO1B.5 ",
413 " 3.0V", "IO1C.2 ",
414 "SPI.TXD", "0V ",
415 "SPI.RXD", "IO1D.0 ",
416 "SPI.CLK", "SPI.CSN",
417 " 0V", "IO1C.6 ",
418 "I2C8.DA", "I2C8.CL",
419 "SPDIF.T", "0V ",
420 " PWM1", "IO4D.4 ",
421 " IO4D.0", "0V ",
422 " IO4D.5", "IO4D.6 ",
423 " AIN1", "1V8 ",
424 " 0V", "AIN0 ",
425
426 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
427 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
428 NULL,NULL,NULL,
429};
430
431/*----------------------------------------------------------------------------*/
432static const char *physNamesOdroidN2All [64] =
joshua-yang4b08e7f2019-02-21 12:05:24 +0900433{
434 NULL,
435
436 " 3.3V", "5V ",
437 " SDA.2", "5V ",
438 " SCL.2", "GND(0V) ",
439 "GPIO.473", "TxD1 ",
440 " GND(0V)", "RxD1 ",
441 "GPIO.479", "GPIO.492",
442 "GPIO.480", "GND(0V) ",
443 "GPIO.483", "GPIO.476",
444 " 3.3V", "GPIO.477",
445 " MOSI", "GND(0V) ",
446 " MISO", "GPIO.478",
447 " SCLK", "CE0 ",
448 " GND(0V)", "GPIO.464",
449 " SDA.3", "SCL.3 ",
450 "GPIO.490", "GND(0V) ",
451 "GPIO.491", "GPIO.472",
452 "GPIO.481", "GND(0V) ",
453 "GPIO.482", "GPIO.495",
454 " AIN.3", "1V8 ",
455 " GND(0V)", "AIN.2 ",
456
457 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
458 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
459 NULL,NULL,NULL,
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900460};
461
462/*----------------------------------------------------------------------------*/
463static const char *physNamesOdroidN2 [64] =
464{
465 NULL,
466
467 " 3.3V", "5V ",
468 " SDA.2", "5V ",
469 " SCL.2", "0V ",
470 " IO.473", "TxD1 ",
471 " 0V", "RxD1 ",
472 " IO.479", "IO.492 ",
473 " IO.480", "0V ",
474 " IO.483", "IO.476 ",
475 " 3.3V", "IO.477 ",
476 " MOSI", "0V ",
477 " MISO", "IO.478 ",
478 " SCLK", "CE0 ",
479 " 0V", "IO.464 ",
480 " SDA.3", "SCL.3 ",
481 " IO.490", "0V ",
482 " IO.491", "IO.472 ",
483 " IO.481", "0V ",
484 " IO.482", "IO.495 ",
485 " AIN.3", "1V8 ",
486 " 0V", "AIN.2 ",
487
488 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
489 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
490 NULL,NULL,NULL,
491};
joshua-yang4b08e7f2019-02-21 12:05:24 +0900492
493/*----------------------------------------------------------------------------*/
Yang Deokgyuffeba7f2019-07-01 17:22:01 +0900494static const char *physNamesOdroidC4All [64] =
495{
496 NULL,
497
498 " 3.3V", "5V ",
499 " SDA.2", "5V ",
500 " SCL.2", "GND(0V) ",
501 "GPIO.481", "TxD1 ",
502 " GND(0V)", "RxD1 ",
503 "GPIO.479", "GPIO.492",
504 "GPIO.480", "GND(0V) ",
505 "GPIO.483", "GPIO.476",
506 " 3.3V", "GPIO.477",
507 " MOSI", "GND(0V) ",
508 " MISO", "GPIO.478",
509 " SLCK", "SS ",
510 " GND(0V)", "GPIO. 23",
511 " SDA.3", "SCL.3 ",
512 "GPIO.490", "GND(0V) ",
513 "GPIO.491", "GPIO. 24",
514 "GPIO.482", "GND(0V) ",
515 "GPIO.495", "GPIO. 22",
516 " AIN.2", "1V8 ",
517 " GND(0V)", "AIN.0 ",
518
519 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
520 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
521 NULL,NULL,NULL,
522};
523
524/*----------------------------------------------------------------------------*/
525static const char *physNamesOdroidC4 [64] =
526{
527 NULL,
528
529 " 3.3V", "5V ",
530 " SDA.2", "5V ",
531 " SCL.2", "0V ",
532 " IO.481", "TxD1 ",
533 " 0V", "RxD1 ",
534 " IO.479", "IO.492 ",
535 " IO.480", "0V ",
536 " IO.483", "IO.476 ",
537 " 3.3V", "IO.477 ",
538 " MOSI", "0V ",
539 " MISO", "IO.478 ",
540 " SLCK", "SS ",
541 " 0V", "IO. 23 ",
542 " SDA.3", "SCL.3 ",
543 " IO.490", "0V ",
544 " IO.491", "IO. 24 ",
545 " IO.482", "0V ",
546 " IO.495", "IO. 22 ",
547 " AIN.2", "1V8 ",
548 " 0V", "AIN.0 ",
549
550 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
551 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
552 NULL,NULL,NULL,
553};
554
555/*----------------------------------------------------------------------------*/
Deokgyu Yange94695f2020-11-13 12:56:17 +0900556static const char *physNamesOdroidHC4All [64] =
557{
558 NULL,
559
560 " 3.3V",
561 " SDA.2",
562 " SCL.2",
563 "GPIO.481",
564 " 0V",
565
566 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
567 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
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,
572};
573
574/*----------------------------------------------------------------------------*/
575static const char *physNamesOdroidHC4 [64] =
576{
577 NULL,
578
579 " 3.3V",
580 " SDA.2",
581 " SCL.2",
582 " IO.481",
583 " 0V",
584
585 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
586 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
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,
591};
592
593/*----------------------------------------------------------------------------*/
Steve Jeongf78d9822022-01-20 03:02:38 +0000594static const char *physNamesOdroidM1All [64] =
595{
596 NULL,
597
598 " 3.3V", "5V ",
599 "I2C0_SDA", "5V ",
600 "I2C0_SCL", "GND(0V) ",
601 "GPIO0_B6", "UART1_TX",
602 " GND(0V)", "UART1_RX",
603 "GPIO0_C0", "GPIO3_D0",
604 "GPIO0_C1", "GND(0V) ",
605 "GPIO3_B2", "GPIO3_C6",
606 " 3.3V", "GPIO3_C7",
607 "SPI_MOSI", "GND(0V) ",
608 "SPI_MISO", "GPIO3_D1",
609 " SPI_CLK", "SPI_CS0 ",
610 " GND(0V)", "GPIO3_D2",
611 "I2C1_SDA", "I2C1_SCL",
612 "GPIO4_C1", "GND(0V) ",
613 "GPIO4_B6", "GPIO3_D3",
614 "GPIO0_B5", "GND(0V) ",
615 "GPIO3_D5", "GPIO3_D4",
616 "ADC.AIN1", "1V8 ",
617 " GND(0V)", "ADC.AIN0",
618
619 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
620 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
621 NULL,NULL,NULL,
622};
623
624/*----------------------------------------------------------------------------*/
625static const char *physNamesOdroidM1 [64] =
626{
627 NULL,
628
629 " 3.3V", "5V ",
630 " SDA0", "5V ",
631 " SCL0", "0V ",
632 " IO0_B6", "UART.TX",
633 " 0V", "UART.RX",
634 " IO0_C0", "IO3_D0 ",
635 " IO0_C1", "0V ",
636 " IO3_B2", "IO3_C6 ",
637 " 3.3V", "IO3_C7 ",
638 "SPI.TXD", "0V ",
639 "SPI.RXD", "IO3_D1 ",
640 "SPI.CLK", "SPI.CS0",
641 " 0V", "IO3_D2 ",
642 " SDA1", "SCL1 ",
643 " IO4_C1", "0V ",
644 " IO4_B6", "IO3_D3 ",
645 " IO0_B5", "0V ",
646 " IO3_D5", "IO3_D4 ",
647 " AIN1", "1V8 ",
648 " 0V", "AIN0 ",
649
650 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
651 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
652 NULL,NULL,NULL,
653};
654
655/*----------------------------------------------------------------------------*/
Steve Jeong329b9d72023-08-11 07:15:13 +0000656static const char *physNamesOdroidM1SAll [64] =
657{
658 NULL,
659
660 " 3.3V", "5V ",
661 "I2C0_SDA", "5V ",
662 "I2C0_SCL", "GND(0V) ",
663 "GPIO0_B6", "UART1_TX",
664 " GND(0V)", "UART1_RX",
665 "GPIO0_C0", "GPIO2_A7",
666 "GPIO0_C1", "GND(0V) ",
667 "GPIO0_C2", "GPIO2_B5",
668 " 3.3V", "GPIO2_B6",
669 "SPI_MOSI", "GND(0V) ",
670 "SPI_MISO", "GPIO2_B0",
671 " SPI_CLK", "SPI_CS0 ",
672 " GND(0V)", "GPIO2_B1",
673 "I2C1_SDA", "I2C1_SCL",
674 "GPIO2_C0", "GND(0V) ",
675 "GPIO2_B7", "GPIO2_B2",
676 "GPIO0_B5", "GND(0V) ",
677 "GPIO2_A5", "GPIO2_A6",
678 "ADC.AIN1", "1V8 ",
679 " GND(0V)", "ADC.AIN0",
680
681 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
682 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
683 NULL,NULL,NULL,
684};
685
686/*----------------------------------------------------------------------------*/
687static const char *physNamesOdroidM1S [64] =
688{
689 NULL,
690
691 " 3.3V", "5V ",
692 " SDA0", "5V ",
693 " SCL0", "0V ",
694 " IO0_B6", "UART.TX",
695 " 0V", "UART.RX",
696 " IO0_C0", "IO2_A7 ",
697 " IO0_C1", "0V ",
698 " IO0_C2", "IO2_B5 ",
699 " 3.3V", "IO2_B6 ",
700 "SPI.TXD", "0V ",
701 "SPI.RXD", "IO2_B0 ",
702 "SPI.CLK", "SPI.CS0",
703 " 0V", "IO2_B1 ",
704 " SDA1", "SCL1 ",
705 " IO2_C0", "0V ",
706 " IO2_B7", "IO2_B2 ",
707 " IO0_B5", "0V ",
708 " IO2_A5", "IO2_A6 ",
709 " AIN1", "1V8 ",
710 " 0V", "AIN0 ",
711
712 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
713 NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
714 NULL,NULL,NULL,
715};
716
717
718/*----------------------------------------------------------------------------*/
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900719static void readallPhys(int model, int UNU rev, int physPin, const char *physNames[], int isAll) {
joshua-yang4b08e7f2019-02-21 12:05:24 +0900720 int pin ;
721
722 // GPIO, wPi pin number
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900723 if (isAll == TRUE) {
724 if ((physPinToGpio (physPin) == -1) && (physToWpi [physPin] == -1))
725 printf(" | | ");
726 else if (physPinToGpio (physPin) != -1) {
727 printf(" | %3d | %3d", physPinToGpio(physPin), physToWpi[physPin]);
728 } else
729 printf(" | | %3d", physToWpi [physPin]);
730 } else {
731 if ((physPinToGpio (physPin) == -1) && (physToWpi [physPin] == -1))
732 printf(" | | ");
733 else if (physPinToGpio (physPin) != -1) {
734 printf(" | %3d | %3d", physPinToGpio(physPin), physToWpi[physPin]);
735 } else
736 printf(" | | %3d", physToWpi [physPin]);
737 }
joshua-yang4b08e7f2019-02-21 12:05:24 +0900738
739 // GPIO pin name
740 printf (" | %s", physNames [physPin]) ;
741
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900742 // GPIO pin mode, value
743 if ((physToWpi [physPin] == -1) || (physPinToGpio (physPin) == -1)) {
744 printf(" | | ");
745 if (isAll == TRUE)
746 printf(" | | ");
747 } else {
joshua-yang4b08e7f2019-02-21 12:05:24 +0900748 if (wpMode == MODE_GPIO)
749 pin = physPinToGpio (physPin);
750 else if (wpMode == MODE_PHYS)
751 pin = physPin ;
752 else
753 pin = physToWpi [physPin];
754
755 printf (" | %4s", alts [getAlt (pin)]) ;
756 printf (" | %d", digitalRead (pin)) ;
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900757
758 // GPIO pin drive strength, pu/pd
759 if (isAll == TRUE) {
760 switch (model) {
761 case MODEL_ODROID_N1:
762 printf (" | | ");
763 break;
764 case MODEL_ODROID_C1:
765 case MODEL_ODROID_C2:
766 printf (" | | %5s", pupd[getPUPD(pin)]);
767 break;
768 case MODEL_ODROID_XU3:
769 case MODEL_ODROID_N2:
Yang Deokgyuffeba7f2019-07-01 17:22:01 +0900770 case MODEL_ODROID_C4:
Steve Jeongf78d9822022-01-20 03:02:38 +0000771 case MODEL_ODROID_M1:
Steve Jeong329b9d72023-08-11 07:15:13 +0000772 case MODEL_ODROID_M1S:
Deokgyu Yanga0bd5eb2020-03-20 11:16:06 +0900773 printf (" | %2d | %5s", getDrive(pin), pupd[getPUPD(pin)]);
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900774 break;
775 default:
776 break;
777 }
joshua-yang4b08e7f2019-02-21 12:05:24 +0900778 }
779 }
780
781 // Physical pin number
782 printf (" | %2d", physPin) ;
783 ++physPin ;
784 printf (" || %-2d", physPin) ;
785
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900786 // GPIO pin mode, value
787 if ((physToWpi [physPin] == -1) || (physPinToGpio (physPin) == -1)) {
788 printf(" |");
789 if (isAll == TRUE)
790 printf(" | |");
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900791 printf(" | ");
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900792 } else {
joshua-yang4b08e7f2019-02-21 12:05:24 +0900793 if (wpMode == MODE_GPIO)
794 pin = physPinToGpio (physPin);
795 else if (wpMode == MODE_PHYS)
796 pin = physPin ;
797 else
798 pin = physToWpi [physPin];
799
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900800
801 // GPIO pin drive strength, pu/pd
802 if (isAll == TRUE) {
803 switch (model) {
804 case MODEL_ODROID_N1:
805 printf (" | | ");
806 break;
807 case MODEL_ODROID_C1:
808 case MODEL_ODROID_C2:
809 printf (" | %-5s | ", pupd[getPUPD(pin)]);
810 break;
811 case MODEL_ODROID_XU3:
812 case MODEL_ODROID_N2:
Yang Deokgyuffeba7f2019-07-01 17:22:01 +0900813 case MODEL_ODROID_C4:
Steve Jeongf78d9822022-01-20 03:02:38 +0000814 case MODEL_ODROID_M1:
Steve Jeong329b9d72023-08-11 07:15:13 +0000815 case MODEL_ODROID_M1S:
Deokgyu Yanga0bd5eb2020-03-20 11:16:06 +0900816 printf (" | %-5s | %-2d", pupd[getPUPD(pin)], getDrive(pin));
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900817 break;
818 default:
819 break;
820 }
joshua-yang4b08e7f2019-02-21 12:05:24 +0900821 }
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900822 printf(" | %d", digitalRead (pin));
823 printf(" | %-4s", alts [getAlt (pin)]);
joshua-yang4b08e7f2019-02-21 12:05:24 +0900824 }
825
826 // GPIO pin name
827 printf (" | %-6s", physNames [physPin]);
828
829 // GPIO, wPi pin number
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900830 if (isAll == TRUE) {
831 if ((physPinToGpio (physPin) == -1) && (physToWpi [physPin] == -1))
832 printf(" | | ");
833 else if (physPinToGpio (physPin) != -1)
834 printf(" | %-3d | %-3d ", physToWpi [physPin], physPinToGpio (physPin));
835 else
836 printf(" | %-3d | ", physToWpi [physPin]);
837 } else {
838 if ((physPinToGpio (physPin) == -1) && (physToWpi [physPin] == -1))
839 printf(" | | ");
840 else if (physPinToGpio (physPin) != -1)
841 printf(" | %-3d | %-3d", physToWpi [physPin], physPinToGpio (physPin));
842 else
843 printf(" | %-3d | ", physToWpi [physPin]);
844 }
joshua-yang4b08e7f2019-02-21 12:05:24 +0900845
846 printf (" |\n") ;
847}
848
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900849static void printHeader(const char *headerName, int isAll) {
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900850 const char *headerLeft = " +-----+-----+---------+------+---+";
851 const char *headerRight = "+---+------+---------+-----+-----+\n";
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900852 const char *headerLeftAll = " +------+-----+----------+------+---+----+";
853 const char *headerRightAll = "+----+---+------+----------+-----+------+\n";
joshua-yang4b08e7f2019-02-21 12:05:24 +0900854
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900855 (isAll == FALSE) ? printf("%s", headerLeft) : printf("%s", headerLeftAll);
856 printf("%s", headerName);
857 (isAll == FALSE) ? printf("%s", headerRight) : printf("%s", headerRightAll);
858}
859
860/*----------------------------------------------------------------------------*/
861static void printBody(int model, int rev, const char *physNames[], int isAll) {
862 (isAll == FALSE)
863 ? printf(
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900864 " | I/O | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | I/O |\n"
865 " +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n")
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900866 : printf(
867 " | GPIO | wPi | Name | Mode | V | DS | PU/PD | Physical | PU/PD | DS | V | Mode | Name | wPi | GPIO |\n"
868 " +------+-----+----------+------+---+----+-------+----++----+-------+----+---+------+----------+-----+------+\n");
869 for (int pin = 1; pin <= 40; pin += 2)
870 readallPhys(model, rev, pin, physNames, isAll);
871 (isAll == FALSE)
872 ? printf(
Yang Deokgyu01a38bd2019-09-20 14:43:44 +0900873 " +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+\n"
874 " | I/O | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | I/O |\n")
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900875 : printf(
876 " +------+-----+----------+------+---+----+-------+----++----+-------+----+---+------+----------+-----+------+\n"
877 " | 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 +0900878}
879
880/*----------------------------------------------------------------------------*/
Deokgyu Yange94695f2020-11-13 12:56:17 +0900881static void readallPhysHC4(int model, int UNU rev, int physPin, const char *physNames[], int isAll) {
882 int pin ;
883
884 // GPIO, wPi pin number
885 if (isAll == TRUE) {
886 if ((physPinToGpio (physPin) == -1) && (physToWpiHC4 [physPin] == -1))
887 printf(" | | ");
888 else if (physPinToGpio (physPin) != -1) {
889 printf(" | %3d | %3d", physPinToGpio(physPin), physToWpiHC4[physPin]);
890 } else
891 printf(" | | %3d", physToWpiHC4 [physPin]);
892 } else {
893 if ((physPinToGpio (physPin) == -1) && (physToWpiHC4 [physPin] == -1))
894 printf(" | | ");
895 else if (physPinToGpio (physPin) != -1) {
896 printf(" | %3d | %3d", physPinToGpio(physPin), physToWpiHC4[physPin]);
897 } else
898 printf(" | | %3d", physToWpiHC4 [physPin]);
899 }
900
901 // GPIO pin name
902 printf (" | %s", physNames [physPin]) ;
903
904 // GPIO pin mode, value
905 if ((physToWpiHC4 [physPin] == -1) || (physPinToGpio (physPin) == -1)) {
906 printf(" | | ");
907 if (isAll == TRUE)
908 printf(" | | ");
909 } else {
910 if (wpMode == MODE_GPIO)
911 pin = physPinToGpio (physPin);
912 else if (wpMode == MODE_PHYS)
913 pin = physPin ;
914 else
915 pin = physToWpiHC4 [physPin];
916
917 printf (" | %4s", alts [getAlt (pin)]) ;
918 printf (" | %d", digitalRead (pin)) ;
919
920 // GPIO pin drive strength, pu/pd
921 if (isAll == TRUE) {
922 switch (model) {
923 case MODEL_ODROID_HC4:
924 printf (" | %2d | %5s", getDrive(pin), pupd[getPUPD(pin)]);
925 break;
926 default:
927 break;
928 }
929 }
930 }
931
932 // Physical pin number
933 printf(" | %2d |\n", physPin);
934}
935
936/*----------------------------------------------------------------------------*/
937static void printHeaderHC4(const char *headerName, int isAll) {
938 const char *header = " +-----+-----+---------+------+---+-----+";
939 const char *headerAll = " +------+-----+----------+------+---+----+-------+-----+";
940
941 (isAll == FALSE) ? printf("%s\n", header) : printf("%s\n", headerAll);
942 (isAll == FALSE)
943 ? printf(" | %s |\n", headerName)
944 : printf(" | %s |\n", headerName);
945 (isAll == FALSE) ? printf("%s\n", header) : printf("%s\n", headerAll);
946}
947
948/*----------------------------------------------------------------------------*/
949static void printBodyHC4(int model, int rev, const char *physNames[], int isAll) {
950 (isAll == FALSE)
951 ? printf(
952 " | I/O | wPi | Name | Mode | V | Phy |\n"
953 " +-----+-----+---------+------+---+-----+\n")
954 : printf(
955 " | GPIO | wPi | Name | Mode | V | DS | PU/PD | Phy |\n"
956 " +------+-----+----------+------+---+----+-------+-----+\n");
957 for (int pin = 1; pin <= 5; pin ++)
958 readallPhysHC4(model, rev, pin, physNames, isAll);
959 (isAll == FALSE)
960 ? printf(
961 " +-----+-----+---------+------+---+-----+\n"
962 " | I/O | wPi | Name | Mode | V | Phy |\n")
963 : printf(
964 " +------+-----+----------+------+---+----+-------+-----+\n"
965 " | GPIO | wPi | Name | Mode | V | DS | PU/PD | Phy |\n");
966}
967
968/*----------------------------------------------------------------------------*/
Gordon Henderson02a3bd82013-06-27 21:57:09 +0100969/*
970 * doReadall:
971 * Read all the GPIO pins
972 * We also want to use this to read the state of pins on an externally
973 * connected device, so we need to do some fiddling with the internal
974 * wiringPi node structures - since the gpio command can only use
975 * one external device at a time, we'll use that to our advantage...
Gordon Henderson02a3bd82013-06-27 21:57:09 +0100976 */
joshua-yang4b08e7f2019-02-21 12:05:24 +0900977/*----------------------------------------------------------------------------*/
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900978void doReadall(int argc, char *argv[]) {
979 int model, rev, mem, maker, overVolted, isAll;
980 char *headerName, *physNames;
Gordon Henderson02a3bd82013-06-27 21:57:09 +0100981
Deokgyu Yang2c7e86b2020-04-28 10:56:11 +0900982 // External readall
983 if (wiringPiNodes != NULL) {
984 doReadallExternal();
985 return;
986 }
987
Yang Deokgyu5106f2a2019-09-20 12:27:57 +0900988 if (argc <= 2) {
989 isAll = FALSE;
990 } else if (argc == 3 && (strcasecmp(argv[2], "-a") == 0 || strcasecmp(argv[2], "--all") == 0)) {
991 isAll = TRUE;
992 } else {
993 printf("Oops - unknown readall option:\n");
994 for (int i = 3; i < argc + 1; i++)
995 printf("\targv[%d]: %s\n", i, argv[i - 1]);
996
997 return;
998 }
999
1000 piBoardId (&model, &rev, &mem, &maker, &overVolted);
Gordon Henderson6fba4032014-06-24 19:23:31 +01001001
joshua-yang4b08e7f2019-02-21 12:05:24 +09001002 switch (model) {
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001003 case MODEL_ODROID_C1:
1004 headerName = (isAll == FALSE) ? "--- C1 ---" : "---- Model ODROID-C1 ----";
Yang Deokgyu01a38bd2019-09-20 14:43:44 +09001005 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidC1 : physNamesOdroidC1All);
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001006 break;
1007 case MODEL_ODROID_C2:
1008 headerName = (isAll == FALSE) ? "--- C2 ---" : "---- Model ODROID-C2 ----";
1009 if (rev == 1)
Yang Deokgyu01a38bd2019-09-20 14:43:44 +09001010 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidC2_Rev1 : physNamesOdroidC2All_Rev1);
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001011 else
Yang Deokgyu01a38bd2019-09-20 14:43:44 +09001012 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidC2_Rev2 : physNamesOdroidC2All_Rev2);
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001013 break;
1014 case MODEL_ODROID_XU3:
1015 headerName = (isAll == FALSE) ? "- XU3, 4 -" : "--- Model ODROID-XU3/4 ---";
Yang Deokgyu01a38bd2019-09-20 14:43:44 +09001016 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidXU3 : physNamesOdroidXU3All);
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001017 break;
1018 case MODEL_ODROID_N1:
1019 headerName = (isAll == FALSE) ? "--- N1 ---" : "---- Model ODROID-N1 ----";
Yang Deokgyu01a38bd2019-09-20 14:43:44 +09001020 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidN1 : physNamesOdroidN1All);
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001021 break;
1022 case MODEL_ODROID_N2:
1023 headerName = (isAll == FALSE) ? "--- N2 ---" : "---- Model ODROID-N2 ----";
Yang Deokgyu01a38bd2019-09-20 14:43:44 +09001024 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidN2 : physNamesOdroidN2All);
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001025 break;
Yang Deokgyuffeba7f2019-07-01 17:22:01 +09001026 case MODEL_ODROID_C4:
1027 headerName = (isAll == FALSE) ? "--- C4 ---" : "---- Model ODROID-C4 ----";
1028 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidC4 : physNamesOdroidC4All);
1029 break;
Deokgyu Yange94695f2020-11-13 12:56:17 +09001030 case MODEL_ODROID_HC4:
1031 headerName = (isAll == FALSE) ? " HC4 " : " Model ODROID-HC4 ";
1032 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidHC4 : physNamesOdroidHC4All);
1033 break;
Steve Jeongf78d9822022-01-20 03:02:38 +00001034 case MODEL_ODROID_M1:
1035 headerName = (isAll == FALSE) ? "--- M1 ---" : "---- Model ODROID-M1 ----";
1036 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidM1 : physNamesOdroidM1All);
1037 break;
Steve Jeong329b9d72023-08-11 07:15:13 +00001038 case MODEL_ODROID_M1S:
1039 headerName = (isAll == FALSE) ? " M1S " : " Model ODROID-M1S ";
1040 physNames = (char *) ((isAll == FALSE) ? physNamesOdroidM1S : physNamesOdroidM1SAll);
1041 break;
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001042 default:
1043 printf("Oops - unknown model: %d\n", model);
1044 return;
joshua-yang4b08e7f2019-02-21 12:05:24 +09001045 }
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001046
Deokgyu Yange94695f2020-11-13 12:56:17 +09001047 switch (model) {
1048 case MODEL_ODROID_HC4:
1049 printHeaderHC4((const char *) headerName, isAll);
1050 printBodyHC4(model, rev, (const char **) physNames, isAll);
1051 printHeaderHC4((const char *) headerName, isAll);
1052 break;
1053 default:
1054 printHeader((const char *) headerName, isAll);
1055 printBody(model, rev, (const char **) physNames, isAll);
1056 printHeader((const char *) headerName, isAll);
1057 break;
1058 }
Gordon Henderson02a3bd82013-06-27 21:57:09 +01001059}
Gordon Hendersonb0a60c32016-02-29 06:57:38 +00001060
joshua-yang4b08e7f2019-02-21 12:05:24 +09001061/*----------------------------------------------------------------------------*/
Gordon Hendersonb0a60c32016-02-29 06:57:38 +00001062/*
1063 * doAllReadall:
1064 * Force reading of all pins regardless of Pi model
Gordon Hendersonb0a60c32016-02-29 06:57:38 +00001065 */
joshua-yang4b08e7f2019-02-21 12:05:24 +09001066/*----------------------------------------------------------------------------*/
Yang Deokgyu5106f2a2019-09-20 12:27:57 +09001067void doAllReadall(void) {
1068 char *fakeArgv[3] = { "", "", "--all" };
1069
1070 doReadall(3, fakeArgv);
Gordon Hendersonb0a60c32016-02-29 06:57:38 +00001071}
joshua-yang4b08e7f2019-02-21 12:05:24 +09001072
1073/*----------------------------------------------------------------------------*/
1074/*----------------------------------------------------------------------------*/