Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  hid-gembird.c

  Sprache: C
 

// SPDX-License-Identifier: GPL-2.0-or-later
/*
 *  HID driver for Gembird Joypad, "PC Game Controller"
 *
 *  Copyright (c) 2015 Red Hat, Inc
 *  Copyright (c) 2015 Benjamin Tissoires
 */


/*
 */


#include <linux/device.h>
#include <linux/hid.h>
#include <linux/module.h>

#include "hid-ids.h"

#define GEMBIRD_START_FAULTY_RDESC 8

static const __u8 gembird_jpd_faulty_rdesc[] = {
 0x75, 0x08,   /*   Report Size (8) */
 0x95, 0x05,   /*   Report Count (5) */
 0x15, 0x00,   /*   Logical Minimum (0) */
 0x26, 0xff, 0x00,  /*   Logical Maximum (255) */
 0x35, 0x00,   /*   Physical Minimum (0) */
 0x46, 0xff, 0x00,  /*   Physical Maximum (255) */
 0x09, 0x30,   /*   Usage (X) */
 0x09, 0x31,   /*   Usage (Y) */
 0x09, 0x32,   /*   Usage (Z) */
 0x09, 0x32,   /*   Usage (Z) */
 0x09, 0x35,   /*   Usage (Rz) */
 0x81, 0x02,   /*   Input (Data,Var,Abs) */
};

/*
 * we fix the report descriptor by:
 * - marking the first Z axis as constant (so it is ignored by HID)
 * - assign the original second Z to Rx
 * - assign the original Rz to Ry
 */

static const __u8 gembird_jpd_fixed_rdesc[] = {
 0x75, 0x08,   /*   Report Size (8) */
 0x95, 0x02,   /*   Report Count (2) */
 0x15, 0x00,   /*   Logical Minimum (0) */
 0x26, 0xff, 0x00,  /*   Logical Maximum (255) */
 0x35, 0x00,   /*   Physical Minimum (0) */
 0x46, 0xff, 0x00,  /*   Physical Maximum (255) */
 0x09, 0x30,   /*   Usage (X) */
 0x09, 0x31,   /*   Usage (Y) */
 0x81, 0x02,   /*   Input (Data,Var,Abs) */
 0x95, 0x01,   /*   Report Count (1) */
 0x09, 0x32,   /*   Usage (Z) */
 0x81, 0x01,   /*   Input (Cnst,Arr,Abs) */
 0x95, 0x02,   /*   Report Count (2) */
 0x09, 0x33,   /*   Usage (Rx) */
 0x09, 0x34,   /*   Usage (Ry) */
 0x81, 0x02,   /*   Input (Data,Var,Abs) */
};

static const __u8 *gembird_report_fixup(struct hid_device *hdev, __u8 *rdesc,
  unsigned int *rsize)
{
 __u8 *new_rdesc;
 /* delta_size is > 0 */
 size_t delta_size = sizeof(gembird_jpd_fixed_rdesc) -
       sizeof(gembird_jpd_faulty_rdesc);
 size_t new_size = *rsize + delta_size;

 if (*rsize >= 31 && !memcmp(&rdesc[GEMBIRD_START_FAULTY_RDESC],
        gembird_jpd_faulty_rdesc,
        sizeof(gembird_jpd_faulty_rdesc))) {
  new_rdesc = devm_kzalloc(&hdev->dev, new_size, GFP_KERNEL);
  if (new_rdesc == NULL)
   return rdesc;

  dev_info(&hdev->dev,
    "fixing Gembird JPD-DualForce 2 report descriptor.\n");

  /* start by copying the end of the rdesc */
  memcpy(new_rdesc + delta_size, rdesc, *rsize);

  /* add the correct beginning */
  memcpy(new_rdesc, rdesc, GEMBIRD_START_FAULTY_RDESC);

  /* replace the faulty part with the fixed one */
  memcpy(new_rdesc + GEMBIRD_START_FAULTY_RDESC,
         gembird_jpd_fixed_rdesc,
         sizeof(gembird_jpd_fixed_rdesc));

  *rsize = new_size;
  rdesc = new_rdesc;
 }

 return rdesc;
}

static const struct hid_device_id gembird_devices[] = {
 { HID_USB_DEVICE(USB_VENDOR_ID_GEMBIRD,
    USB_DEVICE_ID_GEMBIRD_JPD_DUALFORCE2) },
 { }
};
MODULE_DEVICE_TABLE(hid, gembird_devices);

static struct hid_driver gembird_driver = {
 .name = "gembird",
 .id_table = gembird_devices,
 .report_fixup = gembird_report_fixup,
};
module_hid_driver(gembird_driver);

MODULE_AUTHOR("Benjamin Tissoires <benjamin.tissoires@gmail.com>");
MODULE_DESCRIPTION("HID Gembird joypad driver");
MODULE_LICENSE("GPL");

Messung V0.5 in Prozent
C=93 H=95 G=93

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet am  2026-06-07) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=141584
#Domains=738142