EPPL  0.1 alpha
 All Files Typedefs Groups Pages
eppl_avr8_mapoutfunc.h
Go to the documentation of this file.
1 /*
2  Copyright (c) 2013, Radoslaw Koppel
3  All rights reserved.
4 
5  Redistribution and use in source and binary forms, with or without
6  modification, are permitted provided that the following conditions are met:
7 
8  - Redistributions of source code must retain the above copyright
9  notice, this list of conditions and the following disclaimer.
10 
11  - Redistributions in binary form must reproduce the above copyright
12  notice, this list of conditions and the following disclaimer in the
13  documentation and/or other materials provided with the distribution.
14 
15  - Neither the name of the copyright holders nor the
16  names of its contributors may be used to endorse or promote products
17  derived from this software without specific prior written permission.
18 
19  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22  DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER BE LIABLE FOR ANY
23  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
39 #ifndef EPPL_AVR8_MAPOUTFUNC_H_INCLUDED
40 #define EPPL_AVR8_MAPOUTFUNC_H_INCLUDED
41 
42 
43 static inline void eppl_avr8_mapOutToOnePort1(uint8_t *pout, uint8_t port, uint8_t val, uint8_t flags, eppl_pin_t pin1)
44 {
45  if(port == EPPL_PORTNR(pin1))
46  EPPL_avr8_mapOutTempPinsNear1(pout, val, flags, 0, pin1);
47 }
48 static inline void eppl_avr8_mapOutToOnePort2(uint8_t *pout, uint8_t port, uint8_t val, uint8_t flags, eppl_pin_t pin1, eppl_pin_t pin2)
49 {
50  if(port == EPPL_PORTNR(pin1))
51  {
52  if(EPPL_avr8_checkPinsDescending(pin1, pin2))
53  EPPL_avr8_mapOutTempPinsNear2(pout, val, flags, 0, pin2);
54  else
55  {
56  EPPL_avr8_mapOutTempPinsNear1(pout, val, flags, 1, pin1);
57  eppl_avr8_mapOutToOnePort1(pout, port, val, flags, pin2);
58  }
59  }
60  else
61  eppl_avr8_mapOutToOnePort1(pout, port, val, flags, pin2);
62 }
63 static inline void eppl_avr8_mapOutToOnePort3(uint8_t *pout, uint8_t port, uint8_t val, uint8_t flags, eppl_pin_t pin1, eppl_pin_t pin2, eppl_pin_t pin3)
64 {
65  if(port == EPPL_PORTNR(pin1))
66  {
67  if(EPPL_avr8_checkPinsDescending(pin1, pin2))
68  {
69  if(EPPL_avr8_checkPinsDescending(pin2, pin3))
70  EPPL_avr8_mapOutTempPinsNear3(pout, val, flags, 0, pin3);
71  else
72  {
73  EPPL_avr8_mapOutTempPinsNear2(pout, val, flags, 1, pin2);
74  eppl_avr8_mapOutToOnePort1(pout, port, val, flags, pin3);
75  }
76  }
77  else
78  {
79  EPPL_avr8_mapOutTempPinsNear1(pout, val, flags, 2, pin1);
80  eppl_avr8_mapOutToOnePort2(pout, port, val, flags, pin2, pin3);
81  }
82  }
83  else
84  eppl_avr8_mapOutToOnePort2(pout, port, val, flags, pin2, pin3);
85 }
86 static inline void eppl_avr8_mapOutToOnePort4(uint8_t *pout, uint8_t port, uint8_t val, uint8_t flags, eppl_pin_t pin1, eppl_pin_t pin2, eppl_pin_t pin3, eppl_pin_t pin4)
87 {
88  if(port == EPPL_PORTNR(pin1))
89  {
90  if(EPPL_avr8_checkPinsDescending(pin1, pin2))
91  {
92  if(EPPL_avr8_checkPinsDescending(pin2, pin3))
93  {
94  if(EPPL_avr8_checkPinsDescending(pin3, pin4))
95  EPPL_avr8_mapOutTempPinsNear4(pout, val, flags, 0, pin4);
96  else
97  {
98  EPPL_avr8_mapOutTempPinsNear3(pout, val, flags, 1, pin3);
99  eppl_avr8_mapOutToOnePort1(pout, port, val, flags, pin4);
100  }
101  }
102  else
103  {
104  EPPL_avr8_mapOutTempPinsNear2(pout, val, flags, 2, pin2);
105  eppl_avr8_mapOutToOnePort2(pout, port, val, flags, pin3, pin4);
106  }
107  }
108  else
109  {
110  EPPL_avr8_mapOutTempPinsNear1(pout, val, flags, 3, pin1);
111  eppl_avr8_mapOutToOnePort3(pout, port, val, flags, pin2, pin3, pin4);
112  }
113  }
114  else
115  eppl_avr8_mapOutToOnePort3(pout, port, val, flags, pin2, pin3, pin4);
116 }
117 static inline void eppl_avr8_mapOutToOnePort5(uint8_t *pout, uint8_t port, uint8_t val, uint8_t flags, eppl_pin_t pin1, eppl_pin_t pin2, eppl_pin_t pin3, eppl_pin_t pin4, eppl_pin_t pin5)
118 {
119  if(port == EPPL_PORTNR(pin1))
120  {
121  if(EPPL_avr8_checkPinsDescending(pin1, pin2))
122  {
123  if(EPPL_avr8_checkPinsDescending(pin2, pin3))
124  {
125  if(EPPL_avr8_checkPinsDescending(pin3, pin4))
126  {
127  if(EPPL_avr8_checkPinsDescending(pin4, pin5))
128  EPPL_avr8_mapOutTempPinsNear5(pout, val, flags, 0, pin5);
129  else
130  {
131  EPPL_avr8_mapOutTempPinsNear4(pout, val, flags, 1, pin4);
132  eppl_avr8_mapOutToOnePort1(pout, port, val, flags, pin5);
133  }
134  }
135  else
136  {
137  EPPL_avr8_mapOutTempPinsNear3(pout, val, flags, 2, pin3);
138  eppl_avr8_mapOutToOnePort2(pout, port, val, flags, pin4, pin5);
139  }
140  }
141  else
142  {
143  EPPL_avr8_mapOutTempPinsNear2(pout, val, flags, 3, pin2);
144  eppl_avr8_mapOutToOnePort3(pout, port, val, flags, pin3, pin4, pin5);
145  }
146  }
147  else
148  {
149  EPPL_avr8_mapOutTempPinsNear1(pout, val, flags, 4, pin1);
150  eppl_avr8_mapOutToOnePort4(pout, port, val, flags, pin2, pin3, pin4, pin5);
151  }
152  }
153  else
154  eppl_avr8_mapOutToOnePort4(pout, port, val, flags, pin2, pin3, pin4, pin5);
155 }
156 static inline void eppl_avr8_mapOutToOnePort6(uint8_t *pout, uint8_t port, uint8_t val, uint8_t flags, eppl_pin_t pin1, eppl_pin_t pin2, eppl_pin_t pin3, eppl_pin_t pin4, eppl_pin_t pin5, eppl_pin_t pin6)
157 {
158  if(port == EPPL_PORTNR(pin1))
159  {
160  if(EPPL_avr8_checkPinsDescending(pin1, pin2))
161  {
162  if(EPPL_avr8_checkPinsDescending(pin2, pin3))
163  {
164  if(EPPL_avr8_checkPinsDescending(pin3, pin4))
165  {
166  if(EPPL_avr8_checkPinsDescending(pin4, pin5))
167  {
168  if(EPPL_avr8_checkPinsDescending(pin5, pin6))
169  EPPL_avr8_mapOutTempPinsNear6(pout, val, flags, 0, pin6);
170  else
171  {
172  EPPL_avr8_mapOutTempPinsNear5(pout, val, flags, 1, pin5);
173  eppl_avr8_mapOutToOnePort1(pout, port, val, flags, pin6);
174  }
175  }
176  else
177  {
178  EPPL_avr8_mapOutTempPinsNear4(pout, val, flags, 2, pin4);
179  eppl_avr8_mapOutToOnePort2(pout, port, val, flags, pin5, pin6);
180  }
181  }
182  else
183  {
184  EPPL_avr8_mapOutTempPinsNear3(pout, val, flags, 3, pin3);
185  eppl_avr8_mapOutToOnePort3(pout, port, val, flags, pin4, pin5, pin6);
186  }
187  }
188  else
189  {
190  EPPL_avr8_mapOutTempPinsNear2(pout, val, flags, 4, pin2);
191  eppl_avr8_mapOutToOnePort4(pout, port, val, flags, pin3, pin4, pin5, pin6);
192  }
193  }
194  else
195  {
196  EPPL_avr8_mapOutTempPinsNear1(pout, val, flags, 5, pin1);
197  eppl_avr8_mapOutToOnePort5(pout, port, val, flags, pin2, pin3, pin4, pin5, pin6);
198  }
199  }
200  else
201  eppl_avr8_mapOutToOnePort5(pout, port, val, flags, pin2, pin3, pin4, pin5, pin6);
202 }
203 static inline void eppl_avr8_mapOutToOnePort7(uint8_t *pout, uint8_t port, uint8_t val, uint8_t flags, eppl_pin_t pin1, eppl_pin_t pin2, eppl_pin_t pin3, eppl_pin_t pin4, eppl_pin_t pin5, eppl_pin_t pin6, eppl_pin_t pin7)
204 {
205  if(port == EPPL_PORTNR(pin1))
206  {
207  if(EPPL_avr8_checkPinsDescending(pin1, pin2))
208  {
209  if(EPPL_avr8_checkPinsDescending(pin2, pin3))
210  {
211  if(EPPL_avr8_checkPinsDescending(pin3, pin4))
212  {
213  if(EPPL_avr8_checkPinsDescending(pin4, pin5))
214  {
215  if(EPPL_avr8_checkPinsDescending(pin5, pin6))
216  {
217  if(EPPL_avr8_checkPinsDescending(pin6, pin7))
218  EPPL_avr8_mapOutTempPinsNear7(pout, val, flags, 0, pin7);
219  else
220  {
221  EPPL_avr8_mapOutTempPinsNear6(pout, val, flags, 1, pin6);
222  eppl_avr8_mapOutToOnePort1(pout, port, val, flags, pin7);
223  }
224  }
225  else
226  {
227  EPPL_avr8_mapOutTempPinsNear5(pout, val, flags, 2, pin5);
228  eppl_avr8_mapOutToOnePort2(pout, port, val, flags, pin6, pin7);
229  }
230  }
231  else
232  {
233  EPPL_avr8_mapOutTempPinsNear4(pout, val, flags, 3, pin4);
234  eppl_avr8_mapOutToOnePort3(pout, port, val, flags, pin5, pin6, pin7);
235  }
236  }
237  else
238  {
239  EPPL_avr8_mapOutTempPinsNear3(pout, val, flags, 4, pin3);
240  eppl_avr8_mapOutToOnePort4(pout, port, val, flags, pin4, pin5, pin6, pin7);
241  }
242  }
243  else
244  {
245  EPPL_avr8_mapOutTempPinsNear2(pout, val, flags, 5, pin2);
246  eppl_avr8_mapOutToOnePort5(pout, port, val, flags, pin3, pin4, pin5, pin6, pin7);
247  }
248  }
249  else
250  {
251  EPPL_avr8_mapOutTempPinsNear1(pout, val, flags, 6, pin1);
252  eppl_avr8_mapOutToOnePort6(pout, port, val, flags, pin2, pin3, pin4, pin5, pin6, pin7);
253  }
254  }
255  else
256  eppl_avr8_mapOutToOnePort6(pout, port, val, flags, pin2, pin3, pin4, pin5, pin6, pin7);
257 }
258 static inline void eppl_avr8_mapOutToOnePort8(uint8_t *pout, uint8_t port, uint8_t val, uint8_t flags, eppl_pin_t pin1, eppl_pin_t pin2, eppl_pin_t pin3, eppl_pin_t pin4, eppl_pin_t pin5, eppl_pin_t pin6, eppl_pin_t pin7, eppl_pin_t pin8)
259 {
260  if(port == EPPL_PORTNR(pin1))
261  {
262  if(EPPL_avr8_checkPinsDescending(pin1, pin2))
263  {
264  if(EPPL_avr8_checkPinsDescending(pin2, pin3))
265  {
266  if(EPPL_avr8_checkPinsDescending(pin3, pin4))
267  {
268  if(EPPL_avr8_checkPinsDescending(pin4, pin5))
269  {
270  if(EPPL_avr8_checkPinsDescending(pin5, pin6))
271  {
272  if(EPPL_avr8_checkPinsDescending(pin6, pin7))
273  {
274  if(EPPL_avr8_checkPinsDescending(pin7, pin8))
275  EPPL_avr8_mapOutTempPinsNear8(pout, val, flags, 0, pin8);
276  else
277  {
278  EPPL_avr8_mapOutTempPinsNear7(pout, val, flags, 1, pin7);
279  eppl_avr8_mapOutToOnePort1(pout, port, val, flags, pin8);
280  }
281  }
282  else
283  {
284  EPPL_avr8_mapOutTempPinsNear6(pout, val, flags, 2, pin6);
285  eppl_avr8_mapOutToOnePort2(pout, port, val, flags, pin7, pin8);
286  }
287  }
288  else
289  {
290  EPPL_avr8_mapOutTempPinsNear5(pout, val, flags, 3, pin5);
291  eppl_avr8_mapOutToOnePort3(pout, port, val, flags, pin6, pin7, pin8);
292  }
293  }
294  else
295  {
296  EPPL_avr8_mapOutTempPinsNear4(pout, val, flags, 4, pin4);
297  eppl_avr8_mapOutToOnePort4(pout, port, val, flags, pin5, pin6, pin7, pin8);
298  }
299  }
300  else
301  {
302  EPPL_avr8_mapOutTempPinsNear3(pout, val, flags, 5, pin3);
303  eppl_avr8_mapOutToOnePort5(pout, port, val, flags, pin4, pin5, pin6, pin7, pin8);
304  }
305  }
306  else
307  {
308  EPPL_avr8_mapOutTempPinsNear2(pout, val, flags, 6, pin2);
309  eppl_avr8_mapOutToOnePort6(pout, port, val, flags, pin3, pin4, pin5, pin6, pin7, pin8);
310  }
311  }
312  else
313  {
314  EPPL_avr8_mapOutTempPinsNear1(pout, val, flags, 7, pin1);
315  eppl_avr8_mapOutToOnePort7(pout, port, val, flags, pin2, pin3, pin4, pin5, pin6, pin7, pin8);
316  }
317  }
318  else
319  eppl_avr8_mapOutToOnePort7(pout, port, val, flags, pin2, pin3, pin4, pin5, pin6, pin7, pin8);
320 }
321 
322 #endif /* EPPL_AVR8_MAPOUTFUNC_H_INCLUDED */