grblHAL core  20250412
ioports.c File Reference
#include <math.h>
#include "hal.h"
#include "settings.h"

Data Structures

struct  io_ports_private_t
 
struct  ll_io_port_t
 
struct  io_ports_list_t
 
struct  ff_data
 

Macros

#define MAX_PORTS   (Output_AuxMax - Output_Aux0 + 1)
 

Typedefs

typedef struct io_ports_list_t io_ports_list_t
 

Enumerations

enum  ioport_type_xxx_t { Port_AnalogIn = 0 , Port_AnalogOut , Port_DigitalIn , Port_DigitalOut }
 

Functions

uint8_t ioports_available (io_port_type_t type, io_port_direction_t dir)
 Get number of digital or analog ports available. More...
 
uint8_t ioports_unclaimed (io_port_type_t type, io_port_direction_t dir)
 Get number of unclaimed digital or analog ports available. More...
 
uint8_t ioport_find_free (io_port_type_t type, io_port_direction_t dir, pin_cap_t filter, const char *description)
 find first free or claimed digital or analog port. More...
 
xbar_tioport_get_info (io_port_type_t type, io_port_direction_t dir, uint8_t port)
 Return information about a digital or analog port. More...
 
xbar_tioport_claim (io_port_type_t type, io_port_direction_t dir, uint8_t *port, const char *description)
 Claim a digital or analog port for exclusive use. More...
 
void ioport_assign_function (aux_ctrl_t *aux_ctrl, pin_function_t *function)
 Deprecated - use ioport_set_function() instead. More...
 
void ioport_assign_out_function (aux_ctrl_out_t *aux_ctrl, pin_function_t *function)
 Deprecated - use ioport_set_function() instead. More...
 
bool ioport_set_function (xbar_t *pin, pin_function_t function, driver_caps_t caps)
 Set pin function. More...
 
io_port_cando_t ioports_can_do (void)
 Get basic ioports capabilities. More...
 
bool ioport_can_claim_explicit (void)
 Deprecated - use ioports_can_do() instead. More...
 
bool ioports_enumerate (io_port_type_t type, io_port_direction_t dir, pin_cap_t filter, ioports_enumerate_callback_ptr callback, void *data)
 Enumerate ports. More...
 
bool ioport_set_description (io_port_type_t type, io_port_direction_t dir, uint8_t port, const char *description)
 Set pin description. More...
 
bool ioport_analog_out (uint8_t port, float value)
 
bool ioport_digital_out (uint8_t port, uint32_t value)
 
int32_t ioport_wait_on_input (io_port_type_t type, uint8_t port, wait_mode_t wait_mode, float timeout)
 
bool ioport_analog_out_config (uint8_t port, pwm_config_t *config)
 
bool ioport_digital_in_config (uint8_t port, gpio_in_config_t *config)
 
bool ioport_enable_irq (uint8_t port, pin_irq_mode_t irq_mode, ioport_interrupt_callback_ptr handler)
 
bool ioport_digital_out_config (uint8_t port, gpio_out_config_t *config)
 
bool ioport_digital_pwm_config (uint8_t port, pwm_config_t *config)
 
bool ioports_add (io_ports_data_t *ports, io_port_type_t type, uint8_t n_in, uint8_t n_out)
 Deprecated - use ioports_add_analog() or ioports_add_digital() instead. More...
 
bool ioports_add_analog (io_analog_t *analog)
 
bool ioports_add_digital (io_digital_t *digital)
 
bool ioports_precompute_pwm_values (pwm_config_t *config, ioports_pwm_t *pwm_data, uint32_t clock_hz)
 Precompute PWM values for faster conversion. More...
 
uint_fast16_t ioports_compute_pwm_value (ioports_pwm_t *pwm_data, float value)
 Analog value to PWM conversion. More...
 
void ioport_save_input_settings (xbar_t *xbar, gpio_in_config_t *config)
 
