mirror of
https://github.com/libretro/RetroArch
synced 2024-12-26 21:29:08 +00:00
Analog button and keyboard tester. (#16390)
Added analog button indication for those buttons that may have use for it - primarily L2/R2, but support was added for all buttons where at least one controller is known to support it. Added also core option to hide mismatching inputs where analog value is not sent (like keyboard hotkeys assigned to retropad buttons). Analog button inputs are not set up for remote transmission, only for local test. Analog axes have now also dynamic coloring. Added a keyboard tester screen which includes a standard 102-key PC keyboard + extra blocks for all RETROK_ values present in the code. Screen adapted from DOSBox-Pure onscreen keyboard with permission. Keyboard button A+B switches between the two screens. Keyboard inputs are not set up for remote transmission, only for local test. Core option added to select start screen. Other small improvements: core reset will take new option values, input driver applies received values more carefully.
This commit is contained in:
parent
8741e7b9f0
commit
28189a04a4
@ -8,7 +8,7 @@
|
||||
* - Allow changing IP address and port in runtime
|
||||
* - Input recording / Combos
|
||||
* - Enable test input loading from menu
|
||||
* - Visualization of keyboard and aux inputs (gyro, accelero, light)
|
||||
* - Visualization of aux inputs (gyro, accelero, light)
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
@ -50,13 +50,16 @@
|
||||
|
||||
#define DESC_OFFSET(desc, port, index, id) ( \
|
||||
port * ((desc)->index_max - (desc)->index_min + 1) * ((desc)->id_max - (desc)->id_min + 1) + \
|
||||
index * ((desc)->id_max - (desc)->id_min + 1) + \
|
||||
(index - (desc)->index_min) * ((desc)->id_max - (desc)->id_min + 1) + \
|
||||
id \
|
||||
)
|
||||
|
||||
#define MAX_TEST_STEPS 200
|
||||
#define INITIAL_FRAMES 60*5
|
||||
#define ONE_TEST_STEP_FRAMES 60*5
|
||||
#define KEYBOARD_OFFSET 1000
|
||||
#define NETRETROPAD_SCREEN_PAD 0
|
||||
#define NETRETROPAD_SCREEN_KEYBOARD 1
|
||||
|
||||
struct descriptor {
|
||||
int device;
|
||||
@ -77,6 +80,9 @@ struct remote_joypad_message {
|
||||
uint16_t state;
|
||||
};
|
||||
|
||||
static bool keyboard_state[RETROK_LAST];
|
||||
static bool keyboard_state_validated[RETROK_LAST];
|
||||
|
||||
static int s;
|
||||
static int port;
|
||||
static char server[64];
|
||||
@ -114,11 +120,24 @@ static struct descriptor analog = {
|
||||
.id_max = RETRO_DEVICE_ID_ANALOG_Y
|
||||
};
|
||||
|
||||
static struct descriptor analog_button = {
|
||||
.device = RETRO_DEVICE_ANALOG,
|
||||
.port_min = 0,
|
||||
.port_max = 0,
|
||||
.index_min = RETRO_DEVICE_INDEX_ANALOG_BUTTON,
|
||||
.index_max = RETRO_DEVICE_INDEX_ANALOG_BUTTON,
|
||||
.id_min = RETRO_DEVICE_ID_JOYPAD_B,
|
||||
.id_max = RETRO_DEVICE_ID_JOYPAD_R3
|
||||
};
|
||||
|
||||
static struct descriptor *descriptors[] = {
|
||||
&joypad,
|
||||
&analog
|
||||
&analog,
|
||||
&analog_button
|
||||
};
|
||||
|
||||
static uint16_t analog_item_colors[32];
|
||||
|
||||
static uint16_t combo_def[] =
|
||||
{
|
||||
1 << RETRO_DEVICE_ID_JOYPAD_UP | 1 << RETRO_DEVICE_ID_JOYPAD_LEFT, /* D-pad diagonals */
|
||||
@ -137,6 +156,8 @@ static uint16_t combo_def[] =
|
||||
1 << RETRO_DEVICE_ID_JOYPAD_L2 | 1 << RETRO_DEVICE_ID_JOYPAD_R2
|
||||
};
|
||||
|
||||
static unsigned current_screen = NETRETROPAD_SCREEN_PAD;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned expected_button;
|
||||
@ -153,7 +174,7 @@ static unsigned last_test_step = MAX_TEST_STEPS + 1;
|
||||
static uint32_t input_state_validated = 0;
|
||||
static uint32_t combo_state_validated = 0;
|
||||
static bool dump_state_blocked = false;
|
||||
|
||||
static bool hide_analog_mismatch = true;
|
||||
/************************************/
|
||||
/* JSON Helpers for test input file */
|
||||
/************************************/
|
||||
@ -338,6 +359,56 @@ end:
|
||||
/* Test input file handling end */
|
||||
/********************************/
|
||||
|
||||
static void draw_background(void)
|
||||
{
|
||||
if (frame_buf)
|
||||
{
|
||||
unsigned rle, runs, count;
|
||||
/* Body is 255 * 142 within the 320 * 240 frame */
|
||||
uint16_t *pixel = frame_buf + 49 * 320 + 32;
|
||||
|
||||
if (current_screen == NETRETROPAD_SCREEN_PAD)
|
||||
for (rle = 0; rle < sizeof(body); )
|
||||
{
|
||||
uint16_t color = 0;
|
||||
|
||||
for (runs = body[rle++]; runs > 0; runs--)
|
||||
{
|
||||
for (count = body[rle++]; count > 0; count--)
|
||||
*pixel++ = color;
|
||||
|
||||
color = 0x4208 - color;
|
||||
}
|
||||
|
||||
pixel += 65;
|
||||
}
|
||||
else if (current_screen == NETRETROPAD_SCREEN_KEYBOARD)
|
||||
for (rle = 0; rle < sizeof(keyboard_body); )
|
||||
{
|
||||
uint16_t color = 0;
|
||||
|
||||
for (runs = keyboard_body[rle++]; runs > 0; runs--)
|
||||
{
|
||||
for (count = keyboard_body[rle++]; count > 0; count--)
|
||||
*pixel++ = color;
|
||||
|
||||
color = 0x4208 - color;
|
||||
}
|
||||
|
||||
pixel += 65;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void flip_screen(void)
|
||||
{
|
||||
if (current_screen == NETRETROPAD_SCREEN_PAD)
|
||||
current_screen = NETRETROPAD_SCREEN_KEYBOARD;
|
||||
else if (current_screen == NETRETROPAD_SCREEN_KEYBOARD)
|
||||
current_screen = NETRETROPAD_SCREEN_PAD;
|
||||
draw_background();
|
||||
}
|
||||
|
||||
void NETRETROPAD_CORE_PREFIX(retro_init)(void)
|
||||
{
|
||||
unsigned i;
|
||||
@ -345,26 +416,7 @@ void NETRETROPAD_CORE_PREFIX(retro_init)(void)
|
||||
dump_state_blocked = false;
|
||||
frame_buf = (uint16_t*)calloc(320 * 240, sizeof(uint16_t));
|
||||
|
||||
if (frame_buf)
|
||||
{
|
||||
unsigned rle, runs, count;
|
||||
uint16_t *pixel = frame_buf + 49 * 320 + 32;
|
||||
|
||||
for (rle = 0; rle < sizeof(body); )
|
||||
{
|
||||
uint16_t color = 0;
|
||||
|
||||
for (runs = body[rle++]; runs > 0; runs--)
|
||||
{
|
||||
for (count = body[rle++]; count > 0; count--)
|
||||
*pixel++ = color;
|
||||
|
||||
color = 0x4208 - color;
|
||||
}
|
||||
|
||||
pixel += 65;
|
||||
}
|
||||
}
|
||||
draw_background();
|
||||
|
||||
/* Allocate descriptor values */
|
||||
for (i = 0; i < ARRAY_SIZE(descriptors); i++)
|
||||
@ -430,6 +482,39 @@ void NETRETROPAD_CORE_PREFIX(retro_get_system_av_info)(
|
||||
info->geometry.aspect_ratio = 4.0 / 3.0;
|
||||
}
|
||||
|
||||
static void NETRETROPAD_CORE_PREFIX(update_keyboard_cb)(bool down, unsigned keycode,
|
||||
uint32_t character, uint16_t key_modifiers)
|
||||
{
|
||||
struct retro_message message;
|
||||
char buf[255];
|
||||
|
||||
if (keycode < RETROK_LAST)
|
||||
{
|
||||
keyboard_state[keycode] = down ? true : false;
|
||||
if (down && ((keycode == RETROK_a && keyboard_state[RETROK_b]) || (keycode == RETROK_b && keyboard_state[RETROK_a])))
|
||||
flip_screen();
|
||||
/* Message for the keypresses not shown as actual keys, just placeholder blocks */
|
||||
if ((keycode == 0) ||
|
||||
(keycode == 12) ||
|
||||
(keycode >= 33 && keycode < 39) ||
|
||||
(keycode >= 40 && keycode < 44) ||
|
||||
(keycode == 58) ||
|
||||
(keycode == 60) ||
|
||||
(keycode >= 62 && keycode < 65) ||
|
||||
(keycode >= 94 && keycode < 96) ||
|
||||
(keycode >= 123 && keycode < 127) ||
|
||||
(keycode == 272) ||
|
||||
(keycode >= 294 && keycode < 297) ||
|
||||
(keycode >= 309 && keycode < 323))
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "Key pressed: %d",keycode);
|
||||
message.msg = buf;
|
||||
message.frames = 60;
|
||||
NETRETROPAD_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_SET_MESSAGE, &message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void retropad_update_input(void)
|
||||
{
|
||||
unsigned i;
|
||||
@ -477,7 +562,11 @@ static void retropad_update_input(void)
|
||||
/* Update state */
|
||||
desc->value[offset] = state;
|
||||
|
||||
/* Attempt to send updated state */
|
||||
/* Do not send analog button state - RA side is not prepared to receive it */
|
||||
if (i>1)
|
||||
continue;
|
||||
|
||||
/* Otherwise, attempt to send updated state */
|
||||
msg.port = port;
|
||||
msg.device = desc->device;
|
||||
msg.index = index;
|
||||
@ -492,6 +581,35 @@ static void retropad_update_input(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void open_UDP_socket()
|
||||
{
|
||||
socket_target_t in_target;
|
||||
|
||||
if (s && s != SOCKET_ERROR)
|
||||
close(s);
|
||||
|
||||
s = socket_create(
|
||||
"retropad",
|
||||
SOCKET_DOMAIN_INET,
|
||||
SOCKET_TYPE_DATAGRAM,
|
||||
SOCKET_PROTOCOL_UDP);
|
||||
|
||||
if (s == SOCKET_ERROR)
|
||||
NETRETROPAD_CORE_PREFIX(log_cb)(RETRO_LOG_INFO, "socket failed");
|
||||
|
||||
/* setup address structure */
|
||||
memset((char *) &si_other, 0, sizeof(si_other));
|
||||
|
||||
in_target.port = port;
|
||||
in_target.server = server;
|
||||
in_target.domain = SOCKET_DOMAIN_INET;
|
||||
|
||||
socket_set_target(&si_other, &in_target);
|
||||
|
||||
NETRETROPAD_CORE_PREFIX(log_cb)(RETRO_LOG_INFO, "Server IP Address: %s\n" , server);
|
||||
|
||||
}
|
||||
|
||||
void NETRETROPAD_CORE_PREFIX(retro_set_environment)(retro_environment_t cb)
|
||||
{
|
||||
static const struct retro_variable vars[] = {
|
||||
@ -500,10 +618,13 @@ void NETRETROPAD_CORE_PREFIX(retro_set_environment)(retro_environment_t cb)
|
||||
{ "net_retropad_ip_octet2", "IP address part 2; 0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136|137|138|139|140|141|142|143|144|145|146|147|148|149|150|151|152|153|154|155|156|157|158|159|160|161|162|163|164|165|166|167|168|169|170|171|172|173|174|175|176|177|178|179|180|181|182|183|184|185|186|187|188|189|190|191|192|193|194|195|196|197|198|199|200|201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216|217|218|219|220|221|222|223|224|225|226|227|228|229|230|231|232|233|234|235|236|237|238|239|240|241|242|243|244|245|246|247|248|249|250|251|252|253|254|255" },
|
||||
{ "net_retropad_ip_octet3", "IP address part 3; 0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136|137|138|139|140|141|142|143|144|145|146|147|148|149|150|151|152|153|154|155|156|157|158|159|160|161|162|163|164|165|166|167|168|169|170|171|172|173|174|175|176|177|178|179|180|181|182|183|184|185|186|187|188|189|190|191|192|193|194|195|196|197|198|199|200|201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216|217|218|219|220|221|222|223|224|225|226|227|228|229|230|231|232|233|234|235|236|237|238|239|240|241|242|243|244|245|246|247|248|249|250|251|252|253|254|255" },
|
||||
{ "net_retropad_ip_octet4", "IP address part 4; 0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|32|33|34|35|36|37|38|39|40|41|42|43|44|45|46|47|48|49|50|51|52|53|54|55|56|57|58|59|60|61|62|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126|127|128|129|130|131|132|133|134|135|136|137|138|139|140|141|142|143|144|145|146|147|148|149|150|151|152|153|154|155|156|157|158|159|160|161|162|163|164|165|166|167|168|169|170|171|172|173|174|175|176|177|178|179|180|181|182|183|184|185|186|187|188|189|190|191|192|193|194|195|196|197|198|199|200|201|202|203|204|205|206|207|208|209|210|211|212|213|214|215|216|217|218|219|220|221|222|223|224|225|226|227|228|229|230|231|232|233|234|235|236|237|238|239|240|241|242|243|244|245|246|247|248|249|250|251|252|253|254|255" },
|
||||
|
||||
{ "net_retropad_screen", "Start screen; Retropad|Keyboard tester" },
|
||||
{ "net_retropad_hide_analog_mismatch", "Hide mismatching analog button inputs; True|False" },
|
||||
{ NULL, NULL },
|
||||
};
|
||||
enum retro_pixel_format fmt = RETRO_PIXEL_FORMAT_RGB565;
|
||||
struct retro_keyboard_callback kcb = { NETRETROPAD_CORE_PREFIX(update_keyboard_cb) };
|
||||
|
||||
cb(RETRO_ENVIRONMENT_SET_VARIABLES, (void*)vars);
|
||||
|
||||
NETRETROPAD_CORE_PREFIX(environ_cb) = cb;
|
||||
@ -514,25 +635,42 @@ void NETRETROPAD_CORE_PREFIX(retro_set_environment)(retro_environment_t cb)
|
||||
|
||||
if (cb(RETRO_ENVIRONMENT_GET_LOG_INTERFACE, &logger))
|
||||
NETRETROPAD_CORE_PREFIX(log_cb) = logger.log;
|
||||
|
||||
NETRETROPAD_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_SET_KEYBOARD_CALLBACK, &kcb);
|
||||
|
||||
}
|
||||
|
||||
static void netretropad_check_variables(void)
|
||||
{
|
||||
struct retro_variable var, var2, var3, var4, port_var;
|
||||
var.key = "net_retropad_ip_octet1";
|
||||
var2.key = "net_retropad_ip_octet2";
|
||||
var3.key = "net_retropad_ip_octet3";
|
||||
var4.key = "net_retropad_ip_octet4";
|
||||
port_var.key = "net_retropad_port";
|
||||
struct retro_variable var, var2, var3, var4, port_var, screen_var, hide_a_var;
|
||||
var.key = "net_retropad_ip_octet1";
|
||||
var2.key = "net_retropad_ip_octet2";
|
||||
var3.key = "net_retropad_ip_octet3";
|
||||
var4.key = "net_retropad_ip_octet4";
|
||||
port_var.key = "net_retropad_port";
|
||||
screen_var.key = "net_retropad_screen";
|
||||
hide_a_var.key = "net_retropad_hide_analog_mismatch";
|
||||
|
||||
NETRETROPAD_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_GET_VARIABLE, &var);
|
||||
NETRETROPAD_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_GET_VARIABLE, &var2);
|
||||
NETRETROPAD_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_GET_VARIABLE, &var3);
|
||||
NETRETROPAD_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_GET_VARIABLE, &var4);
|
||||
NETRETROPAD_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_GET_VARIABLE, &port_var);
|
||||
NETRETROPAD_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_GET_VARIABLE, &screen_var);
|
||||
NETRETROPAD_CORE_PREFIX(environ_cb)(RETRO_ENVIRONMENT_GET_VARIABLE, &hide_a_var);
|
||||
|
||||
snprintf(server, sizeof(server), "%s.%s.%s.%s", var.value, var2.value, var3.value, var4.value);
|
||||
port = atoi(port_var.value);
|
||||
|
||||
if (screen_var.value &&
|
||||
((current_screen == NETRETROPAD_SCREEN_PAD && strstr(screen_var.value,"Keyboard")) ||
|
||||
(current_screen == NETRETROPAD_SCREEN_KEYBOARD && strstr(screen_var.value,"Retropad"))))
|
||||
flip_screen();
|
||||
if (hide_a_var.value && strstr(hide_a_var.value,"True"))
|
||||
hide_analog_mismatch = true;
|
||||
else
|
||||
hide_analog_mismatch = false;
|
||||
|
||||
}
|
||||
|
||||
void NETRETROPAD_CORE_PREFIX(retro_set_audio_sample)(retro_audio_sample_t cb)
|
||||
@ -562,7 +700,10 @@ void NETRETROPAD_CORE_PREFIX(retro_set_video_refresh)(retro_video_refresh_t cb)
|
||||
}
|
||||
|
||||
void NETRETROPAD_CORE_PREFIX(retro_reset)(void)
|
||||
{}
|
||||
{
|
||||
netretropad_check_variables();
|
||||
open_UDP_socket();
|
||||
}
|
||||
|
||||
void NETRETROPAD_CORE_PREFIX(retro_run)(void)
|
||||
{
|
||||
@ -582,31 +723,60 @@ void NETRETROPAD_CORE_PREFIX(retro_run)(void)
|
||||
int offset = DESC_OFFSET(&joypad, 0, 0, i);
|
||||
if (joypad.value[offset])
|
||||
input_state |= 1 << i;
|
||||
|
||||
/* Construct a red gradient representation for analog buttons */
|
||||
offset = DESC_OFFSET(&analog_button, 0, RETRO_DEVICE_INDEX_ANALOG_BUTTON, i);
|
||||
analog_item_colors[i] = (uint16_t)((int16_t)analog_button.value[offset]/1638) << 11;
|
||||
}
|
||||
|
||||
for (i = analog.id_min; i <= analog.id_max; i++)
|
||||
{
|
||||
/* bitmap: x-- x- x+ x++ y-- y- y+ y++*/
|
||||
/* default analog deadzone: 0.0 - increased for convenience, default analog threshold: 0.5 */
|
||||
/* default analog deadzone: 0.0 - increased for convenience to 0.1, default analog threshold: 0.5 */
|
||||
/* Red gradient also calculated */
|
||||
int offset = DESC_OFFSET(&analog, 0, RETRO_DEVICE_INDEX_ANALOG_LEFT, i);
|
||||
if ( (int16_t)analog.value[offset] < -32766/2)
|
||||
if ( (int16_t)analog.value[offset] < -32768/2)
|
||||
{
|
||||
input_state |= 1 << (16 + i*8 + 0);
|
||||
analog_item_colors[ 16 + i*8 + 0] = (uint16_t)((-1*((int16_t)analog.value[offset])-32768/2) /528) << 11;
|
||||
}
|
||||
else if ((int16_t)analog.value[offset] < -3276)
|
||||
{
|
||||
input_state |= 1 << (16 + i*8 + 1);
|
||||
analog_item_colors[ 16 + i*8 + 1] = (uint16_t)((-1*((int16_t)analog.value[offset]) ) /528) << 11;
|
||||
}
|
||||
else if ((int16_t)analog.value[offset] > 32768/2)
|
||||
{
|
||||
input_state |= 1 << (16 + i*8 + 3);
|
||||
analog_item_colors[ 16 + i*8 + 3] = (uint16_t)(( ((int16_t)analog.value[offset])-32768/2) /528) << 11;
|
||||
}
|
||||
else if ((int16_t)analog.value[offset] > 3276)
|
||||
{
|
||||
input_state |= 1 << (16 + i*8 + 2);
|
||||
analog_item_colors[ 16 + i*8 + 2] = (uint16_t)(( ((int16_t)analog.value[offset]) ) /528) << 11;
|
||||
}
|
||||
|
||||
offset = DESC_OFFSET(&analog, 0, RETRO_DEVICE_INDEX_ANALOG_RIGHT, i);
|
||||
if ( (int16_t)analog.value[offset] < -32766/2)
|
||||
if ( (int16_t)analog.value[offset] < -32768/2)
|
||||
{
|
||||
input_state |= 1 << (16 + i*8 + 4);
|
||||
analog_item_colors[ 16 + i*8 + 4] = (uint16_t)((-1*((int16_t)analog.value[offset])-32768/2) /528) << 11;
|
||||
}
|
||||
else if ((int16_t)analog.value[offset] < -3276)
|
||||
{
|
||||
input_state |= 1 << (16 + i*8 + 5);
|
||||
analog_item_colors[ 16 + i*8 + 5] = (uint16_t)((-1*((int16_t)analog.value[offset]) ) /528) << 11;
|
||||
}
|
||||
else if ((int16_t)analog.value[offset] > 32768/2)
|
||||
{
|
||||
input_state |= 1 << (16 + i*8 + 7);
|
||||
analog_item_colors[ 16 + i*8 + 7] = (uint16_t)(( ((int16_t)analog.value[offset])-32768/2) /528) << 11;
|
||||
}
|
||||
else if ((int16_t)analog.value[offset] > 3276)
|
||||
{
|
||||
input_state |= 1 << (16 + i*8 + 6);
|
||||
analog_item_colors[ 16 + i*8 + 6] = (uint16_t)(( ((int16_t)analog.value[offset]) ) /528) << 11;
|
||||
}
|
||||
}
|
||||
|
||||
/* Input test section start. */
|
||||
@ -619,7 +789,7 @@ void NETRETROPAD_CORE_PREFIX(retro_run)(void)
|
||||
}
|
||||
|
||||
/* Print a log for A+B combination, but only once while those are pressed */
|
||||
if (input_state == ((1 << RETRO_DEVICE_ID_JOYPAD_A | 1 << RETRO_DEVICE_ID_JOYPAD_B) & 0x0000ffff))
|
||||
if (input_state & ((1 << RETRO_DEVICE_ID_JOYPAD_A | 1 << RETRO_DEVICE_ID_JOYPAD_B) & 0x0000ffff))
|
||||
{
|
||||
if (!dump_state_blocked)
|
||||
{
|
||||
@ -647,6 +817,9 @@ void NETRETROPAD_CORE_PREFIX(retro_run)(void)
|
||||
NETRETROPAD_CORE_PREFIX(log_cb)(RETRO_LOG_INFO,
|
||||
"[Remote RetroPad]: Proceeding to test step %d at frame %d, next: %d\n",
|
||||
current_test_step,current_frame,next_teststep_frame+INITIAL_FRAMES);
|
||||
if((input_test_steps[current_test_step].expected_button < KEYBOARD_OFFSET && current_screen == NETRETROPAD_SCREEN_KEYBOARD) ||
|
||||
(input_test_steps[current_test_step].expected_button >= KEYBOARD_OFFSET && current_screen == NETRETROPAD_SCREEN_PAD))
|
||||
flip_screen();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -671,8 +844,20 @@ void NETRETROPAD_CORE_PREFIX(retro_run)(void)
|
||||
|
||||
if (current_test_step < last_test_step)
|
||||
{
|
||||
expected_input = 1 << input_test_steps[current_test_step].expected_button;
|
||||
if(input_state & expected_input)
|
||||
bool test_success = false;
|
||||
if (input_test_steps[current_test_step].expected_button < KEYBOARD_OFFSET)
|
||||
{
|
||||
expected_input = 1 << input_test_steps[current_test_step].expected_button;
|
||||
if(input_state & expected_input)
|
||||
test_success = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
expected_input = input_test_steps[current_test_step].expected_button - KEYBOARD_OFFSET;
|
||||
if (expected_input < RETROK_LAST && keyboard_state[expected_input])
|
||||
test_success = true;
|
||||
}
|
||||
if (test_success)
|
||||
{
|
||||
NETRETROPAD_CORE_PREFIX(log_cb)(RETRO_LOG_INFO,
|
||||
"[Remote RetroPad]: Test step %d successful at frame %d\n",
|
||||
@ -683,82 +868,124 @@ void NETRETROPAD_CORE_PREFIX(retro_run)(void)
|
||||
}
|
||||
}
|
||||
/* Input test section end. */
|
||||
|
||||
for (rle = 0; rle < sizeof(retropad_buttons); )
|
||||
if (current_screen == NETRETROPAD_SCREEN_PAD)
|
||||
{
|
||||
unsigned runs;
|
||||
char paint = 0;
|
||||
|
||||
for (runs = retropad_buttons[rle++]; runs > 0; runs--)
|
||||
for (rle = 0; rle < sizeof(retropad_buttons); )
|
||||
{
|
||||
unsigned button = paint ? 1 << retropad_buttons[rle++] : 0;
|
||||
unsigned runs;
|
||||
char paint = 0;
|
||||
|
||||
if (paint)
|
||||
for (runs = retropad_buttons[rle++]; runs > 0; runs--)
|
||||
{
|
||||
unsigned count;
|
||||
uint16_t color;
|
||||
|
||||
/* Red for active inputs */
|
||||
if (input_state & button)
|
||||
if (paint)
|
||||
{
|
||||
color = 0xA000;
|
||||
input_state_validated |= button;
|
||||
unsigned button = 0;
|
||||
unsigned button_analog = 0;
|
||||
unsigned count;
|
||||
uint16_t color;
|
||||
|
||||
/* 0 - 15: buttons, 16 - 31: analog x/y */
|
||||
/* 32 - 47: analog input for same buttons */
|
||||
if (retropad_buttons[rle] < 32)
|
||||
button = 1 << retropad_buttons[rle];
|
||||
else
|
||||
button_analog = 1 << (retropad_buttons[rle] - 32);
|
||||
|
||||
/* Red for active inputs */
|
||||
if (input_state & button)
|
||||
{
|
||||
if(retropad_buttons[rle]<16)
|
||||
color = 0xA000;
|
||||
else
|
||||
/* Gradient for analog axes */
|
||||
color = analog_item_colors[retropad_buttons[rle]];
|
||||
input_state_validated |= button;
|
||||
}
|
||||
/* Red gradient for active analog button inputs, from 0 to 0xa000 */
|
||||
else if (button_analog && analog_item_colors[retropad_buttons[rle] - 32])
|
||||
{
|
||||
color = analog_item_colors[retropad_buttons[rle] - 32];
|
||||
}
|
||||
else if (button_analog && hide_analog_mismatch && input_state & button_analog)
|
||||
color = 0xA000;
|
||||
else
|
||||
{
|
||||
/* Light blue for expected input */
|
||||
if (expected_input & button || expected_input & button_analog)
|
||||
color = 0x7fff;
|
||||
/* Light green for already validated input */
|
||||
else if (input_state_validated & button || input_state_validated & button_analog)
|
||||
color = 0xbff7;
|
||||
/* White as default */
|
||||
else
|
||||
color = 0xffff;
|
||||
}
|
||||
|
||||
rle++;
|
||||
for (count = retropad_buttons[rle++]; count > 0; count--)
|
||||
*pixel++ = color;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Light blue for expected input */
|
||||
if (expected_input & button)
|
||||
color = 0x7fff;
|
||||
/* Light green for already validated input */
|
||||
else if (input_state_validated & button )
|
||||
color = 0xbff7;
|
||||
/* White as default */
|
||||
else
|
||||
color = 0xffff;
|
||||
}
|
||||
pixel += retropad_buttons[rle++];
|
||||
|
||||
for (count = retropad_buttons[rle++]; count > 0; count--)
|
||||
*pixel++ = color;
|
||||
paint = !paint;
|
||||
}
|
||||
else
|
||||
pixel += retropad_buttons[rle++];
|
||||
|
||||
paint = !paint;
|
||||
pixel += 65;
|
||||
}
|
||||
}
|
||||
else if (current_screen == NETRETROPAD_SCREEN_KEYBOARD)
|
||||
{
|
||||
for (rle = 0; rle < ARRAY_SIZE(keyboard_buttons); )
|
||||
{
|
||||
unsigned runs;
|
||||
char paint = 0;
|
||||
|
||||
pixel += 65;
|
||||
for (runs = keyboard_buttons[rle++]; runs > 0; runs--)
|
||||
{
|
||||
if (paint)
|
||||
{
|
||||
unsigned count;
|
||||
uint16_t color;
|
||||
|
||||
/* Same color scheme as for retropad buttons */
|
||||
if (keyboard_state[keyboard_buttons[rle]])
|
||||
{
|
||||
color = 0xA000;
|
||||
keyboard_state_validated[keyboard_buttons[rle]] = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (expected_input > 0 && expected_input == keyboard_buttons[rle])
|
||||
color = 0x7fff;
|
||||
else if (keyboard_state_validated[keyboard_buttons[rle]])
|
||||
color = 0xbff7;
|
||||
else
|
||||
color = 0xffff;
|
||||
}
|
||||
rle++;
|
||||
|
||||
for (count = keyboard_buttons[rle++]; count > 0; count--)
|
||||
*pixel++ = color;
|
||||
}
|
||||
else
|
||||
pixel += keyboard_buttons[rle++];
|
||||
|
||||
paint = !paint;
|
||||
}
|
||||
|
||||
pixel += 65;
|
||||
}
|
||||
}
|
||||
|
||||
NETRETROPAD_CORE_PREFIX(video_cb)(frame_buf, 320, 240, 640);
|
||||
|
||||
retro_sleep(4);
|
||||
}
|
||||
|
||||
bool NETRETROPAD_CORE_PREFIX(retro_load_game)(const struct retro_game_info *info)
|
||||
{
|
||||
socket_target_t in_target;
|
||||
|
||||
netretropad_check_variables();
|
||||
|
||||
s = socket_create(
|
||||
"retropad",
|
||||
SOCKET_DOMAIN_INET,
|
||||
SOCKET_TYPE_DATAGRAM,
|
||||
SOCKET_PROTOCOL_UDP);
|
||||
|
||||
if (s == SOCKET_ERROR)
|
||||
NETRETROPAD_CORE_PREFIX(log_cb)(RETRO_LOG_INFO, "socket failed");
|
||||
|
||||
/* setup address structure */
|
||||
memset((char *) &si_other, 0, sizeof(si_other));
|
||||
|
||||
in_target.port = port;
|
||||
in_target.server = server;
|
||||
in_target.domain = SOCKET_DOMAIN_INET;
|
||||
|
||||
socket_set_target(&si_other, &in_target);
|
||||
|
||||
NETRETROPAD_CORE_PREFIX(log_cb)(RETRO_LOG_INFO, "Server IP Address: %s\n" , server);
|
||||
open_UDP_socket();
|
||||
|
||||
/* If a .ratst file is given (only possible via command line),
|
||||
* initialize test sequence. */
|
||||
|
@ -1,6 +1,8 @@
|
||||
#ifndef REMOTEPAD_H
|
||||
#define REMOTEPAD_H
|
||||
|
||||
/* Run-length-encoded format, serialized. */
|
||||
/* Number of segments - length of individual segments (segment are alternating black and background color, always starting with black) */
|
||||
static uint8_t body[] =
|
||||
{
|
||||
/* 0 */ 3, 38, 13, 204,
|
||||
@ -156,8 +158,8 @@ static uint8_t retropad_buttons[] =
|
||||
/* 0 */ 5, 38, 12, 13, 154, 13, 13, 37,
|
||||
/* 1 */ 5, 35, 12, 21, 144, 13, 21, 34,
|
||||
/* 2 */ 5, 33, 12, 26, 138, 13, 26, 32,
|
||||
/* 3 */ 5, 32, 12, 28, 136, 13, 28, 31,
|
||||
/* 4 */ 5, 32, 12, 29, 134, 13, 30, 30,
|
||||
/* 3 */ 13, 32, 12, 7, 0, 44, 15, 0, 12, 6, 136, 13, 8, 0, 45, 14, 0, 13, 6, 31,
|
||||
/* 4 */ 13, 32, 12, 7, 0, 44, 15, 0, 12, 7, 134, 13, 9, 0, 45, 14, 0, 13, 7, 30,
|
||||
/* 5 */ 5, 31, 12, 31, 133, 13, 30, 30,
|
||||
/* 6 */ 5, 31, 12, 31, 133, 13, 30, 30,
|
||||
/* 7 */ 9, 31, 12, 2, 23, 12, 6, 133, 13, 5, 24, 13, 1, 30,
|
||||
@ -168,9 +170,9 @@ static uint8_t retropad_buttons[] =
|
||||
/* 12 */ 5, 39, 10, 13, 152, 11, 14, 37,
|
||||
/* 13 */ 5, 34, 10, 24, 141, 11, 24, 32,
|
||||
/* 14 */ 5, 31, 10, 29, 136, 11, 29, 30,
|
||||
/* 15 */ 5, 30, 10, 31, 134, 11, 32, 28,
|
||||
/* 16 */ 5, 29, 10, 33, 133, 11, 32, 28,
|
||||
/* 17 */ 5, 29, 10, 33, 133, 11, 32, 28,
|
||||
/* 15 */ 13, 30, 10, 9, 0, 42, 15, 0, 10, 7, 134, 11, 9, 0, 43, 14, 0, 11, 9, 28,
|
||||
/* 16 */ 13, 29, 10, 10, 0, 42, 15, 0, 10, 8, 133, 11, 9, 0, 43, 14, 0, 11, 9, 28,
|
||||
/* 17 */ 13, 29, 10, 10, 0, 42, 15, 0, 10, 8, 133, 11, 9, 0, 43, 14, 0, 11, 9, 28,
|
||||
/* 18 */ 5, 29, 10, 33, 133, 11, 32, 28,
|
||||
/* 19 */ 5, 29, 10, 33, 133, 11, 32, 28,
|
||||
/* 20 */ 5, 29, 10, 33, 133, 11, 32, 28,
|
||||
@ -215,12 +217,12 @@ static uint8_t retropad_buttons[] =
|
||||
/* 59 */ 3, 204, 9, 13, 38,
|
||||
/* 60 */ 3, 203, 9, 15, 37,
|
||||
/* 61 */ 3, 202, 9, 16, 37,
|
||||
/* 62 */ 3, 202, 9, 17, 36,
|
||||
/* 63 */ 5, 39, 4, 13, 149, 9, 18, 36,
|
||||
/* 64 */ 5, 39, 4, 13, 149, 9, 18, 36,
|
||||
/* 65 */ 5, 39, 4, 13, 149, 9, 18, 36,
|
||||
/* 66 */ 5, 39, 4, 13, 149, 9, 18, 36,
|
||||
/* 67 */ 5, 39, 4, 13, 150, 9, 17, 36,
|
||||
/* 62 */ 7, 202, 9, 6, 0, 41, 5, 0, 9, 6, 36,
|
||||
/* 63 */ 9, 39, 4, 13, 149, 9, 7, 0, 41, 5, 0, 9, 6, 36,
|
||||
/* 64 */ 9, 39, 4, 13, 149, 9, 7, 0, 41, 5, 0, 9, 7, 35,
|
||||
/* 65 */ 9, 39, 4, 13, 149, 9, 7, 0, 41, 5, 0, 9, 7, 35,
|
||||
/* 66 */ 9, 39, 4, 13, 149, 9, 7, 0, 41, 5, 0, 9, 7, 35,
|
||||
/* 67 */ 9, 39, 4, 13, 150, 9, 6, 0, 41, 5, 0, 9, 6, 36,
|
||||
/* 68 */ 5, 39, 4, 13, 150, 9, 17, 36,
|
||||
/* 69 */ 5, 39, 4, 13, 151, 9, 15, 37,
|
||||
/* 70 */ 5, 39, 4, 13, 151, 9, 14, 38,
|
||||
@ -233,12 +235,12 @@ static uint8_t retropad_buttons[] =
|
||||
/* 77 */ 9, 24, 6, 12, 19, 7, 12, 115, 1, 12, 33, 8, 12, 16,
|
||||
/* 78 */ 13, 24, 6, 13, 17, 7, 13, 30, 2, 14, 35, 3, 13, 22, 1, 14, 30, 8, 15, 15,
|
||||
/* 79 */ 13, 24, 6, 14, 15, 7, 14, 30, 2, 14, 34, 3, 14, 21, 1, 16, 29, 8, 16, 14,
|
||||
/* 80 */ 13, 24, 6, 15, 13, 7, 15, 30, 2, 14, 34, 3, 14, 21, 1, 17, 27, 8, 17, 14,
|
||||
/* 81 */ 13, 24, 6, 16, 11, 7, 16, 30, 2, 14, 34, 3, 14, 20, 1, 18, 27, 8, 18, 13,
|
||||
/* 82 */ 13, 24, 6, 16, 12, 7, 15, 30, 2, 14, 34, 3, 14, 20, 1, 18, 27, 8, 18, 13,
|
||||
/* 83 */ 13, 24, 6, 15, 14, 7, 14, 30, 2, 14, 34, 3, 14, 20, 1, 18, 26, 8, 19, 13,
|
||||
/* 84 */ 13, 24, 6, 14, 16, 7, 13, 30, 2, 14, 34, 3, 14, 20, 1, 18, 27, 8, 18, 13,
|
||||
/* 85 */ 9, 24, 6, 13, 18, 7, 12, 112, 1, 18, 27, 8, 17, 14,
|
||||
/* 80 */ 21, 24, 6, 15, 13, 7, 15, 30, 2, 14, 34, 3, 14, 21, 1, 6, 0, 33, 5, 0, 1, 6, 27, 8, 7, 0, 40, 5, 0, 8, 5, 14,
|
||||
/* 81 */ 21, 24, 6, 16, 11, 7, 16, 30, 2, 14, 34, 3, 14, 20, 1, 7, 0, 33, 5, 0, 1, 6, 27, 8, 7, 0, 40, 5, 0, 8, 6, 13,
|
||||
/* 82 */ 21, 24, 6, 16, 12, 7, 15, 30, 2, 14, 34, 3, 14, 20, 1, 7, 0, 33, 5, 0, 1, 7, 26, 8, 7, 0, 40, 5, 0, 8, 6, 13,
|
||||
/* 83 */ 21, 24, 6, 15, 14, 7, 14, 30, 2, 14, 34, 3, 14, 20, 1, 7, 0, 33, 5, 0, 1, 7, 25, 8, 8, 0, 40, 5, 0, 8, 6, 13,
|
||||
/* 84 */ 21, 24, 6, 14, 16, 7, 13, 30, 2, 14, 34, 3, 14, 20, 1, 7, 0, 33, 5, 0, 1, 7, 26, 8, 7, 0, 40, 5, 0, 8, 6, 13,
|
||||
/* 85 */ 17, 24, 6, 13, 18, 7, 12, 112, 1, 7, 0, 33, 5, 0, 1, 6, 27, 8, 7, 0, 40, 5, 0, 8, 5, 14,
|
||||
/* 86 */ 9, 24, 6, 12, 20, 7, 11, 113, 1, 17, 27, 8, 17, 14,
|
||||
/* 87 */ 11, 24, 6, 11, 10, 5, 1, 11, 7, 10, 113, 1, 16, 29, 8, 16, 14,
|
||||
/* 88 */ 7, 44, 5, 3, 134, 1, 14, 31, 8, 14, 15,
|
||||
@ -251,12 +253,12 @@ static uint8_t retropad_buttons[] =
|
||||
/* 95 */ 5, 39, 5, 13, 152, 0, 13, 38,
|
||||
/* 96 */ 5, 39, 5, 13, 151, 0, 15, 37,
|
||||
/* 97 */ 5, 39, 5, 13, 150, 0, 17, 36,
|
||||
/* 98 */ 5, 39, 5, 13, 150, 0, 17, 36,
|
||||
/* 99 */ 5, 39, 5, 13, 149, 0, 18, 36,
|
||||
/* 100 */ 5, 39, 5, 13, 149, 0, 18, 36,
|
||||
/* 101 */ 3, 201, 0, 18, 36,
|
||||
/* 102 */ 3, 201, 0, 18, 36,
|
||||
/* 103 */ 3, 202, 0, 17, 36,
|
||||
/* 98 */ 9, 39, 5, 13, 150, 0, 6, 0, 32, 6, 0, 0, 5, 36,
|
||||
/* 99 */ 9, 39, 5, 13, 149, 0, 7, 0, 32, 6, 0, 0, 6, 35,
|
||||
/* 100 */ 9, 39, 5, 13, 149, 0, 7, 0, 32, 6, 0, 0, 6, 35,
|
||||
/* 101 */ 7, 201, 0, 7, 0, 32, 6, 0, 0, 6, 35,
|
||||
/* 102 */ 7, 201, 0, 7, 0, 32, 6, 0, 0, 6, 35,
|
||||
/* 103 */ 7, 202, 0, 6, 0, 32, 6, 0, 0, 5, 36,
|
||||
/* 104 */ 7, 84, 24, 5, 78, 28, 5, 30, 0, 17, 36,
|
||||
/* 105 */ 7, 82, 24, 9, 74, 28, 9, 29, 0, 15, 37,
|
||||
/* 106 */ 7, 82, 24, 9, 74, 28, 9, 30, 0, 13, 38,
|
||||
@ -299,4 +301,295 @@ static uint8_t retropad_buttons[] =
|
||||
|
||||
/* sizeof( buttons ) = 1238 */
|
||||
|
||||
static uint8_t keyboard_body[] =
|
||||
{
|
||||
/* 0 */ 1, 255,
|
||||
/* 1 */ 1, 255,
|
||||
/* 2 */ 1, 255,
|
||||
/* 3 */ 2, 0, 255,
|
||||
/* 4 */ 2, 0, 255,
|
||||
/* 5 */ 2, 0, 255,
|
||||
/* 6 */ 2, 0, 255,
|
||||
/* 7 */ 2, 0, 255,
|
||||
/* 8 */ 2, 0, 255,
|
||||
/* 9 */ 2, 0, 255,
|
||||
/* 10 */ 2, 0, 255,
|
||||
/* 11 */ 2, 0, 255,
|
||||
/* 12 */ 2, 0, 255,
|
||||
/* 13 */ 2, 0, 255,
|
||||
/* 14 */ 2, 0, 255,
|
||||
/* 15 */ 2, 0, 255,
|
||||
/* 16 */ 2, 0, 255,
|
||||
/* 17 */ 2, 0, 255,
|
||||
/* 18 */ 2, 0, 255,
|
||||
/* 19 */ 2, 0, 255,
|
||||
/* 20 */ 2, 0, 255,
|
||||
/* 21 */ 2, 0, 255,
|
||||
/* 22 */ 2, 0, 255,
|
||||
/* 23 */ 2, 0, 255,
|
||||
/* 24 */ 2, 0, 255,
|
||||
/* 25 */ 2, 0, 255,
|
||||
/* 26 */ 2, 0, 255,
|
||||
/* 27 */ 2, 0, 255,
|
||||
/* 28 */ 2, 0, 255,
|
||||
/* 29 */ 2, 0, 255,
|
||||
/* 30 */ 2, 0, 255,
|
||||
/* 31 */ 2, 0, 255,
|
||||
/* 32 */ 2, 0, 255,
|
||||
/* 33 */ 2, 0, 255,
|
||||
/* 34 */ 2, 0, 255,
|
||||
/* 35 */ 2, 0, 255,
|
||||
/* 36 */ 2, 0, 255,
|
||||
/* 37 */ 2, 0, 255,
|
||||
/* 38 */ 2, 0, 255,
|
||||
/* 39 */ 2, 0, 255,
|
||||
/* 40 */ 2, 0, 255,
|
||||
/* 41 */ 2, 0, 255,
|
||||
/* 42 */ 2, 0, 255,
|
||||
/* 43 */ 2, 0, 255,
|
||||
/* 44 */ 2, 0, 255,
|
||||
/* 45 */ 2, 0, 255,
|
||||
/* 46 */ 2, 0, 255,
|
||||
/* 47 */ 2, 0, 255,
|
||||
/* 48 */ 2, 0, 255,
|
||||
/* 49 */ 2, 0, 255,
|
||||
/* 50 */ 2, 0, 255,
|
||||
/* 51 */ 2, 0, 255,
|
||||
/* 52 */ 2, 0, 255,
|
||||
/* 53 */ 2, 0, 255,
|
||||
/* 54 */ 2, 0, 255,
|
||||
/* 55 */ 2, 0, 255,
|
||||
/* 56 */ 2, 0, 255,
|
||||
/* 57 */ 2, 0, 255,
|
||||
/* 58 */ 2, 0, 255,
|
||||
/* 59 */ 2, 0, 255,
|
||||
/* 60 */ 2, 0, 255,
|
||||
/* 61 */ 2, 0, 255,
|
||||
/* 62 */ 2, 0, 255,
|
||||
/* 63 */ 2, 0, 255,
|
||||
/* 64 */ 2, 0, 255,
|
||||
/* 65 */ 2, 0, 255,
|
||||
/* 66 */ 2, 0, 255,
|
||||
/* 67 */ 2, 0, 255,
|
||||
/* 68 */ 2, 0, 255,
|
||||
/* 69 */ 2, 0, 255,
|
||||
/* 70 */ 2, 0, 255,
|
||||
/* 71 */ 2, 0, 255,
|
||||
/* 72 */ 2, 0, 255,
|
||||
/* 73 */ 2, 0, 255,
|
||||
/* 74 */ 2, 0, 255,
|
||||
/* 75 */ 2, 0, 255,
|
||||
/* 76 */ 2, 0, 255,
|
||||
/* 77 */ 2, 0, 255,
|
||||
/* 78 */ 2, 0, 255,
|
||||
/* 79 */ 2, 0, 255,
|
||||
/* 80 */ 2, 0, 255,
|
||||
/* 81 */ 2, 0, 255,
|
||||
/* 82 */ 2, 0, 255,
|
||||
/* 83 */ 2, 0, 255,
|
||||
/* 84 */ 2, 0, 255,
|
||||
/* 85 */ 2, 0, 255,
|
||||
/* 86 */ 2, 0, 255,
|
||||
/* 87 */ 2, 0, 255,
|
||||
/* 88 */ 2, 0, 255,
|
||||
/* 89 */ 2, 0, 255,
|
||||
/* 90 */ 2, 0, 255,
|
||||
/* 91 */ 2, 0, 255,
|
||||
/* 92 */ 2, 0, 255,
|
||||
/* 93 */ 2, 0, 255,
|
||||
/* 94 */ 2, 0, 255,
|
||||
/* 95 */ 2, 0, 255,
|
||||
/* 96 */ 2, 0, 255,
|
||||
/* 97 */ 2, 0, 255,
|
||||
/* 98 */ 2, 0, 255,
|
||||
/* 99 */ 2, 0, 255,
|
||||
/* 100 */ 2, 0, 255,
|
||||
/* 101 */ 2, 0, 255,
|
||||
/* 102 */ 2, 0, 255,
|
||||
/* 103 */ 2, 0, 255,
|
||||
/* 104 */ 2, 0, 255,
|
||||
/* 105 */ 2, 0, 255,
|
||||
/* 106 */ 2, 0, 255,
|
||||
/* 107 */ 2, 0, 255,
|
||||
/* 108 */ 2, 0, 255,
|
||||
/* 109 */ 2, 0, 255,
|
||||
/* 110 */ 2, 0, 255,
|
||||
/* 111 */ 2, 0, 255,
|
||||
/* 112 */ 2, 0, 255,
|
||||
/* 113 */ 2, 0, 255,
|
||||
/* 114 */ 2, 0, 255,
|
||||
/* 115 */ 2, 0, 255,
|
||||
/* 116 */ 2, 0, 255,
|
||||
/* 117 */ 2, 0, 255,
|
||||
/* 118 */ 2, 0, 255,
|
||||
/* 119 */ 2, 0, 255,
|
||||
/* 120 */ 2, 0, 255,
|
||||
/* 121 */ 2, 0, 255,
|
||||
/* 122 */ 2, 0, 255,
|
||||
/* 123 */ 2, 0, 255,
|
||||
/* 124 */ 2, 0, 255,
|
||||
/* 125 */ 2, 0, 255,
|
||||
/* 126 */ 2, 0, 255,
|
||||
/* 127 */ 2, 0, 255,
|
||||
/* 128 */ 2, 0, 255,
|
||||
/* 129 */ 2, 0, 255,
|
||||
/* 130 */ 2, 0, 255,
|
||||
/* 131 */ 2, 0, 255,
|
||||
/* 132 */ 2, 0, 255,
|
||||
/* 133 */ 2, 0, 255,
|
||||
/* 134 */ 2, 0, 255,
|
||||
/* 135 */ 2, 0, 255,
|
||||
/* 136 */ 2, 0, 255,
|
||||
/* 137 */ 1, 255,
|
||||
/* 138 */ 1, 255,
|
||||
/* 139 */ 1, 255,
|
||||
/* 140 */ 1, 255,
|
||||
/* 141 */ 1, 255,
|
||||
};
|
||||
|
||||
static uint16_t keyboard_buttons[] =
|
||||
{
|
||||
/* 0 */ 1, 255,
|
||||
/* 1 */ 1, 255,
|
||||
/* 2 */ 1, 255,
|
||||
/* 3 */ 1, 255,
|
||||
/* 4 */ 69, 1, 27, 3, 22, 282, 4, 1, 282, 1, 5, 283, 3, 1, 283, 3, 5, 284, 3, 1, 284, 3, 5, 285, 3, 1, 285, 1, 2, 285, 1, 13, 286, 3, 1, 286, 4, 4, 287, 3, 2, 287, 3, 4, 288, 3, 1, 288, 4, 4, 289, 3, 2, 289, 2, 14, 290, 4, 1, 290, 3, 4, 291, 2, 1, 291, 1, 1, 291, 3, 4, 292, 4, 1, 292, 1, 1, 292, 1, 4, 293, 2, 1, 293, 1, 1, 293, 3, 5, 316, 4, 1, 316, 3, 4, 302, 3, 1, 302, 1, 7, 19, 3, 40,
|
||||
/* 5 */ 69, 1, 27, 3, 22, 282, 4, 1, 282, 1, 5, 283, 3, 1, 283, 3, 5, 284, 3, 1, 284, 3, 5, 285, 3, 1, 285, 1, 2, 285, 1, 13, 286, 3, 1, 286, 4, 4, 287, 3, 2, 287, 3, 4, 288, 3, 1, 288, 4, 4, 289, 3, 2, 289, 2, 14, 290, 4, 1, 290, 3, 4, 291, 2, 1, 291, 1, 1, 291, 3, 4, 292, 4, 1, 292, 1, 1, 292, 1, 4, 293, 2, 1, 293, 1, 1, 293, 3, 5, 316, 4, 1, 316, 3, 4, 302, 3, 1, 302, 1, 7, 19, 3, 40,
|
||||
/* 6 */ 85, 1, 27, 1, 1, 27, 3, 1, 27, 2, 17, 282, 1, 4, 282, 1, 5, 283, 1, 6, 283, 1, 4, 284, 1, 6, 284, 1, 4, 285, 1, 3, 285, 1, 2, 285, 1, 13, 286, 1, 3, 286, 1, 7, 287, 1, 3, 287, 1, 7, 288, 1, 6, 288, 1, 4, 289, 1, 3, 289, 1, 2, 289, 1, 13, 290, 1, 4, 290, 1, 1, 290, 1, 4, 291, 1, 2, 291, 1, 1, 291, 1, 1, 291, 1, 4, 292, 1, 4, 292, 1, 1, 292, 1, 4, 293, 1, 2, 293, 1, 3, 293, 1, 5, 316, 1, 2, 316, 1, 1, 316, 1, 6, 302, 1, 3, 302, 1, 7, 19, 1, 1, 19, 1, 1, 19, 3, 36,
|
||||
/* 7 */ 85, 1, 27, 1, 1, 27, 3, 1, 27, 2, 17, 282, 1, 4, 282, 1, 5, 283, 1, 6, 283, 1, 4, 284, 1, 6, 284, 1, 4, 285, 1, 3, 285, 1, 2, 285, 1, 13, 286, 1, 3, 286, 1, 7, 287, 1, 3, 287, 1, 7, 288, 1, 6, 288, 1, 4, 289, 1, 3, 289, 1, 2, 289, 1, 13, 290, 1, 4, 290, 1, 1, 290, 1, 4, 291, 1, 2, 291, 1, 1, 291, 1, 1, 291, 1, 4, 292, 1, 4, 292, 1, 1, 292, 1, 4, 293, 1, 2, 293, 1, 3, 293, 1, 5, 316, 1, 2, 316, 1, 1, 316, 1, 6, 302, 1, 3, 302, 1, 7, 19, 1, 1, 19, 1, 1, 19, 3, 36,
|
||||
/* 8 */ 79, 1, 27, 2, 1, 27, 1, 2, 27, 1, 18, 282, 4, 1, 282, 1, 5, 283, 3, 3, 283, 1, 5, 284, 3, 1, 284, 3, 5, 285, 3, 1, 285, 4, 13, 286, 3, 1, 286, 3, 5, 287, 3, 1, 287, 3, 5, 288, 3, 4, 288, 1, 4, 289, 3, 2, 289, 2, 14, 290, 4, 1, 290, 3, 4, 291, 2, 1, 291, 1, 1, 291, 1, 1, 291, 1, 4, 292, 4, 1, 292, 1, 1, 292, 1, 4, 293, 2, 1, 293, 1, 3, 293, 1, 5, 316, 1, 2, 316, 1, 1, 316, 3, 4, 302, 3, 1, 302, 1, 7, 19, 1, 1, 19, 1, 4, 19, 1, 35,
|
||||
/* 9 */ 79, 1, 27, 2, 1, 27, 1, 2, 27, 1, 18, 282, 4, 1, 282, 1, 5, 283, 3, 3, 283, 1, 5, 284, 3, 1, 284, 3, 5, 285, 3, 1, 285, 4, 13, 286, 3, 1, 286, 3, 5, 287, 3, 1, 287, 3, 5, 288, 3, 4, 288, 1, 4, 289, 3, 2, 289, 2, 14, 290, 4, 1, 290, 3, 4, 291, 2, 1, 291, 1, 1, 291, 1, 1, 291, 1, 4, 292, 4, 1, 292, 1, 1, 292, 1, 4, 293, 2, 1, 293, 1, 3, 293, 1, 5, 316, 1, 2, 316, 1, 1, 316, 3, 4, 302, 3, 1, 302, 1, 7, 19, 1, 1, 19, 1, 4, 19, 1, 35,
|
||||
/* 10 */ 79, 1, 27, 1, 2, 27, 2, 1, 27, 1, 18, 282, 1, 4, 282, 1, 5, 283, 1, 4, 283, 1, 6, 284, 1, 6, 284, 1, 4, 285, 1, 6, 285, 1, 13, 286, 1, 6, 286, 1, 4, 287, 1, 3, 287, 1, 2, 287, 1, 4, 288, 1, 5, 288, 1, 5, 289, 1, 3, 289, 1, 2, 289, 1, 13, 290, 1, 6, 290, 1, 4, 291, 1, 2, 291, 1, 1, 291, 1, 1, 291, 1, 4, 292, 1, 4, 292, 1, 1, 292, 1, 4, 293, 1, 2, 293, 1, 2, 293, 1, 6, 316, 4, 3, 316, 1, 6, 302, 1, 1, 302, 1, 7, 19, 3, 1, 19, 4, 35,
|
||||
/* 11 */ 79, 1, 27, 1, 2, 27, 2, 1, 27, 1, 18, 282, 1, 4, 282, 1, 5, 283, 1, 4, 283, 1, 6, 284, 1, 6, 284, 1, 4, 285, 1, 6, 285, 1, 13, 286, 1, 6, 286, 1, 4, 287, 1, 3, 287, 1, 2, 287, 1, 4, 288, 1, 5, 288, 1, 5, 289, 1, 3, 289, 1, 2, 289, 1, 13, 290, 1, 6, 290, 1, 4, 291, 1, 2, 291, 1, 1, 291, 1, 1, 291, 1, 4, 292, 1, 4, 292, 1, 1, 292, 1, 4, 293, 1, 2, 293, 1, 2, 293, 1, 6, 316, 4, 3, 316, 1, 6, 302, 1, 1, 302, 1, 7, 19, 3, 1, 19, 4, 35,
|
||||
/* 12 */ 81, 1, 27, 1, 3, 27, 1, 1, 27, 1, 18, 282, 1, 4, 282, 1, 5, 283, 1, 3, 283, 1, 7, 284, 1, 6, 284, 1, 4, 285, 1, 6, 285, 1, 13, 286, 1, 6, 286, 1, 4, 287, 1, 3, 287, 1, 2, 287, 1, 4, 288, 1, 4, 288, 1, 6, 289, 1, 3, 289, 1, 2, 289, 1, 13, 290, 1, 6, 290, 1, 4, 291, 1, 2, 291, 1, 1, 291, 1, 1, 291, 1, 4, 292, 1, 4, 292, 1, 1, 292, 1, 4, 293, 1, 2, 293, 1, 1, 293, 1, 7, 316, 1, 6, 316, 1, 6, 302, 1, 1, 302, 1, 7, 19, 1, 3, 19, 1, 2, 19, 1, 35,
|
||||
/* 13 */ 81, 1, 27, 1, 3, 27, 1, 1, 27, 1, 18, 282, 1, 4, 282, 1, 5, 283, 1, 3, 283, 1, 7, 284, 1, 6, 284, 1, 4, 285, 1, 6, 285, 1, 13, 286, 1, 6, 286, 1, 4, 287, 1, 3, 287, 1, 2, 287, 1, 4, 288, 1, 4, 288, 1, 6, 289, 1, 3, 289, 1, 2, 289, 1, 13, 290, 1, 6, 290, 1, 4, 291, 1, 2, 291, 1, 1, 291, 1, 1, 291, 1, 4, 292, 1, 4, 292, 1, 1, 292, 1, 4, 293, 1, 2, 293, 1, 1, 293, 1, 7, 316, 1, 6, 316, 1, 6, 302, 1, 1, 302, 1, 7, 19, 1, 3, 19, 1, 2, 19, 1, 35,
|
||||
/* 14 */ 73, 1, 27, 2, 1, 27, 2, 1, 27, 2, 17, 282, 1, 4, 282, 1, 5, 283, 1, 3, 283, 4, 4, 284, 1, 3, 284, 3, 5, 285, 1, 6, 285, 1, 13, 286, 1, 3, 286, 3, 5, 287, 1, 4, 287, 2, 5, 288, 1, 3, 288, 1, 7, 289, 1, 4, 289, 2, 14, 290, 1, 4, 290, 3, 4, 291, 1, 2, 291, 1, 1, 291, 3, 4, 292, 1, 4, 292, 1, 1, 292, 1, 4, 293, 1, 2, 293, 1, 1, 293, 3, 5, 316, 1, 4, 316, 3, 4, 302, 3, 1, 302, 4, 4, 19, 1, 3, 19, 4, 35,
|
||||
/* 15 */ 73, 1, 27, 2, 1, 27, 2, 1, 27, 2, 17, 282, 1, 4, 282, 1, 5, 283, 1, 3, 283, 4, 4, 284, 1, 3, 284, 3, 5, 285, 1, 6, 285, 1, 13, 286, 1, 3, 286, 3, 5, 287, 1, 4, 287, 2, 5, 288, 1, 3, 288, 1, 7, 289, 1, 4, 289, 2, 14, 290, 1, 4, 290, 3, 4, 291, 1, 2, 291, 1, 1, 291, 3, 4, 292, 1, 4, 292, 1, 1, 292, 1, 4, 293, 1, 2, 293, 1, 1, 293, 3, 5, 316, 1, 4, 316, 3, 4, 302, 3, 1, 302, 4, 4, 19, 1, 3, 19, 4, 35,
|
||||
/* 16 */ 1, 255,
|
||||
/* 17 */ 1, 255,
|
||||
/* 18 */ 1, 255,
|
||||
/* 19 */ 1, 255,
|
||||
/* 20 */ 1, 255,
|
||||
/* 21 */ 1, 255,
|
||||
/* 22 */ 1, 255,
|
||||
/* 23 */ 1, 255,
|
||||
/* 24 */ 1, 255,
|
||||
/* 25 */ 1, 255,
|
||||
/* 26 */ 1, 255,
|
||||
/* 27 */ 1, 255,
|
||||
/* 28 */ 1, 255,
|
||||
/* 29 */ 1, 255,
|
||||
/* 30 */ 49, 16, 49, 1, 10, 50, 3, 10, 51, 3, 8, 52, 1, 2, 52, 1, 8, 53, 4, 9, 54, 3, 8, 55, 4, 9, 56, 2, 9, 57, 4, 7, 48, 4, 31, 8, 3, 14, 8, 4, 10, 277, 1, 11, 278, 1, 2, 278, 1, 8, 280, 3, 1, 280, 1, 2, 280, 1, 4, 300, 1, 2, 300, 1, 1, 300, 1, 7, 267, 1, 5, 268, 1, 11,
|
||||
/* 31 */ 49, 16, 49, 1, 10, 50, 3, 10, 51, 3, 8, 52, 1, 2, 52, 1, 8, 53, 4, 9, 54, 3, 8, 55, 4, 9, 56, 2, 9, 57, 4, 7, 48, 4, 31, 8, 3, 14, 8, 4, 10, 277, 1, 11, 278, 1, 2, 278, 1, 8, 280, 3, 1, 280, 1, 2, 280, 1, 4, 300, 1, 2, 300, 1, 1, 300, 1, 7, 267, 1, 5, 268, 1, 11,
|
||||
/* 32 */ 83, 3, 96, 2, 2, 96, 1, 8, 49, 1, 13, 50, 1, 12, 51, 1, 7, 52, 1, 2, 52, 1, 8, 53, 1, 11, 54, 1, 14, 55, 1, 8, 56, 1, 2, 56, 1, 8, 57, 1, 2, 57, 1, 7, 48, 1, 2, 48, 1, 22, 61, 3, 6, 8, 1, 2, 8, 1, 1, 8, 2, 3, 8, 2, 1, 8, 1, 3, 8, 1, 4, 8, 4, 5, 277, 1, 1, 277, 2, 2, 277, 2, 4, 278, 1, 2, 278, 1, 2, 278, 1, 5, 280, 1, 1, 280, 1, 1, 280, 1, 2, 280, 1, 4, 300, 2, 1, 300, 1, 1, 300, 1, 7, 267, 1, 3, 268, 1, 1, 268, 1, 1, 268, 1, 9,
|
||||
/* 33 */ 83, 3, 96, 2, 2, 96, 1, 8, 49, 1, 13, 50, 1, 12, 51, 1, 7, 52, 1, 2, 52, 1, 8, 53, 1, 11, 54, 1, 14, 55, 1, 8, 56, 1, 2, 56, 1, 8, 57, 1, 2, 57, 1, 7, 48, 1, 2, 48, 1, 22, 61, 3, 6, 8, 1, 2, 8, 1, 1, 8, 2, 3, 8, 2, 1, 8, 1, 3, 8, 1, 4, 8, 4, 5, 277, 1, 1, 277, 2, 2, 277, 2, 4, 278, 1, 2, 278, 1, 2, 278, 1, 5, 280, 1, 1, 280, 1, 1, 280, 1, 2, 280, 1, 4, 300, 2, 1, 300, 1, 1, 300, 1, 7, 267, 1, 3, 268, 1, 1, 268, 1, 1, 268, 1, 9,
|
||||
/* 34 */ 77, 2, 96, 1, 2, 96, 2, 9, 49, 1, 12, 50, 1, 10, 51, 3, 8, 52, 4, 8, 53, 3, 9, 54, 3, 12, 55, 1, 9, 56, 2, 9, 57, 4, 7, 48, 1, 2, 48, 1, 9, 45, 3, 19, 8, 3, 4, 8, 1, 1, 8, 1, 3, 8, 1, 3, 8, 4, 1, 8, 1, 2, 8, 1, 5, 277, 1, 1, 277, 1, 1, 277, 1, 1, 277, 1, 5, 278, 4, 1, 278, 1, 1, 278, 1, 4, 280, 1, 1, 280, 1, 1, 280, 1, 2, 280, 1, 4, 300, 1, 1, 300, 2, 1, 300, 1, 6, 267, 1, 5, 268, 3, 4, 269, 3, 3,
|
||||
/* 35 */ 77, 2, 96, 1, 2, 96, 2, 9, 49, 1, 12, 50, 1, 10, 51, 3, 8, 52, 4, 8, 53, 3, 9, 54, 3, 12, 55, 1, 9, 56, 2, 9, 57, 4, 7, 48, 1, 2, 48, 1, 9, 45, 3, 19, 8, 3, 4, 8, 1, 1, 8, 1, 3, 8, 1, 3, 8, 4, 1, 8, 1, 2, 8, 1, 5, 277, 1, 1, 277, 1, 1, 277, 1, 1, 277, 1, 5, 278, 4, 1, 278, 1, 1, 278, 1, 4, 280, 1, 1, 280, 1, 1, 280, 1, 2, 280, 1, 4, 300, 1, 1, 300, 2, 1, 300, 1, 6, 267, 1, 5, 268, 3, 4, 269, 3, 3,
|
||||
/* 36 */ 79, 16, 49, 1, 11, 50, 1, 14, 51, 1, 10, 52, 1, 11, 53, 1, 8, 54, 1, 2, 54, 1, 10, 55, 1, 9, 56, 1, 2, 56, 1, 11, 57, 1, 7, 48, 1, 2, 48, 1, 22, 61, 3, 6, 8, 1, 2, 8, 1, 1, 8, 3, 1, 8, 1, 3, 8, 1, 1, 8, 1, 4, 8, 1, 1, 8, 4, 5, 277, 1, 1, 277, 1, 1, 277, 1, 1, 277, 2, 4, 278, 1, 2, 278, 1, 1, 278, 1, 1, 278, 1, 4, 280, 3, 1, 280, 1, 2, 280, 1, 4, 300, 1, 2, 300, 1, 1, 300, 1, 6, 267, 1, 5, 268, 1, 1, 268, 1, 10,
|
||||
/* 37 */ 79, 16, 49, 1, 11, 50, 1, 14, 51, 1, 10, 52, 1, 11, 53, 1, 8, 54, 1, 2, 54, 1, 10, 55, 1, 9, 56, 1, 2, 56, 1, 11, 57, 1, 7, 48, 1, 2, 48, 1, 22, 61, 3, 6, 8, 1, 2, 8, 1, 1, 8, 3, 1, 8, 1, 3, 8, 1, 1, 8, 1, 4, 8, 1, 1, 8, 4, 5, 277, 1, 1, 277, 1, 1, 277, 1, 1, 277, 2, 4, 278, 1, 2, 278, 1, 1, 278, 1, 1, 278, 1, 4, 280, 3, 1, 280, 1, 2, 280, 1, 4, 300, 1, 2, 300, 1, 1, 300, 1, 6, 267, 1, 5, 268, 1, 1, 268, 1, 10,
|
||||
/* 38 */ 77, 16, 49, 1, 10, 50, 1, 15, 51, 1, 10, 52, 1, 11, 53, 1, 8, 54, 1, 2, 54, 1, 9, 55, 1, 10, 56, 1, 2, 56, 1, 11, 57, 1, 7, 48, 1, 2, 48, 1, 31, 8, 1, 2, 8, 1, 1, 8, 1, 1, 8, 1, 1, 8, 1, 3, 8, 2, 5, 8, 1, 1, 8, 1, 8, 277, 1, 1, 277, 1, 1, 277, 1, 2, 277, 1, 4, 278, 1, 2, 278, 1, 1, 278, 1, 1, 278, 1, 4, 280, 1, 3, 280, 1, 2, 280, 1, 4, 300, 1, 2, 300, 1, 1, 300, 1, 5, 267, 1, 5, 268, 1, 3, 268, 1, 9,
|
||||
/* 39 */ 77, 16, 49, 1, 10, 50, 1, 15, 51, 1, 10, 52, 1, 11, 53, 1, 8, 54, 1, 2, 54, 1, 9, 55, 1, 10, 56, 1, 2, 56, 1, 11, 57, 1, 7, 48, 1, 2, 48, 1, 31, 8, 1, 2, 8, 1, 1, 8, 1, 1, 8, 1, 1, 8, 1, 3, 8, 2, 5, 8, 1, 1, 8, 1, 8, 277, 1, 1, 277, 1, 1, 277, 1, 2, 277, 1, 4, 278, 1, 2, 278, 1, 1, 278, 1, 1, 278, 1, 4, 280, 1, 3, 280, 1, 2, 280, 1, 4, 300, 1, 2, 300, 1, 1, 300, 1, 5, 267, 1, 5, 268, 1, 3, 268, 1, 9,
|
||||
/* 40 */ 61, 16, 49, 1, 10, 50, 4, 9, 51, 3, 11, 52, 1, 8, 53, 3, 10, 54, 2, 9, 55, 1, 12, 56, 2, 9, 57, 4, 7, 48, 4, 31, 8, 3, 2, 8, 3, 2, 8, 2, 1, 8, 1, 1, 8, 1, 1, 8, 4, 1, 8, 1, 8, 277, 1, 1, 277, 1, 1, 277, 1, 1, 277, 2, 4, 278, 1, 2, 278, 1, 2, 278, 1, 5, 280, 1, 4, 280, 2, 5, 300, 1, 2, 300, 1, 1, 300, 3, 3, 267, 1, 19,
|
||||
/* 41 */ 61, 16, 49, 1, 10, 50, 4, 9, 51, 3, 11, 52, 1, 8, 53, 3, 10, 54, 2, 9, 55, 1, 12, 56, 2, 9, 57, 4, 7, 48, 4, 31, 8, 3, 2, 8, 3, 2, 8, 2, 1, 8, 1, 1, 8, 1, 1, 8, 4, 1, 8, 1, 8, 277, 1, 1, 277, 1, 1, 277, 1, 1, 277, 2, 4, 278, 1, 2, 278, 1, 2, 278, 1, 5, 280, 1, 4, 280, 2, 5, 300, 1, 2, 300, 1, 1, 300, 3, 3, 267, 1, 19,
|
||||
/* 42 */ 1, 255,
|
||||
/* 43 */ 1, 255,
|
||||
/* 44 */ 1, 255,
|
||||
/* 45 */ 1, 255,
|
||||
/* 46 */ 1, 255,
|
||||
/* 47 */ 1, 255,
|
||||
/* 48 */ 1, 255,
|
||||
/* 49 */ 1, 255,
|
||||
/* 50 */ 53, 1, 9, 3, 2, 9, 2, 2, 9, 3, 8, 113, 3, 8, 119, 1, 3, 119, 1, 5, 101, 4, 10, 114, 3, 9, 116, 5, 7, 121, 1, 3, 121, 1, 7, 117, 1, 2, 117, 1, 10, 105, 1, 10, 111, 2, 9, 112, 4, 8, 91, 3, 10, 93, 3, 32, 127, 2, 5, 127, 1, 4, 279, 3, 9, 281, 3, 1, 281, 3, 7, 263, 4, 5, 264, 2, 4, 265, 4, 10,
|
||||
/* 51 */ 53, 1, 9, 3, 2, 9, 2, 2, 9, 3, 8, 113, 3, 8, 119, 1, 3, 119, 1, 5, 101, 4, 10, 114, 3, 9, 116, 5, 7, 121, 1, 3, 121, 1, 7, 117, 1, 2, 117, 1, 10, 105, 1, 10, 111, 2, 9, 112, 4, 8, 91, 3, 10, 93, 3, 32, 127, 2, 5, 127, 1, 4, 279, 3, 9, 281, 3, 1, 281, 3, 7, 263, 4, 5, 264, 2, 4, 265, 4, 10,
|
||||
/* 52 */ 79, 2, 9, 1, 2, 9, 1, 2, 9, 1, 1, 9, 1, 2, 9, 1, 6, 113, 1, 3, 113, 1, 7, 119, 1, 3, 119, 1, 5, 101, 1, 13, 114, 1, 2, 114, 1, 10, 116, 1, 9, 121, 1, 3, 121, 1, 7, 117, 1, 2, 117, 1, 10, 105, 1, 9, 111, 1, 2, 111, 1, 8, 112, 1, 2, 112, 1, 8, 91, 1, 14, 93, 1, 32, 127, 1, 1, 127, 1, 1, 127, 2, 1, 127, 1, 4, 279, 1, 3, 279, 3, 5, 281, 1, 1, 281, 1, 1, 281, 1, 2, 281, 1, 9, 263, 1, 4, 264, 1, 2, 264, 1, 3, 265, 1, 2, 265, 1, 10,
|
||||
/* 53 */ 79, 2, 9, 1, 2, 9, 1, 2, 9, 1, 1, 9, 1, 2, 9, 1, 6, 113, 1, 3, 113, 1, 7, 119, 1, 3, 119, 1, 5, 101, 1, 13, 114, 1, 2, 114, 1, 10, 116, 1, 9, 121, 1, 3, 121, 1, 7, 117, 1, 2, 117, 1, 10, 105, 1, 9, 111, 1, 2, 111, 1, 8, 112, 1, 2, 112, 1, 8, 91, 1, 14, 93, 1, 32, 127, 1, 1, 127, 1, 1, 127, 2, 1, 127, 1, 4, 279, 1, 3, 279, 3, 5, 281, 1, 1, 281, 1, 1, 281, 1, 2, 281, 1, 9, 263, 1, 4, 264, 1, 2, 264, 1, 3, 265, 1, 2, 265, 1, 10,
|
||||
/* 54 */ 73, 2, 9, 1, 2, 9, 1, 2, 9, 1, 1, 9, 3, 7, 113, 1, 3, 113, 1, 7, 119, 1, 3, 119, 1, 5, 101, 4, 10, 114, 3, 11, 116, 1, 10, 121, 1, 1, 121, 1, 8, 117, 1, 2, 117, 1, 10, 105, 1, 9, 111, 1, 2, 111, 1, 8, 112, 1, 2, 112, 1, 8, 91, 1, 14, 93, 1, 32, 127, 1, 1, 127, 1, 1, 127, 1, 2, 127, 1, 4, 279, 3, 1, 279, 1, 2, 279, 1, 4, 281, 1, 1, 281, 1, 1, 281, 1, 2, 281, 1, 9, 263, 1, 5, 264, 2, 4, 265, 4, 10,
|
||||
/* 55 */ 73, 2, 9, 1, 2, 9, 1, 2, 9, 1, 1, 9, 3, 7, 113, 1, 3, 113, 1, 7, 119, 1, 3, 119, 1, 5, 101, 4, 10, 114, 3, 11, 116, 1, 10, 121, 1, 1, 121, 1, 8, 117, 1, 2, 117, 1, 10, 105, 1, 9, 111, 1, 2, 111, 1, 8, 112, 1, 2, 112, 1, 8, 91, 1, 14, 93, 1, 32, 127, 1, 1, 127, 1, 1, 127, 1, 2, 127, 1, 4, 279, 3, 1, 279, 1, 2, 279, 1, 4, 281, 1, 1, 281, 1, 1, 281, 1, 2, 281, 1, 9, 263, 1, 5, 264, 2, 4, 265, 4, 10,
|
||||
/* 56 */ 75, 2, 9, 1, 2, 9, 4, 1, 9, 1, 2, 9, 1, 6, 113, 1, 1, 113, 1, 1, 113, 1, 7, 119, 1, 1, 119, 1, 1, 119, 1, 5, 101, 1, 13, 114, 1, 2, 114, 1, 10, 116, 1, 11, 121, 1, 9, 117, 1, 2, 117, 1, 10, 105, 1, 9, 111, 1, 2, 111, 1, 8, 112, 4, 8, 91, 1, 14, 93, 1, 32, 127, 1, 1, 127, 1, 1, 127, 2, 1, 127, 1, 4, 279, 1, 3, 279, 1, 2, 279, 1, 4, 281, 3, 1, 281, 1, 2, 281, 1, 8, 263, 1, 5, 264, 1, 2, 264, 1, 6, 265, 1, 10,
|
||||
/* 57 */ 75, 2, 9, 1, 2, 9, 4, 1, 9, 1, 2, 9, 1, 6, 113, 1, 1, 113, 1, 1, 113, 1, 7, 119, 1, 1, 119, 1, 1, 119, 1, 5, 101, 1, 13, 114, 1, 2, 114, 1, 10, 116, 1, 11, 121, 1, 9, 117, 1, 2, 117, 1, 10, 105, 1, 9, 111, 1, 2, 111, 1, 8, 112, 4, 8, 91, 1, 14, 93, 1, 32, 127, 1, 1, 127, 1, 1, 127, 2, 1, 127, 1, 4, 279, 1, 3, 279, 1, 2, 279, 1, 4, 281, 3, 1, 281, 1, 2, 281, 1, 8, 263, 1, 5, 264, 1, 2, 264, 1, 6, 265, 1, 10,
|
||||
/* 58 */ 79, 2, 9, 1, 2, 9, 1, 2, 9, 1, 1, 9, 1, 2, 9, 1, 6, 113, 1, 2, 113, 1, 8, 119, 1, 1, 119, 1, 1, 119, 1, 5, 101, 1, 13, 114, 1, 2, 114, 1, 10, 116, 1, 11, 121, 1, 9, 117, 1, 2, 117, 1, 10, 105, 1, 9, 111, 1, 2, 111, 1, 8, 112, 1, 11, 91, 1, 14, 93, 1, 11, 13, 3, 7, 13, 1, 10, 127, 1, 1, 127, 1, 1, 127, 1, 2, 127, 1, 4, 279, 1, 3, 279, 1, 2, 279, 1, 4, 281, 1, 3, 281, 1, 2, 281, 1, 7, 263, 1, 6, 264, 1, 2, 264, 1, 6, 265, 1, 10,
|
||||
/* 59 */ 79, 2, 9, 1, 2, 9, 1, 2, 9, 1, 1, 9, 1, 2, 9, 1, 6, 113, 1, 2, 113, 1, 8, 119, 1, 1, 119, 1, 1, 119, 1, 5, 101, 1, 13, 114, 1, 2, 114, 1, 10, 116, 1, 11, 121, 1, 9, 117, 1, 2, 117, 1, 10, 105, 1, 9, 111, 1, 2, 111, 1, 8, 112, 1, 11, 91, 1, 14, 93, 1, 11, 13, 3, 7, 13, 1, 10, 127, 1, 1, 127, 1, 1, 127, 1, 2, 127, 1, 4, 279, 1, 3, 279, 1, 2, 279, 1, 4, 281, 1, 3, 281, 1, 2, 281, 1, 7, 263, 1, 6, 264, 1, 2, 264, 1, 6, 265, 1, 10,
|
||||
/* 60 */ 69, 2, 9, 1, 2, 9, 1, 2, 9, 1, 1, 9, 3, 8, 113, 2, 1, 113, 1, 8, 119, 1, 1, 119, 1, 6, 101, 4, 10, 114, 1, 2, 114, 1, 10, 116, 1, 11, 121, 1, 10, 117, 2, 11, 105, 1, 10, 111, 2, 9, 112, 1, 11, 91, 3, 10, 93, 3, 11, 13, 1, 3, 13, 3, 3, 13, 1, 3, 13, 2, 5, 127, 2, 2, 127, 2, 1, 127, 1, 4, 279, 3, 1, 279, 1, 2, 279, 1, 4, 281, 1, 3, 281, 3, 7, 263, 1, 8, 264, 2, 4, 265, 4, 10,
|
||||
/* 61 */ 69, 2, 9, 1, 2, 9, 1, 2, 9, 1, 1, 9, 3, 8, 113, 2, 1, 113, 1, 8, 119, 1, 1, 119, 1, 6, 101, 4, 10, 114, 1, 2, 114, 1, 10, 116, 1, 11, 121, 1, 10, 117, 2, 11, 105, 1, 10, 111, 2, 9, 112, 1, 11, 91, 3, 10, 93, 3, 11, 13, 1, 3, 13, 3, 3, 13, 1, 3, 13, 2, 5, 127, 2, 2, 127, 2, 1, 127, 1, 4, 279, 3, 1, 279, 1, 2, 279, 1, 4, 281, 1, 3, 281, 3, 7, 263, 1, 8, 264, 2, 4, 265, 4, 10,
|
||||
/* 62 */ 13, 167, 13, 3, 1, 13, 1, 2, 13, 1, 1, 13, 3, 2, 13, 1, 68, 270, 1, 4,
|
||||
/* 63 */ 13, 167, 13, 3, 1, 13, 1, 2, 13, 1, 1, 13, 3, 2, 13, 1, 68, 270, 1, 4,
|
||||
/* 64 */ 13, 167, 13, 1, 3, 13, 1, 2, 13, 1, 2, 13, 1, 3, 13, 1, 67, 270, 3, 3,
|
||||
/* 65 */ 13, 167, 13, 1, 3, 13, 1, 2, 13, 1, 2, 13, 1, 3, 13, 1, 67, 270, 3, 3,
|
||||
/* 66 */ 13, 167, 13, 1, 3, 13, 1, 2, 13, 1, 2, 13, 1, 3, 13, 1, 68, 270, 1, 4,
|
||||
/* 67 */ 13, 167, 13, 1, 3, 13, 1, 2, 13, 1, 2, 13, 1, 3, 13, 1, 68, 270, 1, 4,
|
||||
/* 68 */ 11, 167, 13, 3, 1, 13, 1, 2, 13, 1, 3, 13, 2, 1, 13, 1, 73,
|
||||
/* 69 */ 11, 167, 13, 3, 1, 13, 1, 2, 13, 1, 3, 13, 2, 1, 13, 1, 73,
|
||||
/* 70 */ 37, 2, 301, 2, 21, 97, 2, 10, 115, 4, 7, 100, 3, 10, 102, 4, 9, 103, 3, 8, 104, 1, 2, 104, 1, 8, 106, 4, 6, 107, 1, 2, 107, 1, 9, 108, 1, 25, 39, 1, 10, 92, 1, 68, 260, 1, 2, 260, 1, 5, 261, 4, 3, 262, 3, 10,
|
||||
/* 71 */ 37, 2, 301, 2, 21, 97, 2, 10, 115, 4, 7, 100, 3, 10, 102, 4, 9, 103, 3, 8, 104, 1, 2, 104, 1, 8, 106, 4, 6, 107, 1, 2, 107, 1, 9, 108, 1, 25, 39, 1, 10, 92, 1, 68, 260, 1, 2, 260, 1, 5, 261, 4, 3, 262, 3, 10,
|
||||
/* 72 */ 49, 1, 301, 1, 2, 301, 1, 1, 301, 3, 2, 301, 4, 1, 301, 3, 5, 97, 1, 2, 97, 1, 9, 115, 1, 10, 100, 1, 2, 100, 1, 9, 102, 1, 11, 103, 1, 11, 104, 1, 2, 104, 1, 11, 106, 1, 6, 107, 1, 1, 107, 1, 10, 108, 1, 25, 39, 1, 10, 92, 1, 68, 260, 1, 2, 260, 1, 5, 261, 1, 5, 262, 1, 13,
|
||||
/* 73 */ 49, 1, 301, 1, 2, 301, 1, 1, 301, 3, 2, 301, 4, 1, 301, 3, 5, 97, 1, 2, 97, 1, 9, 115, 1, 10, 100, 1, 2, 100, 1, 9, 102, 1, 11, 103, 1, 11, 104, 1, 2, 104, 1, 11, 106, 1, 6, 107, 1, 1, 107, 1, 10, 108, 1, 25, 39, 1, 10, 92, 1, 68, 260, 1, 2, 260, 1, 5, 261, 1, 5, 262, 1, 13,
|
||||
/* 74 */ 45, 1, 301, 1, 7, 301, 1, 1, 301, 1, 2, 301, 1, 1, 301, 1, 7, 97, 1, 2, 97, 1, 9, 115, 4, 7, 100, 1, 2, 100, 1, 9, 102, 4, 8, 103, 1, 1, 103, 2, 8, 104, 4, 11, 106, 1, 6, 107, 2, 11, 108, 1, 12, 59, 1, 24, 92, 1, 67, 260, 4, 5, 261, 3, 3, 262, 3, 11,
|
||||
/* 75 */ 45, 1, 301, 1, 7, 301, 1, 1, 301, 1, 2, 301, 1, 1, 301, 1, 7, 97, 1, 2, 97, 1, 9, 115, 4, 7, 100, 1, 2, 100, 1, 9, 102, 4, 8, 103, 1, 1, 103, 2, 8, 104, 4, 11, 106, 1, 6, 107, 2, 11, 108, 1, 12, 59, 1, 24, 92, 1, 67, 260, 4, 5, 261, 3, 3, 262, 3, 11,
|
||||
/* 76 */ 45, 1, 301, 1, 4, 301, 4, 1, 301, 4, 1, 301, 3, 5, 97, 4, 12, 115, 1, 7, 100, 1, 2, 100, 1, 9, 102, 1, 11, 103, 1, 2, 103, 1, 8, 104, 1, 2, 104, 1, 11, 106, 1, 6, 107, 1, 1, 107, 1, 10, 108, 1, 37, 92, 1, 70, 260, 1, 8, 261, 1, 2, 262, 1, 2, 262, 1, 10,
|
||||
/* 77 */ 45, 1, 301, 1, 4, 301, 4, 1, 301, 4, 1, 301, 3, 5, 97, 4, 12, 115, 1, 7, 100, 1, 2, 100, 1, 9, 102, 1, 11, 103, 1, 2, 103, 1, 8, 104, 1, 2, 104, 1, 11, 106, 1, 6, 107, 1, 1, 107, 1, 10, 108, 1, 37, 92, 1, 70, 260, 1, 8, 261, 1, 2, 262, 1, 2, 262, 1, 10,
|
||||
/* 78 */ 55, 1, 301, 1, 2, 301, 1, 1, 301, 1, 2, 301, 1, 1, 301, 1, 6, 301, 1, 5, 97, 1, 2, 97, 1, 12, 115, 1, 7, 100, 1, 2, 100, 1, 9, 102, 1, 11, 103, 1, 2, 103, 1, 8, 104, 1, 2, 104, 1, 8, 106, 1, 2, 106, 1, 6, 107, 1, 2, 107, 1, 9, 108, 1, 12, 59, 1, 25, 92, 1, 69, 260, 1, 8, 261, 1, 2, 262, 1, 2, 262, 1, 10,
|
||||
/* 79 */ 55, 1, 301, 1, 2, 301, 1, 1, 301, 1, 2, 301, 1, 1, 301, 1, 6, 301, 1, 5, 97, 1, 2, 97, 1, 12, 115, 1, 7, 100, 1, 2, 100, 1, 9, 102, 1, 11, 103, 1, 2, 103, 1, 8, 104, 1, 2, 104, 1, 8, 106, 1, 2, 106, 1, 6, 107, 1, 2, 107, 1, 9, 108, 1, 12, 59, 1, 25, 92, 1, 69, 260, 1, 8, 261, 1, 2, 262, 1, 2, 262, 1, 10,
|
||||
/* 80 */ 43, 2, 301, 2, 2, 301, 4, 1, 301, 1, 4, 301, 3, 5, 97, 1, 2, 97, 1, 9, 115, 4, 7, 100, 3, 10, 102, 1, 12, 103, 2, 9, 104, 1, 2, 104, 1, 9, 106, 2, 7, 107, 1, 2, 107, 1, 9, 108, 4, 9, 59, 1, 25, 92, 1, 69, 260, 1, 5, 261, 3, 4, 262, 2, 11,
|
||||
/* 81 */ 43, 2, 301, 2, 2, 301, 4, 1, 301, 1, 4, 301, 3, 5, 97, 1, 2, 97, 1, 9, 115, 4, 7, 100, 3, 10, 102, 1, 12, 103, 2, 9, 104, 1, 2, 104, 1, 9, 106, 2, 7, 107, 1, 2, 107, 1, 9, 108, 4, 9, 59, 1, 25, 92, 1, 69, 260, 1, 5, 261, 3, 4, 262, 2, 11,
|
||||
/* 82 */ 1, 255,
|
||||
/* 83 */ 1, 255,
|
||||
/* 84 */ 1, 255,
|
||||
/* 85 */ 1, 255,
|
||||
/* 86 */ 1, 255,
|
||||
/* 87 */ 1, 255,
|
||||
/* 88 */ 1, 255,
|
||||
/* 89 */ 1, 255,
|
||||
/* 90 */ 53, 1, 304, 3, 8, 304, 1, 1, 304, 1, 8, 323, 1, 10, 122, 4, 7, 120, 1, 3, 120, 1, 9, 99, 2, 8, 118, 1, 3, 118, 1, 8, 98, 3, 9, 110, 1, 2, 110, 1, 8, 109, 1, 3, 109, 1, 34, 47, 1, 11, 303, 4, 1, 303, 1, 4, 303, 1, 2, 303, 3, 1, 303, 1, 28, 273, 2, 22, 257, 1, 6, 258, 3, 4, 259, 3, 4, 271, 6, 1,
|
||||
/* 91 */ 53, 1, 304, 3, 8, 304, 1, 1, 304, 1, 8, 323, 1, 10, 122, 4, 7, 120, 1, 3, 120, 1, 9, 99, 2, 8, 118, 1, 3, 118, 1, 8, 98, 3, 9, 110, 1, 2, 110, 1, 8, 109, 1, 3, 109, 1, 34, 47, 1, 11, 303, 4, 1, 303, 1, 4, 303, 1, 2, 303, 3, 1, 303, 1, 28, 273, 2, 22, 257, 1, 6, 258, 3, 4, 259, 3, 4, 271, 6, 1,
|
||||
/* 92 */ 63, 1, 304, 1, 3, 304, 1, 3, 304, 1, 1, 304, 1, 2, 304, 1, 7, 323, 1, 14, 122, 1, 7, 120, 1, 3, 120, 1, 8, 99, 1, 2, 99, 1, 7, 118, 1, 3, 118, 1, 8, 98, 1, 2, 98, 1, 8, 110, 2, 1, 110, 1, 8, 109, 2, 1, 109, 2, 34, 47, 1, 11, 303, 1, 4, 303, 1, 6, 303, 1, 4, 303, 1, 27, 273, 4, 21, 257, 1, 9, 258, 1, 6, 259, 1, 3, 271, 1, 2, 271, 1, 1, 271, 1, 1,
|
||||
/* 93 */ 63, 1, 304, 1, 3, 304, 1, 3, 304, 1, 1, 304, 1, 2, 304, 1, 7, 323, 1, 14, 122, 1, 7, 120, 1, 3, 120, 1, 8, 99, 1, 2, 99, 1, 7, 118, 1, 3, 118, 1, 8, 98, 1, 2, 98, 1, 8, 110, 2, 1, 110, 1, 8, 109, 2, 1, 109, 2, 34, 47, 1, 11, 303, 1, 4, 303, 1, 6, 303, 1, 4, 303, 1, 27, 273, 4, 21, 257, 1, 9, 258, 1, 6, 259, 1, 3, 271, 1, 2, 271, 1, 1, 271, 1, 1,
|
||||
/* 94 */ 61, 1, 304, 3, 1, 304, 1, 5, 304, 2, 1, 304, 2, 5, 323, 1, 14, 122, 1, 9, 120, 1, 1, 120, 1, 9, 99, 1, 10, 118, 1, 3, 118, 1, 8, 98, 3, 9, 110, 1, 1, 110, 2, 8, 109, 1, 1, 109, 1, 1, 109, 1, 33, 47, 1, 12, 303, 4, 1, 303, 4, 1, 303, 1, 1, 303, 3, 1, 303, 3, 25, 273, 6, 20, 257, 1, 8, 258, 1, 4, 259, 3, 4, 271, 1, 2, 271, 1, 1, 271, 1, 1,
|
||||
/* 95 */ 61, 1, 304, 3, 1, 304, 1, 5, 304, 2, 1, 304, 2, 5, 323, 1, 14, 122, 1, 9, 120, 1, 1, 120, 1, 9, 99, 1, 10, 118, 1, 3, 118, 1, 8, 98, 3, 9, 110, 1, 1, 110, 2, 8, 109, 1, 1, 109, 1, 1, 109, 1, 33, 47, 1, 12, 303, 4, 1, 303, 4, 1, 303, 1, 1, 303, 3, 1, 303, 3, 25, 273, 6, 20, 257, 1, 8, 258, 1, 4, 259, 3, 4, 271, 1, 2, 271, 1, 1, 271, 1, 1,
|
||||
/* 96 */ 57, 3, 304, 1, 1, 304, 3, 1, 304, 1, 1, 304, 1, 2, 304, 1, 7, 323, 1, 12, 122, 1, 11, 120, 1, 10, 99, 1, 10, 118, 1, 3, 118, 1, 8, 98, 1, 2, 98, 1, 8, 110, 1, 2, 110, 1, 8, 109, 1, 3, 109, 1, 33, 47, 1, 15, 303, 1, 1, 303, 1, 2, 303, 1, 1, 303, 1, 1, 303, 1, 4, 303, 1, 28, 273, 2, 22, 257, 1, 7, 258, 1, 8, 259, 1, 10,
|
||||
/* 97 */ 57, 3, 304, 1, 1, 304, 3, 1, 304, 1, 1, 304, 1, 2, 304, 1, 7, 323, 1, 12, 122, 1, 11, 120, 1, 10, 99, 1, 10, 118, 1, 3, 118, 1, 8, 98, 1, 2, 98, 1, 8, 110, 1, 2, 110, 1, 8, 109, 1, 3, 109, 1, 33, 47, 1, 15, 303, 1, 1, 303, 1, 2, 303, 1, 1, 303, 1, 1, 303, 1, 4, 303, 1, 28, 273, 2, 22, 257, 1, 7, 258, 1, 8, 259, 1, 10,
|
||||
/* 98 */ 69, 3, 304, 1, 1, 304, 1, 1, 304, 1, 1, 304, 1, 1, 304, 1, 2, 304, 1, 8, 323, 1, 10, 122, 1, 11, 120, 1, 1, 120, 1, 9, 99, 1, 2, 99, 1, 8, 118, 1, 1, 118, 1, 9, 98, 1, 2, 98, 1, 8, 110, 1, 2, 110, 1, 8, 109, 1, 3, 109, 1, 8, 44, 1, 11, 46, 1, 11, 47, 1, 16, 303, 1, 1, 303, 1, 2, 303, 1, 1, 303, 1, 1, 303, 1, 4, 303, 1, 28, 273, 2, 22, 257, 1, 6, 258, 1, 9, 259, 1, 3, 271, 5, 2,
|
||||
/* 99 */ 69, 3, 304, 1, 1, 304, 1, 1, 304, 1, 1, 304, 1, 1, 304, 1, 2, 304, 1, 8, 323, 1, 10, 122, 1, 11, 120, 1, 1, 120, 1, 9, 99, 1, 2, 99, 1, 8, 118, 1, 1, 118, 1, 9, 98, 1, 2, 98, 1, 8, 110, 1, 2, 110, 1, 8, 109, 1, 3, 109, 1, 8, 44, 1, 11, 46, 1, 11, 47, 1, 16, 303, 1, 1, 303, 1, 2, 303, 1, 1, 303, 1, 1, 303, 1, 4, 303, 1, 28, 273, 2, 22, 257, 1, 6, 258, 1, 9, 259, 1, 3, 271, 5, 2,
|
||||
/* 100 */ 59, 1, 304, 3, 1, 304, 1, 1, 304, 1, 1, 304, 1, 1, 304, 1, 3, 304, 1, 18, 122, 4, 7, 120, 1, 3, 120, 1, 9, 99, 2, 10, 118, 1, 10, 98, 3, 9, 110, 1, 2, 110, 1, 8, 109, 1, 3, 109, 1, 8, 44, 1, 23, 47, 1, 13, 303, 4, 1, 303, 1, 2, 303, 1, 1, 303, 1, 1, 303, 1, 5, 303, 2, 26, 273, 2, 22, 257, 1, 6, 258, 4, 3, 259, 3, 8, 271, 1, 2,
|
||||
/* 101 */ 59, 1, 304, 3, 1, 304, 1, 1, 304, 1, 1, 304, 1, 1, 304, 1, 3, 304, 1, 18, 122, 4, 7, 120, 1, 3, 120, 1, 9, 99, 2, 10, 118, 1, 10, 98, 3, 9, 110, 1, 2, 110, 1, 8, 109, 1, 3, 109, 1, 8, 44, 1, 23, 47, 1, 13, 303, 4, 1, 303, 1, 2, 303, 1, 1, 303, 1, 1, 303, 1, 5, 303, 2, 26, 273, 2, 22, 257, 1, 6, 258, 4, 3, 259, 3, 8, 271, 1, 2,
|
||||
/* 102 */ 3, 252, 271, 1, 2,
|
||||
/* 103 */ 3, 252, 271, 1, 2,
|
||||
/* 104 */ 3, 248, 271, 4, 3,
|
||||
/* 105 */ 3, 248, 271, 4, 3,
|
||||
/* 106 */ 1, 255,
|
||||
/* 107 */ 1, 255,
|
||||
/* 108 */ 3, 251, 271, 1, 3,
|
||||
/* 109 */ 3, 251, 271, 1, 3,
|
||||
/* 110 */ 37, 2, 306, 2, 2, 306, 1, 7, 306, 1, 19, 308, 2, 2, 308, 1, 2, 308, 1, 8, 32, 85, 7, 307, 2, 2, 307, 1, 2, 307, 1, 20, 305, 2, 2, 305, 1, 7, 305, 1, 8, 276, 1, 11, 274, 2, 11, 275, 1, 13, 256, 4, 15, 271, 5, 1,
|
||||
/* 111 */ 39, 2, 306, 2, 2, 306, 1, 7, 306, 1, 19, 308, 2, 2, 308, 1, 2, 308, 1, 8, 32, 2, 81, 32, 2, 7, 307, 2, 2, 307, 1, 2, 307, 1, 20, 305, 2, 2, 305, 1, 7, 305, 1, 8, 276, 1, 11, 274, 2, 11, 275, 1, 13, 256, 4, 15, 271, 5, 1,
|
||||
/* 112 */ 51, 1, 306, 1, 4, 306, 1, 4, 306, 2, 1, 306, 1, 18, 308, 1, 2, 308, 1, 1, 308, 1, 2, 308, 1, 8, 32, 2, 81, 32, 2, 6, 307, 1, 2, 307, 1, 1, 307, 1, 2, 307, 1, 19, 305, 1, 4, 305, 1, 4, 305, 2, 1, 305, 1, 7, 276, 2, 11, 274, 2, 11, 275, 2, 12, 256, 1, 2, 256, 1, 14, 271, 1, 2, 271, 1, 3,
|
||||
/* 113 */ 51, 1, 306, 1, 4, 306, 1, 4, 306, 2, 1, 306, 1, 18, 308, 1, 2, 308, 1, 1, 308, 1, 2, 308, 1, 8, 32, 2, 81, 32, 2, 6, 307, 1, 2, 307, 1, 1, 307, 1, 2, 307, 1, 19, 305, 1, 4, 305, 1, 4, 305, 2, 1, 305, 1, 7, 276, 2, 11, 274, 2, 11, 275, 2, 12, 256, 1, 2, 256, 1, 14, 271, 1, 2, 271, 1, 3,
|
||||
/* 114 */ 49, 1, 306, 1, 3, 306, 3, 2, 306, 1, 3, 306, 1, 18, 308, 1, 2, 308, 1, 1, 308, 1, 1, 308, 3, 7, 32, 2, 81, 32, 2, 6, 307, 1, 2, 307, 1, 1, 307, 1, 1, 307, 3, 18, 305, 1, 3, 305, 3, 2, 305, 1, 3, 305, 1, 6, 276, 6, 8, 274, 2, 8, 275, 6, 11, 256, 1, 2, 256, 1, 14, 271, 1, 6,
|
||||
/* 115 */ 49, 1, 306, 1, 3, 306, 3, 2, 306, 1, 3, 306, 1, 18, 308, 1, 2, 308, 1, 1, 308, 1, 1, 308, 3, 7, 32, 2, 81, 32, 2, 6, 307, 1, 2, 307, 1, 1, 307, 1, 1, 307, 3, 18, 305, 1, 3, 305, 3, 2, 305, 1, 3, 305, 1, 6, 276, 6, 8, 274, 2, 8, 275, 6, 11, 256, 1, 2, 256, 1, 14, 271, 1, 6,
|
||||
/* 116 */ 43, 1, 306, 1, 4, 306, 1, 3, 306, 1, 3, 306, 1, 18, 308, 4, 1, 308, 1, 2, 308, 1, 8, 32, 2, 81, 32, 2, 6, 307, 4, 1, 307, 1, 2, 307, 1, 19, 305, 1, 4, 305, 1, 3, 305, 1, 3, 305, 1, 6, 276, 6, 6, 274, 6, 6, 275, 6, 11, 256, 1, 2, 256, 1, 21,
|
||||
/* 117 */ 43, 1, 306, 1, 4, 306, 1, 3, 306, 1, 3, 306, 1, 18, 308, 4, 1, 308, 1, 2, 308, 1, 8, 32, 2, 81, 32, 2, 6, 307, 4, 1, 307, 1, 2, 307, 1, 19, 305, 1, 4, 305, 1, 3, 305, 1, 3, 305, 1, 6, 276, 6, 6, 274, 6, 6, 275, 6, 11, 256, 1, 2, 256, 1, 21,
|
||||
/* 118 */ 49, 1, 306, 1, 4, 306, 1, 3, 306, 1, 3, 306, 1, 18, 308, 1, 2, 308, 1, 1, 308, 1, 2, 308, 1, 8, 32, 2, 81, 32, 2, 6, 307, 1, 2, 307, 1, 1, 307, 1, 2, 307, 1, 19, 305, 1, 4, 305, 1, 3, 305, 1, 3, 305, 1, 7, 276, 2, 10, 274, 4, 10, 275, 2, 12, 256, 1, 2, 256, 1, 14, 271, 5, 2,
|
||||
/* 119 */ 49, 1, 306, 1, 4, 306, 1, 3, 306, 1, 3, 306, 1, 18, 308, 1, 2, 308, 1, 1, 308, 1, 2, 308, 1, 8, 32, 2, 81, 32, 2, 6, 307, 1, 2, 307, 1, 1, 307, 1, 2, 307, 1, 19, 305, 1, 4, 305, 1, 3, 305, 1, 3, 305, 1, 7, 276, 2, 10, 274, 4, 10, 275, 2, 12, 256, 1, 2, 256, 1, 14, 271, 5, 2,
|
||||
/* 120 */ 49, 2, 306, 2, 3, 306, 2, 1, 306, 1, 3, 306, 1, 18, 308, 1, 2, 308, 1, 1, 308, 1, 3, 308, 2, 6, 32, 2, 81, 32, 2, 6, 307, 1, 2, 307, 1, 1, 307, 1, 3, 307, 2, 18, 305, 2, 3, 305, 2, 1, 305, 1, 3, 305, 1, 8, 276, 1, 11, 274, 2, 11, 275, 1, 13, 256, 4, 8, 266, 1, 9, 271, 1, 2,
|
||||
/* 121 */ 47, 2, 306, 2, 3, 306, 2, 1, 306, 1, 3, 306, 1, 18, 308, 1, 2, 308, 1, 1, 308, 1, 3, 308, 2, 6, 32, 85, 6, 307, 1, 2, 307, 1, 1, 307, 1, 3, 307, 2, 18, 305, 2, 3, 305, 2, 1, 305, 1, 3, 305, 1, 8, 276, 1, 11, 274, 2, 11, 275, 1, 13, 256, 4, 8, 266, 1, 9, 271, 1, 2,
|
||||
/* 122 */ 1, 255,
|
||||
/* 123 */ 1, 255,
|
||||
/* 124 */ 1, 255,
|
||||
/* 125 */ 1, 255,
|
||||
/* 126 */ 1, 255,
|
||||
/* 127 */ 1, 255,
|
||||
/* 128 */ 1, 255,
|
||||
/* 129 */ 1, 255,
|
||||
/* 130 */ 41, 1, 12, 10, 2, 33, 10, 2, 34, 10, 2, 35, 10, 2, 36, 10, 2, 38, 10, 2, 40, 10, 2, 41, 10, 2, 42, 10, 2, 43, 10, 2, 58, 10, 2, 60, 10, 2, 62, 10, 2, 63, 10, 2, 64, 10, 2, 94, 10, 2, 95, 10, 2, 123, 10, 2, 124, 10, 2, 125, 10, 16,
|
||||
/* 131 */ 41, 1, 12, 10, 2, 33, 10, 2, 34, 10, 2, 35, 10, 2, 36, 10, 2, 38, 10, 2, 40, 10, 2, 41, 10, 2, 42, 10, 2, 43, 10, 2, 58, 10, 2, 60, 10, 2, 62, 10, 2, 63, 10, 2, 64, 10, 2, 94, 10, 2, 95, 10, 2, 123, 10, 2, 124, 10, 2, 125, 10, 16,
|
||||
/* 132 */ 1, 255,
|
||||
/* 133 */ 1, 255,
|
||||
/* 134 */ 41, 1, 126, 10, 2, 272, 10, 2, 294, 10, 2, 295, 10, 2, 296, 10, 2, 309, 10, 2, 310, 10, 2, 311, 10, 2, 312, 10, 2, 313, 10, 2, 315, 10, 2, 316, 10, 2, 317, 10, 2, 318, 10, 2, 319, 10, 2, 320, 10, 2, 321, 10, 2, 322, 10, 2, 314, 10, 2, 0, 10, 16,
|
||||
/* 135 */ 41, 1, 126, 10, 2, 272, 10, 2, 294, 10, 2, 295, 10, 2, 296, 10, 2, 309, 10, 2, 310, 10, 2, 311, 10, 2, 312, 10, 2, 313, 10, 2, 315, 10, 2, 316, 10, 2, 317, 10, 2, 318, 10, 2, 319, 10, 2, 320, 10, 2, 321, 10, 2, 322, 10, 2, 314, 10, 2, 0, 10, 16,
|
||||
/* 136 */ 1, 255,
|
||||
/* 137 */ 1, 255,
|
||||
/* 138 */ 1, 255,
|
||||
/* 139 */ 1, 255,
|
||||
/* 140 */ 1, 255,
|
||||
/* 141 */ 1, 255,
|
||||
};
|
||||
#endif /* REMOTEPAD_H */
|
||||
|
@ -1336,12 +1336,16 @@ static void input_remote_parse_packet(
|
||||
switch (msg->device)
|
||||
{
|
||||
case RETRO_DEVICE_JOYPAD:
|
||||
input_state->buttons[user] &= ~(1 << msg->id);
|
||||
if (msg->state)
|
||||
input_state->buttons[user] |= 1 << msg->id;
|
||||
if (msg->id < 16)
|
||||
{
|
||||
input_state->buttons[user] &= ~(1 << msg->id);
|
||||
if (msg->state)
|
||||
input_state->buttons[user] |= 1 << msg->id;
|
||||
}
|
||||
break;
|
||||
case RETRO_DEVICE_ANALOG:
|
||||
input_state->analog[msg->index * 2 + msg->id][user] = msg->state;
|
||||
if (msg->id<2 && msg->index<2)
|
||||
input_state->analog[msg->index * 2 + msg->id][user] = msg->state;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1606,7 +1610,7 @@ static int16_t input_state_device(
|
||||
if (id == RETRO_DEVICE_ID_ANALOG_Y)
|
||||
base += 1;
|
||||
#ifdef HAVE_NETWORKGAMEPAD
|
||||
if ( input_st->remote
|
||||
if ( input_st->remote && idx < RETRO_DEVICE_INDEX_ANALOG_BUTTON
|
||||
&& input_state && input_state->analog[base][port])
|
||||
res = input_state->analog[base][port];
|
||||
else
|
||||
|
Loading…
Reference in New Issue
Block a user