mingw: make simavr compilable with MinGW
[simavr] / examples / shared / arduidiot_pins.c
1 /*
2         arduidiot_pins.c
3
4         Copyright 2008-2012 Michel Pollet <buserror@gmail.com>
5
6         This file is part of simavr.
7
8         simavr is free software: you can redistribute it and/or modify
9         it under the terms of the GNU General Public License as published by
10         the Free Software Foundation, either version 3 of the License, or
11         (at your option) any later version.
12
13         simavr is distributed in the hope that it will be useful,
14         but WITHOUT ANY WARRANTY; without even the implied warranty of
15         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16         GNU General Public License for more details.
17
18         You should have received a copy of the GNU General Public License
19         along with simavr.  If not, see <http://www.gnu.org/licenses/>.
20  */
21
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include "arduidiot_pins.h"
25 #include "sim_irq.h"
26 #include "avr_ioport.h"
27
28 ardupin_t arduidiot_644[32] = {
29         [ 0] = { .ardupin =  0, .port = 'B', .pin =  0 },
30         [ 1] = { .ardupin =  1, .port = 'B', .pin =  1 },
31         [ 2] = { .ardupin =  2, .port = 'B', .pin =  2 },
32         [ 3] = { .ardupin =  3, .port = 'B', .pin =  3 },
33         [ 4] = { .ardupin =  4, .port = 'B', .pin =  4 },
34         [ 5] = { .ardupin =  5, .port = 'B', .pin =  5 },
35         [ 6] = { .ardupin =  6, .port = 'B', .pin =  6 },
36         [ 7] = { .ardupin =  7, .port = 'B', .pin =  7 },
37
38         [ 8] = { .ardupin =  8, .port = 'D', .pin =  0 },
39         [ 9] = { .ardupin =  9, .port = 'D', .pin =  1 },
40         [10] = { .ardupin = 10, .port = 'D', .pin =  2 },
41         [11] = { .ardupin = 11, .port = 'D', .pin =  3 },
42         [12] = { .ardupin = 12, .port = 'D', .pin =  4 },
43         [13] = { .ardupin = 13, .port = 'D', .pin =  5 },
44         [14] = { .ardupin = 14, .port = 'D', .pin =  6 },
45         [15] = { .ardupin = 15, .port = 'D', .pin =  7 },
46
47         [16] = { .ardupin = 16, .port = 'C', .pin =  0 },
48         [17] = { .ardupin = 17, .port = 'C', .pin =  1 },
49         [18] = { .ardupin = 18, .port = 'C', .pin =  2 },
50         [19] = { .ardupin = 19, .port = 'C', .pin =  3 },
51         [20] = { .ardupin = 20, .port = 'C', .pin =  4 },
52         [21] = { .ardupin = 21, .port = 'C', .pin =  5 },
53         [22] = { .ardupin = 22, .port = 'C', .pin =  6 },
54         [23] = { .ardupin = 23, .port = 'C', .pin =  7 },
55
56         [24] = { .ardupin = 24, .port = 'A', .pin =  7, .analog = 1, .adc = 7 },
57         [25] = { .ardupin = 25, .port = 'A', .pin =  6, .analog = 1, .adc = 6 },
58         [26] = { .ardupin = 26, .port = 'A', .pin =  5, .analog = 1, .adc = 5 },
59         [27] = { .ardupin = 27, .port = 'A', .pin =  4, .analog = 1, .adc = 4 },
60         [28] = { .ardupin = 28, .port = 'A', .pin =  3, .analog = 1, .adc = 3 },
61         [29] = { .ardupin = 29, .port = 'A', .pin =  2, .analog = 1, .adc = 2 },
62         [30] = { .ardupin = 30, .port = 'A', .pin =  1, .analog = 1, .adc = 1 },
63         [31] = { .ardupin = 31, .port = 'A', .pin =  0, .analog = 1, .adc = 0 },
64 };
65
66 struct avr_irq_t *
67 get_ardu_irq(
68                 struct avr_t * avr,
69                 int ardupin,
70                 ardupin_t pins[])
71 {
72         if (pins[ardupin].ardupin != ardupin) {
73                 printf("%s pin %d isn't correct in table\n", __func__, ardupin);
74                 return NULL;
75         }
76         struct avr_irq_t * irq = avr_io_getirq(avr,
77                         AVR_IOCTL_IOPORT_GETIRQ(pins[ardupin].port), pins[ardupin].pin);
78         if (!irq) {
79                 printf("%s pin %d PORT%C%d not found\n", __func__, ardupin, pins[ardupin].port, pins[ardupin].pin);
80                 return NULL;
81         }
82         return irq;
83 }