コード例 #1
0
ファイル: remote.c プロジェクト: carriercomm/RetroArch
void rarch_remote_poll(rarch_remote_t *handle)
{
   unsigned user;
   settings_t *settings            = config_get_ptr();
   input_remote_state_t *ol_state  = input_remote_get_state_ptr();
   
   for(user = 0; user < settings->input.max_users; user++)
   {
      if (settings->network_remote_enable_user[user])
      {
#if defined(HAVE_NETWORK_GAMEPAD) && defined(HAVE_NETPLAY)
         char buf[8];
         ssize_t ret;
         fd_set fds;
         struct timeval tmp_tv = {0};

         if (handle->net_fd[user] < 0)
            return;

         FD_ZERO(&fds);
         FD_SET(handle->net_fd[user], &fds);

         ret = recvfrom(handle->net_fd[user], buf,
               sizeof(buf) - 1, 0, NULL, NULL);

         if (ret > 0)
            parse_packet(buf, sizeof(buf), user);
         else
#endif
            ol_state->buttons[user] = 0;
      }
   }
}
コード例 #2
0
ファイル: remote.c プロジェクト: carriercomm/RetroArch
void input_state_remote(int16_t *ret,
      unsigned port, unsigned device, unsigned idx,
      unsigned id)
{
   input_remote_state_t *ol_state  = input_remote_get_state_ptr();

   if (!ol_state)
      return;

   switch (device)
   {
      case RETRO_DEVICE_JOYPAD:
         if (input_remote_key_pressed(id, port))
            *ret |= 1;
         break;
      case RETRO_DEVICE_ANALOG:
         {
            unsigned base = 0;

            if (idx == RETRO_DEVICE_INDEX_ANALOG_RIGHT)
               base = 2;
            if (id == RETRO_DEVICE_ID_ANALOG_Y)
               base += 1;
            if (ol_state && ol_state->analog[base][port])
               *ret = ol_state->analog[base][port];
         }
         break;
   }
}
コード例 #3
0
ファイル: remote.c プロジェクト: carriercomm/RetroArch
bool input_remote_key_pressed(int key, unsigned port)
{
   input_remote_state_t *ol_state  = input_remote_get_state_ptr();

   if (!ol_state)
      return false;

   return (ol_state->buttons[port] & (UINT64_C(1) << key));
}
コード例 #4
0
static void input_remote_parse_packet(struct remote_message *msg, unsigned user)
{
   input_remote_state_t *input_state  = input_remote_get_state_ptr();

   /* Parse message */
   switch (msg->device)
   {
      case RETRO_DEVICE_JOYPAD:
         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;
         break;
   }
}
コード例 #5
0
void input_remote_poll(input_remote_t *handle, unsigned max_users)
{
   unsigned user;
   settings_t *settings            = config_get_ptr();
   input_remote_state_t *input_state  = input_remote_get_state_ptr();

   for(user = 0; user < max_users; user++)
   {
      if (settings->bools.network_remote_enable_user[user])
      {
#if defined(HAVE_NETWORKING) && defined(HAVE_NETWORKGAMEPAD)
         struct remote_message msg;
         ssize_t ret;
         fd_set fds;

         if (handle->net_fd[user] < 0)
            return;

         FD_ZERO(&fds);
         FD_SET(handle->net_fd[user], &fds);

         ret = recvfrom(handle->net_fd[user], (char*)&msg,
               sizeof(msg), 0, NULL, NULL);

         if (ret == sizeof(msg))
            input_remote_parse_packet(&msg, user);
         else if ((ret != -1) || ((errno != EAGAIN) && (errno != ENOENT)))
#endif
         {
            input_state->buttons[user]   = 0;
            input_state->analog[0][user] = 0;
            input_state->analog[1][user] = 0;
            input_state->analog[2][user] = 0;
            input_state->analog[3][user] = 0;
         }
      }
   }
}
コード例 #6
0
ファイル: remote.c プロジェクト: carriercomm/RetroArch
static void parse_packet(char *buffer, unsigned size, unsigned user)
{
   input_remote_state_t *ol_state  = input_remote_get_state_ptr();
   /* todo implement parsing of input_state from the packet */
   ol_state->buttons[user] = atoi(buffer);
}