mirror of
https://github.com/stupidcomputer/jsfw.git
synced 2024-12-26 21:42:23 -06:00
83 lines
2.0 KiB
C
83 lines
2.0 KiB
C
// vi: set ft=c
|
|
#ifndef NET_H
|
|
#define NET_H
|
|
#include <linux/input.h>
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
|
|
typedef enum {
|
|
DeviceInfo = 1,
|
|
DeviceReport = 2,
|
|
DeviceDestroy = 3,
|
|
ControllerState = 4,
|
|
} MessageCode;
|
|
|
|
// TODO: replace counts by uint16_t
|
|
typedef struct {
|
|
MessageCode code;
|
|
|
|
uint8_t abs_count;
|
|
uint8_t rel_count;
|
|
uint8_t key_count;
|
|
|
|
uint8_t abs_id[ABS_CNT];
|
|
uint32_t abs_min[ABS_CNT];
|
|
uint32_t abs_max[ABS_CNT];
|
|
uint32_t abs_fuzz[ABS_CNT];
|
|
uint32_t abs_flat[ABS_CNT];
|
|
uint32_t abs_res[ABS_CNT];
|
|
|
|
uint8_t rel_id[REL_CNT];
|
|
|
|
uint8_t key_id[KEY_CNT];
|
|
} MessageDeviceInfo;
|
|
#define MSS_DEVICE_INFO(abs, rel, key) (3 + abs * 21 + rel * 1 + key * 1)
|
|
// MSS -> Message Serialized Size:
|
|
// Size of the data of the message when serialized (no alignment / padding)
|
|
|
|
typedef struct {
|
|
MessageCode code;
|
|
|
|
uint8_t abs_count;
|
|
uint8_t rel_count;
|
|
uint8_t key_count;
|
|
|
|
uint32_t abs[ABS_CNT];
|
|
uint32_t rel[REL_CNT];
|
|
uint8_t key[KEY_CNT];
|
|
} MessageDeviceReport;
|
|
#define MSS_DEVICE_REPORT(abs, rel, key) (3 + abs * 4 + rel * 4 + key * 1)
|
|
|
|
typedef struct {
|
|
MessageCode code;
|
|
} MessageDeviceDestroy;
|
|
#define MSS_DEVICE_DESTROY 0
|
|
|
|
typedef struct {
|
|
MessageCode code;
|
|
|
|
uint8_t led[3];
|
|
uint8_t small_rumble;
|
|
uint8_t big_rumble;
|
|
uint8_t flash_on;
|
|
uint8_t flash_off;
|
|
} MessageControllerState;
|
|
#define MSS_CONTROLLER_STATE 7
|
|
|
|
typedef union {
|
|
MessageCode code;
|
|
MessageDeviceInfo device_info;
|
|
MessageDeviceReport device_report;
|
|
MessageDeviceDestroy device_destroy;
|
|
MessageControllerState controller_state;
|
|
} Message;
|
|
|
|
// Read a message from a buffer with a length, message goes into dst, returns -1 if a messsage couldn't be
|
|
// read
|
|
int msg_deserialize(const uint8_t *buf, size_t len, Message *dst);
|
|
// Write a message to a buffer with a length, return -1 if the message couldn't be written (buffer not big
|
|
// enough). Returns the length of the serialized message if succeeded.
|
|
int msg_serialize(uint8_t *buf, size_t len, Message *msg);
|
|
|
|
#endif
|