Refactor and reformat

This commit is contained in:
beerpsi 2023-12-31 14:37:45 +07:00
parent 33fa1c362a
commit 59ce0565e5
17 changed files with 225 additions and 239 deletions

View File

@ -53,10 +53,7 @@ HRESULT aime_io_nfc_poll(uint8_t unit_no);
Minimum API version: 0x0100 Minimum API version: 0x0100
*/ */
HRESULT aime_io_nfc_get_aime_id( HRESULT aime_io_nfc_get_aime_id(uint8_t unit_no, uint8_t *luid, size_t luid_size);
uint8_t unit_no,
uint8_t *luid,
size_t luid_size);
/* /*
Attempt to read out a FeliCa card ID ("IDm"). The following are examples Attempt to read out a FeliCa card ID ("IDm"). The following are examples

View File

@ -10,8 +10,8 @@ add_library(chuniio_brokenithm SHARED src/chuniio.c
src/chuniio.h src/chuniio.h
src/config.c src/config.c
src/config.h src/config.h
src/socket.h src/servers/socket.h
src/struct.h src/ipc_memory_info.h
src/servers/android.c src/servers/android.c
src/servers/android.h src/servers/android.h
src/servers/common.h src/servers/common.h

View File

@ -8,7 +8,7 @@
#include "arch.h" #include "arch.h"
#include "config.h" #include "config.h"
#include "struct.h" #include "ipc_memory_info.h"
#define MEM_FILE_NAME "Local\\BROKENITHM_SHARED_BUFFER" #define MEM_FILE_NAME "Local\\BROKENITHM_SHARED_BUFFER"

View File

@ -70,7 +70,6 @@ void __declspec(dllexport) chuni_io_jvs_poll(uint8_t *opbtn, uint8_t *beams);
void __declspec(dllexport) chuni_io_jvs_read_coin_counter(uint16_t *total); void __declspec(dllexport) chuni_io_jvs_read_coin_counter(uint16_t *total);
/* Initialize touch slider emulation. This function will be called before any /* Initialize touch slider emulation. This function will be called before any
other chuni_io_slider_*() function calls. other chuni_io_slider_*() function calls.
@ -155,11 +154,13 @@ HRESULT __declspec(dllexport) chuni_io_led_init(void);
/* Update the RGB LEDs. rgb is a pointer to an array of up to 63 * 3 = 189 bytes. /* Update the RGB LEDs. rgb is a pointer to an array of up to 63 * 3 = 189 bytes.
Chunithm uses two chains/boards with WS2811 protocol (each logical led corresponds to 3 physical leds). Chunithm uses two chains/boards with WS2811 protocol (each logical led corresponds to
board 0 is on the left side and board 1 on the right side of the cab 3 physical leds). board 0 is on the left side and board 1 on the right side of the
cab
left side has 5*10 rgb values for the billboard, followed by 3 rgb values for the air tower left side has 5*10 rgb values for the billboard, followed by 3 rgb values for the air
right side has 6*10 rgb values for the billboard, followed by 3 rgb values for the air tower tower right side has 6*10 rgb values for the billboard, followed by 3 rgb values for
the air tower
Each rgb value is comprised of 3 bytes in R,G,B order Each rgb value is comprised of 3 bytes in R,G,B order
@ -169,4 +170,4 @@ HRESULT __declspec(dllexport) chuni_io_led_init(void);
void __declspec(dllexport) chuni_io_led_set_colors(uint8_t board, uint8_t *rgb); void __declspec(dllexport) chuni_io_led_set_colors(uint8_t board, uint8_t *rgb);
#endif //CHUNIIO_BROKENITHM_CHUNIIO_H #endif // CHUNIIO_BROKENITHM_CHUNIIO_H

View File

@ -8,24 +8,13 @@
#include "config.h" #include "config.h"
static const int chuni_io_default_cells[] = { static const int chuni_io_default_cells[] = {
'L', 'L', 'L', 'L', 'L', 'L', 'L', 'L', 'K', 'K', 'K', 'K', 'J', 'J', 'J', 'J', 'H', 'H', 'H', 'H',
'K', 'K', 'K', 'K', 'G', 'G', 'G', 'G', 'F', 'F', 'F', 'F', 'D', 'D', 'D', 'D', 'S', 'S', 'S', 'S',
'J', 'J', 'J', 'J',
'H', 'H', 'H', 'H',
'G', 'G', 'G', 'G',
'F', 'F', 'F', 'F',
'D', 'D', 'D', 'D',
'S', 'S', 'S', 'S',
}; };
static const int chuni_io_default_ir[] = { static const int chuni_io_default_ir[] = {'4', '5', '6', '7', '8', '9'};
'4', '5', '6', '7', '8', '9'
};
void chuni_io_config_load( void chuni_io_config_load(struct chuni_io_config *cfg, const wchar_t *filename) {
struct chuni_io_config *cfg,
const wchar_t *filename)
{
wchar_t key[16]; wchar_t key[16];
int i; int i;
wchar_t port_input[6]; wchar_t port_input[6];
@ -39,39 +28,32 @@ void chuni_io_config_load(
cfg->vk_coin = GetPrivateProfileIntW(L"io3", L"coin", '3', filename); cfg->vk_coin = GetPrivateProfileIntW(L"io3", L"coin", '3', filename);
cfg->vk_ir_emu = GetPrivateProfileIntW(L"io3", L"ir", VK_SPACE, filename); cfg->vk_ir_emu = GetPrivateProfileIntW(L"io3", L"ir", VK_SPACE, filename);
for (i = 0 ; i < 6 ; i++) { for (i = 0; i < 6; i++) {
swprintf_s(key, _countof(key), L"ir%i", i + 1); swprintf_s(key, _countof(key), L"ir%i", i + 1);
cfg->vk_ir[i] = GetPrivateProfileIntW( cfg->vk_ir[i] =
L"ir", GetPrivateProfileIntW(L"ir", key, chuni_io_default_ir[i], filename);
key,
chuni_io_default_ir[i],
filename);
} }
for (i = 0 ; i < 32 ; i++) { for (i = 0; i < 32; i++) {
swprintf_s(key, _countof(key), L"cell%i", i + 1); swprintf_s(key, _countof(key), L"cell%i", i + 1);
cfg->vk_cell[i] = GetPrivateProfileIntW( cfg->vk_cell[i] =
L"slider", GetPrivateProfileIntW(L"slider", key, chuni_io_default_cells[i], filename);
key,
chuni_io_default_cells[i],
filename);
} }
cfg->led_output_pipe = GetPrivateProfileIntW(L"led", L"cabLedOutputPipe", 1, filename); cfg->led_output_pipe =
cfg->led_output_serial = GetPrivateProfileIntW(L"led", L"cabLedOutputSerial", 0, filename); GetPrivateProfileIntW(L"led", L"cabLedOutputPipe", 1, filename);
cfg->led_output_serial =
cfg->slider_led_output_pipe = GetPrivateProfileIntW(L"led", L"controllerLedOutputPipe", 1, filename); GetPrivateProfileIntW(L"led", L"cabLedOutputSerial", 0, filename);
cfg->slider_led_output_serial = GetPrivateProfileIntW(L"led", L"controllerLedOutputSerial", 0, filename);
cfg->led_serial_baud = GetPrivateProfileIntW(L"led", L"serialBaud", 921600, filename); cfg->slider_led_output_pipe =
GetPrivateProfileIntW(L"led", L"controllerLedOutputPipe", 1, filename);
cfg->slider_led_output_serial =
GetPrivateProfileIntW(L"led", L"controllerLedOutputSerial", 0, filename);
GetPrivateProfileStringW( cfg->led_serial_baud =
L"led", GetPrivateProfileIntW(L"led", L"serialBaud", 921600, filename);
L"serialPort",
L"COM5", GetPrivateProfileStringW(L"led", L"serialPort", L"COM5", port_input, 6, filename);
port_input,
6,
filename);
// Sanitize the output path. If it's a serial COM port, it needs to be prefixed // Sanitize the output path. If it's a serial COM port, it needs to be prefixed
// with `\\.\`. // with `\\.\`.

View File

@ -4,9 +4,9 @@
extern "C" { extern "C" {
#endif #endif
#include <stdbool.h>
#include <stddef.h> #include <stddef.h>
#include <stdint.h> #include <stdint.h>
#include <stdbool.h>
struct chuni_io_config { struct chuni_io_config {
uint8_t vk_test; uint8_t vk_test;
@ -26,12 +26,9 @@ struct chuni_io_config {
// The name of a COM port to output LED data on, in serial mode // The name of a COM port to output LED data on, in serial mode
wchar_t led_serial_port[12]; wchar_t led_serial_port[12];
int32_t led_serial_baud; int32_t led_serial_baud;
}; };
void chuni_io_config_load( void chuni_io_config_load(struct chuni_io_config *cfg, const wchar_t *filename);
struct chuni_io_config *cfg,
const wchar_t *filename);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -0,0 +1,27 @@
//
// Created by beerpsi on 12/29/2023.
//
#ifndef CHUNIIO_BROKENITHM_STRUCT_H
#define CHUNIIO_BROKENITHM_STRUCT_H
#include <stdint.h>
;
#pragma pack(push)
#pragma pack(1)
struct IPCMemoryInfo {
uint8_t airIoStatus[6];
uint8_t sliderIoStatus[32];
uint8_t ledRgbData[32 * 3];
uint8_t testBtn;
uint8_t serviceBtn;
uint8_t coinInsertion;
uint8_t cardRead;
uint8_t remoteCardRead;
uint8_t remoteCardType;
uint8_t remoteCardId[10];
};
#pragma pack(pop)
#endif // CHUNIIO_BROKENITHM_STRUCT_H

View File

@ -13,7 +13,7 @@
#include <stdint.h> #include <stdint.h>
#include "servers/common.h" #include "servers/common.h"
#include "socket.h" #include "servers/socket.h"
bool tcp_mode = true; bool tcp_mode = true;
uint16_t server_port = 52468; uint16_t server_port = 52468;
@ -27,17 +27,17 @@ typedef struct {
SOCKET sock; SOCKET sock;
char remote_address[40]; char remote_address[40];
uint16_t remote_port; uint16_t remote_port;
atomic_bool exit_flag; atomic_bool exit_flag;
atomic_bool connected; atomic_bool connected;
uint32_t last_input_packet_id; uint32_t last_input_packet_id;
uint8_t last_card_id[10]; uint8_t last_card_id[10];
bool has_previous_led_status; bool has_previous_led_status;
uint8_t previous_led_status[3 * 32]; uint8_t previous_led_status[3 * 32];
uint8_t led_skip_count; uint8_t led_skip_count;
struct IPCMemoryInfo *memory; struct IPCMemoryInfo *memory;
} android_thread_ctx; } android_thread_ctx;
@ -119,7 +119,7 @@ unsigned int __stdcall led_broadcast_thread_proc(void *v) {
android_thread_ctx *ctx = v; android_thread_ctx *ctx = v;
const SOCKET sock = ctx->sock; const SOCKET sock = ctx->sock;
const struct IPCMemoryInfo* memory = ctx->memory; const struct IPCMemoryInfo *memory = ctx->memory;
struct sockaddr_in addr = {}; struct sockaddr_in addr = {};
make_ipv4_address(&addr, ctx->remote_address, ctx->remote_port); make_ipv4_address(&addr, ctx->remote_address, ctx->remote_port);
@ -155,7 +155,8 @@ unsigned int __stdcall led_broadcast_thread_proc(void *v) {
memcpy(send_buffer + 4, current_led_status, 3 * 32); memcpy(send_buffer + 4, current_led_status, 3 * 32);
if (socket_send_to(sock, &addr, send_buffer, 100) < 0) { if (socket_send_to(sock, &addr, send_buffer, 100) < 0) {
print_err("[Android:ERROR] Cannot send packet: error %lu\n", WSAGetLastError()); print_err("[Android:ERROR] Cannot send packet: error %lu\n",
WSAGetLastError());
if (tcp_mode) { if (tcp_mode) {
if (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN) { if (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN) {
@ -229,7 +230,8 @@ unsigned int __stdcall input_recv_thread_proc(void *v) {
continue; continue;
} }
print_err("[Android: INFO] Device disconnected (could not read data, errno " print_err("[Android: INFO] Device disconnected (could not read "
"data, errno "
"%d, os error %ld)\n", "%d, os error %ld)\n",
errno, error); errno, error);
atomic_store(&ctx->connected, false); atomic_store(&ctx->connected, false);
@ -241,7 +243,7 @@ unsigned int __stdcall input_recv_thread_proc(void *v) {
} }
real_len = buffer[0]; real_len = buffer[0];
packet_len = real_len + 1; // 1 for the packet length packet_len = real_len + 1; // 1 for the packet length
while (recv_len < packet_len) { while (recv_len < packet_len) {
const int read = const int read =
@ -255,7 +257,8 @@ unsigned int __stdcall input_recv_thread_proc(void *v) {
continue; continue;
} }
print_err("[Android: INFO] Device disconnected (could not read data, errno " print_err("[Android: INFO] Device disconnected (could not read "
"data, errno "
"%d, os error %ld)\n", "%d, os error %ld)\n",
errno, error); errno, error);
atomic_store(&ctx->connected, false); atomic_store(&ctx->connected, false);
@ -322,8 +325,8 @@ unsigned int __stdcall input_recv_thread_proc(void *v) {
} }
if (strlen(ctx->remote_address)) { if (strlen(ctx->remote_address)) {
print_err("[Android: INFO] Device %s:%d disconnected.\n", ctx->remote_address, print_err("[Android: INFO] Device %s:%d disconnected.\n",
ctx->remote_port); ctx->remote_address, ctx->remote_port);
memset(ctx->remote_address, 0, 40); memset(ctx->remote_address, 0, 40);
} }

View File

@ -8,8 +8,59 @@
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#include "struct.h" #include "ipc_memory_info.h"
HRESULT android_init_server(struct IPCMemoryInfo* memory); ;
#pragma pack(push)
#pragma pack(1)
struct PacketInput {
uint8_t packetSize;
uint8_t packetName[3];
uint32_t packetId;
uint8_t airIoStatus[6];
uint8_t sliderIoStatus[32];
uint8_t testBtn;
uint8_t serviceBtn;
};
struct PacketInputNoAir {
uint8_t packetSize;
uint8_t packetName[3];
uint32_t packetId;
uint8_t sliderIoStatus[32];
uint8_t testBtn;
uint8_t serviceBtn;
};
struct PacketConnect {
uint8_t packetSize;
uint8_t packetName[3];
uint8_t addrType;
uint16_t port;
union {
struct {
uint8_t addr[4];
uint8_t padding[12];
} addr4;
uint8_t addr6[16];
} addr;
};
struct PacketCard {
uint8_t packetSize;
uint8_t packetName[3];
uint8_t remoteCardRead;
uint8_t remoteCardType;
uint8_t remoteCardId[10];
};
struct PacketPing {
uint8_t packetSize;
uint8_t packetName[3];
uint64_t remotePingTime;
};
#pragma pack(pop)
HRESULT android_init_server(struct IPCMemoryInfo *memory);
#endif // CHUNIIO_BROKENITHM_ANDROID_H #endif // CHUNIIO_BROKENITHM_ANDROID_H

View File

@ -8,7 +8,7 @@
#include "util/dprintf.h" #include "util/dprintf.h"
void print_err(const char* fmt, ...) { void print_err(const char *fmt, ...) {
const time_t lt = time(NULL); const time_t lt = time(NULL);
const struct tm *local = localtime(&lt); const struct tm *local = localtime(&lt);
char tmpbuf[32]; char tmpbuf[32];
@ -31,20 +31,20 @@ void dump_bytes(const void *ptr, const size_t nbytes, const bool hex_string) {
dprintf("\t--- Empty ---\n"); dprintf("\t--- Empty ---\n");
} }
const uint8_t* bytes = ptr; const uint8_t *bytes = ptr;
if (hex_string) { if (hex_string) {
for (i = 0 ; i < nbytes ; i++) { for (i = 0; i < nbytes; i++) {
dprintf("%02x", bytes[i]); dprintf("%02x", bytes[i]);
} }
dprintf("\n"); dprintf("\n");
return; return;
} }
for (i = 0 ; i < nbytes ; i += 16) { for (i = 0; i < nbytes; i += 16) {
dprintf(" %08x:", (int) i); dprintf(" %08x:", (int)i);
for (j = 0 ; i + j < nbytes && j < 16 ; j++) { for (j = 0; i + j < nbytes && j < 16; j++) {
dprintf(" %02x", bytes[i + j]); dprintf(" %02x", bytes[i + j]);
} }
@ -55,7 +55,7 @@ void dump_bytes(const void *ptr, const size_t nbytes, const bool hex_string) {
dprintf(" "); dprintf(" ");
for (j = 0 ; i + j < nbytes && j < 16 ; j++) { for (j = 0; i + j < nbytes && j < 16; j++) {
uint8_t c = bytes[i + j]; uint8_t c = bytes[i + j];
if (c < 0x20 || c >= 0x7F) { if (c < 0x20 || c >= 0x7F) {

View File

@ -9,13 +9,22 @@
#include <stdint.h> #include <stdint.h>
enum FunctionButton { enum FunctionButton {
INVALID, INVALID __attribute__((unused)),
FUNCTION_COIN, FUNCTION_COIN,
FUNCTION_CARD, FUNCTION_CARD,
}; };
void print_err(const char* fmt, ...); #pragma pack(push)
#pragma pack(1)
struct PacketFunction {
uint8_t packetSize;
uint8_t packetName[3];
uint8_t funcBtn;
};
#pragma pack(pop)
void dump_bytes(const void *ptr, const size_t nbytes, const bool hex_string); void print_err(const char *fmt, ...);
void dump_bytes(const void *ptr, size_t nbytes, bool hex_string);
#endif // CHUNIIO_BROKENITHM_COMMON_H #endif // CHUNIIO_BROKENITHM_COMMON_H

View File

@ -6,9 +6,9 @@
#include "arch.h" #include "arch.h"
#ifdef ENV32BIT #ifdef ENV32BIT
#include <libimobiledevice/libimobiledevice.h>
#include <process.h> #include <process.h>
#include <stdatomic.h> #include <stdatomic.h>
#include <libimobiledevice/libimobiledevice.h>
#include "servers/common.h" #include "servers/common.h"
@ -23,11 +23,11 @@ typedef struct {
uint8_t previous_led_status[3 * 32]; uint8_t previous_led_status[3 * 32];
uint8_t led_skip_count; uint8_t led_skip_count;
struct IPCMemoryInfo* memory; struct IPCMemoryInfo *memory;
} ios_thread_ctx; } ios_thread_ctx;
unsigned int __stdcall ios_led_broadcast_thread_proc(void *v) { unsigned int __stdcall ios_led_broadcast_thread_proc(void *v) {
ios_thread_ctx* ctx = v; ios_thread_ctx *ctx = v;
char send_buffer[4 + 3 * 32]; char send_buffer[4 + 3 * 32];
send_buffer[0] = 99; send_buffer[0] = 99;
@ -56,7 +56,8 @@ unsigned int __stdcall ios_led_broadcast_thread_proc(void *v) {
int status; int status;
uint32_t sent; uint32_t sent;
if ((status = idevice_connection_send(ctx->connection, send_buffer, 100, &sent))) { if ((status = idevice_connection_send(ctx->connection, send_buffer, 100,
&sent))) {
print_err("[iOS:ERROR] Cannot send LED packet: error %d\n", status); print_err("[iOS:ERROR] Cannot send LED packet: error %d\n", status);
} }
@ -70,7 +71,7 @@ unsigned int __stdcall ios_led_broadcast_thread_proc(void *v) {
} }
unsigned int __stdcall ios_input_recv_thread_proc(void *v) { unsigned int __stdcall ios_input_recv_thread_proc(void *v) {
ios_thread_ctx* ctx = v; ios_thread_ctx *ctx = v;
bool air_enabled = true; bool air_enabled = true;
@ -79,7 +80,8 @@ unsigned int __stdcall ios_input_recv_thread_proc(void *v) {
int status; int status;
uint32_t read; uint32_t read;
if ((status = idevice_connection_receive_timeout(ctx->connection, buffer, 4, &read, 5))) { if ((status = idevice_connection_receive_timeout(ctx->connection, buffer, 4,
&read, 5))) {
if (status == IDEVICE_E_TIMEOUT) { if (status == IDEVICE_E_TIMEOUT) {
continue; continue;
} }
@ -92,29 +94,35 @@ unsigned int __stdcall ios_input_recv_thread_proc(void *v) {
int len = (unsigned char)buffer[0]; int len = (unsigned char)buffer[0];
if ((status = idevice_connection_receive_timeout(ctx->connection, buffer + 4, len - 3, &read, 5))) { if ((status = idevice_connection_receive_timeout(ctx->connection, buffer + 4,
len - 3, &read, 5))) {
print_err("[iOS:ERROR] Could not read data from device: %d\n", status); print_err("[iOS:ERROR] Could not read data from device: %d\n", status);
atomic_store(&ctx->exit_flag, true); atomic_store(&ctx->exit_flag, true);
break; break;
} }
if (len >= sizeof(struct iOSPacketInput) && memcmp(buffer + 1, "INP", 3) == 0) { if (len >= sizeof(struct PacketInput) && memcmp(buffer + 1, "INP", 3) == 0) {
struct iOSPacketInput* pkt = (struct iOSPacketInput*)buffer; struct PacketInput *pkt = (struct PacketInput *)buffer;
if (air_enabled) { if (air_enabled) {
memcpy(ctx->memory->airIoStatus, pkt->airIoStatus, sizeof(pkt->airIoStatus)); memcpy(ctx->memory->airIoStatus, pkt->airIoStatus,
sizeof(pkt->airIoStatus));
} }
memcpy(ctx->memory->sliderIoStatus, pkt->sliderIoStatus, sizeof(pkt->sliderIoStatus)); memcpy(ctx->memory->sliderIoStatus, pkt->sliderIoStatus,
sizeof(pkt->sliderIoStatus));
ctx->memory->testBtn = pkt->testBtn; ctx->memory->testBtn = pkt->testBtn;
ctx->memory->serviceBtn = pkt->serviceBtn; ctx->memory->serviceBtn = pkt->serviceBtn;
} else if (len >= 4 && memcmp(buffer + 1, "AIR", 3) == 0) { } else if (len >= sizeof(struct PacketAirStatus) && memcmp(buffer + 1, "AIR", 3) == 0) {
air_enabled = buffer[3] != 0; struct PacketAirStatus *pkt = (struct PacketAirStatus *)buffer;
print_err("[iOS: INFO] Air input %s", air_enabled ? "enabled" : "disabled"); air_enabled = pkt->airEnabled != 0;
} else if (len >= sizeof(struct PacketFunction) && memcmp(buffer + 1, "FNC", 3) == 0) {
const struct PacketFunction *pkt = (struct PacketFunction *) buffer; print_err("[iOS: INFO] Air input %s\n", air_enabled ? "enabled" : "disabled");
} else if (len >= sizeof(struct PacketFunction) &&
memcmp(buffer + 1, "FNC", 3) == 0) {
const struct PacketFunction *pkt = (struct PacketFunction *)buffer;
switch (pkt->funcBtn) { switch (pkt->funcBtn) {
case FUNCTION_COIN: case FUNCTION_COIN:
@ -129,7 +137,7 @@ unsigned int __stdcall ios_input_recv_thread_proc(void *v) {
} }
} }
print_err("[iOS: INFO] Device disconnected."); print_err("[iOS: INFO] Device disconnected.\n");
idevice_disconnect(ctx->connection); idevice_disconnect(ctx->connection);
ctx->connection = NULL; ctx->connection = NULL;
@ -140,8 +148,8 @@ unsigned int __stdcall ios_input_recv_thread_proc(void *v) {
return 0; return 0;
} }
unsigned int __stdcall connect_device(void* v) { unsigned int __stdcall connect_device(void *v) {
ios_thread_ctx* ctx = v; ios_thread_ctx *ctx = v;
int status; int status;
if ((status = idevice_new(&ctx->device, ctx->remote_udid))) { if ((status = idevice_new(&ctx->device, ctx->remote_udid))) {
@ -196,14 +204,14 @@ unsigned int __stdcall connect_device(void* v) {
return 0; return 0;
} }
void device_event_callback(const idevice_event_t* event, void* user_data) { void device_event_callback(const idevice_event_t *event, void *user_data) {
struct IPCMemoryInfo* memory = user_data; struct IPCMemoryInfo *memory = user_data;
switch (event->event) { switch (event->event) {
case IDEVICE_DEVICE_ADD: case IDEVICE_DEVICE_ADD:
print_err("[iOS: INFO] iDevice added, udid: %s\n", event->udid); print_err("[iOS: INFO] iDevice added, udid: %s\n", event->udid);
ios_thread_ctx* args = malloc(sizeof(ios_thread_ctx)); ios_thread_ctx *args = malloc(sizeof(ios_thread_ctx));
memcpy(args->remote_udid, event->udid, strlen(event->udid)); memcpy(args->remote_udid, event->udid, strlen(event->udid));
args->device = NULL; args->device = NULL;
args->connection = NULL; args->connection = NULL;

View File

@ -8,8 +8,27 @@
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <windows.h> #include <windows.h>
#include "struct.h" #include "ipc_memory_info.h"
HRESULT ios_init_server(struct IPCMemoryInfo* memory); ;
#pragma pack(push)
#pragma pack(1)
struct PacketInput {
uint8_t packetSize;
uint8_t packetName[3];
uint8_t airIoStatus[6];
uint8_t sliderIoStatus[32];
uint8_t testBtn;
uint8_t serviceBtn;
};
struct PacketAirStatus {
uint8_t packetSize;
uint8_t packetName[3];
uint8_t airEnabled;
};
#pragma pack(pop)
HRESULT ios_init_server(struct IPCMemoryInfo *memory);
#endif // CHUNIIO_BROKENITHM_IOS_H #endif // CHUNIIO_BROKENITHM_IOS_H

View File

@ -9,36 +9,36 @@
#ifndef WINVER #ifndef WINVER
#define WINVER 0x0501 #define WINVER 0x0501
#endif // WINVER #endif // WINVER
#include <ws2tcpip.h>
#include <winsock2.h> #include <winsock2.h>
#include <ws2tcpip.h>
#else #else
//translate windows functions to linux functions // translate windows functions to linux functions
#include <unistd.h>
#include <string.h> #include <string.h>
#define SOCKET int #include <unistd.h>
#define INVALID_SOCKET (SOCKET)(~0) #define SOCKET int
#define SOCKET_ERROR (-1) #define INVALID_SOCKET (SOCKET)(~0)
#define closesocket close #define SOCKET_ERROR (-1)
#define SOCKADDR_IN sockaddr_in #define closesocket close
#define ZeroMemory(d,l) memset((d), 0, (l)) #define SOCKADDR_IN sockaddr_in
#define ioctlsocket ioctl #define ZeroMemory(d, l) memset((d), 0, (l))
#define ioctlsocket ioctl
#ifndef SA_INTERRUPT #ifndef SA_INTERRUPT
#define SA_INTERRUPT 0 //ignore this setting #define SA_INTERRUPT 0 // ignore this setting
#endif #endif
#define SD_BOTH SHUT_RDWR #define SD_BOTH SHUT_RDWR
#ifndef __hpux #ifndef __hpux
#include <sys/select.h> #include <sys/select.h>
#endif /* __hpux */ #endif /* __hpux */
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <signal.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <netdb.h>
#include <signal.h>
#include <unistd.h> #include <unistd.h>
typedef sockaddr *LPSOCKADDR; typedef sockaddr *LPSOCKADDR;
#endif // _WIN32 #endif // _WIN32
#endif //CHUNIIO_BROKENITHM_SOCKET_H #endif // CHUNIIO_BROKENITHM_SOCKET_H

