#include #include #include #include "CORE_ds2key_compat.h" #include "CORE_network.h" /* Store buttons info into console type.. */ void ds2key_process_input(ds2key_t* d){ static unsigned char _x = 0; static unsigned char _y = 0; ds2key_init(d); if(Pad.Newpress.A) d->buttons_pressed |= DS_A; if(Pad.Newpress.B) d->buttons_pressed |= DS_B; if(Pad.Newpress.X) d->buttons_pressed |= DS_X; if(Pad.Newpress.Y) d->buttons_pressed |= DS_Y; if(Pad.Newpress.L) d->buttons_pressed |= DS_L; if(Pad.Newpress.R) d->buttons_pressed |= DS_R; if(Pad.Newpress.Start) d->buttons_pressed |= DS_START; if(Pad.Newpress.Select) d->buttons_pressed |= DS_SELECT; if(Pad.Newpress.Up) d->dpad_pressed |= DS_UP; if(Pad.Newpress.Down) d->dpad_pressed |= DS_DOWN; if(Pad.Newpress.Left) d->dpad_pressed |= DS_LEFT; if(Pad.Newpress.Right) d->dpad_pressed |= DS_RIGHT; if(Stylus.Newpress){ d->stylus_pressed = 1; _x = d->X = Stylus.X; _y = d->Y = Stylus.Y; } if(Stylus.Held && (_x!=Stylus.X || _y!=Stylus.Y)){ d->stylus_pressed = 1; _x = d->X = Stylus.X; _y = d->Y = Stylus.Y; } if(Pad.Released.A) d->buttons_released |= DS_A; if(Pad.Released.B) d->buttons_released |= DS_B; if(Pad.Released.X) d->buttons_released |= DS_X; if(Pad.Released.Y) d->buttons_released |= DS_Y; if(Pad.Released.L) d->buttons_released |= DS_L; if(Pad.Released.R) d->buttons_released |= DS_R; if(Pad.Released.Start) d->buttons_released |= DS_START; if(Pad.Released.Select) d->buttons_released |= DS_SELECT; if(Pad.Released.Up) d->dpad_released |= DS_UP; if(Pad.Released.Down) d->dpad_released |= DS_DOWN; if(Pad.Released.Left) d->dpad_released |= DS_LEFT; if(Pad.Released.Right) d->dpad_released |= DS_RIGHT; if(Stylus.Released){ d->stylus_released = 1; d->X = _x; d->X = _y; } return; } /* Init console variables */ void ds2key_init(ds2key_t* d){ memset((void*)d, 0, sizeof(ds2key_t)); return; } /* send ds2key profile */ void ds2key_send_profile(network_t* n, unsigned char p){ char buf[6]; // /p255\0 sprintf(buf, "/p%d", p); #ifdef DEBUG PA_Print(1, "Sending DS2key profile %d\n", p); #endif network_send_msg(n, buf, sizeof(buf)); } /* Send infos to the server */ void ds2key_send_msg(network_t* n, ds2key_t* d){ char buf[12] = {'/', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '\0'}; /* buttons */ if(d->buttons_pressed & DS_A){ buf[1] = 'b'; buf[2] = 'a'; buf[3] = '0'; network_send_msg(n, buf, strlen(buf)); } else if(d->buttons_released & DS_A){ buf[1] = 'b'; buf[2] = 'a'; buf[3] = '1'; network_send_msg(n, buf, strlen(buf)); } if(d->buttons_pressed & DS_B){ buf[1] = 'b'; buf[2] = 'b'; buf[3] = '0'; network_send_msg(n, buf, strlen(buf)); } else if(d->buttons_released & DS_B){ buf[1] = 'b'; buf[2] = 'b'; buf[3] = '1'; network_send_msg(n, buf, strlen(buf)); } if(d->buttons_pressed & DS_X){ buf[1] = 'b'; buf[2] = 'x'; buf[3] = '0'; network_send_msg(n, buf, strlen(buf)); } else if(d->buttons_released & DS_X){ buf[1] = 'b'; buf[2] = 'x'; buf[3] = '1'; network_send_msg(n, buf, strlen(buf)); } if(d->buttons_pressed & DS_Y){ buf[1] = 'b'; buf[2] = 'y'; buf[3] = '0'; network_send_msg(n, buf, strlen(buf)); } else if(d->buttons_released & DS_Y){ buf[1] = 'b'; buf[2] = 'y'; buf[3] = '1'; network_send_msg(n, buf, strlen(buf)); } if(d->buttons_pressed & DS_L){ buf[1] = 'b'; buf[2] = 'l'; buf[3] = '0'; network_send_msg(n, buf, 4); } else if(d->buttons_released & DS_L){ buf[1] = 'b'; buf[2] = 'l'; buf[3] = '1'; network_send_msg(n, buf, strlen(buf)); } if(d->buttons_pressed & DS_R){ buf[1] = 'b'; buf[2] = 'r'; buf[3] = '0'; network_send_msg(n, buf, strlen(buf)); } else if(d->buttons_released & DS_R){ buf[1] = 'b'; buf[2] = 'r'; buf[3] = '1'; network_send_msg(n, buf, strlen(buf)); } if(d->buttons_pressed & DS_START){ buf[1] = 'b'; buf[2] = 't'; buf[3] = '0'; network_send_msg(n, buf, strlen(buf)); } else if(d->buttons_released & DS_START){ buf[1] = 'b'; buf[2] = 't'; buf[3] = '1'; network_send_msg(n, buf, strlen(buf)); } if(d->buttons_pressed & DS_SELECT){ buf[1] = 'b'; buf[2] = 'e'; buf[3] = '0'; network_send_msg(n, buf, strlen(buf)); } else if(d->buttons_released & DS_SELECT){ buf[1] = 'b'; buf[2] = 'e'; buf[3] = '1'; network_send_msg(n, buf, strlen(buf)); } /* directions */ if(d->dpad_pressed & DS_UP){ buf[1] = 'd'; buf[2] = 'u'; buf[3] = '0'; network_send_msg(n, buf, strlen(buf)); } else if(d->dpad_released & DS_UP){ buf[1] = 'd'; buf[2] = 'u'; buf[3] = '1'; network_send_msg(n, buf, strlen(buf)); } if(d->dpad_pressed & DS_DOWN){ buf[1] = 'd'; buf[2] = 'd'; buf[3] = '0'; network_send_msg(n, buf, strlen(buf)); } else if(d->dpad_released & DS_DOWN){ buf[1] = 'd'; buf[2] = 'd'; buf[3] = '1'; network_send_msg(n, buf, strlen(buf)); } if(d->dpad_pressed & DS_LEFT){ buf[1] = 'd'; buf[2] = 'l'; buf[3] = '0'; network_send_msg(n, buf, strlen(buf)); } else if(d->dpad_released & DS_LEFT){ buf[1] = 'd'; buf[2] = 'l'; buf[3] = '1'; network_send_msg(n, buf, strlen(buf)); } if(d->dpad_pressed & DS_RIGHT){ buf[1] = 'd'; buf[2] = 'r'; buf[3] = '0'; network_send_msg(n, buf, strlen(buf)); } else if(d->dpad_released & DS_RIGHT){ buf[1] = 'd'; buf[2] = 'r'; buf[3] = '1'; network_send_msg(n, buf, strlen(buf)); } /* Stylus */ if(d->stylus_pressed){ sprintf(buf, "/m%d.%d.1", d->X, d->Y); network_send_msg(n, buf, strlen(buf)); } else if(d->stylus_released){ sprintf(buf, "/m%d.%d.0", d->X, d->Y); network_send_msg(n, buf, strlen(buf)); } return; }