grblHAL core  20260206
plugins.h
Go to the documentation of this file.
1 /*
2  plugins.h - An embedded CNC Controller with rs274/ngc (g-code) support
3 
4  Some data structures and function declarations for plugins that require driver code
5 
6  These are NOT referenced in the core grblHAL code
7 
8  Part of grblHAL
9 
10  Copyright (c) 2020-2025 Terje Io
11 
12  grblHAL is free software: you can redistribute it and/or modify
13  it under the terms of the GNU General Public License as published by
14  the Free Software Foundation, either version 3 of the License, or
15  (at your option) any later version.
16 
17  grblHAL is distributed in the hope that it will be useful,
18  but WITHOUT ANY WARRANTY; without even the implied warranty of
19  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20  GNU General Public License for more details.
21 
22  You should have received a copy of the GNU General Public License
23  along with grblHAL. If not, see <http://www.gnu.org/licenses/>.
24 */
25 
26 #ifndef _PLUGINS_H_
27 #define _PLUGINS_H_
28 
29 #include <stdint.h>
30 #include <stdbool.h>
31 
32 #include "nvs.h"
33 
34 // Jogging
35 
36 typedef struct {
37  float fast_speed;
38  float slow_speed;
39  float step_speed;
44 
45 // Networking
46 
47 typedef enum {
52 
53 typedef union {
54  uint8_t mask;
55  struct {
56  uint8_t telnet :1,
58  http :1,
59  ftp :1,
60  dns :1,
61  mdns :1,
62  ssdp :1,
63  webdav :1;
64  };
66 
67 typedef char ssid_t[65];
68 typedef uint8_t bssid_t[6];
69 typedef char username_t[33];
70 typedef char password_t[33];
71 typedef char hostname_t[33];
72 typedef char uri_t[65];
73 
74 typedef struct {
75  char ip[16];
76  uint16_t port;
80 
81 typedef struct {
82  char ip[16];
83  char gateway[16];
84  char mask[16];
86  uint16_t telnet_port;
87  uint16_t websocket_port;
88  uint16_t http_port;
89  uint16_t ftp_port;
92 #if MQTT_ENABLE
93  mqtt_settings_t mqtt;
94 #endif
95 #if defined(_WIZCHIP_) || defined(HAS_MAC_SETTING)
96  uint8_t mac[6];
97 #endif
99 
100 typedef enum {
106 
107 #ifdef WIN32
108 #undef interface
109 #endif
110 
111 typedef struct {
112  const char *interface;
114  bool link_up;
115  bool dhcp; // TODO: move to network_services_t in next settings revision.
116  uint16_t mbps;
117  char mac[18];
118  char mqtt_client_id[18];
122 
123 typedef struct {
127  char country[4];
128  uint8_t channel;
131 
132 typedef struct {
137 
138 typedef struct {
139  char device_name[33];
140  char service_name[33];
142 
143 #define MODBUS_TCP_SETTINGS_INCREMENT 5
144 
145 typedef enum {
148  Setting_ModbusId = 2
150 
151 typedef struct {
152  char ip[16];
153  uint16_t port;
154  uint8_t id;
156 
157 // Quadrature encoder interface
158 
159 typedef enum {
176 
177 typedef enum {
183 
184 typedef union {
185  uint8_t events;
186  struct {
187  uint8_t position_changed :1,
189  click :1,
193  unused :2;
194  };
196 
197 typedef union {
198  uint8_t flags;
199  uint8_t value;
200  struct {
202  };
204 
205 typedef struct {
207  uint32_t cpr;
208  uint32_t cpd;
209  uint32_t dbl_click_window;
212 
213 typedef struct {
215  uint_fast8_t id;
216  uint_fast8_t axis;
217  int32_t position;
218  uint32_t velocity;
221 } encoder_t;
222 
223 // DISPLAYS:
224 
225 // Interfaces
226 #define DISPLAY_I2C (1<<0)
227 #define DISPLAY_SPI (1<<1)
228 #define DISPLAY_UART (1<<2)
229 
230 // Plugins
231 #define DISPLAY_I2C_INTERFACE ((1<<3)|DISPLAY_I2C)
232 #define DISPLAY_I2C_LEDS ((1<<4)|DISPLAY_I2C)
233 #define DISPLAY_I2C_OLED_1 ((1<<5)|DISPLAY_I2C)
234 
235 // Driver chips
236 
237 #define DISPLAY_DRIVER_SH1106 1
238 #define DISPLAY_DRIVER_SSD1306 2
239 #define DISPLAY_DRIVER_SSD1331 3
240 #define DISPLAY_DRIVER_ILI9340 4
241 #define DISPLAY_DRIVER_ILI9341 5
242 #define DISPLAY_DRIVER_ILI9486 6
243 
244 // I2C interface:
245 
246 typedef void (*keycode_callback_ptr)(const char c);
247 
248 typedef uint_fast16_t i2c_address_t;
249 
250 typedef struct {
252  union {
253  struct {
254  uint8_t cmd_bytes;
255  uint16_t cmd;
256  };
257  struct {
259  uint16_t word_addr;
260  };
261  };
262  uint_fast16_t count;
263  bool no_block;
264  uint8_t *data;
266 
267 typedef union {
268  uint8_t ok;
269  struct {
270  uint8_t started :1,
272  tx_dma :1,
274  };
275 } i2c_cap_t;
276 
277 extern i2c_cap_t i2c_start (void);
278 extern bool i2c_probe (i2c_address_t i2c_address);
279 extern bool i2c_send (i2c_address_t i2c_address, uint8_t *data, size_t size, bool block);
280 extern bool i2c_receive (i2c_address_t i2cAddr, uint8_t *buf, size_t size, bool block);
281 extern bool i2c_get_keycode (i2c_address_t i2c_address, keycode_callback_ptr callback);
282 extern bool i2c_transfer (i2c_transfer_t *i2c, bool read);
283 
284 // SPI interface:
285 
286 /*
287 typedef void (*spi_cs_ptr)(const char c);
288 
289 typedef struct {
290  spi_cs_ptr cs;
291  uint32_t f_clk;
292 } spi_cfg_t;
293 
294 typedef union {
295  uint8_t ok;
296  struct {
297  uint8_t started :1,
298  tx_non_blocking :1,
299  tx_dma :1,
300  unassigned :5;
301  };
302 } spi_cap_t;
303 
304 extern spi_cap_t spi_start (spi_cfg_t *cfg);
305 extern uint32_t spi_set_speed (uint32_t prescaler);
306 extern uint8_t spi_get_byte (void);
307 extern uint8_t spi_put_byte (uint8_t byte);
308 extern void spi_write (uint8_t *data, size_t size);
309 extern void spi_read (uint8_t *data, size_t size);
310 extern void spi_write (uint8_t *data, size_t size);
311 */
312 
313 // EEPROM/FRAM:
314 
316 #define i2c_nvs_transfer(i2c, rd) i2c_transfer(i2c, rd)
317 
319 #define NVS_TransferResult_OK true
320 
321 #endif
uint32_t size
Definition: nvs_buffer.c:46
bool i2c_receive(i2c_address_t i2cAddr, uint8_t *buf, size_t size, bool block)
bool nvs_transfer_result_t
Definition: plugins.h:318
char hostname_t[33]
Definition: plugins.h:71
i2c_transfer_t nvs_transfer_t
Definition: plugins.h:315
char password_t[33]
Definition: plugins.h:70
char uri_t[65]
Definition: plugins.h:72
bool i2c_get_keycode(i2c_address_t i2c_address, keycode_callback_ptr callback)
uint8_t bssid_t[6]
Definition: plugins.h:68
ip_mode_t
Definition: plugins.h:47
@ IpMode_Static
Definition: plugins.h:48
@ IpMode_DHCP
Definition: plugins.h:49
@ IpMode_AutoIP
Definition: plugins.h:50
encoder_setting_id_t
Definition: plugins.h:177
@ Setting_EncoderCPR
Count Per Revolution.
Definition: plugins.h:179
@ Setting_EncoderCPD
Count Per Detent.
Definition: plugins.h:180
@ Setting_EncoderMode
Definition: plugins.h:178
@ Setting_EncoderDblClickWindow
Definition: plugins.h:181
grbl_wifi_mode_t
Definition: plugins.h:100
@ WiFiMode_APSTA
Definition: plugins.h:104
@ WiFiMode_STA
Definition: plugins.h:102
@ WiFiMode_AP
Definition: plugins.h:103
@ WiFiMode_NULL
Definition: plugins.h:101
bool i2c_transfer(i2c_transfer_t *i2c, bool read)
char username_t[33]
Definition: plugins.h:69
i2c_cap_t i2c_start(void)
bool i2c_send(i2c_address_t i2c_address, uint8_t *data, size_t size, bool block)
encoder_mode_t
Definition: plugins.h:159
@ Encoder_MPG_A
Definition: plugins.h:168
@ Encoder_MPG_Z
Definition: plugins.h:167
@ Encoder_MPG
Definition: plugins.h:164
@ Encoder_MPG_Y
Definition: plugins.h:166
@ Encoder_MPG_C
Definition: plugins.h:170
@ Encoder_MPG_X
Definition: plugins.h:165
@ Encoder_FeedRate
Definition: plugins.h:161
@ Encoder_Universal
Definition: plugins.h:160
@ Encoder_RapidRate
Definition: plugins.h:162
@ Encoder_MPG_V
Definition: plugins.h:172
@ Encoder_Spindle_Position
Definition: plugins.h:174
@ Encoder_MPG_B
Definition: plugins.h:169
@ Encoder_MPG_W
Definition: plugins.h:173
@ Encoder_Spindle_RPM
Definition: plugins.h:163
@ Encoder_MPG_U
Definition: plugins.h:171
bool i2c_probe(i2c_address_t i2c_address)
void(* keycode_callback_ptr)(const char c)
Definition: plugins.h:246
char ssid_t[65]
Definition: plugins.h:67
uint_fast16_t i2c_address_t
Definition: plugins.h:248
modbus_tcp_setting_id_t
Definition: plugins.h:145
@ Setting_ModbusId
Definition: plugins.h:148
@ Setting_ModbusPort
Definition: plugins.h:147
@ Setting_ModbusIpAddress
Definition: plugins.h:146
Definition: plugins.h:138
Definition: plugins.h:205
uint32_t dbl_click_window
ms.
Definition: plugins.h:209
uint32_t cpr
Count per revolution.
Definition: plugins.h:207
uint32_t cpd
Count per detent.
Definition: plugins.h:208
encoder_mode_t mode
Definition: plugins.h:206
encoder_flags_t flags
Definition: plugins.h:210
Definition: plugins.h:213
encoder_mode_t mode
Definition: plugins.h:214
uint_fast8_t id
Definition: plugins.h:215
int32_t position
Definition: plugins.h:217
encoder_event_t event
Definition: plugins.h:219
uint_fast8_t axis
Axis index for MPG encoders, 0xFF for others.
Definition: plugins.h:216
uint32_t velocity
Definition: plugins.h:218
encoder_settings_t * settings
Definition: plugins.h:220
Definition: plugins.h:250
uint8_t word_addr_bytes
Definition: plugins.h:258
uint8_t cmd_bytes
Definition: plugins.h:254
uint16_t cmd
Definition: plugins.h:255
i2c_address_t address
Definition: plugins.h:251
uint16_t word_addr
Definition: plugins.h:259
uint_fast16_t count
Definition: plugins.h:262
uint8_t * data
Definition: plugins.h:264
bool no_block
Definition: plugins.h:263
Definition: plugins.h:36
float step_speed
Definition: plugins.h:39
float fast_distance
Definition: plugins.h:40
float step_distance
Definition: plugins.h:42
float slow_speed
Definition: plugins.h:38
float slow_distance
Definition: plugins.h:41
float fast_speed
Definition: plugins.h:37
Definition: plugins.h:151
uint8_t id
Definition: plugins.h:154
uint16_t port
Definition: plugins.h:153
Definition: plugins.h:74
uint16_t port
Definition: plugins.h:76
username_t user
Definition: plugins.h:77
password_t password
Definition: plugins.h:78
Definition: plugins.h:111
network_settings_t status
Definition: plugins.h:120
const char * interface
Definition: plugins.h:112
bool link_up
Definition: plugins.h:114
bool dhcp
Definition: plugins.h:115
uint16_t mbps
Definition: plugins.h:116
bool is_ethernet
Definition: plugins.h:113
grbl_wifi_mode_t wifi_mode
Definition: plugins.h:119
Definition: plugins.h:81
hostname_t hostname
Definition: plugins.h:85
uint16_t websocket_port
Definition: plugins.h:87
uint16_t telnet_port
Definition: plugins.h:86
uint16_t ftp_port
Definition: plugins.h:89
ip_mode_t ip_mode
Definition: plugins.h:90
network_services_t services
Definition: plugins.h:91
uint16_t http_port
Definition: plugins.h:88
Definition: plugins.h:123
ssid_t ssid
Definition: plugins.h:124
uint8_t channel
Definition: plugins.h:128
bssid_t bssid
Definition: plugins.h:125
password_t password
Definition: plugins.h:126
network_settings_t network
Definition: plugins.h:129
Definition: plugins.h:132
ssid_t ssid
Definition: plugins.h:133
password_t password
Definition: plugins.h:134
network_settings_t network
Definition: plugins.h:135
Definition: plugins.h:184
uint8_t direction_changed
Definition: plugins.h:188
uint8_t index_pulse
Definition: plugins.h:192
uint8_t click
Definition: plugins.h:189
uint8_t long_click
Definition: plugins.h:191
uint8_t position_changed
Definition: plugins.h:187
uint8_t events
Definition: plugins.h:185
uint8_t dbl_click
Definition: plugins.h:190
uint8_t unused
Definition: plugins.h:193
Definition: plugins.h:197
uint8_t value
Definition: plugins.h:199
uint8_t single_count_per_detent
Definition: plugins.h:201
uint8_t flags
Definition: plugins.h:198
Definition: plugins.h:267
uint8_t unassigned
Definition: plugins.h:273
uint8_t ok
Definition: plugins.h:268
uint8_t started
Definition: plugins.h:270
uint8_t tx_non_blocking
Definition: plugins.h:271
uint8_t tx_dma
Definition: plugins.h:272
Definition: plugins.h:53
uint8_t mdns
Definition: plugins.h:61
uint8_t ftp
Definition: plugins.h:59
uint8_t telnet
Definition: plugins.h:56
uint8_t websocket
Definition: plugins.h:57
uint8_t dns
Definition: plugins.h:60
uint8_t mask
Definition: plugins.h:54
uint8_t http
Definition: plugins.h:58
uint8_t webdav
Definition: plugins.h:63
uint8_t ssdp
Definition: plugins.h:62