libgpiod
Loading...
Searching...
No Matches
gpiod.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: LGPL-2.1-or-later */
2/* SPDX-FileCopyrightText: 2017-2022 Bartosz Golaszewski <brgl@bgdev.pl> */
3
8#ifndef __LIBGPIOD_GPIOD_H__
9#define __LIBGPIOD_GPIOD_H__
10
11#include <stdbool.h>
12#include <stddef.h>
13#include <stdint.h>
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
27struct gpiod_chip;
28
37struct gpiod_chip_info;
38
47struct gpiod_line_info;
48
59
69
80
91
100struct gpiod_info_event;
101
110struct gpiod_edge_event;
111
122
141struct gpiod_chip *gpiod_chip_open(const char *path);
142
147void gpiod_chip_close(struct gpiod_chip *chip);
148
156
164const char *gpiod_chip_get_path(struct gpiod_chip *chip);
165
174 unsigned int offset);
175
187 unsigned int offset);
188
195int gpiod_chip_unwatch_line_info(struct gpiod_chip *chip, unsigned int offset);
196
207
219int gpiod_chip_wait_info_event(struct gpiod_chip *chip, int64_t timeout_ns);
220
229
239 const char *name);
240
249struct gpiod_line_request *
251 struct gpiod_request_config *req_cfg,
252 struct gpiod_line_config *line_cfg);
253
279
288
297
304
325
338
352
368
380
392
420
428
438
448
460
471
480
489
498
507
515
523
530unsigned long
532
542
569
575
585
592
606struct gpiod_line_info *
608
632
638
644
651struct gpiod_line_settings *
653
661 enum gpiod_line_direction direction);
662
670
678 enum gpiod_line_edge edge);
679
687
695 enum gpiod_line_bias bias);
696
704
712 enum gpiod_line_drive drive);
713
721
728 bool active_low);
729
736
742void
744 unsigned long period);
745
751unsigned long
753 struct gpiod_line_settings *settings);
754
762 enum gpiod_line_clock event_clock);
763
771
779 enum gpiod_line_value value);
780
788
818
824
833
843 const unsigned int *offsets,
844 size_t num_offsets,
845 struct gpiod_line_settings *settings);
846
854struct gpiod_line_settings *
856 unsigned int offset);
857
880 const enum gpiod_line_value *values,
881 size_t num_values);
882
888size_t
890
902size_t
904 unsigned int *offsets,
905 size_t max_offsets);
906
927
933
942 const char *consumer);
943
949const char *
951
961void
963 size_t event_buffer_size);
964
970size_t
972
987
994const char *
996
1002size_t
1004
1016size_t
1018 unsigned int *offsets,
1019 size_t max_offsets);
1020
1029 unsigned int offset);
1030
1043 size_t num_values,
1044 const unsigned int *offsets,
1045 enum gpiod_line_value *values);
1046
1059 enum gpiod_line_value *values);
1060
1069 unsigned int offset,
1070 enum gpiod_line_value value);
1071
1085 size_t num_values,
1086 const unsigned int *offsets,
1087 const enum gpiod_line_value *values);
1088
1101 const enum gpiod_line_value *values);
1102
1115 struct gpiod_line_config *config);
1116
1126
1141 int64_t timeout_ns);
1142
1155 struct gpiod_edge_event_buffer *buffer,
1156 size_t max_events);
1157
1185
1191
1199
1208
1217
1224
1232
1240
1255
1262size_t
1264
1270
1285struct gpiod_edge_event *
1287 unsigned long index);
1288
1294size_t
1296
1312bool gpiod_is_gpiochip_device(const char *path);
1313
1320const char *gpiod_api_version(void);
1321
1326#ifdef __cplusplus
1327} /* extern "C" */
1328#endif
1329
1330#endif /* __LIBGPIOD_GPIOD_H__ */
const char * gpiod_chip_info_get_label(struct gpiod_chip_info *info)
Get the label of the chip as represented in the kernel.
void gpiod_chip_info_free(struct gpiod_chip_info *info)
Free a chip info object and release all associated resources.
const char * gpiod_chip_info_get_name(struct gpiod_chip_info *info)
Get the name of the chip as represented in the kernel.
size_t gpiod_chip_info_get_num_lines(struct gpiod_chip_info *info)
Get the number of lines exposed by the chip.
struct gpiod_line_info * gpiod_chip_watch_line_info(struct gpiod_chip *chip, unsigned int offset)
Get a snapshot of the status of a line and start watching it for future changes.
struct gpiod_chip_info * gpiod_chip_get_info(struct gpiod_chip *chip)
Get information about the chip.
struct gpiod_info_event * gpiod_chip_read_info_event(struct gpiod_chip *chip)
Read a single line status change event from the chip.
int gpiod_chip_wait_info_event(struct gpiod_chip *chip, int64_t timeout_ns)
Wait for line status change events on any of the watched lines on the chip.
int gpiod_chip_get_fd(struct gpiod_chip *chip)
Get the file descriptor associated with the chip.
int gpiod_chip_get_line_offset_from_name(struct gpiod_chip *chip, const char *name)
Map a line's name to its offset within the chip.
void gpiod_chip_close(struct gpiod_chip *chip)
Close the chip and release all associated resources.
struct gpiod_line_info * gpiod_chip_get_line_info(struct gpiod_chip *chip, unsigned int offset)
Get a snapshot of information about a line.
struct gpiod_line_request * gpiod_chip_request_lines(struct gpiod_chip *chip, struct gpiod_request_config *req_cfg, struct gpiod_line_config *line_cfg)
Request a set of lines for exclusive usage.
int gpiod_chip_unwatch_line_info(struct gpiod_chip *chip, unsigned int offset)
Stop watching a line for status changes.
struct gpiod_chip * gpiod_chip_open(const char *path)
Open a chip by path.
const char * gpiod_chip_get_path(struct gpiod_chip *chip)
Get the path used to open the chip.
struct gpiod_edge_event_buffer * gpiod_edge_event_buffer_new(size_t capacity)
Create a new edge event buffer.
unsigned int gpiod_edge_event_get_line_offset(struct gpiod_edge_event *event)
Get the offset of the line which triggered the event.
struct gpiod_edge_event * gpiod_edge_event_copy(struct gpiod_edge_event *event)
Copy the edge event object.
uint64_t gpiod_edge_event_get_timestamp_ns(struct gpiod_edge_event *event)
Get the timestamp of the event.
struct gpiod_edge_event * gpiod_edge_event_buffer_get_event(struct gpiod_edge_event_buffer *buffer, unsigned long index)
Get an event stored in the buffer.
gpiod_edge_event_type
Event types.
Definition gpiod.h:1179
unsigned long gpiod_edge_event_get_line_seqno(struct gpiod_edge_event *event)
Get the event sequence number specific to the line.
void gpiod_edge_event_buffer_free(struct gpiod_edge_event_buffer *buffer)
Free the edge event buffer and release all associated resources.
size_t gpiod_edge_event_buffer_get_capacity(struct gpiod_edge_event_buffer *buffer)
Get the capacity (the max number of events that can be stored) of the event buffer.
unsigned long gpiod_edge_event_get_global_seqno(struct gpiod_edge_event *event)
Get the global sequence number of the event.
size_t gpiod_edge_event_buffer_get_num_events(struct gpiod_edge_event_buffer *buffer)
Get the number of events a buffer has stored.
enum gpiod_edge_event_type gpiod_edge_event_get_event_type(struct gpiod_edge_event *event)
Get the event type.
void gpiod_edge_event_free(struct gpiod_edge_event *event)
Free the edge event object.
@ GPIOD_EDGE_EVENT_FALLING_EDGE
Definition gpiod.h:1182
@ GPIOD_EDGE_EVENT_RISING_EDGE
Definition gpiod.h:1180
size_t gpiod_line_config_get_num_configured_offsets(struct gpiod_line_config *config)
Get the number of configured line offsets.
struct gpiod_line_settings * gpiod_line_config_get_line_settings(struct gpiod_line_config *config, unsigned int offset)
Get line settings for offset.
size_t gpiod_line_config_get_configured_offsets(struct gpiod_line_config *config, unsigned int *offsets, size_t max_offsets)
Get configured offsets.
int gpiod_line_config_add_line_settings(struct gpiod_line_config *config, const unsigned int *offsets, size_t num_offsets, struct gpiod_line_settings *settings)
Add line settings for a set of offsets.
struct gpiod_line_config * gpiod_line_config_new(void)
Create a new line config object.
void gpiod_line_config_free(struct gpiod_line_config *config)
Free the line config object and release all associated resources.
void gpiod_line_config_reset(struct gpiod_line_config *config)
Reset the line config object.
int gpiod_line_config_set_output_values(struct gpiod_line_config *config, const enum gpiod_line_value *values, size_t num_values)
Set output values for a number of lines.
gpiod_line_clock
Clock settings.
Definition gpiod.h:384
gpiod_line_bias
Internal bias settings.
Definition gpiod.h:356
gpiod_line_edge
Edge detection settings.
Definition gpiod.h:342
gpiod_line_direction
Direction settings.
Definition gpiod.h:329
gpiod_line_value
Logical line state.
Definition gpiod.h:317
gpiod_line_drive
Drive settings.
Definition gpiod.h:372
@ GPIOD_LINE_CLOCK_REALTIME
Definition gpiod.h:387
@ GPIOD_LINE_CLOCK_HTE
Definition gpiod.h:389
@ GPIOD_LINE_CLOCK_MONOTONIC
Definition gpiod.h:385
@ GPIOD_LINE_BIAS_AS_IS
Definition gpiod.h:357
@ GPIOD_LINE_BIAS_UNKNOWN
Definition gpiod.h:359
@ GPIOD_LINE_BIAS_PULL_UP
Definition gpiod.h:363
@ GPIOD_LINE_BIAS_PULL_DOWN
Definition gpiod.h:365
@ GPIOD_LINE_BIAS_DISABLED
Definition gpiod.h:361
@ GPIOD_LINE_EDGE_NONE
Definition gpiod.h:343
@ GPIOD_LINE_EDGE_FALLING
Definition gpiod.h:347
@ GPIOD_LINE_EDGE_RISING
Definition gpiod.h:345
@ GPIOD_LINE_EDGE_BOTH
Definition gpiod.h:349
@ GPIOD_LINE_DIRECTION_AS_IS
Definition gpiod.h:330
@ GPIOD_LINE_DIRECTION_INPUT
Definition gpiod.h:332
@ GPIOD_LINE_DIRECTION_OUTPUT
Definition gpiod.h:335
@ GPIOD_LINE_VALUE_INACTIVE
Definition gpiod.h:320
@ GPIOD_LINE_VALUE_ACTIVE
Definition gpiod.h:322
@ GPIOD_LINE_VALUE_ERROR
Definition gpiod.h:318
@ GPIOD_LINE_DRIVE_OPEN_SOURCE
Definition gpiod.h:377
@ GPIOD_LINE_DRIVE_PUSH_PULL
Definition gpiod.h:373
@ GPIOD_LINE_DRIVE_OPEN_DRAIN
Definition gpiod.h:375
struct gpiod_line_info * gpiod_line_info_copy(struct gpiod_line_info *info)
Copy a line info object.
void gpiod_line_info_free(struct gpiod_line_info *info)
Free a line info object and release all associated resources.
enum gpiod_line_clock gpiod_line_info_get_event_clock(struct gpiod_line_info *info)
Get the event clock setting used for edge event timestamps for the line.
unsigned int gpiod_line_info_get_offset(struct gpiod_line_info *info)
Get the offset of the line.
enum gpiod_line_direction gpiod_line_info_get_direction(struct gpiod_line_info *info)
Get the direction setting of the line.
bool gpiod_line_info_is_debounced(struct gpiod_line_info *info)
Check if the line is debounced (either by hardware or by the kernel software debouncer).
const char * gpiod_line_info_get_name(struct gpiod_line_info *info)
Get the name of the line.
const char * gpiod_line_info_get_consumer(struct gpiod_line_info *info)
Get the name of the consumer of the line.
bool gpiod_line_info_is_active_low(struct gpiod_line_info *info)
Check if the logical value of the line is inverted compared to the physical.
bool gpiod_line_info_is_used(struct gpiod_line_info *info)
Check if the line is in use.
enum gpiod_line_edge gpiod_line_info_get_edge_detection(struct gpiod_line_info *info)
Get the edge detection setting of the line.
unsigned long gpiod_line_info_get_debounce_period_us(struct gpiod_line_info *info)
Get the debounce period of the line, in microseconds.
enum gpiod_line_bias gpiod_line_info_get_bias(struct gpiod_line_info *info)
Get the bias setting of the line.
enum gpiod_line_drive gpiod_line_info_get_drive(struct gpiod_line_info *info)
Get the drive setting of the line.
size_t gpiod_line_request_get_requested_offsets(struct gpiod_line_request *request, unsigned int *offsets, size_t max_offsets)
Get the offsets of the lines in the request.
int gpiod_line_request_set_value(struct gpiod_line_request *request, unsigned int offset, enum gpiod_line_value value)
Set the value of a single requested line.
int gpiod_line_request_get_values(struct gpiod_line_request *request, enum gpiod_line_value *values)
Get the values of all requested lines.
size_t gpiod_line_request_get_num_requested_lines(struct gpiod_line_request *request)
Get the number of lines in the request.
void gpiod_line_request_release(struct gpiod_line_request *request)
Release the requested lines and free all associated resources.
int gpiod_line_request_get_fd(struct gpiod_line_request *request)
Get the file descriptor associated with a line request.
int gpiod_line_request_get_values_subset(struct gpiod_line_request *request, size_t num_values, const unsigned int *offsets, enum gpiod_line_value *values)
Get the values of a subset of requested lines.
int gpiod_line_request_set_values_subset(struct gpiod_line_request *request, size_t num_values, const unsigned int *offsets, const enum gpiod_line_value *values)
Set the values of a subset of requested lines.
int gpiod_line_request_wait_edge_events(struct gpiod_line_request *request, int64_t timeout_ns)
Wait for edge events on any of the requested lines.
int gpiod_line_request_reconfigure_lines(struct gpiod_line_request *request, struct gpiod_line_config *config)
Update the configuration of lines associated with a line request.
enum gpiod_line_value gpiod_line_request_get_value(struct gpiod_line_request *request, unsigned int offset)
Get the value of a single requested line.
int gpiod_line_request_set_values(struct gpiod_line_request *request, const enum gpiod_line_value *values)
Set the values of all lines associated with a request.
const char * gpiod_line_request_get_chip_name(struct gpiod_line_request *request)
Get the name of the chip this request was made on.
int gpiod_line_request_read_edge_events(struct gpiod_line_request *request, struct gpiod_edge_event_buffer *buffer, size_t max_events)
Read a number of edge events from a line request.
int gpiod_line_settings_set_event_clock(struct gpiod_line_settings *settings, enum gpiod_line_clock event_clock)
Set event clock.
enum gpiod_line_direction gpiod_line_settings_get_direction(struct gpiod_line_settings *settings)
Get direction.
int gpiod_line_settings_set_bias(struct gpiod_line_settings *settings, enum gpiod_line_bias bias)
Set bias.
void gpiod_line_settings_reset(struct gpiod_line_settings *settings)
Reset the line settings object to its default values.
enum gpiod_line_drive gpiod_line_settings_get_drive(struct gpiod_line_settings *settings)
Get drive.
unsigned long gpiod_line_settings_get_debounce_period_us(struct gpiod_line_settings *settings)
Get debounce period.
enum gpiod_line_clock gpiod_line_settings_get_event_clock(struct gpiod_line_settings *settings)
Get event clock setting.
void gpiod_line_settings_free(struct gpiod_line_settings *settings)
Free the line settings object and release all associated resources.
int gpiod_line_settings_set_edge_detection(struct gpiod_line_settings *settings, enum gpiod_line_edge edge)
Set edge detection.
void gpiod_line_settings_set_debounce_period_us(struct gpiod_line_settings *settings, unsigned long period)
Set debounce period.
enum gpiod_line_value gpiod_line_settings_get_output_value(struct gpiod_line_settings *settings)
Get the output value.
int gpiod_line_settings_set_output_value(struct gpiod_line_settings *settings, enum gpiod_line_value value)
Set the output value.
bool gpiod_line_settings_get_active_low(struct gpiod_line_settings *settings)
Get active-low setting.
void gpiod_line_settings_set_active_low(struct gpiod_line_settings *settings, bool active_low)
Set active-low setting.
struct gpiod_line_settings * gpiod_line_settings_copy(struct gpiod_line_settings *settings)
Copy the line settings object.
enum gpiod_line_edge gpiod_line_settings_get_edge_detection(struct gpiod_line_settings *settings)
Get edge detection.
int gpiod_line_settings_set_drive(struct gpiod_line_settings *settings, enum gpiod_line_drive drive)
Set drive.
enum gpiod_line_bias gpiod_line_settings_get_bias(struct gpiod_line_settings *settings)
Get bias.
int gpiod_line_settings_set_direction(struct gpiod_line_settings *settings, enum gpiod_line_direction direction)
Set direction.
struct gpiod_line_settings * gpiod_line_settings_new(void)
Create a new line settings object.
void gpiod_info_event_free(struct gpiod_info_event *event)
Free the info event object and release all associated resources.
enum gpiod_info_event_type gpiod_info_event_get_event_type(struct gpiod_info_event *event)
Get the event type of the status change event.
uint64_t gpiod_info_event_get_timestamp_ns(struct gpiod_info_event *event)
Get the timestamp of the event.
struct gpiod_line_info * gpiod_info_event_get_line_info(struct gpiod_info_event *event)
Get the snapshot of line-info associated with the event.
gpiod_info_event_type
Line status change event types.
Definition gpiod.h:561
@ GPIOD_INFO_EVENT_LINE_RELEASED
Definition gpiod.h:564
@ GPIOD_INFO_EVENT_LINE_CONFIG_CHANGED
Definition gpiod.h:566
@ GPIOD_INFO_EVENT_LINE_REQUESTED
Definition gpiod.h:562
const char * gpiod_api_version(void)
Get the API version of the library as a human-readable string.
bool gpiod_is_gpiochip_device(const char *path)
Check if the file pointed to by path is a GPIO chip character device.
size_t gpiod_request_config_get_event_buffer_size(struct gpiod_request_config *config)
Get the edge event buffer size for the request config.
struct gpiod_request_config * gpiod_request_config_new(void)
Create a new request config object.
void gpiod_request_config_set_event_buffer_size(struct gpiod_request_config *config, size_t event_buffer_size)
Set the size of the kernel event buffer for the request.
void gpiod_request_config_free(struct gpiod_request_config *config)
Free the request config object and release all associated resources.
void gpiod_request_config_set_consumer(struct gpiod_request_config *config, const char *consumer)
Set the consumer name for the request.
const char * gpiod_request_config_get_consumer(struct gpiod_request_config *config)
Get the consumer name configured in the request config.