View File

@ -1,100 +0,0 @@
//
// Created by beerpsi on 12/29/2023.
//
#ifndef CHUNIIO_BROKENITHM_STRUCT_H
#define CHUNIIO_BROKENITHM_STRUCT_H
#include <stdint.h>
;
#pragma pack(push)
#pragma pack(1)
struct IPCMemoryInfo
{
uint8_t airIoStatus[6];
uint8_t sliderIoStatus[32];
uint8_t ledRgbData[32 * 3];
uint8_t testBtn;
uint8_t serviceBtn;
uint8_t coinInsertion;
uint8_t cardRead;
uint8_t remoteCardRead;
uint8_t remoteCardType;
uint8_t remoteCardId[10];
};
struct iOSPacketInput {
uint8_t packetSize;
uint8_t packetName[3];
uint8_t airIoStatus[6];
uint8_t sliderIoStatus[32];
uint8_t testBtn;
uint8_t serviceBtn;
};
struct PacketInput
{
uint8_t packetSize;
uint8_t packetName[3];
uint32_t packetId;
uint8_t airIoStatus[6];
uint8_t sliderIoStatus[32];
uint8_t testBtn;
uint8_t serviceBtn;
};
struct PacketInputNoAir
{
uint8_t packetSize;
uint8_t packetName[3];
uint32_t packetId;
uint8_t sliderIoStatus[32];
uint8_t testBtn;
uint8_t serviceBtn;
};
struct PacketFunction
{
uint8_t packetSize;
uint8_t packetName[3];
uint8_t funcBtn;
};
struct PacketConnect
{
uint8_t packetSize;
uint8_t packetName[3];
uint8_t addrType;
uint16_t port;
union
{
struct
{
uint8_t addr[4];
uint8_t padding[12];
} addr4;
uint8_t addr6[16];
} addr;
};
struct PacketCard
{
uint8_t packetSize;
uint8_t packetName[3];
uint8_t remoteCardRead;
uint8_t remoteCardType;
uint8_t remoteCardId[10];
};
struct PacketPing
{
uint8_t packetSize;
uint8_t packetName[3];
uint64_t remotePingTime;
};
#pragma pack(pop)
#endif //CHUNIIO_BROKENITHM_STRUCT_H

