grblHAL core  20260318
driver_opts2.h
Go to the documentation of this file.
1 /*
2  driver_opts2.h - for preprocessing options from my_machine.h, compiler symbols or from the board map file
3 
4  NOTE: This file is not used by the core, it may be included by drivers after the map file is included
5 
6  Part of grblHAL
7 
8  Copyright (c) 2024-2026 Terje Io
9 
10  grblHAL is free software: you can redistribute it and/or modify
11  it under the terms of the GNU General Public License as published by
12  the Free Software Foundation, either version 3 of the License, or
13  (at your option) any later version.
14 
15  grblHAL is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  GNU General Public License for more details.
19 
20  You should have received a copy of the GNU General Public License
21  along with grblHAL. If not, see <http://www.gnu.org/licenses/>.
22 */
23 
24 //
25 // NOTE: do NOT change options here - edit the driver specific my_machine.h instead!
26 //
27 
28 #ifndef WEB_BUILD
29 
30 #if (DRIVER_SPINDLE_ENABLE & SPINDLE_ENA) && !defined(SPINDLE_ENABLE_PIN)
31 #warning "Selected spindle is not supported!"
32 #endif
33 
34 #if (DRIVER_SPINDLE_ENABLE & SPINDLE_DIR) && !defined(SPINDLE_DIRECTION_PIN)
35 #warning "Selected spindle is not fully supported - no direction output!"
36 #endif
37 
38 #if (DRIVER_SPINDLE_ENABLE & SPINDLE_PWM) && !defined(SPINDLE_PWM_PIN)
39 #warning "Selected spindle is not supported!"
40 #endif
41 
42 #if (DRIVER_SPINDLE1_ENABLE & SPINDLE_PWM) && !defined(SPINDLE1_PWM_PIN)
43 #warning "Selected spindle 1 is not supported!"
44 #endif
45 
46 #if ENCODER_ENABLE > 0 && !(defined(QEI_A_PIN) && defined(QEI_B_PIN))
47 #warning "ENCODER_ENABLE requires encoder input pins A and B to be defined!"
48 #endif
49 
50 #endif
51 
52 #if MPG_ENABLE == 1 && !defined(MPG_MODE_PIN)
53 #error "MPG_MODE_PIN must be defined!"
54 #endif
55 
56 #if KEYPAD_ENABLE == 1 && !defined(I2C_STROBE_PIN)
57 #error Keypad plugin not supported!
58 #elif I2C_STROBE_ENABLE && !defined(I2C_STROBE_PIN)
59 #error "I2C strobe not supported!"
60 #endif
61 
62 #define DRIVER_PROBES ((PROBE_ENABLE ? 1 : 0) + PROBE2_ENABLE + TOOLSETTER_ENABLE)
63 
64 #ifndef CONTROL_ENABLE
65 #define CONTROL_ENABLE 0
66 #endif
67 
68 #if EEPROM_ENABLE == 0
69 #define FLASH_ENABLE 1
70 #else
71 #define FLASH_ENABLE 0
72 #endif
73 
74 #ifndef SDCARD_SDIO
75 #define SDCARD_SDIO 0
76 #endif
77 
78 #ifndef SPI_ENABLE
79 #if (SDCARD_ENABLE && !SDCARD_SDIO) || TRINAMIC_SPI_ENABLE
80 #define SPI_ENABLE 1
81 #else
82 #define SPI_ENABLE 0
83 #endif
84 #endif
85 
86 #if SDCARD_ENABLE && !SDCARD_SDIO && !defined(SD_CS_PIN)
87 #error SD card plugin not supported!
88 #endif
89 
90 // Expand port shorthand names
91 
92 #ifdef ENABLE_PORT
93 #ifdef STEPPERS_ENABLE_PIN
94 #ifndef STEPPERS_ENABLE_PORT
95 #define STEPPERS_ENABLE_PORT ENABLE_PORT
96 #endif
97 #else
98 #ifdef XY_ENABLE_PIN
99 #ifndef XY_ENABLE_PORT
100 #define XY_ENABLE_PORT ENABLE_PORT
101 #endif
102 #else
103 #ifndef X_ENABLE_PORT
104 #define X_ENABLE_PORT ENABLE_PORT
105 #endif
106 #ifndef Y_ENABLE_PORT
107 #define Y_ENABLE_PORT ENABLE_PORT
108 #endif
109 #endif
110 #ifndef Z_ENABLE_PORT
111 #define Z_ENABLE_PORT ENABLE_PORT
112 #endif
113 #if defined(M3_ENABLE_PIN) && !defined(M3_ENABLE_PORT)
114 #define M3_ENABLE_PORT ENABLE_PORT
115 #endif
116 #if defined(M4_ENABLE_PIN) && !defined(M4_ENABLE_PORT)
117 #define M4_ENABLE_PORT ENABLE_PORT
118 #endif
119 #if defined(M5_ENABLE_PIN) && !defined(M5_ENABLE_PORT)
120 #define M5_ENABLE_PORT ENABLE_PORT
121 #endif
122 #if defined(M6_ENABLE_PIN) && !defined(M6_ENABLE_PORT)
123 #define M6_ENABLE_PORT ENABLE_PORT
124 #endif
125 #if defined(M7_ENABLE_PIN) && !defined(M7_ENABLE_PORT)
126 #define M7_ENABLE_PORT ENABLE_PORT
127 #endif
128 #endif
129 #endif // ENABLE_PORT
130 
131 #ifdef STEP_PORT
132 #ifndef X_STEP_PORT
133 #define X_STEP_PORT STEP_PORT
134 #endif
135 #ifndef Y_STEP_PORT
136 #define Y_STEP_PORT STEP_PORT
137 #endif
138 #ifndef Z_STEP_PORT
139 #define Z_STEP_PORT STEP_PORT
140 #endif
141 #if defined(M3_STEP_PIN) && !defined(M3_STEP_PORT)
142 #define M3_STEP_PORT STEP_PORT
143 #endif
144 #if defined(M4_STEP_PIN) && !defined(M4_STEP_PORT)
145 #define M4_STEP_PORT STEP_PORT
146 #endif
147 #if defined(M5_STEP_PIN) && !defined(M5_STEP_PORT)
148 #define M5_STEP_PORT STEP_PORT
149 #endif
150 #if defined(M6_STEP_PIN) && !defined(M6_STEP_PORT)
151 #define M6_STEP_PORT STEP_PORT
152 #endif
153 #if defined(M7_STEP_PIN) && !defined(M7_STEP_PORT)
154 #define M7_STEP_PORT STEP_PORT
155 #endif
156 #endif // STEP_PORT
157 
158 #ifdef DIRECTION_PORT
159 #ifndef X_DIRECTION_PORT
160 #define X_DIRECTION_PORT DIRECTION_PORT
161 #endif
162 #ifndef Y_DIRECTION_PORT
163 #define Y_DIRECTION_PORT DIRECTION_PORT
164 #endif
165 #ifndef Z_DIRECTION_PORT
166 #define Z_DIRECTION_PORT DIRECTION_PORT
167 #endif
168 #if defined(M3_DIRECTION_PIN) && !defined(M3_DIRECTION_PORT)
169 #define M3_DIRECTION_PORT DIRECTION_PORT
170 #endif
171 #if defined(M4_DIRECTION_PIN) && !defined(M4_DIRECTION_PORT)
172 #define M4_DIRECTION_PORT DIRECTION_PORT
173 #endif
174 #if defined(M5_DIRECTION_PIN) && !defined(M5_DIRECTION_PORT)
175 #define M5_DIRECTION_PORT DIRECTION_PORT
176 #endif
177 #if defined(M6_DIRECTION_PIN) && !defined(M6_DIRECTION_PORT)
178 #define M6_DIRECTION_PORT DIRECTION_PORT
179 #endif
180 #if defined(M7_DIRECTION_PIN) && !defined(M7_DIRECTION_PORT)
181 #define M7_DIRECTION_PORT DIRECTION_PORT
182 #endif
183 #endif // DIRECTION_PORT
184 
185 #ifdef MOTOR_FAULT_PORT
186 
187 #if defined(X_MOTOR_FAULT_PIN) && !defined(X_MOTOR_FAULT_PORT)
188 #define X_MOTOR_FAULT_PORT MOTOR_FAULT_PORT
189 #endif
190 #if defined(Y_MOTOR_FAULT_PIN) && !defined(Y_MOTOR_FAULT_PORT)
191 #define Y_MOTOR_FAULT_PORT MOTOR_FAULT_PORT
192 #endif
193 #if defined(Z_MOTOR_FAULT_PIN) && !defined(Z_MOTOR_FAULT_PORT)
194 #define Z_MOTOR_FAULT_PORT MOTOR_FAULT_PORT
195 #endif
196 #if defined(M3_MOTOR_FAULT_PIN) && !defined(M3_MOTOR_FAULT_PORT)
197 #define M3_MOTOR_FAULT_PORT MOTOR_FAULT_PORT
198 #endif
199 #if defined(M4_MOTOR_FAULT_PIN) && !defined(M4_MOTOR_FAULT_PORT)
200 #define M4_MOTOR_FAULT_PORT MOTOR_FAULT_PORT
201 #endif
202 #if defined(M5_MOTOR_FAULT_PIN) && !defined(M5_MOTOR_FAULT_PORT)
203 #define M5_MOTOR_FAULT_PORT MOTOR_FAULT_PORT
204 #endif
205 #if defined(M6_MOTOR_FAULT_PIN) && !defined(M6_MOTOR_FAULT_PORT)
206 #define M6_MOTOR_FAULT_PORT MOTOR_FAULT_PORT
207 #endif
208 #if defined(M7_MOTOR_FAULT_PIN) && !defined(M7_MOTOR_FAULT_PORT)
209 #define M7_MOTOR_FAULT_PORT MOTOR_FAULT_PORT
210 #endif
211 
212 #elif defined(ESP_PLATFORM) || defined(RP2040) || defined(__IMXRT1062__)
213 
214 #if defined(X_MOTOR_FAULT_PIN) && !defined(X_MOTOR_FAULT_PORT)
215 #define X_MOTOR_FAULT_PORT NULL
216 #endif
217 #if defined(Y_MOTOR_FAULT_PIN) && !defined(Y_MOTOR_FAULT_PORT)
218 #define Y_MOTOR_FAULT_PORT NULL
219 #endif
220 #if defined(Z_MOTOR_FAULT_PIN) && !defined(Z_MOTOR_FAULT_PORT)
221 #define Z_MOTOR_FAULT_PORT NULL
222 #endif
223 #if defined(M3_MOTOR_FAULT_PIN) && !defined(M3_MOTOR_FAULT_PORT)
224 #define M3_MOTOR_FAULT_PORT NULL
225 #endif
226 #if defined(M4_MOTOR_FAULT_PIN) && !defined(M4_MOTOR_FAULT_PORT)
227 #define M4_MOTOR_FAULT_PORT NULL
228 #endif
229 #if defined(M5_MOTOR_FAULT_PIN) && !defined(M5_MOTOR_FAULT_PORT)
230 #define M5_MOTOR_FAULT_PORT NULL
231 #endif
232 #if defined(M6_MOTOR_FAULT_PIN) && !defined(M6_MOTOR_FAULT_PORT)
233 #define M6_MOTOR_FAULT_PORT NULL
234 #endif
235 #if defined(M7_MOTOR_FAULT_PIN) && !defined(M7_MOTOR_FAULT_PORT)
236 #define M7_MOTOR_FAULT_PORT NULL
237 #endif
238 
239 #endif // MOTOR_FAULT_PORTS
240 
241 #ifdef SPINDLE_PORT
242 #ifndef SPINDLE_ENABLE_PORT
243 #define SPINDLE_ENABLE_PORT SPINDLE_PORT
244 #endif
245 #if defined(SPINDLE_PWM_PIN) && !defined(SPINDLE_PWM_PORT)
246 #define SPINDLE_PWM_PORT SPINDLE_PORT
247 #endif
248 #if defined(SPINDLE_DIRECTION_PIN) && !defined(SPINDLE_DIRECTION_PORT)
249 #define SPINDLE_DIRECTION_PORT SPINDLE_PORT
250 #endif
251 #endif // SPINDLE_PORT
252 
253 #ifdef COOLANT_PORT
254 #if defined(COOLANT_FLOOD_PIN) && !defined(COOLANT_FLOOD_PORT)
255 #define COOLANT_FLOOD_PORT COOLANT_PORT
256 #endif
257 #if defined(COOLANT_MIST_PIN) && !defined(COOLANT_MIST_PORT)
258 #define COOLANT_MIST_PORT COOLANT_PORT
259 #endif
260 #endif // COOLANT_PORT
261 
262 // End expand port shorthand names
263 
264 #if TRINAMIC_ENABLE
265 
266 #include "motors/trinamic.h"
267 
268 #ifndef TRINAMIC_MIXED_DRIVERS
269 #define TRINAMIC_MIXED_DRIVERS 1
270 #endif
271 
272 #if TRINAMIC_UART_ENABLE == 1 && !defined(TRINAMIC_STREAM)
273 #define TRINAMIC_STREAM 1
274 #endif
275 
276 #if TRINAMIC_SPI_ENABLE == 1 || TRINAMIC_ENABLE == 2130 || TRINAMIC_ENABLE == 2660 || TRINAMIC_ENABLE == 5160
277 
278 #undef TRINAMIC_SPI_ENABLE
279 #define TRINAMIC_SPI_40BIT (1<<1)
280 #define TRINAMIC_SPI_20BIT (1<<2)
281 #define TRINAMIC_SPI_CS_SINGLE (1<<3)
282 
283 #if TRINAMIC_ENABLE == 2660
284 #ifdef MOTOR_CS_PORT
285 #define TRINAMIC_SPI_ENABLE (TRINAMIC_SPI_20BIT|TRINAMIC_SPI_CS_SINGLE)
286 #else
287 #define TRINAMIC_SPI_ENABLE TRINAMIC_SPI_20BIT
288 #endif
289 #else
290 #ifdef MOTOR_CS_PIN
291 #define TRINAMIC_SPI_ENABLE (TRINAMIC_SPI_40BIT|TRINAMIC_SPI_CS_SINGLE)
292 #else
293 #define TRINAMIC_SPI_ENABLE TRINAMIC_SPI_40BIT
294 #endif
295 #endif
296 #endif // TRINAMIC_SPI_ENABLE ...
297 
298 #endif // TRINAMIC_ENABLE
299 
300 #ifndef TRINAMIC_I2C
301 #define TRINAMIC_I2C 0
302 #endif
303 #if TRINAMIC_ENABLE && TRINAMIC_I2C
304 #define TRINAMIC_MOTOR_ENABLE 1
305 #else
306 #define TRINAMIC_MOTOR_ENABLE 0
307 #endif
308 
309 #if MPG_ENABLE && !defined(MPG_STREAM)
310 #if USB_SERIAL_CDC
311 #define MPG_STREAM 0
312 #else
313 #define MPG_STREAM 1
314 #endif
315 #if (MODBUS_ENABLE & MODBUS_RTU_ENABLED) && defined(MODBUS_RTU_STREAM) && MODBUS_RTU_STREAM == MPG_STREAM
316 #undef MPG_STREAM
317 #define MPG_STREAM (MODBUS_RTU_STREAM + 1)
318 #endif
319 #endif
320 
321 #if MPG_ENABLE && MPG_ENABLE != 2 && MPG_STREAM == 20 && BLUETOOTH_ENABLE != 1
322 #error "MPG can only be used with native Bluetooth and character mode switching!"
323 #endif
324 
325 #if BLUETOOTH_ENABLE == 2 && !defined(BLUETOOTH_STREAM)
326 #define BLUETOOTH_STREAM 255 // Select first free UART stream
327 #endif
328 
329 #if USB_SERIAL_CDC && defined(SERIAL_PORT)
330 #define SP0 1
331 #else
332 #define SP0 0
333 #endif
334 
335 #ifdef SERIAL1_PORT
336 #define SP1 1
337 #else
338 #define SP1 0
339 #endif
340 
341 #ifdef SERIAL2_PORT
342 #define SP2 1
343 #else
344 #define SP2 0
345 #endif
346 
347 #if MODBUS_ENABLE & MODBUS_RTU_ENABLED
348 #define MODBUS_TEST 1
349 #else
350 #define MODBUS_TEST 0
351 #endif
352 
353 #if TRINAMIC_ENABLE && TRINAMIC_UART_ENABLE == 1
354 #define TRINAMIC_TEST 1
355 #else
356 #define TRINAMIC_TEST 0
357 #endif
358 
359 #if MPG_ENABLE && MPG_STREAM != 20
360 #define MPG_TEST 1
361 #else
362 #define MPG_TEST 0
363 #endif
364 
365 #if KEYPAD_ENABLE == 2 && !MPG_TEST
366 #define KEYPAD_TEST 1
367 #else
368 #define KEYPAD_TEST 0
369 #endif
370 
371 #if BLUETOOTH_ENABLE == 2 && (!MPG_ENABLE || MPG_STREAM != BLUETOOTH_STREAM)
372 #define BT_TEST 1
373 #else
374 #define BT_TEST 0
375 #endif
376 
377 #if (MODBUS_TEST + KEYPAD_TEST + MPG_TEST + TRINAMIC_TEST + BT_TEST) > (SP0 + SP1 + SP2)
378 #error "Too many options that requires a serial port are enabled!"
379 #endif
380 
381 #undef SP0
382 #undef SP1
383 #undef SP2
384 #undef BT_TEST
385 #undef MODBUS_TEST
386 #undef MPG_TEST
387 #undef KEYPAD_TEST
388 #undef TRINAMIC_TEST
389 
390 #if KEYPAD_ENABLE == 2 && !defined(KEYPAD_STREAM)
391 #if MPG_ENABLE
392 #define KEYPAD_STREAM MPG_STREAM
393 #elif USB_SERIAL_CDC
394 #define KEYPAD_STREAM 0
395 #else
396 #define KEYPAD_STREAM 1
397 #endif
398 #if (MODBUS_ENABLE & MODBUS_RTU_ENABLED) && defined(MODBUS_RTU_STREAM) && MODBUS_RTU_STREAM == MPG_STREAM
399 #undef KEYPAD_STREAM
400 #define KEYPAD_STREAM (MODBUS_RTU_STREAM + 1)
401 #endif
402 #endif
403 
404 #if defined(COPROC_RESET_PIN) && defined(COPROC_BOOT0_PIN)
405 #define COPROC_PASSTHRU 1
406 #else
407 #define COPROC_PASSTHRU 0
408 #endif
409 
410 #ifndef COPROC_STREAM
411 #if USB_SERIAL_CDC
412 #define COPROC_STREAM 0
413 #else
414 #define COPROC_STREAM 1
415 #endif
416 #endif
417 
418