1
0
mirror of https://gitea.tendokyu.moe/Dniel97/segatools.git synced 2024-11-23 21:10:57 +01:00

crash is fixed, new touch board dip sw error

This commit is contained in:
Hay1tsme 2022-01-08 22:57:34 -05:00
parent 6c7114f6a2
commit 315a272a03

View File

@ -28,7 +28,6 @@ static HRESULT touch1_handle_irp_locked(struct irp *irp);
static HRESULT touch_req_dispatch(const struct touch_req *req);
static HRESULT touch_frame_decode(struct touch_req *dest, struct iobuf *iobuf, int side);
static HRESULT touch_frame_encode(struct iobuf *dest, const void *ptr, size_t nbytes);
static uint8_t calc_checksum(const void *ptr, size_t nbytes);
static HRESULT touch_handle_get_sync_board_ver(const struct touch_req *req);
@ -244,10 +243,10 @@ static HRESULT touch_handle_get_sync_board_ver(const struct touch_req *req)
if (req->side == 0) {
hr = touch_frame_encode(&touch0_uart.readable, &resp, sizeof(resp));
hr = iobuf_write(&touch0_uart.readable, &resp, sizeof(resp));
}
else {
hr = touch_frame_encode(&touch1_uart.readable, &resp, sizeof(resp));
hr = iobuf_write(&touch1_uart.readable, &resp, sizeof(resp));
}
return hr;
}
@ -300,10 +299,10 @@ static HRESULT touch_handle_startup(const struct touch_req *req)
resp.checksum = calc_checksum(&resp, sizeof(resp));
if (req->side == 0) {
hr = touch_frame_encode(&touch0_uart.readable, &resp, sizeof(resp));
hr = iobuf_write(&touch0_uart.readable, &resp, sizeof(resp));
}
else {
hr = touch_frame_encode(&touch1_uart.readable, &resp, sizeof(resp));
hr = iobuf_write(&touch1_uart.readable, &resp, sizeof(resp));
}
return hr;
}
@ -325,10 +324,10 @@ static HRESULT touch_handle_get_unit_board_ver(const struct touch_req *req)
resp.checksum = calc_checksum(&resp, sizeof(resp));
if (req->side == 0) {
hr = touch_frame_encode(&touch0_uart.readable, &resp, sizeof(resp));
hr = iobuf_write(&touch0_uart.readable, &resp, sizeof(resp));
}
else {
hr = touch_frame_encode(&touch1_uart.readable, &resp, sizeof(resp));
hr = iobuf_write(&touch1_uart.readable, &resp, sizeof(resp));
}
return hr;
@ -347,10 +346,10 @@ static HRESULT touch_handle_mystery1(const struct touch_req *req)
resp.checksum = calc_checksum(&resp, sizeof(resp));
if (req->side == 0) {
hr = touch_frame_encode(&touch0_uart.readable, &resp, sizeof(resp));
hr = iobuf_write(&touch0_uart.readable, &resp, sizeof(resp));
}
else {
hr = touch_frame_encode(&touch1_uart.readable, &resp, sizeof(resp));
hr = iobuf_write(&touch1_uart.readable, &resp, sizeof(resp));
}
return hr;
}
@ -368,10 +367,10 @@ static HRESULT touch_handle_mystery2(const struct touch_req *req)
resp.checksum = calc_checksum(&resp, sizeof(resp));
if (req->side == 0) {
hr = touch_frame_encode(&touch0_uart.readable, &resp, sizeof(resp));
hr = iobuf_write(&touch0_uart.readable, &resp, sizeof(resp));
}
else {
hr = touch_frame_encode(&touch1_uart.readable, &resp, sizeof(resp));
hr = iobuf_write(&touch1_uart.readable, &resp, sizeof(resp));
}
return hr;
}
@ -397,12 +396,12 @@ static HRESULT touch_handle_start_auto_scan(const struct touch_req *req)
if (req->side == 0) {
resp.frame.count = input_frame_count_0++;
hr = touch_frame_encode(&touch0_uart.readable, &resp, sizeof(resp));
hr = iobuf_write(&touch0_uart.readable, &resp, sizeof(resp));
touch0_auto = true;
}
else {
resp.frame.count = input_frame_count_1++;
hr = touch_frame_encode(&touch1_uart.readable, &resp, sizeof(resp));
hr = iobuf_write(&touch1_uart.readable, &resp, sizeof(resp));
touch1_auto = true;
}
@ -418,13 +417,8 @@ static void touch_res_auto_scan(const uint8_t *state)
uint8_t data2[9] = { 0x0d, 0x03, 0x02, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00 };
frame0.cmd = 0x81;
if (input_frame_count_0 == 0x7f) {
frame0.count = 0x7f;
input_frame_count_0 = 0;
}
else {
frame0.count = input_frame_count_0++;
}
frame0.count = input_frame_count_0++;
input_frame_count_0 %= 0x7f;
// for now return no data
memcpy(frame0.data1, data1, sizeof(data1));
memcpy(frame0.data2, data2, sizeof(data2));
@ -434,14 +428,14 @@ static void touch_res_auto_scan(const uint8_t *state)
if (touch0_auto) {
//dprintf("Wacca touch: Touch0 auto frame #%2hx sent\n", frame0.count);
EnterCriticalSection(&touch0_lock);
touch_frame_encode(&touch0_uart.readable, &frame0, sizeof(frame0));
iobuf_write(&touch0_uart.readable, &frame0, sizeof(frame0));
LeaveCriticalSection(&touch0_lock);
}
if (touch1_auto) {
//dprintf("Wacca touch: Touch1 auto frame #%2hx sent\n", frame0.count);
EnterCriticalSection(&touch1_lock);
touch_frame_encode(&touch1_uart.readable, &frame0, sizeof(frame0));
iobuf_write(&touch1_uart.readable, &frame0, sizeof(frame0));
LeaveCriticalSection(&touch1_lock);
}
}
@ -464,20 +458,6 @@ static HRESULT touch_frame_decode(struct touch_req *dest, struct iobuf *iobuf, i
return S_OK;
}
/* Encode and send the response. */
static HRESULT touch_frame_encode(struct iobuf *dest, const void *ptr, size_t nbytes)
{
const uint8_t *src;
src = ptr;
for (size_t i = 0; i < nbytes; i++) {
dest->bytes[dest->pos++] = src[i];
}
return S_OK;
}
/* The last byte of every response is a checksum.
* This checksum is calculated by bitwise XORing
* every byte in the response, then dropping the MSB.