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