Extract bit operations to buffer_util.h
Move util functions to a reusable separate header.
This commit is contained in:
parent
b1d2c2c640
commit
cb3cf801c8
2 changed files with 29 additions and 22 deletions
18
app/src/buffer_util.h
Normal file
18
app/src/buffer_util.h
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#ifndef BUFFER_UTIL_H
|
||||||
|
#define BUFFER_UTIL_H
|
||||||
|
|
||||||
|
#include <SDL2/SDL_stdinc.h>
|
||||||
|
|
||||||
|
static inline void buffer_write16be(Uint8 *buf, Uint16 value) {
|
||||||
|
buf[0] = value >> 8;
|
||||||
|
buf[1] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void buffer_write32be(Uint8 *buf, Uint32 value) {
|
||||||
|
buf[0] = value >> 24;
|
||||||
|
buf[1] = value >> 16;
|
||||||
|
buf[2] = value >> 8;
|
||||||
|
buf[3] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -3,26 +3,15 @@
|
||||||
#include <SDL2/SDL_stdinc.h>
|
#include <SDL2/SDL_stdinc.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "buffer_util.h"
|
||||||
#include "lock_util.h"
|
#include "lock_util.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
static inline void write16(Uint8 *buf, Uint16 value) {
|
|
||||||
buf[0] = value >> 8;
|
|
||||||
buf[1] = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void write32(Uint8 *buf, Uint32 value) {
|
|
||||||
buf[0] = value >> 24;
|
|
||||||
buf[1] = value >> 16;
|
|
||||||
buf[2] = value >> 8;
|
|
||||||
buf[3] = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void write_position(Uint8 *buf, const struct position *position) {
|
static void write_position(Uint8 *buf, const struct position *position) {
|
||||||
write16(&buf[0], position->point.x);
|
buffer_write16be(&buf[0], position->point.x);
|
||||||
write16(&buf[2], position->point.y);
|
buffer_write16be(&buf[2], position->point.y);
|
||||||
write16(&buf[4], position->screen_size.width);
|
buffer_write16be(&buf[4], position->screen_size.width);
|
||||||
write16(&buf[6], position->screen_size.height);
|
buffer_write16be(&buf[6], position->screen_size.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
int control_event_serialize(const struct control_event *event, unsigned char *buf) {
|
int control_event_serialize(const struct control_event *event, unsigned char *buf) {
|
||||||
|
@ -30,8 +19,8 @@ int control_event_serialize(const struct control_event *event, unsigned char *bu
|
||||||
switch (event->type) {
|
switch (event->type) {
|
||||||
case CONTROL_EVENT_TYPE_KEYCODE:
|
case CONTROL_EVENT_TYPE_KEYCODE:
|
||||||
buf[1] = event->keycode_event.action;
|
buf[1] = event->keycode_event.action;
|
||||||
write32(&buf[2], event->keycode_event.keycode);
|
buffer_write32be(&buf[2], event->keycode_event.keycode);
|
||||||
write32(&buf[6], event->keycode_event.metastate);
|
buffer_write32be(&buf[6], event->keycode_event.metastate);
|
||||||
return 10;
|
return 10;
|
||||||
case CONTROL_EVENT_TYPE_TEXT: {
|
case CONTROL_EVENT_TYPE_TEXT: {
|
||||||
// write length (1 byte) + date (non nul-terminated)
|
// write length (1 byte) + date (non nul-terminated)
|
||||||
|
@ -40,19 +29,19 @@ int control_event_serialize(const struct control_event *event, unsigned char *bu
|
||||||
// injecting a text takes time, so limit the text length
|
// injecting a text takes time, so limit the text length
|
||||||
len = TEXT_MAX_LENGTH;
|
len = TEXT_MAX_LENGTH;
|
||||||
}
|
}
|
||||||
write16(&buf[1], (Uint16) len);
|
buffer_write16be(&buf[1], (Uint16) len);
|
||||||
memcpy(&buf[3], event->text_event.text, len);
|
memcpy(&buf[3], event->text_event.text, len);
|
||||||
return 3 + len;
|
return 3 + len;
|
||||||
}
|
}
|
||||||
case CONTROL_EVENT_TYPE_MOUSE:
|
case CONTROL_EVENT_TYPE_MOUSE:
|
||||||
buf[1] = event->mouse_event.action;
|
buf[1] = event->mouse_event.action;
|
||||||
write32(&buf[2], event->mouse_event.buttons);
|
buffer_write32be(&buf[2], event->mouse_event.buttons);
|
||||||
write_position(&buf[6], &event->mouse_event.position);
|
write_position(&buf[6], &event->mouse_event.position);
|
||||||
return 14;
|
return 14;
|
||||||
case CONTROL_EVENT_TYPE_SCROLL:
|
case CONTROL_EVENT_TYPE_SCROLL:
|
||||||
write_position(&buf[1], &event->scroll_event.position);
|
write_position(&buf[1], &event->scroll_event.position);
|
||||||
write32(&buf[9], (Uint32) event->scroll_event.hscroll);
|
buffer_write32be(&buf[9], (Uint32) event->scroll_event.hscroll);
|
||||||
write32(&buf[13], (Uint32) event->scroll_event.vscroll);
|
buffer_write32be(&buf[13], (Uint32) event->scroll_event.vscroll);
|
||||||
return 17;
|
return 17;
|
||||||
case CONTROL_EVENT_TYPE_COMMAND:
|
case CONTROL_EVENT_TYPE_COMMAND:
|
||||||
buf[1] = event->command_event.action;
|
buf[1] = event->command_event.action;
|
||||||
|
|
Loading…
Reference in a new issue