diff --git a/src/mensactrl.c b/src/mensactrl.c index 0291807a9097ca34dea04d6fde4f82f521076415..546f54bdf7331e907a692bd46ff3cf02a1ee3146 100644 --- a/src/mensactrl.c +++ b/src/mensactrl.c @@ -72,14 +72,19 @@ static void blit_area(struct mensa_fb *mensafb, const int col, const int row, pos += COLS_PER_MODULE; } - pos = pos + vpos*(mensafb->vmodules*COLS_PER_MODULE*LINES_PER_MODULE); + /* Invert order */ + pos = (LINES_PER_MODULE * COLS_PER_MODULE * mensafb->hmodules - 1) - pos; + + /* Add in row offset */ + pos = pos + vpos*(mensafb->hmodules*COLS_PER_MODULE*LINES_PER_MODULE); + if (mensafb->inputfb[c + r * mensafb->x_res] == 0) { /* clear bit */ - mensafb->fbmem[pos] &= ~(1<<(mensafb->vmodules - vmpos)); + mensafb->fbmem[pos] &= ~(1<<(mensafb->vmodules - 1 - vmpos)); } else { /* set bit */ - mensafb->fbmem[pos] |= (1<<(mensafb->vmodules - vmpos)); + mensafb->fbmem[pos] |= (1<<(mensafb->vmodules - 1 - vmpos)); } } } @@ -165,7 +170,7 @@ static struct mensa_fb *setup_fb(const char *devname, int hmodules, int vmodules exit(1); } for (i = 0; i < mensafb->size ; i++) - mensafb->fbmem[i] = (i / (mensafb->x_res * LINES_PER_MODULE))<<5; + mensafb->fbmem[i] = ((6 + i / (mensafb->x_res * LINES_PER_MODULE)) % 7)<<5; mensafb->hmodules = hmodules; mensafb->vmodules = vmodules; @@ -176,29 +181,24 @@ static struct mensa_fb *setup_fb(const char *devname, int hmodules, int vmodules int main(int argc, char *argv[]) { struct mensa_fb *mensafb; void *context = zmq_ctx_new (); - void *subscriber = zmq_socket (context, ZMQ_SUB); + void *responder = zmq_socket (context, ZMQ_RSP); int rc; if (argc != 2) exit(1); - rc = zmq_connect (subscriber, "tcp://10.0.0.1:5556"); - if (rc < 0) - perror("zmq_connect"); - - rc = zmq_setsockopt (subscriber, ZMQ_SUBSCRIBE, - NULL, 0); + rc = zmq_bind (responder, "tcp://*:5556"); if (rc < 0) - perror("zmq_connect"); + perror("zmq_bind"); mensafb = setup_fb(argv[1], 12, 5); while (1) { struct pixel pix; - zmq_recv(subscriber, &pix, sizeof(pix), 0); - printf("(%u, %u): bright=%02x\n", pix.x, pix.y, pix.bright); + zmq_recv(responder, &pix, sizeof(pix), 0); setPixel(mensafb, pix.x, pix.y, pix.bright); encodeToFb(mensafb); + zmq_send(responder, &pix, sizeof(pix), 0); } return 0;