View Single Post
Old 11-13-2013, 09:41 AM   #14
sergeyvl12
ebook fan
sergeyvl12 ought to be getting tired of karma fortunes by now.sergeyvl12 ought to be getting tired of karma fortunes by now.sergeyvl12 ought to be getting tired of karma fortunes by now.sergeyvl12 ought to be getting tired of karma fortunes by now.sergeyvl12 ought to be getting tired of karma fortunes by now.sergeyvl12 ought to be getting tired of karma fortunes by now.sergeyvl12 ought to be getting tired of karma fortunes by now.sergeyvl12 ought to be getting tired of karma fortunes by now.sergeyvl12 ought to be getting tired of karma fortunes by now.sergeyvl12 ought to be getting tired of karma fortunes by now.sergeyvl12 ought to be getting tired of karma fortunes by now.
 
Posts: 735
Karma: 2528718
Join Date: Dec 2010
Device: PocketBook 301+, Kindle 3 Wi-Fi, Onyx Boox A62, Kindle Touch
Code:
lipc-wait-event -m com.lab126.powerd goingToScreenSaver,outOfScreenSaver
doesn't work for me because I turn off the screen saver during my program execution:

Code:
# prevent screensaver activation
lipc-set-prop com.lab126.powerd preventScreenSaver 1
...
# restore screensaver
lipc-set-prop com.lab126.powerd preventScreenSaver 0
exploring kernel sources I've found yoshi_button.c.

So, I can get power button release event using netlink socket:

code sample
Spoiler:

Code:
#include <sys/socket.h>
#include <linux/netlink.h>

#define MAX_PAYLOAD 1024  /* maximum payload size*/

struct sockaddr_nl src_addr, dest_addr;
struct nlmsghdr *nlh = NULL;
struct msghdr msg;
struct iovec iov;
int sock_fd;

int main()
{
   /* Changed LJ article example to use NETLINK_KOBJECT_UEVENT */
   sock_fd=socket(PF_NETLINK, SOCK_RAW, NETLINK_KOBJECT_UEVENT);

   memset(&src_addr, 0, sizeof(src_addr));
   src_addr.nl_family = AF_NETLINK;
   src_addr.nl_pid = getpid(); // self pid
   src_addr.nl_groups = 1;     // interested in group 1<<0

   bind(sock_fd, (struct sockaddr*)&src_addr, sizeof(src_addr));

   memset(&dest_addr, 0, sizeof(dest_addr));

   nlh = (struct nlmsghdr *)malloc(NLMSG_SPACE(MAX_PAYLOAD));
   memset(nlh, 0, NLMSG_SPACE(MAX_PAYLOAD));

   iov.iov_base = (void *)nlh;
   iov.iov_len = NLMSG_SPACE(MAX_PAYLOAD);
   msg.msg_name = (void *)&dest_addr;
   msg.msg_namelen = sizeof(dest_addr);
   msg.msg_iov = &iov;
   msg.msg_iovlen = 1;

   printf("Waiting for message from kernel\n");

   /* Read message from kernel */
   recvmsg(sock_fd, &msg, 0);

   printf("Received message payload: %s\n",  NLMSG_DATA(nlh));

   close(sock_fd);

   return 0;
}


Message for power button is: "virtual/misc/yoshibutton"

Probably it will be useful for sombody else. It works at least for KT and KPW-1. KPW-2 seems to use another approach (through event-N).

Now I need to get the sleepcover event also. But the main problem that I have no sleep cover on my KT.

Please, I need to know, does sleep cover use the same approach?

Last edited by sergeyvl12; 11-13-2013 at 09:43 AM.
sergeyvl12 is offline   Reply With Quote