#ifndef KEYBOARD_PROTO_H__ #define KEYBOARD_PROTO_H__ #include #include #include #include #include #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__ */