[Sugar-devel] Hacking onto the "appearing" and "hiding" of OSK
Paul Fox
pgf at laptop.org
Thu Jan 24 12:15:40 EST 2013
gonzalo wrote:
> Write does not know what is the ebook switch state, that logic is in the
> osk.
>
> Looking in the wiki and sugar code, I could not find information about how
> read the switch,
> but in ticket http://dev.laptop.org/ticket/12326 found this:
>
> If you do:
>
> evtest --query /dev/input/event4 EV_SW SW_TABLET_MODE; echo $?
>
>
> If the xo is in ebook mode returns 10, if not, returns 0.
>
> There are any official doc about the switches I am missing? There are a way
> to catch a event when the switch is activated, using dbus or something
> similar?
if you open the device and read it, you'll get a stream of "struct
input_event" structures (/usr/include/linux/input.h) representing
opening and closing of the SW_TABLET_MODE switch. here's a C code
snippet from olpc-switchd (part of powerd):
void ebook_event()
{
struct input_event ev[1];
if (read(ebk_fd, ev, sizeof(ev)) != sizeof(ev))
die("bad read from ebook switch");
dbg(3, "ebk: ev sec %d usec %d type %d code %d value %d",
ev->time.tv_sec, ev->time.tv_usec,
ev->type, ev->code, ev->value);
if (ev->type == EV_SW && ev->code == SW_TABLET_MODE) {
if (ev->value)
send_event("ebookclose", round_secs(ev), ebk_device);
else
send_event("ebookopen", round_secs(ev), ebk_device);
}
}
perhaps there's an evdev to dbus gateway of some sort, but i don't know
about it, if so.
the "evtest" commandline example, above, uses an ioctl on the input
device to determine current state. here's snippet from the evtest source:
(full source: git://anongit.freedesktop.org/evtest)
static int query_device(const char *device, const struct query_mode *query_mode>
{
int fd;
int r;
unsigned long state[NBITS(query_mode->max)];
fd = open(device, O_RDONLY);
if (fd < 0) {
perror("open");
return EXIT_FAILURE;
}
memset(state, 0, sizeof(state));
r = ioctl(fd, query_mode->rq, state);
close(fd);
if (r == -1) {
perror("ioctl");
return EXIT_FAILURE;
}
if (test_bit(keycode, state))
return 10; /* different from EXIT_FAILURE */
else
return 0;
}
paul
>
> Gonzalo
>
>
> On Thu, Jan 24, 2013 at 12:16 PM, Martin Langhoff <martin.langhoff at gmail.com
> > wrote:
>
> > On Thu, Jan 24, 2013 at 10:13 AM, Paul Fox <pgf at laptop.org> wrote:
> > > i believe sugar already has code to detect the two modes, since
> > > that's how it knows whether to present the OSK or not.
> >
> > Yep. Ajay, I think Write shows you the way :-)
> >
> >
> >
> >
> > m
> > --
> > martin.langhoff at gmail.com
> > martin at laptop.org -- Software Architect - OLPC
> > - ask interesting questions
> > - don't get distracted with shiny stuff - working code first
> > - http://wiki.laptop.org/go/User:Martinlanghoff
> >
=---------------------
paul fox, pgf at laptop.org
More information about the Sugar-devel
mailing list