Paparazzi UAS  v5.2.2_stable-0-gd6b9f29
Paparazzi is a free software Unmanned Aircraft System.
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
pprzlog_transport.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014 Gautier Hattenberger
3  *
4  * This file is part of paparazzi.
5  *
6  * paparazzi is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2, or (at your option)
9  * any later version.
10  *
11  * paparazzi is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with paparazzi; see the file COPYING. If not, write to
18  * the Free Software Foundation, 59 Temple Place - Suite 330,
19  * Boston, MA 02111-1307, USA.
20  *
21  */
22 
45 #ifndef PPRZLOG_TRANSPORT_H
46 #define PPRZLOG_TRANSPORT_H
47 
48 #include "mcu_periph/sys_time.h"
49 
50 extern uint8_t log_ck;
51 
52 #define STX_LOG 0x99
53 
54 #define PprzLogTransportSizeOf(_dev, _payload) (_payload)
55 
56 #define PprzLogTransportCheckFreeSpace(_dev, _x) TransportLink(_dev, CheckFreeSpace(_x))
57 #define PprzLogTransportPut1Byte(_dev, _x) TransportLink(_dev, Transmit(_x))
58 #define PprzLogTransportSendMessage(_dev) TransportLink(_dev, SendMessage())
59 
60 #define PprzLogTransportHeader(_dev, payload_len) { \
61  PprzLogTransportPut1Byte(_dev, STX_LOG); \
62  uint8_t msg_len = PprzLogTransportSizeOf(_dev, payload_len); \
63  PprzLogTransportPut1Byte(_dev, msg_len); \
64  log_ck = msg_len; \
65  PprzLogTransportPutUint8(_dev, 0); \
66  uint32_t ts = get_sys_time_usec()/100; \
67  PprzLogTransportPut4ByteByAddr(_dev, &ts); \
68 }
69 
70 #define PprzLogTransportTrailer(_dev) { \
71  PprzLogTransportPut1Byte(_dev, log_ck); \
72  PprzLogTransportSendMessage(_dev); \
73 }
74 
75 #define PprzLogTransportPutUint8(_dev, _byte) { \
76  log_ck += _byte; \
77  PprzLogTransportPut1Byte(_dev, _byte); \
78  }
79 
80 #define PprzLogTransportPutNamedUint8(_dev, _name, _byte) PprzLogTransportPutUint8(_dev, _byte)
81 
82 #define PprzLogTransportPut1ByteByAddr(_dev, _byte) { \
83  uint8_t _x = *(_byte); \
84  PprzLogTransportPutUint8(_dev, _x); \
85  }
86 
87 #define PprzLogTransportPut2ByteByAddr(_dev, _byte) { \
88  PprzLogTransportPut1ByteByAddr(_dev, _byte); \
89  PprzLogTransportPut1ByteByAddr(_dev, (const uint8_t*)_byte+1); \
90  }
91 
92 #define PprzLogTransportPut4ByteByAddr(_dev, _byte) { \
93  PprzLogTransportPut2ByteByAddr(_dev, _byte); \
94  PprzLogTransportPut2ByteByAddr(_dev, (const uint8_t*)_byte+2); \
95  }
96 
97 #ifdef __IEEE_BIG_ENDIAN /* From machine/ieeefp.h */
98 #define PprzLogTransportPutDoubleByAddr(_dev, _byte) { \
99  PprzLogTransportPut4ByteByAddr(_dev, (const uint8_t*)_byte+4); \
100  PprzLogTransportPut4ByteByAddr(_dev, (const uint8_t*)_byte); \
101  }
102 #define PprzLogTransportPutUint64ByAddr(_dev, _byte) { \
103  PprzLogTransportPut4ByteByAddr(_dev, (const uint8_t*)_byte+4); \
104  PprzLogTransportPut4ByteByAddr(_dev, (const uint8_t*)_byte); \
105  }
106 #define PprzLogTransportPutInt64ByAddr(_dev, _byte) { \
107  PprzLogTransportPut4ByteByAddr(_dev, (const uint8_t*)_byte+4); \
108  PprzLogTransportPut4ByteByAddr(_dev, (const uint8_t*)_byte); \
109  }
110 #else
111 #define PprzLogTransportPutDoubleByAddr(_dev, _byte) { \
112  PprzLogTransportPut4ByteByAddr(_dev, (const uint8_t*)_byte); \
113  PprzLogTransportPut4ByteByAddr(_dev, (const uint8_t*)_byte+4); \
114  }
115 #define PprzLogTransportPutUint64ByAddr(_dev, _byte) { \
116  PprzLogTransportPut4ByteByAddr(_dev, (const uint8_t*)_byte); \
117  PprzLogTransportPut4ByteByAddr(_dev, (const uint8_t*)_byte+4); \
118  }
119 #define PprzLogTransportPutInt64ByAddr(_dev, _byte) { \
120  PprzLogTransportPut4ByteByAddr(_dev, (const uint8_t*)_byte); \
121  PprzLogTransportPut4ByteByAddr(_dev, (const uint8_t*)_byte+4); \
122  }
123 #endif
124 
125 
126 #define PprzLogTransportPutInt8ByAddr(_dev, _x) PprzLogTransportPut1ByteByAddr(_dev, _x)
127 #define PprzLogTransportPutUint8ByAddr(_dev, _x) PprzLogTransportPut1ByteByAddr(_dev, (const uint8_t*)_x)
128 #define PprzLogTransportPutInt16ByAddr(_dev, _x) PprzLogTransportPut2ByteByAddr(_dev, (const uint8_t*)_x)
129 #define PprzLogTransportPutUint16ByAddr(_dev, _x) PprzLogTransportPut2ByteByAddr(_dev, (const uint8_t*)_x)
130 #define PprzLogTransportPutInt32ByAddr(_dev, _x) PprzLogTransportPut4ByteByAddr(_dev, (const uint8_t*)_x)
131 #define PprzLogTransportPutUint32ByAddr(_dev, _x) PprzLogTransportPut4ByteByAddr(_dev, (const uint8_t*)_x)
132 #define PprzLogTransportPutFloatByAddr(_dev, _x) PprzLogTransportPut4ByteByAddr(_dev, (const uint8_t*)_x)
133 #define PprzLogTransportPutCharByAddr(_dev, _x) PprzLogTransportPut1ByteByAddr(_dev, (const uint8_t*)_x)
134 
135 #define PprzLogTransportPutArray(_dev, _put, _n, _x) { \
136  uint8_t _i; \
137  PprzLogTransportPutUint8(_dev, _n); \
138  for(_i = 0; _i < _n; _i++) { \
139  _put(_dev, &_x[_i]); \
140  } \
141 }
142 
143 #define PprzLogTransportPutInt8Array(_dev, _n, _x) PprzLogTransportPutArray(_dev, PprzLogTransportPutInt8ByAddr, _n, _x)
144 #define PprzLogTransportPutUint8Array(_dev, _n, _x) PprzLogTransportPutArray(_dev, PprzLogTransportPutUint8ByAddr, _n, _x)
145 
146 #define PprzLogTransportPutCharArray(_dev, _n, _x) PprzLogTransportPutArray(_dev, PprzLogTransportPutCharByAddr, _n, _x)
147 
148 #define PprzLogTransportPutInt16Array(_dev, _n, _x) PprzLogTransportPutArray(_dev, PprzLogTransportPutInt16ByAddr, _n, _x)
149 #define PprzLogTransportPutUint16Array(_dev, _n, _x) PprzLogTransportPutArray(_dev, PprzLogTransportPutUint16ByAddr, _n, _x)
150 
151 #define PprzLogTransportPutInt32Array(_dev, _n, _x) PprzLogTransportPutArray(_dev, PprzLogTransportPutInt32ByAddr, _n, _x)
152 #define PprzLogTransportPutUint32Array(_dev, _n, _x) PprzLogTransportPutArray(_dev, PprzLogTransportPutUint32ByAddr, _n, _x)
153 
154 #define PprzLogTransportPutFloatArray(_dev, _n, _x) PprzLogTransportPutArray(_dev, PprzLogTransportPutFloatByAddr, _n, _x)
155 
156 #define PprzLogTransportPutInt64Array(_dev, _n, _x) PprzLogTransportPutArray(_dev, PprzLogTransportPutInt64ByAddr, _n, _x)
157 #define PprzLogTransportPutUint64Array(_dev, _n, _x) PprzLogTransportPutArray(_dev, PprzLogTransportPutUint64ByAddr, _n, _x)
158 
159 #define PprzLogTransportPutDoubleArray(_dev, _n, _x) PprzLogTransportPutArray(_dev, PprzLogTransportPutDoubleByAddr, _n, _x)
160 
161 #define PprzLogTransportPutFixedArray(_dev, _put, _n, _x) { \
162  uint8_t _i; \
163  for(_i = 0; _i < _n; _i++) { \
164  _put(_dev, &_x[_i]); \
165  } \
166 }
167 
168 #define PprzLogTransportPutInt8FixedArray(_dev, _n, _x) PprzLogTransportPutFixedArray(_dev, PprzLogTransportPutInt8ByAddr, _n, _x)
169 #define PprzLogTransportPutUint8FixedArray(_dev, _n, _x) PprzLogTransportPutFixedArray(_dev, PprzLogTransportPutUint8ByAddr, _n, _x)
170 
171 #define PprzLogTransportPutCharFixedArray(_dev, _n, _x) PprzLogTransportPutFixedArray(_dev, PprzLogTransportPutCharByAddr, _n, _x)
172 
173 #define PprzLogTransportPutInt16FixedArray(_dev, _n, _x) PprzLogTransportPutFixedArray(_dev, PprzLogTransportPutInt16ByAddr, _n, _x)
174 #define PprzLogTransportPutUint16FixedArray(_dev, _n, _x) PprzLogTransportPutFixedArray(_dev, PprzLogTransportPutUint16ByAddr, _n, _x)
175 
176 #define PprzLogTransportPutInt32FixedArray(_dev, _n, _x) PprzLogTransportPutFixedArray(_dev, PprzLogTransportPutInt32ByAddr, _n, _x)
177 #define PprzLogTransportPutUint32FixedArray(_dev, _n, _x) PprzLogTransportPutFixedArray(_dev, PprzLogTransportPutUint32ByAddr, _n, _x)
178 
179 #define PprzLogTransportPutFloatFixedArray(_dev, _n, _x) PprzLogTransportPutFixedArray(_dev, PprzLogTransportPutFloatByAddr, _n, _x)
180 
181 #define PprzLogTransportPutInt64FixedArray(_dev, _n, _x) PprzLogTransportPutFixedArray(_dev, PprzLogTransportPutInt64ByAddr, _n, _x)
182 #define PprzLogTransportPutUint64FixedArray(_dev, _n, _x) PprzLogTransportPutFixedArray(_dev, PprzLogTransportPutUint64ByAddr, _n, _x)
183 
184 #define PprzLogTransportPutDoubleFixedArray(_dev, _n, _x) PprzLogTransportPutFixedArray(_dev, PprzLogTransportPutDoubleByAddr, _n, _x)
185 
186 
187 #endif
188 
Architecture independent timing functions.
unsigned char uint8_t
Definition: types.h:14
uint8_t log_ck