forked from Hay1tsme/segatools
51 lines
935 B
C
51 lines
935 B
C
#pragma once
|
|
|
|
#include <windows.h>
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#include "hook/iobuf.h"
|
|
|
|
struct sg_header {
|
|
uint8_t frame_len;
|
|
uint8_t addr;
|
|
uint8_t seq_no;
|
|
uint8_t cmd;
|
|
};
|
|
|
|
struct sg_req_header {
|
|
struct sg_header hdr;
|
|
uint8_t payload_len;
|
|
};
|
|
|
|
struct sg_res_header {
|
|
struct sg_header hdr;
|
|
uint8_t status;
|
|
uint8_t payload_len;
|
|
};
|
|
|
|
/* struct to save the version string with its length
|
|
to fix NUL terminator issues */
|
|
struct version_info {
|
|
const char *version;
|
|
uint8_t length;
|
|
};
|
|
|
|
typedef HRESULT (*sg_dispatch_fn_t)(
|
|
void *ctx,
|
|
const void *req,
|
|
void *res);
|
|
|
|
void sg_req_transact(
|
|
struct iobuf *res_frame,
|
|
const uint8_t *req_bytes,
|
|
size_t req_nbytes,
|
|
sg_dispatch_fn_t dispatch,
|
|
void *ctx);
|
|
|
|
void sg_res_init(
|
|
struct sg_res_header *res,
|
|
const struct sg_req_header *req,
|
|
size_t payload_len);
|