void ioport_save_output_settings (xbar_t *xbar, gpio_out_config_t *config)
 
void ioport_setting_changed (setting_id_t id)
 
void ioports_add_settings (driver_settings_load_ptr settings_loaded, setting_changed_ptr setting_changed)
 

Detailed Description

Some wrapper functions for the io_port_t API. They perform the necessary checks for both availability of ports and advanced functionality simplifying plugin code that uses them.

Macro Definition Documentation

◆ MAX_PORTS

#define MAX_PORTS   (Output_AuxMax - Output_Aux0 + 1)

Typedef Documentation

◆ io_ports_list_t

Enumeration Type Documentation

◆ ioport_type_xxx_t

Enumerator
Port_AnalogIn 
Port_AnalogOut 
Port_DigitalIn 
Port_DigitalOut 

Function Documentation

◆ ioport_analog_out()

bool ioport_analog_out ( uint8_t  port,
float  value 
)

◆ ioport_analog_out_config()

bool ioport_analog_out_config ( uint8_t  port,
pwm_config_t config 
)

◆ ioport_assign_function()

void ioport_assign_function ( aux_ctrl_t aux_ctrl,
pin_function_t function 
)

Deprecated - use ioport_set_function() instead.

◆ ioport_assign_out_function()

void ioport_assign_out_function ( aux_ctrl_out_t aux_ctrl,
pin_function_t function 
)

Deprecated - use ioport_set_function() instead.

◆ ioport_can_claim_explicit()

bool ioport_can_claim_explicit ( void  )

Deprecated - use ioports_can_do() instead.

◆ ioport_claim()

xbar_t* ioport_claim ( io_port_type_t  type,
io_port_direction_t  dir,
uint8_t *  port,
const char *  description 
)

Claim a digital or analog port for exclusive use.

Parameters
typeas an io_port_type_t enum value.
diras an io_port_direction_t enum value.
portpointer to a uint8_t holding the ports aux number, returns the actual port number to use if successful.
descriptionpointer to a char constant for the pin description.
Returns
pointer to a xbar_t structure with details about the claimed port if successful, NULL if not.

◆ ioport_digital_in_config()

bool ioport_digital_in_config ( uint8_t  port,
gpio_in_config_t config 
)

◆ ioport_digital_out()

bool ioport_digital_out ( uint8_t  port,
uint32_t  value 
)

◆ ioport_digital_out_config()

bool ioport_digital_out_config ( uint8_t  port,
gpio_out_config_t config 
)

◆ ioport_digital_pwm_config()

bool ioport_digital_pwm_config ( uint8_t  port,
pwm_config_t config 
)

◆ ioport_enable_irq()

bool ioport_enable_irq ( uint8_t  port,
pin_irq_mode_t  irq_mode,
ioport_interrupt_callback_ptr  handler 
)

◆ ioport_find_free()

uint8_t ioport_find_free ( io_port_type_t  type,
io_port_direction_t  dir,
pin_cap_t  filter,
const char *  description 
)

find first free or claimed digital or analog port.

Parameters
typeas an io_port_type_t enum value.
diras an io_port_direction_t enum value.
descriptionpointer to a char constant for the pin description of a previousely claimed port or NULL if searching for the first free port.
Returns
the port number if successful, 0xFF (255) if not.

◆ ioport_get_info()

xbar_t* ioport_get_info ( io_port_type_t  type,
io_port_direction_t  dir,
uint8_t  port 
)

Return information about a digital or analog port.

Parameters
typeas an io_port_type_t enum value.
diras an io_port_direction_t enum value.
portthe port aux number.
Returns
pointer to xbar_t struct if successful, NULL if not.

◆ ioport_save_input_settings()

void ioport_save_input_settings ( xbar_t xbar,
gpio_in_config_t config 
)

◆ ioport_save_output_settings()

