Skip to content

Commit

Permalink
[iomon] Provide context pointer for iomon callbacks. JB#33644
Browse files Browse the repository at this point in the history
The source of input data is not made known to io-monitor callback
functions. This makes it difficult to use the same functions for
dealing with input from several similar input device nodes.

Pass the io-monitor object pointer to the callback functions. Then
callback functions can utilize custom per device state data attached
to the io-monitor when needed.
  • Loading branch information
spiiroin committed Jan 7, 2016
1 parent 9fc79cd commit a8c4d46
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 22 deletions.
24 changes: 15 additions & 9 deletions event-input.c
Expand Up @@ -303,10 +303,10 @@ static void evin_iomon_generate_activity (struct input_ev

// event handling by device type

static gboolean evin_iomon_touchscreen_cb (gpointer data, gsize bytes_read);
static gboolean evin_iomon_evin_doubletap_cb (gpointer data, gsize bytes_read);
static gboolean evin_iomon_keypress_cb (gpointer data, gsize bytes_read);
static gboolean evin_iomon_activity_cb (gpointer data, gsize bytes_read);
static gboolean evin_iomon_touchscreen_cb (mce_io_mon_t *iomon, gpointer data, gsize bytes_read);
static gboolean evin_iomon_evin_doubletap_cb (mce_io_mon_t *iomon, gpointer data, gsize bytes_read);
static gboolean evin_iomon_keypress_cb (mce_io_mon_t *iomon, gpointer data, gsize bytes_read);
static gboolean evin_iomon_activity_cb (mce_io_mon_t *iomon, gpointer data, gsize bytes_read);

// add/remove devices

Expand Down Expand Up @@ -1913,8 +1913,10 @@ evin_iomon_generate_activity(struct input_event *ev, bool cooked, bool raw)
* TRUE to flush all remaining chunks
*/
static gboolean
evin_iomon_touchscreen_cb(gpointer data, gsize bytes_read)
evin_iomon_touchscreen_cb(mce_io_mon_t *iomon, gpointer data, gsize bytes_read)
{
(void)iomon;

gboolean flush = FALSE;
struct input_event *ev = data;

Expand Down Expand Up @@ -2024,7 +2026,7 @@ evin_iomon_touchscreen_cb(gpointer data, gsize bytes_read)
* @return Always returns FALSE to return remaining chunks (if any)
*/
static gboolean
evin_iomon_evin_doubletap_cb(gpointer data, gsize bytes_read)
evin_iomon_evin_doubletap_cb(mce_io_mon_t *iomon, gpointer data, gsize bytes_read)
{
struct input_event *ev = data;
gboolean flush = FALSE;
Expand All @@ -2036,7 +2038,7 @@ evin_iomon_evin_doubletap_cb(gpointer data, gsize bytes_read)
/* Feed power key events to touchscreen handler for
* possible double tap gesture event conversion */
if( ev->type == EV_KEY && ev->code == KEY_POWER ) {
evin_iomon_touchscreen_cb(ev, sizeof *ev);
evin_iomon_touchscreen_cb(iomon, ev, sizeof *ev);
}

EXIT:
Expand All @@ -2052,8 +2054,10 @@ evin_iomon_evin_doubletap_cb(gpointer data, gsize bytes_read)
* @return Always returns FALSE to return remaining chunks (if any)
*/
static gboolean
evin_iomon_keypress_cb(gpointer data, gsize bytes_read)
evin_iomon_keypress_cb(mce_io_mon_t *iomon, gpointer data, gsize bytes_read)
{
(void)iomon;

submode_t submode = mce_get_submode_int32();
struct input_event *ev;

Expand Down Expand Up @@ -2206,8 +2210,10 @@ evin_iomon_keypress_cb(gpointer data, gsize bytes_read)
* @return Always returns FALSE to return remaining chunks (if any)
*/
static gboolean
evin_iomon_activity_cb(gpointer data, gsize bytes_read)
evin_iomon_activity_cb(mce_io_mon_t *iomon, gpointer data, gsize bytes_read)
{
(void)iomon;

struct input_event *ev = data;

if( !ev || bytes_read != sizeof (*ev) )
Expand Down
24 changes: 16 additions & 8 deletions event-switches.c
Expand Up @@ -85,8 +85,9 @@ gboolean has_flicker_key = FALSE;
* @param bytes_read Unused
* @return Always returns FALSE to return remaining data (if any)
*/
static gboolean generic_activity_iomon_cb(gpointer data, gsize bytes_read)
static gboolean generic_activity_iomon_cb(mce_io_mon_t *iomon, gpointer data, gsize bytes_read)
{
(void)iomon;
(void)data;
(void)bytes_read;

Expand All @@ -104,10 +105,11 @@ static gboolean generic_activity_iomon_cb(gpointer data, gsize bytes_read)
* @param bytes_read Unused
* @return Always returns FALSE to return remaining data (if any)
*/
static gboolean camera_launch_button_iomon_cb(gpointer data, gsize bytes_read)
static gboolean camera_launch_button_iomon_cb(mce_io_mon_t *iomon, gpointer data, gsize bytes_read)
{
camera_button_state_t camera_button_state;

(void)iomon;
(void)bytes_read;

if (!strncmp(data, MCE_CAM_LAUNCH_ACTIVE,
Expand Down Expand Up @@ -136,10 +138,11 @@ static gboolean camera_launch_button_iomon_cb(gpointer data, gsize bytes_read)
* @param bytes_read Unused
* @return Always returns FALSE to return remaining data (if any)
*/
static gboolean lockkey_iomon_cb(gpointer data, gsize bytes_read)
static gboolean lockkey_iomon_cb(mce_io_mon_t *iomon, gpointer data, gsize bytes_read)
{
gint lockkey_state;

(void)iomon;
(void)bytes_read;

if (!strncmp(data, MCE_FLICKER_KEY_ACTIVE,
Expand All @@ -163,10 +166,11 @@ static gboolean lockkey_iomon_cb(gpointer data, gsize bytes_read)
* @param bytes_read Unused
* @return Always returns FALSE to return remaining data (if any)
*/
static gboolean kbd_slide_iomon_cb(gpointer data, gsize bytes_read)
static gboolean kbd_slide_iomon_cb(mce_io_mon_t *iomon, gpointer data, gsize bytes_read)
{
cover_state_t slide_state;

(void)iomon;
(void)bytes_read;

if (!strncmp(data, MCE_KBD_SLIDE_OPEN, strlen(MCE_KBD_SLIDE_OPEN))) {
Expand Down Expand Up @@ -194,10 +198,11 @@ static gboolean kbd_slide_iomon_cb(gpointer data, gsize bytes_read)
* @param bytes_read Unused
* @return Always returns FALSE to return remaining data (if any)
*/
static gboolean lid_cover_iomon_cb(gpointer data, gsize bytes_read)
static gboolean lid_cover_iomon_cb(mce_io_mon_t *iomon, gpointer data, gsize bytes_read)
{
cover_state_t lid_cover_state;

(void)iomon;
(void)bytes_read;

if (!strncmp(data, MCE_LID_COVER_OPEN, strlen(MCE_LID_COVER_OPEN))) {
Expand Down Expand Up @@ -225,10 +230,11 @@ static gboolean lid_cover_iomon_cb(gpointer data, gsize bytes_read)
* @param bytes_read Unused
* @return Always returns FALSE to return remaining data (if any)
*/
static gboolean proximity_sensor_iomon_cb(gpointer data, gsize bytes_read)
static gboolean proximity_sensor_iomon_cb(mce_io_mon_t *iomon, gpointer data, gsize bytes_read)
{
cover_state_t proximity_sensor_state;

(void)iomon;
(void)bytes_read;

if (!strncmp(data, MCE_PROXIMITY_SENSOR_OPEN,
Expand All @@ -252,10 +258,11 @@ static gboolean proximity_sensor_iomon_cb(gpointer data, gsize bytes_read)
* @param bytes_read Unused
* @return Always returns FALSE to return remaining data (if any)
*/
static gboolean usb_cable_iomon_cb(gpointer data, gsize bytes_read)
static gboolean usb_cable_iomon_cb(mce_io_mon_t *iomon, gpointer data, gsize bytes_read)
{
usb_cable_state_t cable_state;

(void)iomon;
(void)bytes_read;

if (!strncmp(data, MCE_MUSB_OMAP3_USB_CABLE_CONNECTED,
Expand Down Expand Up @@ -283,10 +290,11 @@ static gboolean usb_cable_iomon_cb(gpointer data, gsize bytes_read)
* @param bytes_read Unused
* @return Always returns FALSE to return remaining data (if any)
*/
static gboolean lens_cover_iomon_cb(gpointer data, gsize bytes_read)
static gboolean lens_cover_iomon_cb(mce_io_mon_t *iomon, gpointer data, gsize bytes_read)
{
cover_state_t lens_cover_state;

(void)iomon;
(void)bytes_read;

if (!strncmp(data, MCE_LENS_COVER_OPEN, strlen(MCE_LENS_COVER_OPEN))) {
Expand Down
4 changes: 2 additions & 2 deletions mce-io.c
Expand Up @@ -520,7 +520,7 @@ static gboolean mce_io_mon_read_chunks(GIOChannel *source,
for( ; chunks_done < chunks_have ; chunk += iomon->chunk_size ) {
++chunks_done;

if( !iomon->nofity_cb(chunk, iomon->chunk_size) ) {
if( !iomon->nofity_cb(iomon, chunk, iomon->chunk_size) ) {
continue;
}

Expand Down Expand Up @@ -610,7 +610,7 @@ static gboolean mce_io_mon_read_string(GIOChannel *source,
if( !bytes_read || !str || !*str )
mce_log(LL_ERR, "Empty read from %s",iomon->path);
else
iomon->nofity_cb(str, bytes_read);
iomon->nofity_cb(iomon, str, bytes_read);

status = TRUE;

Expand Down
2 changes: 1 addition & 1 deletion mce-io.h
Expand Up @@ -74,7 +74,7 @@ typedef struct {
typedef struct mce_io_mon_t mce_io_mon_t;

/** Callback function type for I/O monitor input notifications */
typedef gboolean (*mce_io_mon_notify_cb)(gpointer data, gsize bytes_read);
typedef gboolean (*mce_io_mon_notify_cb)(mce_io_mon_t *iomon, gpointer data, gsize bytes_read);

/** Callback function type for I/O monitor delete notifications */
typedef void (*mce_io_mon_delete_cb)(mce_io_mon_t *iomon);
Expand Down
6 changes: 4 additions & 2 deletions modules/camera.c
Expand Up @@ -92,8 +92,9 @@ static void camera_active_state_iomon_delete_cb(mce_io_mon_t *iomon)
* @param bytes_read Unused
* @return Always returns FALSE to return remaining chunks (if any)
*/
static gboolean camera_active_state_iomon_input_cb(gpointer data, gsize bytes_read)
static gboolean camera_active_state_iomon_input_cb(mce_io_mon_t *iomon, gpointer data, gsize bytes_read)
{
(void)iomon;
(void)bytes_read;

if (!strncmp(data, MCE_CAMERA_ACTIVE, strlen(MCE_CAMERA_ACTIVE))) {
Expand All @@ -116,8 +117,9 @@ static gboolean camera_active_state_iomon_input_cb(gpointer data, gsize bytes_re
* @param bytes_read Unused
* @return Always returns FALSE to return remaining chunks (if any)
*/
static gboolean camera_popout_state_iomon_input_cb(gpointer data, gsize bytes_read)
static gboolean camera_popout_state_iomon_input_cb(mce_io_mon_t *iomon, gpointer data, gsize bytes_read)
{
(void)iomon;
(void)bytes_read;

/* Generate activity */
Expand Down

0 comments on commit a8c4d46

Please sign in to comment.