title: c++ DirectInput sample retrieves immediate data from joypad
body: <p>I am trying to send, via a client-server application, the codes of a joypad. Having succeeded displaying joypad data, using DirectInput API, i can't figure out in which variables the data from the joypad, are stored, in order to pass them in a buffer and send them. Any help would be appreciated.</p>
  
  <p>The code block that displays the joypad data:</p>
  
  <pre><code>//--------------------------------------------------------------------------------------------------
  // Name: UpdateInputState()
  // Desc: Get the input device's state and display it.
  //--------------------------------------------------------------------------------------------------
  HRESULT UpdateInputState(HWND hDlg)
  {
      HRESULT hr;
      TCHAR strText[512] = {0}; // Device state text.
      DIJOYSTATE2 js; // DirectInput joypad state. 
  
      if(NULL == g_pJoypad)
          return S_OK;
  
      // Poll the device to read the current state.
      hr = g_pJoypad-&gt;Poll();
      if(FAILED(hr))
      {
          // DirectInput is telling us that the input stream has been interrupted. We aren't tracking
          // any state between polls, so we don't have any special reset that needs to be done. We just
          // re-acquire and try again.
          hr = g_pJoypad-&gt;Acquire();
          while(hr == DIERR_INPUTLOST)
              hr = g_pJoypad-&gt;Acquire();
  
          // hr may be DIERR_OTHERAPPHASPRIO or other errors. This may occur when the application is
          // minimized or in the process of switching, so just try again later.
          return S_OK;
      }
  
      // Get the input's device state.
      // GetDeviceState() retrieves immediate data from the device. 
      if(FAILED(hr = g_pJoypad-&gt;GetDeviceState(sizeof(DIJOYSTATE2), &amp;js)))
          return hr; // The device should have been acquired during the Poll().
  
      // Display joypad state to dialog.
  
      // Axes.
      _stprintf_s(strText, 512, TEXT("%ld"), js.lX);
      SetWindowText(GetDlgItem(hDlg, IDC_X_AXIS_L), strText);
      _stprintf_s(strText, 512, TEXT("%ld"), js.lY);
      SetWindowText(GetDlgItem(hDlg, IDC_Y_AXIS_L), strText);
      _stprintf_s(strText, 512, TEXT("%ld"), js.lZ);
      SetWindowText(GetDlgItem(hDlg, IDC_X_AXIS_R), strText);
      _stprintf_s(strText, 512, TEXT("%ld"), js.lRx);
      _stprintf_s(strText, 512, TEXT("%ld"), js.lRz);
      SetWindowText(GetDlgItem(hDlg, IDC_Y_AXIS_R), strText);
  
      // POV.
      _stprintf_s(strText, 512, TEXT("%lu"), js.rgdwPOV[0]);
      SetWindowText(GetDlgItem(hDlg, IDC_POV), strText);
  
      // Buttons.
      // Fill up text with which buttons are pressed.
      _tcscpy_s(strText, 512, TEXT(""));
      for(int i = 0; i &lt; 128; i++)
      {
          if(js.rgbButtons[i] &amp; 0x80)
          {
              TCHAR sz[128];
              _stprintf_s(sz, 128, TEXT("%02d"), i);
              _tcscat_s(strText, 512, sz);
          }
      }
      SetWindowText(GetDlgItem(hDlg, IDC_BUTTONS), strText);
  
      return S_OK;
  }
  </code></pre>
  
  <p>The code block that sends the data to a server:</p>
  
  <pre><code> // Send a message.
      if (send(ConnectSocket, sendbuf, sizeof(sendbuf), 0) == SOCKET_ERROR)
      {
          MessageBox(NULL, TEXT("The joypad data could not be sent."), TEXT("Client says"), 
                             MB_ICONERROR | MB_OK);
      }
  </code></pre>