Skip to content
Snippets Groups Projects
Commit bb5f92cc authored by Drahflow's avatar Drahflow
Browse files

Multipart server

parent 2e83ffbe
No related branches found
No related tags found
No related merge requests found
#define CMD_PIXEL 0
struct pixel {
int x, y;
uint8_t bright;
};
struct packet {
uint8_t cmd;
union {
struct pixel pixel;
};
};
......@@ -58,35 +58,35 @@ static void blit_area(struct mensa_fb *mensafb, const int col, const int row,
return;
for (r = row; r < row + height; r++) {
for (c = col; c < col + width; c++) {
/* Calculate module and position inside the module */
vmpos = r/(LINES_PER_MODULE*ROWS_PER_LINE);
vpos = r%(LINES_PER_MODULE*ROWS_PER_LINE);
hmpos = c/(COLS_PER_MODULE);
hpos = c%(COLS_PER_MODULE);
for (c = col; c < col + width; c++) {
/* Calculate module and position inside the module */
vmpos = r/(LINES_PER_MODULE*ROWS_PER_LINE);
vpos = r%(LINES_PER_MODULE*ROWS_PER_LINE);
hmpos = c/(COLS_PER_MODULE);
hpos = c%(COLS_PER_MODULE);
pos = hpos + hmpos*COLS_PER_MODULE*LINES_PER_MODULE;
pos = hpos + hmpos*COLS_PER_MODULE*LINES_PER_MODULE;
if (vpos >= ROWS_PER_LINE) {
vpos -= ROWS_PER_LINE;
pos += COLS_PER_MODULE;
}
if (vpos >= ROWS_PER_LINE) {
vpos -= ROWS_PER_LINE;
pos += COLS_PER_MODULE;
}
/* Invert order */
pos = (LINES_PER_MODULE * COLS_PER_MODULE * mensafb->hmodules - 1) - pos;
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);
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 - 1 - vmpos));
} else {
/* set bit */
mensafb->fbmem[pos] |= (1<<(mensafb->vmodules - 1 - vmpos));
}
}
/* clear bit */
mensafb->fbmem[pos] &= ~(1<<(mensafb->vmodules - 1 - vmpos));
} else {
/* set bit */
mensafb->fbmem[pos] |= (1<<(mensafb->vmodules - 1 - vmpos));
}
}
}
}
......@@ -95,6 +95,7 @@ void encodeToFb(struct mensa_fb *mensafb)
{
blit_area(mensafb, 0, 0, mensafb->x_res, mensafb->y_res);
}
// int pix, row, cols, idx, fbidx, i, ledrow;
// uint16_t pattern;
//
......@@ -178,6 +179,17 @@ static struct mensa_fb *setup_fb(const char *devname, int hmodules, int vmodules
return mensafb;
}
void handlePixel(struct mensa_fb *mensafb, struct pixel *pix) {
setPixel(mensafb, pix->x, pix->y, pix->bright);
blit_area(mensafb, pix->x, pix->y, 1, 1);
}
void handleCommand(struct mensa_fb *mensafb, struct packet *p) {
switch(p->cmd) {
case CMD_PIXEL: handlePixel(mensafb, &p->pixel); break;
}
}
int main(int argc, char *argv[]) {
struct mensa_fb *mensafb;
void *context = zmq_ctx_new ();
......@@ -194,11 +206,24 @@ int main(int argc, char *argv[]) {
mensafb = setup_fb(argv[1], 12, 5);
while (1) {
struct pixel pix;
zmq_recv(responder, &pix, sizeof(pix), 0);
setPixel(mensafb, pix.x, pix.y, pix.bright);
zmq_send(responder, &pix, sizeof(pix), 0);
encodeToFb(mensafb);
int64_t more;
size_t more_size = sizeof(more);
do {
zmq_msg_t message;
zmq_msg_init (&message);
zmq_msg_recv (&message, responder, 0);
if(zmq_msg_size(&message)) {
handleCommand(mensafb, (struct packet *)zmq_msg_data(&message));
}
zmq_getsockopt (responder, ZMQ_RCVMORE, &more, &more_size);
zmq_msg_close (&message);
} while(more);
zmq_send(responder, NULL, 0, 0);
}
return 0;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment