Updated for new style stream switching, added support for $pins command
This commit is contained in:
parent
2f69a50af3
commit
ea882b6a38
|
@ -507,43 +507,11 @@ static void enetStreamWriteS (const char *data)
|
||||||
WsStreamWriteS(data);
|
WsStreamWriteS(data);
|
||||||
#endif
|
#endif
|
||||||
#if USB_SERIAL_CDC
|
#if USB_SERIAL_CDC
|
||||||
if(!(services.telnet || services.websocket)) // TODO: check if usb connection is up?
|
usb_serialWriteS(data);
|
||||||
usb_serialWriteS(data);
|
|
||||||
#else
|
#else
|
||||||
serialWriteS(data);
|
serialWriteS(data);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if TELNET_ENABLE
|
|
||||||
const io_stream_t ethernet_stream = {
|
|
||||||
.type = StreamType_Telnet,
|
|
||||||
.read = TCPStreamGetC,
|
|
||||||
.write = TCPStreamWriteS,
|
|
||||||
.write_all = enetStreamWriteS,
|
|
||||||
.write_char = TCPStreamPutC,
|
|
||||||
.get_rx_buffer_available = TCPStreamRxFree,
|
|
||||||
.reset_read_buffer = TCPStreamRxFlush,
|
|
||||||
.cancel_read_buffer = TCPStreamRxCancel,
|
|
||||||
.suspend_read = TCPStreamSuspendInput,
|
|
||||||
.enqueue_realtime_command = protocol_enqueue_realtime_command
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if WEBSOCKET_ENABLE
|
|
||||||
const io_stream_t websocket_stream = {
|
|
||||||
.type = StreamType_WebSocket,
|
|
||||||
.read = WsStreamGetC,
|
|
||||||
.write = WsStreamWriteS,
|
|
||||||
.write_all = enetStreamWriteS,
|
|
||||||
.write_char = WsStreamPutC,
|
|
||||||
.get_rx_buffer_available = WsStreamRxFree,
|
|
||||||
.reset_read_buffer = WsStreamRxFlush,
|
|
||||||
.cancel_read_buffer = WsStreamRxCancel,
|
|
||||||
.suspend_read = WsStreamSuspendInput,
|
|
||||||
.enqueue_realtime_command = protocol_enqueue_realtime_command
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // ETHERNET_ENABLE
|
#endif // ETHERNET_ENABLE
|
||||||
|
|
||||||
#if USB_SERIAL_CDC
|
#if USB_SERIAL_CDC
|
||||||
|
@ -615,32 +583,50 @@ static void driver_delay_ms (uint32_t ms, delay_callback_ptr callback)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void selectStream (stream_type_t stream)
|
static bool selectStream (const io_stream_t *stream)
|
||||||
{
|
{
|
||||||
|
static bool serial_connected = false;
|
||||||
static stream_type_t active_stream = StreamType_Serial;
|
static stream_type_t active_stream = StreamType_Serial;
|
||||||
|
|
||||||
switch(stream) {
|
if(hal.stream.type == StreamType_Serial)
|
||||||
|
serial_connected = hal.stream.connected;
|
||||||
|
|
||||||
|
if(!stream)
|
||||||
|
stream = &serial_stream;
|
||||||
|
|
||||||
|
memcpy(&hal.stream, stream, sizeof(io_stream_t));
|
||||||
|
|
||||||
|
#if ETHERNET_ENABLE
|
||||||
|
if(!hal.stream.write_all)
|
||||||
|
hal.stream.write_all = serial_connected ? enetStreamWriteS : hal.stream.write;
|
||||||
|
#else
|
||||||
|
if(!hal.stream.write_all)
|
||||||
|
hal.stream.write_all = hal.stream.write;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if(!hal.stream.enqueue_realtime_command)
|
||||||
|
hal.stream.enqueue_realtime_command = protocol_enqueue_realtime_command;
|
||||||
|
|
||||||
|
switch(stream->type) {
|
||||||
|
|
||||||
#if TELNET_ENABLE
|
#if TELNET_ENABLE
|
||||||
case StreamType_Telnet:
|
case StreamType_Telnet:
|
||||||
hal.stream.write_all("[MSG:TELNET STREAM ACTIVE]" ASCII_EOL);
|
|
||||||
memcpy(&hal.stream, ðernet_stream, sizeof(io_stream_t));
|
|
||||||
services.telnet = On;
|
services.telnet = On;
|
||||||
|
hal.stream.write_all("[MSG:TELNET STREAM ACTIVE]" ASCII_EOL);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#if WEBSOCKET_ENABLE
|
#if WEBSOCKET_ENABLE
|
||||||
case StreamType_WebSocket:
|
case StreamType_WebSocket:
|
||||||
hal.stream.write_all("[MSG:WEBSOCKET STREAM ACTIVE]" ASCII_EOL);
|
|
||||||
memcpy(&hal.stream, &websocket_stream, sizeof(io_stream_t));
|
|
||||||
services.websocket = On;
|
services.websocket = On;
|
||||||
|
hal.stream.write_all("[MSG:WEBSOCKET STREAM ACTIVE]" ASCII_EOL);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case StreamType_Serial:
|
case StreamType_Serial:
|
||||||
memcpy(&hal.stream, &serial_stream, sizeof(io_stream_t));
|
|
||||||
#if ETHERNET_ENABLE
|
#if ETHERNET_ENABLE
|
||||||
services.mask = 0;
|
services.mask = 0;
|
||||||
#endif
|
#endif
|
||||||
if(active_stream != StreamType_Serial)
|
hal.stream.connected = serial_connected;
|
||||||
|
if(active_stream != StreamType_Serial && hal.stream.connected)
|
||||||
hal.stream.write_all("[MSG:SERIAL STREAM ACTIVE]" ASCII_EOL);
|
hal.stream.write_all("[MSG:SERIAL STREAM ACTIVE]" ASCII_EOL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -648,7 +634,9 @@ void selectStream (stream_type_t stream)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
active_stream = stream;
|
active_stream = hal.stream.type;
|
||||||
|
|
||||||
|
return stream->type == hal.stream.type;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set stepper pulse output pins.
|
// Set stepper pulse output pins.
|
||||||
|
@ -1778,6 +1766,36 @@ static void settings_changed (settings_t *settings)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void enumeratePins (bool low_level, pin_info_ptr pin_info)
|
||||||
|
{
|
||||||
|
static xbar_t pin = {0};
|
||||||
|
uint32_t i = sizeof(inputpin) / sizeof(input_signal_t);
|
||||||
|
|
||||||
|
pin.mode.input = On;
|
||||||
|
|
||||||
|
for(i = 0; i < sizeof(inputpin) / sizeof(input_signal_t); i++) {
|
||||||
|
pin.pin = inputpin[i].pin;
|
||||||
|
pin.function = inputpin[i].id;
|
||||||
|
pin.group = inputpin[i].group;
|
||||||
|
// pin.port = low_level ? (void *)inputpin[i].port : (void *)port2char(inputpin[i].port);
|
||||||
|
pin.mode.pwm = pin.group == PinGroup_SpindlePWM;
|
||||||
|
|
||||||
|
pin_info(&pin);
|
||||||
|
};
|
||||||
|
|
||||||
|
pin.mode.mask = 0;
|
||||||
|
pin.mode.output = On;
|
||||||
|
|
||||||
|
for(i = 0; i < sizeof(outputpin) / sizeof(output_signal_t); i++) {
|
||||||
|
pin.pin = outputpin[i].pin;
|
||||||
|
pin.function = outputpin[i].id;
|
||||||
|
pin.group = outputpin[i].group;
|
||||||
|
// pin.port = low_level ? (void *)outputpin[i].port : (void *)port2char(outputpin[i].port);
|
||||||
|
|
||||||
|
pin_info(&pin);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
void pinModeOutput (gpio_t *gpio, uint8_t pin)
|
void pinModeOutput (gpio_t *gpio, uint8_t pin)
|
||||||
{
|
{
|
||||||
pinMode(pin, OUTPUT);
|
pinMode(pin, OUTPUT);
|
||||||
|
@ -2147,7 +2165,7 @@ bool driver_init (void)
|
||||||
options[strlen(options) - 1] = '\0';
|
options[strlen(options) - 1] = '\0';
|
||||||
|
|
||||||
hal.info = "iMXRT1062";
|
hal.info = "iMXRT1062";
|
||||||
hal.driver_version = "210526";
|
hal.driver_version = "210605";
|
||||||
#ifdef BOARD_NAME
|
#ifdef BOARD_NAME
|
||||||
hal.board = BOARD_NAME;
|
hal.board = BOARD_NAME;
|
||||||
#endif
|
#endif
|
||||||
|
@ -2201,14 +2219,15 @@ bool driver_init (void)
|
||||||
grbl.on_report_options = reportIP;
|
grbl.on_report_options = reportIP;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
hal.stream_select = selectStream;
|
||||||
|
hal.stream_select(&serial_stream);
|
||||||
|
|
||||||
#if USB_SERIAL_CDC
|
#if USB_SERIAL_CDC
|
||||||
usb_serialInit();
|
usb_serialInit();
|
||||||
#else
|
#else
|
||||||
serialInit(115200);
|
serialInit(115200);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
selectStream(StreamType_Serial);
|
|
||||||
|
|
||||||
#ifdef I2C_PORT
|
#ifdef I2C_PORT
|
||||||
i2c_init();
|
i2c_init();
|
||||||
#endif
|
#endif
|
||||||
|
@ -2229,6 +2248,7 @@ bool driver_init (void)
|
||||||
hal.clear_bits_atomic = bitsClearAtomic;
|
hal.clear_bits_atomic = bitsClearAtomic;
|
||||||
hal.set_value_atomic = valueSetAtomic;
|
hal.set_value_atomic = valueSetAtomic;
|
||||||
hal.get_elapsed_ticks = millis;
|
hal.get_elapsed_ticks = millis;
|
||||||
|
hal.enumerate_pins = enumeratePins;
|
||||||
|
|
||||||
#if ETHERNET_ENABLE || ADD_MSEVENT
|
#if ETHERNET_ENABLE || ADD_MSEVENT
|
||||||
grbl.on_execute_realtime = execute_realtime;
|
grbl.on_execute_realtime = execute_realtime;
|
||||||
|
@ -2474,7 +2494,7 @@ inline static input_signal_t *get_debounce (void)
|
||||||
|
|
||||||
static void debounce_isr (void)
|
static void debounce_isr (void)
|
||||||
{
|
{
|
||||||
uint8_t grp = 0;
|
uint32_t grp = 0;
|
||||||
input_signal_t *signal;
|
input_signal_t *signal;
|
||||||
|
|
||||||
TMR3_CSCTRL0 &= ~TMR_CSCTRL_TCF1;
|
TMR3_CSCTRL0 &= ~TMR_CSCTRL_TCF1;
|
||||||
|
@ -2512,8 +2532,7 @@ static void debounce_isr (void)
|
||||||
static void gpio_isr (void)
|
static void gpio_isr (void)
|
||||||
{
|
{
|
||||||
bool debounce = false;
|
bool debounce = false;
|
||||||
uint8_t grp = 0;
|
uint32_t grp = 0, intr_status[4];
|
||||||
uint32_t intr_status[4];
|
|
||||||
|
|
||||||
// Get masked interrupt status
|
// Get masked interrupt status
|
||||||
intr_status[0] = ((gpio_reg_t *)&GPIO6_DR)->ISR & ((gpio_reg_t *)&GPIO6_DR)->IMR;
|
intr_status[0] = ((gpio_reg_t *)&GPIO6_DR)->ISR & ((gpio_reg_t *)&GPIO6_DR)->IMR;
|
||||||
|
@ -2566,9 +2585,8 @@ static void gpio_isr (void)
|
||||||
}
|
}
|
||||||
} while(i);
|
} while(i);
|
||||||
|
|
||||||
if(debounce) {
|
if(debounce)
|
||||||
TMR3_CTRL0 |= TMR_CTRL_CM(0b001);
|
TMR3_CTRL0 |= TMR_CTRL_CM(0b001);
|
||||||
}
|
|
||||||
|
|
||||||
if(grp & PinGroup_Limit) {
|
if(grp & PinGroup_Limit) {
|
||||||
limit_signals_t state = limitsGetState();
|
limit_signals_t state = limitsGetState();
|
||||||
|
|
|
@ -51,35 +51,6 @@
|
||||||
#ifndef USB_SERIAL_WAIT
|
#ifndef USB_SERIAL_WAIT
|
||||||
#define USB_SERIAL_WAIT 0
|
#define USB_SERIAL_WAIT 0
|
||||||
#endif
|
#endif
|
||||||
#ifndef PLASMA_ENABLE
|
|
||||||
#define PLASMA_ENABLE 0
|
|
||||||
#endif
|
|
||||||
#ifndef PPI_ENABLE
|
|
||||||
#define PPI_ENABLE 0
|
|
||||||
#endif
|
|
||||||
#ifndef SPINDLE_HUANYANG
|
|
||||||
#define SPINDLE_HUANYANG 0
|
|
||||||
#endif
|
|
||||||
#ifndef QEI_ENABLE
|
|
||||||
#define QEI_ENABLE 0
|
|
||||||
#endif
|
|
||||||
#ifndef ODOMETER_ENABLE
|
|
||||||
#define ODOMETER_ENABLE 0
|
|
||||||
#endif
|
|
||||||
#ifndef OPENPNP_ENABLE
|
|
||||||
#define OPENPNP_ENABLE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef ETHERNET_ENABLE
|
|
||||||
#define ETHERNET_ENABLE 0
|
|
||||||
#endif
|
|
||||||
#ifndef TELNET_ENABLE
|
|
||||||
#define TELNET_ENABLE 0
|
|
||||||
#endif
|
|
||||||
#ifndef WEBSOCKET_ENABLE
|
|
||||||
#define WEBSOCKET_ENABLE 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef SDCARD_ENABLE
|
#ifndef SDCARD_ENABLE
|
||||||
#define SDCARD_ENABLE 0
|
#define SDCARD_ENABLE 0
|
||||||
#endif
|
#endif
|
||||||
|
@ -104,6 +75,24 @@
|
||||||
#ifndef TRINAMIC_DEV
|
#ifndef TRINAMIC_DEV
|
||||||
#define TRINAMIC_DEV 0
|
#define TRINAMIC_DEV 0
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef PLASMA_ENABLE
|
||||||
|
#define PLASMA_ENABLE 0
|
||||||
|
#endif
|
||||||
|
#ifndef PPI_ENABLE
|
||||||
|
#define PPI_ENABLE 0
|
||||||
|
#endif
|
||||||
|
#ifndef SPINDLE_HUANYANG
|
||||||
|
#define SPINDLE_HUANYANG 0
|
||||||
|
#endif
|
||||||
|
#ifndef QEI_ENABLE
|
||||||
|
#define QEI_ENABLE 0
|
||||||
|
#endif
|
||||||
|
#ifndef ODOMETER_ENABLE
|
||||||
|
#define ODOMETER_ENABLE 0
|
||||||
|
#endif
|
||||||
|
#ifndef OPENPNP_ENABLE
|
||||||
|
#define OPENPNP_ENABLE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef ESTOP_ENABLE
|
#ifndef ESTOP_ENABLE
|
||||||
#if COMPATIBILITY_LEVEL <= 1
|
#if COMPATIBILITY_LEVEL <= 1
|
||||||
|
@ -115,6 +104,22 @@
|
||||||
#warning "Enabling ESTOP may not work with all senders!"
|
#warning "Enabling ESTOP may not work with all senders!"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef ETHERNET_ENABLE
|
||||||
|
#define ETHERNET_ENABLE 0
|
||||||
|
#endif
|
||||||
|
#ifndef TELNET_ENABLE
|
||||||
|
#define TELNET_ENABLE 0
|
||||||
|
#endif
|
||||||
|
#ifndef WEBSOCKET_ENABLE
|
||||||
|
#define WEBSOCKET_ENABLE 0
|
||||||
|
#endif
|
||||||
|
#ifndef FTP_ENABLE
|
||||||
|
#define FTP_ENABLE 0
|
||||||
|
#elif !SDCARD_ENABLE
|
||||||
|
#undef FTP_ENABLE
|
||||||
|
#define FTP_ENABLE 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#if ETHERNET_ENABLE
|
#if ETHERNET_ENABLE
|
||||||
#ifndef NETWORK_HOSTNAME
|
#ifndef NETWORK_HOSTNAME
|
||||||
#define NETWORK_HOSTNAME "GRBL"
|
#define NETWORK_HOSTNAME "GRBL"
|
||||||
|
@ -309,7 +314,6 @@ typedef struct {
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
void selectStream (stream_type_t stream);
|
|
||||||
void pinModeOutput (gpio_t *gpio, uint8_t pin);
|
void pinModeOutput (gpio_t *gpio, uint8_t pin);
|
||||||
uint32_t xTaskGetTickCount();
|
uint32_t xTaskGetTickCount();
|
||||||
|
|
||||||
|
|
|
@ -231,6 +231,7 @@ uint16_t format = 0;
|
||||||
if ( format & 0x100) UART.port->BAUD |= LPUART_BAUD_SBNS;
|
if ( format & 0x100) UART.port->BAUD |= LPUART_BAUD_SBNS;
|
||||||
|
|
||||||
//transmitterEnable(1);
|
//transmitterEnable(1);
|
||||||
|
hal.stream.connected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool serialSetBaudRate (uint32_t baud_rate)
|
bool serialSetBaudRate (uint32_t baud_rate)
|
||||||
|
|
|
@ -48,6 +48,8 @@ void usb_serialInit(void)
|
||||||
|
|
||||||
#if USB_SERIAL_WAIT
|
#if USB_SERIAL_WAIT
|
||||||
while(!SerialUSB); // Wait for connection
|
while(!SerialUSB); // Wait for connection
|
||||||
|
|
||||||
|
hal.stream.connected = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
txbuf.max_length = SerialUSB.availableForWrite(); // 6144 bytes
|
txbuf.max_length = SerialUSB.availableForWrite(); // 6144 bytes
|
||||||
|
|
Loading…
Reference in New Issue