65 lines
1.5 KiB
C
65 lines
1.5 KiB
C
#ifndef KEYBOARD_PROTO_H__
|
|
#define KEYBOARD_PROTO_H__
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include <pb_decode.h>
|
|
#include <pb_encode.h>
|
|
|
|
#include "KeyBorad/proto/keyboard.pb.h"
|
|
|
|
#define KEYBOARD_PROTO_MAX_BODY_SIZE 64U
|
|
#define KEYBOARD_PROTO_MAX_FRAME_SIZE 128U
|
|
#define KEYBOARD_PROTO_FUNCTION_BITMAP_SIZE 29U
|
|
|
|
enum keyboard_proto_transport {
|
|
KEYBOARD_PROTO_TRANSPORT_CDC = 0,
|
|
KEYBOARD_PROTO_TRANSPORT_GATT,
|
|
};
|
|
|
|
typedef bool (*keyboard_proto_send_body_fn)(
|
|
const struct keyboard_cdc_CdcPacketBody *body,
|
|
void *user_data);
|
|
|
|
bool keyboard_proto_encode_body(
|
|
const struct keyboard_cdc_CdcPacketBody *body,
|
|
uint8_t *buffer,
|
|
size_t buffer_size,
|
|
size_t *encoded_size);
|
|
|
|
bool keyboard_proto_decode_body(
|
|
const uint8_t *buffer,
|
|
size_t buffer_size,
|
|
struct keyboard_cdc_CdcPacketBody *body);
|
|
|
|
bool keyboard_proto_encode_cdc_frame(
|
|
uint32_t packet_type,
|
|
const struct keyboard_cdc_CdcPacketBody *body,
|
|
uint8_t *buffer,
|
|
size_t buffer_size,
|
|
size_t *encoded_size);
|
|
|
|
bool keyboard_proto_try_take_cdc_frame(
|
|
uint8_t *buffer,
|
|
size_t *buffer_size,
|
|
struct keyboard_cdc_CdcFrame *frame);
|
|
|
|
bool keyboard_proto_build_function_key_event_body(
|
|
uint16_t usage,
|
|
bool pressed,
|
|
struct keyboard_cdc_CdcPacketBody *body);
|
|
|
|
bool keyboard_proto_build_led_state_body(
|
|
uint8_t led_mask,
|
|
struct keyboard_cdc_CdcPacketBody *body);
|
|
|
|
bool keyboard_proto_handle_host_body(
|
|
const struct keyboard_cdc_CdcPacketBody *body,
|
|
enum keyboard_proto_transport transport,
|
|
keyboard_proto_send_body_fn send_fn,
|
|
void *user_data);
|
|
|
|
#endif /* KEYBOARD_PROTO_H__ */
|