Re: User Space GPIO Interrupt programming - GSoC-2018

Ian Lepore <[email protected]>
Newsgroups gmane.os.freebsd.devel.arm
Message-ID <[email protected]>
On Fri, 2020-11-27 at 11:04 -0700, Ian Lepore wrote:
> > I think we need a way for the app to choose whether it wants simple
> > reporting of pin number (like the original code) perhaps along with
> > a count, versus requesting detailed per-event data.  I'm going to
> > propose something more detailed about this as soon as I get my
> > thoughts all organized.

Okay, here's my current thinking on this (with tabs compressed down to
just a couple spaces to prevent line-wrap in email).  This is a snippet
from gpio.h...

/*
 * Reporting gpio pin-change per-event details to userland.
 *
 * When configured for detail reporting, each call to read(2) will
 * return one or more of these structures (or will return
 * EWOULDBLOCK in non-blocking IO mode when there are no new events
 * to report).
 */
struct gpio_event_detail {
  struct timespec gp_time;        /* Time of event */
  uint16_t        gp_pin;         /* Pin number */
  bool            gp_pinstate;    /* Pin state at time of event */
};

/*
 * Reporting gpio pin-change summary data to userland.
 *
 * When configured for summary reporting (the default), each call to
 * read(2) will return one or more of these structures (or will
 * return EWOULDBLOCK in non-blocking IO mode when there are no new
 * events to report).
 */
struct gpio_event_summary {
  struct timespec gp_first_time;  /* Time of first event */
  struct timespec gp_last_time;   /* Time of last event */
  uint16_t        gp_pin;         /* Pin number */
  uint16_t        gp_count;       /* Event count */
  bool            gp_first_state; /* Pin state at first event */
  bool            gp_last_state;  /* Pin state at last event */
};

/*
 * Configuring event reporting to userland.
 *
 * The default is to deliver gpio_event_summary reporting.  To
 * change it, you must use the GPIOCONFIGEVENTS ioctl to set the
 * event fifo size before using GPIOSETCONFIG to configure reporting
 * interrupt events on any pins.  This config is tracked on a
 * per-open-descriptor basis.  Once it has been set, it cannot be
 * changed without closing and re-opening the file descriptor.
 */
struct gpio_event_config {
  uint32_t        gp_fifo_size;   /* Zero for summary reporting. */
};

#define	GPIOCONFIGEVENTS	_IOW('G', 9, struct gpio_event_config)

I haven't written the implementation of all this yet, but I have a
pretty good idea of how to do so.

-- Ian


_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-arm
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.