|
From: <mla...@us...> - 2007-01-04 21:34:07
|
Revision: 244
http://svn.sourceforge.net/g15daemon/?rev=244&view=rev
Author: mlampard
Date: 2007-01-04 13:34:05 -0800 (Thu, 04 Jan 2007)
Log Message:
-----------
add remote keyhandler functionality for the macro utility
Modified Paths:
--------------
trunk/g15daemon-wip/g15daemon/g15daemon.h
trunk/g15daemon-wip/g15daemon/main.c
trunk/g15daemon-wip/libg15daemon_client/g15daemon_net.c
trunk/g15daemon-wip/plugins/g15_plugin_net.c
Modified: trunk/g15daemon-wip/g15daemon/g15daemon.h
===================================================================
--- trunk/g15daemon-wip/g15daemon/g15daemon.h 2007-01-04 21:33:00 UTC (rev 243)
+++ trunk/g15daemon-wip/g15daemon/g15daemon.h 2007-01-04 21:34:05 UTC (rev 244)
@@ -209,6 +209,7 @@
volatile unsigned long numclients;
configfile_t *config;
unsigned int kb_backlight_state; // master state
+ unsigned int remote_keyhandler_sock;
}g15daemon_s;
pthread_mutex_t lcdlist_mutex;
Modified: trunk/g15daemon-wip/g15daemon/main.c
===================================================================
--- trunk/g15daemon-wip/g15daemon/main.c 2007-01-04 21:33:00 UTC (rev 243)
+++ trunk/g15daemon-wip/g15daemon/main.c 2007-01-04 21:34:05 UTC (rev 244)
@@ -71,10 +71,15 @@
(*plugin_listener)((void*)newevent);
/* hack - keyboard events are always sent from the foreground even when they aren't
send keypress event to the OS keyboard_handler plugin */
- if(lcd->masterlist->keyboard_handler != NULL) {
+ if(lcd->masterlist->keyboard_handler != NULL && lcd->masterlist->remote_keyhandler_sock==0) {
int *(*keyboard_handler)(plugin_event_t *newevent) = (void*)lcd->masterlist->keyboard_handler;
(*keyboard_handler)((void*)newevent);
}
+ // if we have a remote keyhandler, send the key. FIXME: we should do this from the net plugin
+ if(lcd->masterlist->remote_keyhandler_sock!=0) {
+ if((send(lcd->masterlist->remote_keyhandler_sock,(void *)&newevent->value,sizeof(newevent->value),0))<0)
+ g15daemon_log(LOG_WARNING,"Error in send: %s\n",strerror(errno));
+ }
if(value & G15_KEY_LIGHT){ // the backlight key was pressed - maintain user-selected state
lcd->masterlist->kb_backlight_state++;
if(lcd->masterlist->kb_backlight_state>2)
@@ -229,7 +234,8 @@
if(displaying->state_changed){
pthread_mutex_lock(&g15lib_mutex);
setLCDContrast(displaying->contrast_state);
- setLEDs(displaying->mkey_state);
+ if(displaying->masterlist->remote_keyhandler_sock==0) // only allow mled control if the macro recorder isnt running
+ setLEDs(displaying->mkey_state);
if(masterlist->kb_backlight_state)
setLCDBrightness(displaying->backlight_state);
else
Modified: trunk/g15daemon-wip/libg15daemon_client/g15daemon_net.c
===================================================================
--- trunk/g15daemon-wip/libg15daemon_client/g15daemon_net.c 2007-01-04 21:33:00 UTC (rev 243)
+++ trunk/g15daemon-wip/libg15daemon_client/g15daemon_net.c 2007-01-04 21:34:05 UTC (rev 244)
@@ -182,52 +182,52 @@
case G15DAEMON_KEY_HANDLER:
if (value > G15_LED_MR)
value = G15_LED_MR;
- packet[0] = command | value;
+ packet[0] = (unsigned char)command | (unsigned char)value;
retval = send( sock, packet, 1, MSG_OOB );
break;
case G15DAEMON_CONTRAST:
if (value > G15_CONTRAST_HIGH)
value = G15_CONTRAST_HIGH;
- packet[0] = command | value;
+ packet[0] = (unsigned char)command | (unsigned char)value;
send( sock, packet, 1, MSG_OOB );
retval = g15_recv_oob_answer(sock);
break;
case G15DAEMON_BACKLIGHT:
if (value > G15_BRIGHTNESS_BRIGHT)
value = G15_BRIGHTNESS_BRIGHT;
- packet[0] = command | value;
+ packet[0] = (unsigned char)command | (unsigned char)value;
send( sock, packet, 1, MSG_OOB );
retval = g15_recv_oob_answer(sock);
break;
case G15DAEMON_KB_BACKLIGHT:
if (value > G15_BRIGHTNESS_BRIGHT)
value = G15_BRIGHTNESS_BRIGHT;
- packet[0] = command | value;
+ packet[0] = (unsigned char)command | (unsigned char)value;
retval = send( sock, packet, 1, MSG_OOB );
break;
case G15DAEMON_MKEYLEDS:
- packet[0] = command | value;
+ packet[0] = (unsigned char)command|(unsigned char)value;
retval = send( sock, packet, 1, MSG_OOB );
break;
case G15DAEMON_SWITCH_PRIORITIES:
- packet[0] = command;
+ packet[0] = (unsigned char)command;
retval = send( sock, packet, 1, MSG_OOB );
break;
case G15DAEMON_GET_KEYSTATE:{
retval = 0;
- packet[0] = command;
+ packet[0] = (unsigned char)command;
send( sock, packet, 1, MSG_OOB );
recv(sock, &retval, sizeof(retval),0);
break;
}
case G15DAEMON_IS_FOREGROUND:{
- packet[0] = command;
+ packet[0] = (unsigned char)command;
send( sock, packet, 1, MSG_OOB );
retval = g15_recv_oob_answer(sock) - 48;
break;
}
case G15DAEMON_IS_USER_SELECTED:{
- packet[0] = command;
+ packet[0] = (unsigned char)command;
send( sock, packet, 1, MSG_OOB );
retval = g15_recv_oob_answer(sock) - 48;
break;
Modified: trunk/g15daemon-wip/plugins/g15_plugin_net.c
===================================================================
--- trunk/g15daemon-wip/plugins/g15_plugin_net.c 2007-01-04 21:33:00 UTC (rev 243)
+++ trunk/g15daemon-wip/plugins/g15_plugin_net.c 2007-01-04 21:34:05 UTC (rev 244)
@@ -110,16 +110,16 @@
{ /* client wants to change the M-key backlights */
lcdnode->lcd->mkey_state = msgbuf[0]-0x20;
lcdnode->lcd->state_changed = 1;
- } /*else if (msgbuf[0] & CLIENT_CMD_KEY_HANDLER)
+ //if the client is the keyhandler, allow full, direct control over the mled status
+ if(lcdnode->lcd->masterlist->remote_keyhandler_sock==lcdnode->lcd->connection)
+ setLEDs(msgbuf[0]-0x20);
+ } else if (msgbuf[0] & CLIENT_CMD_KEY_HANDLER)
{
g15daemon_log(LOG_WARNING, "Client is taking over keystate");
- client_handles_keys=1;
- keyhandler = &lcdnode->lcd;
- keyhandler->connection = sock;
-
+ lcdnode->list->remote_keyhandler_sock = sock;
g15daemon_log(LOG_WARNING, "Client has taken over keystate");
- }*/
+ }
}
}
@@ -315,6 +315,8 @@
}
}
exitthread:
+ if(client_lcd->masterlist->remote_keyhandler_sock==client_sock)
+ client_lcd->masterlist->remote_keyhandler_sock=0;
close(client_sock);
free(tmpbuf);
g15daemon_lcdnode_remove(display);
@@ -402,7 +404,7 @@
switch (event->event)
{
case G15_EVENT_KEYPRESS:{
- if(lcd->connection) { /* server client */
+ if(lcd->connection && lcd->masterlist->remote_keyhandler_sock!=lcd->connection) { /* server client */
if((send(lcd->connection,(void *)&event->value,sizeof(event->value),0))<0)
g15daemon_log(LOG_WARNING,"Error in send: %s\n",strerror(errno));
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|