linux/drivers/input/tablet/pegasus_notetaker.c

// SPDX-License-Identifier: GPL-2.0-only
/*
 * Pegasus Mobile Notetaker Pen input tablet driver
 *
 * Copyright (c) 2016 Martin Kepplinger <[email protected]>
 */

/*
 * request packet (control endpoint):
 * |-------------------------------------|
 * | Report ID | Nr of bytes | command   |
 * | (1 byte)  | (1 byte)    | (n bytes) |
 * |-------------------------------------|
 * | 0x02      | n           |           |
 * |-------------------------------------|
 *
 * data packet after set xy mode command, 0x80 0xb5 0x02 0x01
 * and pen is in range:
 *
 * byte	byte name		value (bits)
 * --------------------------------------------
 * 0	status			0 1 0 0 0 0 X X
 * 1	color			0 0 0 0 H 0 S T
 * 2	X low
 * 3	X high
 * 4	Y low
 * 5	Y high
 *
 * X X	battery state:
 *	no state reported	0x00
 *	battery low		0x01
 *	battery good		0x02
 *
 * H	Hovering
 * S	Switch 1 (pen button)
 * T	Tip
 */

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/input.h>
#include <linux/usb/input.h>
#include <linux/slab.h>
#include <linux/workqueue.h>
#include <linux/mutex.h>

/* USB HID defines */
#define USB_REQ_GET_REPORT
#define USB_REQ_SET_REPORT

#define USB_VENDOR_ID_PEGASUSTECH
#define USB_DEVICE_ID_PEGASUS_NOTETAKER_EN100

/* device specific defines */
#define NOTETAKER_REPORT_ID
#define NOTETAKER_SET_CMD
#define NOTETAKER_SET_MODE

#define NOTETAKER_LED_MOUSE
#define PEN_MODE_XY

#define SPECIAL_COMMAND
#define BUTTON_PRESSED
#define COMMAND_VERSION

/* in xy data packet */
#define BATTERY_NO_REPORT
#define BATTERY_LOW
#define BATTERY_GOOD
#define PEN_BUTTON_PRESSED
#define PEN_TIP

struct pegasus {};

static int pegasus_control_msg(struct pegasus *pegasus, u8 *data, int len)
{}

static int pegasus_set_mode(struct pegasus *pegasus, u8 mode, u8 led)
{}

static void pegasus_parse_packet(struct pegasus *pegasus)
{}

static void pegasus_irq(struct urb *urb)
{}

static void pegasus_init(struct work_struct *work)
{}

static int pegasus_open(struct input_dev *dev)
{}

static void pegasus_close(struct input_dev *dev)
{}

static int pegasus_probe(struct usb_interface *intf,
			 const struct usb_device_id *id)
{}

static void pegasus_disconnect(struct usb_interface *intf)
{}

static int pegasus_suspend(struct usb_interface *intf, pm_message_t message)
{}

static int pegasus_resume(struct usb_interface *intf)
{}

static int pegasus_reset_resume(struct usb_interface *intf)
{}

static const struct usb_device_id pegasus_ids[] =;
MODULE_DEVICE_TABLE(usb, pegasus_ids);

static struct usb_driver pegasus_driver =;

module_usb_driver();

MODULE_AUTHOR();
MODULE_DESCRIPTION();
MODULE_LICENSE();