chuniio: Add OpeNITHM LED protocol support #26

Merged
Dniel97 merged 3 commits from d4nin3u/segatools:develop into develop 2024-08-06 21:35:52 +00:00
9 changed files with 45 additions and 10 deletions

View File

@ -139,9 +139,10 @@ void chuni_io_slider_start(chuni_io_slider_callback_t callback);
void chuni_io_slider_stop(void); void chuni_io_slider_stop(void);
/* Update the RGB lighting on the slider. A pointer to an array of 32 * 3 = 96 /* Update the RGB lighting on the slider. A pointer to an array of 32 * 3 = 96
bytes is supplied. The illuminated areas on the touch slider are some bytes is supplied, organized in BRG format.
combination of rectangular regions and dividing lines between these regions The first set of bytes is the right-most slider key, and from there the bytes
but the exact mapping of this lighting control buffer is still TBD. alternate between the dividers and the keys until the left-most key.
There are 31 illuminated sections in total.
Minimum API version: 0x0100 */ Minimum API version: 0x0100 */

View File

@ -63,6 +63,8 @@ void chuni_io_config_load(
cfg->controller_led_output_pipe = GetPrivateProfileIntW(L"led", L"controllerLedOutputPipe", 1, filename); cfg->controller_led_output_pipe = GetPrivateProfileIntW(L"led", L"controllerLedOutputPipe", 1, filename);
cfg->controller_led_output_serial = GetPrivateProfileIntW(L"led", L"controllerLedOutputSerial", 0, filename); cfg->controller_led_output_serial = GetPrivateProfileIntW(L"led", L"controllerLedOutputSerial", 0, filename);
cfg->controller_led_output_openithm = GetPrivateProfileIntW(L"led", L"controllerLedOutputOpeNITHM", 0, filename);
cfg->led_serial_baud = GetPrivateProfileIntW(L"led", L"serialBaud", 921600, filename); cfg->led_serial_baud = GetPrivateProfileIntW(L"led", L"serialBaud", 921600, filename);
GetPrivateProfileStringW( GetPrivateProfileStringW(

View File

@ -18,6 +18,8 @@ struct chuni_io_config {
bool controller_led_output_pipe; bool controller_led_output_pipe;
bool controller_led_output_serial; bool controller_led_output_serial;
bool controller_led_output_openithm;
// 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;

View File

@ -127,7 +127,11 @@ void led_output_update(uint8_t board, const byte* rgb)
if (config->controller_led_output_serial) if (config->controller_led_output_serial)
{ {
if (config->controller_led_output_openithm){
led_serial_update_openithm(rgb);
} else {
led_serial_update(escaped_data); led_serial_update(escaped_data);
} }
} }
}
} }

View File

@ -4,6 +4,7 @@ chuniio_lib = static_library(
include_directories : inc, include_directories : inc,
implicit_include_directories : false, implicit_include_directories : false,
c_pch : '../precompiled.h', c_pch : '../precompiled.h',
sources : [ sources : [
'chu2to3.c', 'chu2to3.c',
'chu2to3.h', 'chu2to3.h',

View File

@ -97,3 +97,27 @@ void led_serial_update(struct _chuni_led_data_buf_t* data)
ReleaseMutex(serial_write_mutex); ReleaseMutex(serial_write_mutex);
} }
void led_serial_update_openithm(const byte* rgb)
{
Dniel97 marked this conversation as resolved
Review

Please remove the nw line here and adjust the comments to either use

/*
*/

or align them properly

Please remove the nw line here and adjust the comments to either use ``` /* */ ``` or align them properly
if (serial_port != INVALID_HANDLE_VALUE)
{
char led_buffer[100];
DWORD bytes_to_write; // No of bytes to write into the port
DWORD bytes_written = 0; // No of bytes written to the port
bytes_to_write = sizeof(led_buffer);
BOOL status;
led_buffer[0] = 0xAA;
led_buffer[1] = 0xAA;
memcpy(led_buffer+2, rgb, sizeof(uint8_t) * 96);
led_buffer[98] = 0xDD;
led_buffer[99] = 0xDD;
status = WriteFile(serial_port, // Handle to the Serial port
led_buffer, // Data to be written to the port
bytes_to_write, // No of bytes to write
&bytes_written, // Bytes written
NULL);
}
}

View File

@ -13,3 +13,4 @@
HRESULT led_serial_init(wchar_t led_com[12], DWORD baud); HRESULT led_serial_init(wchar_t led_com[12], DWORD baud);
void led_serial_update(struct _chuni_led_data_buf_t* data); void led_serial_update(struct _chuni_led_data_buf_t* data);
void led_serial_update_openithm(const byte* rgb);

View File

@ -82,10 +82,12 @@ cabLedOutputSerial=0
controllerLedOutputPipe=1 controllerLedOutputPipe=1
; Output slider LED data to the serial port ; Output slider LED data to the serial port
controllerLedOutputSerial=0 controllerLedOutputSerial=0
; Use the OpeNITHM protocol for serial LED output
controllerLedOutputOpeNITHM=0

OpeNITHM

lol

OpeNITHM lol
; Serial port to send data to if using serial output. Default is COM5. ; Serial port to send data to if using serial output. Default is COM5.
;serialPort=COM5 ;serialPort=COM5
; Baud rate for serial data ; Baud rate for serial data (set to 115200 if using OpeNITHM)
;serialBaud=921600 ;serialBaud=921600
; Data output a sequence of bytes, with JVS-like framing. ; Data output a sequence of bytes, with JVS-like framing.

View File

@ -108,10 +108,12 @@ cabLedOutputSerial=0
controllerLedOutputPipe=1 controllerLedOutputPipe=1
; Output slider LED data to the serial port ; Output slider LED data to the serial port
controllerLedOutputSerial=0 controllerLedOutputSerial=0
; Use the OpeNITHM protocol for serial LED output
controllerLedOutputOpeNITHM=0
Dniel97 marked this conversation as resolved Outdated

see above

see above
; Serial port to send data to if using serial output. Default is COM5. ; Serial port to send data to if using serial output. Default is COM5.
;serialPort=COM5 ;serialPort=COM5
; Baud rate for serial data ; Baud rate for serial data (set to 115200 if using OpeNITHM)
Dniel97 marked this conversation as resolved Outdated

see above

see above
;serialBaud=921600 ;serialBaud=921600
; Data output a sequence of bytes, with JVS-like framing. ; Data output a sequence of bytes, with JVS-like framing.
@ -202,7 +204,3 @@ ir=0x20
; ... etc ... ; ... etc ...
;cell31=0x53 ;cell31=0x53
;cell32=0x53 ;cell32=0x53
; Enable slider LED serial output. This follows OpeNITHM Serial LED Protocol.
; eg. COM5
;ledport=