void ioport_save_output_settings ( xbar_t xbar,
gpio_out_config_t config 
)

◆ ioport_set_description()

bool ioport_set_description ( io_port_type_t  type,
io_port_direction_t  dir,
uint8_t  port,
const char *  description 
)

Set pin description.

Parameters
typeas an io_port_type_t enum value.
diras an io_port_direction_t enum value.
portthe port aux number.
descriptionpointer to a char constant for the pin description.

◆ ioport_set_function()

bool ioport_set_function ( xbar_t pin,
pin_function_t  function,
driver_caps_t  caps 
)

Set pin function.

Parameters
portpointer to a xbar_t structure.
functiona pin_function_t enum value.
capspointer to driver_caps_t capability flags.

◆ ioport_setting_changed()

void ioport_setting_changed ( setting_id_t  id)

◆ ioport_wait_on_input()

int32_t ioport_wait_on_input ( io_port_type_t  type,
uint8_t  port,
wait_mode_t  wait_mode,
float  timeout 
)

◆ ioports_add()

bool ioports_add ( io_ports_data_t ports,
io_port_type_t  type,
uint8_t  n_in,
uint8_t  n_out 
)

Deprecated - use ioports_add_analog() or ioports_add_digital() instead.

◆ ioports_add_analog()

bool ioports_add_analog ( io_analog_t analog)

◆ ioports_add_digital()

bool ioports_add_digital ( io_digital_t digital)

◆ ioports_add_settings()

void ioports_add_settings ( driver_settings_load_ptr  settings_loaded,
setting_changed_ptr  setting_changed 
)

◆ ioports_available()

uint8_t ioports_available ( io_port_type_t  type,
io_port_direction_t  dir 
)

Get number of digital or analog ports available.

Parameters
typeas an io_port_type_t enum value.
diras an io_port_direction_t enum value.
Returns
number of ports available excluding remapped ports but including claimed ports if the API implementation supports that.

◆ ioports_can_do()

io_port_cando_t ioports_can_do ( void  )

Get basic ioports capabilities.

Returns
a io_port_cando_t union.

◆ ioports_compute_pwm_value()

uint_fast16_t ioports_compute_pwm_value ( ioports_pwm_t pwm_data,
float  value 
)

Analog value to PWM conversion.

Parameters
pwm_datapointer to a ioports_pwm_t structure.
valueanalog value to be converted.
Returns
the PWM value to use.

NOTE: ioports_precompute_pwm_values() must be called to precompute values before this function is called. Typically this is done by the ioports initialization code.

◆ ioports_enumerate()

bool ioports_enumerate ( io_port_type_t  type,
io_port_direction_t  dir,
pin_cap_t  filter,
ioports_enumerate_callback_ptr  callback,
void *  data 
)

Enumerate ports.

Parameters
typeas an io_port_type_t enum value.
diras an io_port_direction_t enum value.
filtera pin_cap_t union with fields set that must match the port capabilities.
callbackpointer to a ioports_enumerate_callback_ptr function that will be called for each matching port. If the function returns true the enumeration will end.
dataa pointer to context data passed to the callback function.

◆ ioports_precompute_pwm_values()

bool ioports_precompute_pwm_values ( pwm_config_t config,
ioports_pwm_t pwm_data,
uint32_t  clock_hz 
)

Precompute PWM values for faster conversion.

Parameters
configpointer to a pwm_config_t structure.
pwm_datapointer to a ioports_pwm_t structure, to hold the precomputed values.
clock_hztimer clock frequency used for PWM generation.
Returns
true if successful, false if no PWM range possible - driver should then revert to simple on/off control.

◆ ioports_unclaimed()

uint8_t ioports_unclaimed ( io_port_type_t  type,
io_port_direction_t  dir 
)

Get number of unclaimed digital or analog ports available.

Parameters
typeas an io_port_type_t enum value.
diras an io_port_direction_t enum value.
Returns
number of ports available.