grblHAL core  20260225
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-2026 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 // Encoder settings offsets
158 
159 typedef enum {
165 
166 // DISPLAYS:
167 
168 // Interfaces
169 #define DISPLAY_I2C (1<<0)
170 #define DISPLAY_SPI (1<<1)
171 #define DISPLAY_UART (1<<2)
172 
173 // Plugins
174 #define DISPLAY_I2C_INTERFACE ((1<<3)|DISPLAY_I2C)
175 #define DISPLAY_I2C_LEDS ((1<<4)|DISPLAY_I2C)
176 #define DISPLAY_I2C_OLED_1 ((1<<5)|DISPLAY_I2C)
177 
178 // Driver chips
179 
180 #define DISPLAY_DRIVER_SH1106 1
181 #define DISPLAY_DRIVER_SSD1306 2
182 #define DISPLAY_DRIVER_SSD1331 3
183 #define DISPLAY_DRIVER_ILI9340 4
184 #define DISPLAY_DRIVER_ILI9341 5
185 #define DISPLAY_DRIVER_ILI9486 6
186 
187 // I2C interface:
188 
189 typedef void (*keycode_callback_ptr)(const char c);
190 
191 typedef uint_fast16_t i2c_address_t;
192 
193 typedef struct {
195  union {
196  struct {
197  uint8_t cmd_bytes;
198  uint16_t cmd;
199  };
200  struct {
202  uint16_t word_addr;
203  };
204  };
205  uint_fast16_t count;
206  bool no_block;
207  uint8_t *data;
209 
210 typedef union {
211  uint8_t ok;
212  struct {
213  uint8_t started :1,
215  tx_dma :1,
217  };
218 } i2c_cap_t;
219 
220 extern i2c_cap_t i2c_start (void);
221 extern bool i2c_probe (i2c_address_t i2c_address);
222 extern bool i2c_send (i2c_address_t i2c_address, uint8_t *data, size_t size, bool block);
223 extern bool i2c_receive (i2c_address_t i2cAddr, uint8_t *buf, size_t size, bool block);
224 extern bool i2c_get_keycode (i2c_address_t i2c_address, keycode_callback_ptr callback);
225 extern bool i2c_transfer (i2c_transfer_t *i2c, bool read);
226 
227 // SPI interface:
228 
229 /*
230 typedef void (*spi_cs_ptr)(const char c);
231 
232 typedef struct {
233  spi_cs_ptr cs;
234  uint32_t f_clk;
235 } spi_cfg_t;
236 
237 typedef union {
238  uint8_t ok;
239  struct {
240  uint8_t started :1,
241  tx_non_blocking :1,
242  tx_dma :1,
243  unassigned :5;
244  };
245 } spi_cap_t;
246 
247 extern spi_cap_t spi_start (spi_cfg_t *cfg);
248 extern uint32_t spi_set_speed (uint32_t prescaler);
249 extern uint8_t spi_get_byte (void);
250 extern uint8_t spi_put_byte (uint8_t byte);
251 extern void spi_write (uint8_t *data, size_t size);
252 extern void spi_read (uint8_t *data, size_t size);
253 extern void spi_write (uint8_t *data, size_t size);
254 */
255 
256 // EEPROM/FRAM:
257 
259 #define i2c_nvs_transfer(i2c, rd) i2c_transfer(i2c, rd)
260 
262 #define NVS_TransferResult_OK true
263 
264 #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:261
char hostname_t[33]
Definition: plugins.h:71
i2c_transfer_t nvs_transfer_t
Definition: plugins.h:258
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:159
@ Setting_EncoderCPR
Count Per Revolution.
Definition: plugins.h:161
@ Setting_EncoderCPD
Count Per Detent.
Definition: plugins.h:162
@ Setting_EncoderMode
Definition: plugins.h:160
@ Setting_EncoderDblClickWindow
Definition: plugins.h:163
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)
bool i2c_probe(i2c_address_t i2c_address)
void(* keycode_callback_ptr)(const char c)
Definition: plugins.h:189
char ssid_t[65]
Definition: plugins.h:67
uint_fast16_t i2c_address_t
Definition: plugins.h:191
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:193
uint8_t word_addr_bytes
Definition: plugins.h:201
uint8_t cmd_bytes
Definition: plugins.h:197
uint16_t cmd
Definition: plugins.h:198
i2c_address_t address
Definition: plugins.h:194
uint16_t word_addr
Definition: plugins.h:202
uint_fast16_t count
Definition: plugins.h:205
uint8_t * data
Definition: plugins.h:207
bool no_block
Definition: plugins.h:206
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:210
uint8_t unassigned
Definition: plugins.h:216
uint8_t ok
Definition: plugins.h:211
uint8_t started
Definition: plugins.h:213
uint8_t tx_non_blocking
Definition: plugins.h:214
uint8_t tx_dma
Definition: plugins.h:215
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