aboutsummaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorAlex Auvolat <alex@adnab.me>2015-03-11 16:22:40 +0100
committerAlex Auvolat <alex@adnab.me>2015-03-11 16:22:40 +0100
commit9b9ef5a2c0ec8e66c7da24c4229d89a90a10e914 (patch)
tree471cb88f003eb58ce84342f2e7ab7effda04ce2d /src/lib
parenta7ff74cdf2835625282491242ede57b05ceaa782 (diff)
downloadkogata-9b9ef5a2c0ec8e66c7da24c4229d89a90a10e914.tar.gz
kogata-9b9ef5a2c0ec8e66c7da24c4229d89a90a10e914.zip
Bugfixing in progress. Strange bug: wait_on adds to waiters but later not in waiters.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/include/gip.h3
-rw-r--r--src/lib/libkogata/gip.c4
-rw-r--r--src/lib/libkogata/mainloop.c4
3 files changed, 10 insertions, 1 deletions
diff --git a/src/lib/include/gip.h b/src/lib/include/gip.h
index c2167c4..9c66091 100644
--- a/src/lib/include/gip.h
+++ b/src/lib/include/gip.h
@@ -16,7 +16,8 @@ typedef struct {
noarg_gip_callback_t
reset, initiate, ok, failure,
enable_features, disable_features,
- query_mode, set_mode, switch_buffer;
+ query_mode, set_mode, switch_buffer,
+ key_down, key_up;
void (*buffer_info)(gip_handler_t *s, gip_msg_header *m, gip_buffer_info_msg *i);
void (*mode_info)(gip_handler_t *s, gip_msg_header *m, gip_mode_info_msg *i);
void (*buffer_damage)(gip_handler_t *s, gip_msg_header *m, gip_buffer_damage_msg *i);
diff --git a/src/lib/libkogata/gip.c b/src/lib/libkogata/gip.c
index 7fa1cca..852cc05 100644
--- a/src/lib/libkogata/gip.c
+++ b/src/lib/libkogata/gip.c
@@ -167,6 +167,10 @@ void giph_msg_header(mainloop_fd_t *fd) {
mainloop_expect(fd, &h->mode_info_msg_buf, sizeof(gip_mode_info_msg), giph_mode_info);
} else if (code == GIPN_BUFFER_DAMAGE) {
mainloop_expect(fd, &h->buffer_damage_msg_buf, sizeof(gip_buffer_damage_msg), giph_buffer_damage);
+ } else if (code == GIPN_KEY_DOWN) {
+ use_cb = h->cb->key_down;
+ } else if (code == GIPN_KEY_UP) {
+ use_cb = h->cb->key_up;
} else {
use_cb = h->cb->unknown_msg;
}
diff --git a/src/lib/libkogata/mainloop.c b/src/lib/libkogata/mainloop.c
index d8890e7..e7fdfa4 100644
--- a/src/lib/libkogata/mainloop.c
+++ b/src/lib/libkogata/mainloop.c
@@ -88,12 +88,14 @@ void mainloop_run() {
}
// ---- Do the select
+ dbg_printf("(mainloop) begin select\n");
bool ok = select(sel_arg, nfds, -1);
if (!ok) {
dbg_printf("(mainloop) Failed to select.\n");
free(sel_arg);
return;
}
+ dbg_printf("(mainloop) end select\n");
{ // Parse result
int i = 0;
@@ -105,6 +107,7 @@ void mainloop_run() {
fd->rd_buf_filled +=
read(fd->fd, 0, fd->rd_buf_expect_size - fd->rd_buf_filled, fd->rd_buf + fd->rd_buf_filled);
if (fd->rd_buf_filled == fd->rd_buf_expect_size) {
+ dbg_printf("(mainloop) finish read %d\n", fd->rd_buf_expect_size);
fd->rd_buf_filled = 0;
ASSERT(fd->rd_on_full != 0);
fd->rd_on_full(fd);
@@ -116,6 +119,7 @@ void mainloop_run() {
fd->wr_bufs[0].written += write(fd->fd, 0, remain_size, write_ptr);
if (fd->wr_bufs[0].written == fd->wr_bufs[0].size) {
+ dbg_printf("(mainloop) finish write %d\n", fd->wr_bufs[0].size);
if (fd->wr_bufs[0].must_free) free(fd->wr_bufs[0].buf);
for (int i = 1; i < MAINLOOP_MAX_WR_BUFS; i++) {
fd->wr_bufs[i-1] = fd->wr_bufs[i];