 
  This post represents another part of the series of work related to the iio_dummy module. Before you read this post, I recommend to first read:
In this post, we want to accomplish the following tasks:
iio_event_monitor.c and others;iio_event_monitor;iio_simple_dummy_event.Finally, for this post, I suppose you already have iio_dummy compiled, loaded, and with a device configured via configfs (again, these subjects were explained in the recommended posts).
Linux Kernel has a directory named tools/ which have many different tools (e.g., perf and objtool). The IIO subsystem also has a directory in tools/ that have some useful tools to illustrate the use of IIO in the user space. If you want to compile any program related to iio, you just need to type:
$ make -C tools/iio
Take a look at the directory after the compilation; you should see iio_event_monitor, iio_generic_buffer, and lsiio. See:
$ ls tools/iio/
Build              iio_event_monitor.c     iio_event_monitor.o  iio_generic_buffer.c     iio_generic_buffer.o  iio_utils.h  include  lsiio.c     lsiio.o
iio_event_monitor  iio_event_monitor-in.o  iio_generic_buffer   iio_generic_buffer-in.o  iio_utils.c           iio_utils.o  lsiio    lsiio-in.o  Makefile
The execution of the binary is straightforward, for example, you can try to execute the lsiio tool as follows:
$ ./tools/iio/lsiio 
Device 000: my_glorious_dummy_device
The lsiio tool identifies all the available iio devices in your system. In the case of this tutorial, we just have my_glorious_dummy_device.
iio_evet_monitorThe iio_event_monitor is a tool that reads the current buffer setup from sysfs and starts a short capture from the specified device [1]. If you just execute the program, you will get:
$ ./tools/iio/iio_event_monitor 
Usage: ./tools/iio/iio_event_monitor <device_name>
As you can see, the program expects a device name. Use the lsiio to see the device name (in our case it is my_glorious_dummy_device), open another terminal, and type:
$ sudo ./tools/iio/iio_event_monitor my_glorious_dummy_device
Found IIO device with name my_glorious_dummy_device with device number 0
You will notice that the program start, but nothing happens. Do not cancel the execution, just go to the next section.
Now that you have iio_event_monitor running, open another terminal and type:
 echo 0 > /sys/bus/iio/devices/iio_evgen poke_ev0
 echo 1 > /sys/bus/iio/devices/iio_evgen poke_ev0
 echo 2 > /sys/bus/iio/devices/iio_evgen poke_ev0
 echo 3 > /sys/bus/iio/devices/iio_evgen poke_ev0
Going back to the terminal with the iio_event_monitor running, you should see an output similar to:
$ sudo ./tools/iio/iio_event_monitor my_glorious_dummy_device
Found IIO device with name my_glorious_dummy_device with device number 0
Event: time: 1520102773326469013, type: voltage, channel: 0, evtype: thresh, direction: rising
Event: time: 1520102776145258970, type: activity(running), channel: 0, evtype: thresh, direction: rising
Event: time: 1520102778636096750, type: activity(walking), channel: 0, evtype: thresh, direction: falling
Event: time: 1520102781584365213, type: steps, channel: 0, evtype: change
Try the echo command from Code 5 with different values; you will notice that nothing happens. The question is: why? If you read the “The iio_simple_dummy_event Events Anatomy” you should remember the handling function explanation. There, we saw a switch case with a range of options from 0 to 3. Each option represents an event, and we are making them execute here.
tools/iio/iio_event_monitor.c the source code has many useful comments.