View File

@ -14,8 +14,7 @@ static CRITICAL_SECTION dbg_buf_lock;
static char dbg_buf[16384]; static char dbg_buf[16384];
static size_t dbg_buf_pos; static size_t dbg_buf_pos;
void dprintf(const char *fmt, ...) void dprintf(const char *fmt, ...) {
{
va_list ap; va_list ap;
va_start(ap, fmt); va_start(ap, fmt);
@ -23,8 +22,7 @@ void dprintf(const char *fmt, ...)
va_end(ap); va_end(ap);
} }
void dprintfv(const char *fmt, va_list ap) void dprintfv(const char *fmt, va_list ap) {
{
long init; long init;
/* Static constructors in C are difficult to do in a way that works under /* Static constructors in C are difficult to do in a way that works under
@ -45,12 +43,8 @@ void dprintfv(const char *fmt, va_list ap)
EnterCriticalSection(&dbg_buf_lock); EnterCriticalSection(&dbg_buf_lock);
dbg_buf_pos += vsnprintf_s( dbg_buf_pos += vsnprintf_s(dbg_buf + dbg_buf_pos, sizeof(dbg_buf) - dbg_buf_pos,
dbg_buf + dbg_buf_pos, sizeof(dbg_buf) - dbg_buf_pos - 1, fmt, ap);
sizeof(dbg_buf) - dbg_buf_pos,
sizeof(dbg_buf) - dbg_buf_pos - 1,
fmt,
ap);
if (dbg_buf_pos + 1 > sizeof(dbg_buf)) { if (dbg_buf_pos + 1 > sizeof(dbg_buf)) {
abort(); abort();
@ -65,8 +59,7 @@ void dprintfv(const char *fmt, va_list ap)
LeaveCriticalSection(&dbg_buf_lock); LeaveCriticalSection(&dbg_buf_lock);
} }
void dwprintf(const wchar_t *fmt, ...) void dwprintf(const wchar_t *fmt, ...) {
{
va_list ap; va_list ap;
va_start(ap, fmt); va_start(ap, fmt);
@ -74,8 +67,7 @@ void dwprintf(const wchar_t *fmt, ...)
va_end(ap); va_end(ap);
} }
void dwprintfv(const wchar_t *fmt, va_list ap) void dwprintfv(const wchar_t *fmt, va_list ap) {
{
wchar_t msg[512]; wchar_t msg[512];
_vsnwprintf_s(msg, _countof(msg), _countof(msg) - 1, fmt, ap); _vsnwprintf_s(msg, _countof(msg), _countof(msg) - 1, fmt, ap);

View File

@ -8,7 +8,7 @@ extern "C" {
#include <stddef.h> #include <stddef.h>
#ifdef __GNUC__ #ifdef __GNUC__
#define DPRINTF_CHK __attribute__(( format(printf, 1, 2) )) #define DPRINTF_CHK __attribute__((format(printf, 1, 2)))
#else #else
#define DPRINTF_CHK #define DPRINTF_CHK
#endif #endif