root/include/media/rc-core.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. ir_raw_event_reset
  2. ir_extract_bits
  3. ir_nec_bytes_to_scancode

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * Remote Controller core header
   4  *
   5  * Copyright (C) 2009-2010 by Mauro Carvalho Chehab
   6  */
   7 
   8 #ifndef _RC_CORE
   9 #define _RC_CORE
  10 
  11 #include <linux/spinlock.h>
  12 #include <linux/cdev.h>
  13 #include <linux/kfifo.h>
  14 #include <linux/time.h>
  15 #include <linux/timer.h>
  16 #include <media/rc-map.h>
  17 
  18 /**
  19  * enum rc_driver_type - type of the RC driver.
  20  *
  21  * @RC_DRIVER_SCANCODE:  Driver or hardware generates a scancode.
  22  * @RC_DRIVER_IR_RAW:    Driver or hardware generates pulse/space sequences.
  23  *                       It needs a Infra-Red pulse/space decoder
  24  * @RC_DRIVER_IR_RAW_TX: Device transmitter only,
  25  *                       driver requires pulse/space data sequence.
  26  */
  27 enum rc_driver_type {
  28         RC_DRIVER_SCANCODE = 0,
  29         RC_DRIVER_IR_RAW,
  30         RC_DRIVER_IR_RAW_TX,
  31 };
  32 
  33 /**
  34  * struct rc_scancode_filter - Filter scan codes.
  35  * @data:       Scancode data to match.
  36  * @mask:       Mask of bits of scancode to compare.
  37  */
  38 struct rc_scancode_filter {
  39         u32 data;
  40         u32 mask;
  41 };
  42 
  43 /**
  44  * enum rc_filter_type - Filter type constants.
  45  * @RC_FILTER_NORMAL:   Filter for normal operation.
  46  * @RC_FILTER_WAKEUP:   Filter for waking from suspend.
  47  * @RC_FILTER_MAX:      Number of filter types.
  48  */
  49 enum rc_filter_type {
  50         RC_FILTER_NORMAL = 0,
  51         RC_FILTER_WAKEUP,
  52 
  53         RC_FILTER_MAX
  54 };
  55 
  56 /**
  57  * struct lirc_fh - represents an open lirc file
  58  * @list: list of open file handles
  59  * @rc: rcdev for this lirc chardev
  60  * @carrier_low: when setting the carrier range, first the low end must be
  61  *      set with an ioctl and then the high end with another ioctl
  62  * @send_timeout_reports: report timeouts in lirc raw IR.
  63  * @rawir: queue for incoming raw IR
  64  * @scancodes: queue for incoming decoded scancodes
  65  * @wait_poll: poll struct for lirc device
  66  * @send_mode: lirc mode for sending, either LIRC_MODE_SCANCODE or
  67  *      LIRC_MODE_PULSE
  68  * @rec_mode: lirc mode for receiving, either LIRC_MODE_SCANCODE or
  69  *      LIRC_MODE_MODE2
  70  */
  71 struct lirc_fh {
  72         struct list_head list;
  73         struct rc_dev *rc;
  74         int                             carrier_low;
  75         bool                            send_timeout_reports;
  76         DECLARE_KFIFO_PTR(rawir, unsigned int);
  77         DECLARE_KFIFO_PTR(scancodes, struct lirc_scancode);
  78         wait_queue_head_t               wait_poll;
  79         u8                              send_mode;
  80         u8                              rec_mode;
  81 };
  82 
  83 /**
  84  * struct rc_dev - represents a remote control device
  85  * @dev: driver model's view of this device
  86  * @managed_alloc: devm_rc_allocate_device was used to create rc_dev
  87  * @sysfs_groups: sysfs attribute groups
  88  * @device_name: name of the rc child device
  89  * @input_phys: physical path to the input child device
  90  * @input_id: id of the input child device (struct input_id)
  91  * @driver_name: name of the hardware driver which registered this device
  92  * @map_name: name of the default keymap
  93  * @rc_map: current scan/key table
  94  * @lock: used to ensure we've filled in all protocol details before
  95  *      anyone can call show_protocols or store_protocols
  96  * @minor: unique minor remote control device number
  97  * @raw: additional data for raw pulse/space devices
  98  * @input_dev: the input child device used to communicate events to userspace
  99  * @driver_type: specifies if protocol decoding is done in hardware or software
 100  * @idle: used to keep track of RX state
 101  * @encode_wakeup: wakeup filtering uses IR encode API, therefore the allowed
 102  *      wakeup protocols is the set of all raw encoders
 103  * @allowed_protocols: bitmask with the supported RC_PROTO_BIT_* protocols
 104  * @enabled_protocols: bitmask with the enabled RC_PROTO_BIT_* protocols
 105  * @allowed_wakeup_protocols: bitmask with the supported RC_PROTO_BIT_* wakeup
 106  *      protocols
 107  * @wakeup_protocol: the enabled RC_PROTO_* wakeup protocol or
 108  *      RC_PROTO_UNKNOWN if disabled.
 109  * @scancode_filter: scancode filter
 110  * @scancode_wakeup_filter: scancode wakeup filters
 111  * @scancode_mask: some hardware decoders are not capable of providing the full
 112  *      scancode to the application. As this is a hardware limit, we can't do
 113  *      anything with it. Yet, as the same keycode table can be used with other
 114  *      devices, a mask is provided to allow its usage. Drivers should generally
 115  *      leave this field in blank
 116  * @users: number of current users of the device
 117  * @priv: driver-specific data
 118  * @keylock: protects the remaining members of the struct
 119  * @keypressed: whether a key is currently pressed
 120  * @keyup_jiffies: time (in jiffies) when the current keypress should be released
 121  * @timer_keyup: timer for releasing a keypress
 122  * @timer_repeat: timer for autorepeat events. This is needed for CEC, which
 123  *      has non-standard repeats.
 124  * @last_keycode: keycode of last keypress
 125  * @last_protocol: protocol of last keypress
 126  * @last_scancode: scancode of last keypress
 127  * @last_toggle: toggle value of last command
 128  * @timeout: optional time after which device stops sending data
 129  * @min_timeout: minimum timeout supported by device
 130  * @max_timeout: maximum timeout supported by device
 131  * @rx_resolution : resolution (in ns) of input sampler
 132  * @tx_resolution: resolution (in ns) of output sampler
 133  * @lirc_dev: lirc device
 134  * @lirc_cdev: lirc char cdev
 135  * @gap_start: time when gap starts
 136  * @gap_duration: duration of initial gap
 137  * @gap: true if we're in a gap
 138  * @lirc_fh_lock: protects lirc_fh list
 139  * @lirc_fh: list of open files
 140  * @registered: set to true by rc_register_device(), false by
 141  *      rc_unregister_device
 142  * @change_protocol: allow changing the protocol used on hardware decoders
 143  * @open: callback to allow drivers to enable polling/irq when IR input device
 144  *      is opened.
 145  * @close: callback to allow drivers to disable polling/irq when IR input device
 146  *      is opened.
 147  * @s_tx_mask: set transmitter mask (for devices with multiple tx outputs)
 148  * @s_tx_carrier: set transmit carrier frequency
 149  * @s_tx_duty_cycle: set transmit duty cycle (0% - 100%)
 150  * @s_rx_carrier_range: inform driver about carrier it is expected to handle
 151  * @tx_ir: transmit IR
 152  * @s_idle: enable/disable hardware idle mode, upon which,
 153  *      device doesn't interrupt host until it sees IR pulses
 154  * @s_learning_mode: enable wide band receiver used for learning
 155  * @s_carrier_report: enable carrier reports
 156  * @s_filter: set the scancode filter
 157  * @s_wakeup_filter: set the wakeup scancode filter. If the mask is zero
 158  *      then wakeup should be disabled. wakeup_protocol will be set to
 159  *      a valid protocol if mask is nonzero.
 160  * @s_timeout: set hardware timeout in ns
 161  */
 162 struct rc_dev {
 163         struct device                   dev;
 164         bool                            managed_alloc;
 165         const struct attribute_group    *sysfs_groups[5];
 166         const char                      *device_name;
 167         const char                      *input_phys;
 168         struct input_id                 input_id;
 169         const char                      *driver_name;
 170         const char                      *map_name;
 171         struct rc_map                   rc_map;
 172         struct mutex                    lock;
 173         unsigned int                    minor;
 174         struct ir_raw_event_ctrl        *raw;
 175         struct input_dev                *input_dev;
 176         enum rc_driver_type             driver_type;
 177         bool                            idle;
 178         bool                            encode_wakeup;
 179         u64                             allowed_protocols;
 180         u64                             enabled_protocols;
 181         u64                             allowed_wakeup_protocols;
 182         enum rc_proto                   wakeup_protocol;
 183         struct rc_scancode_filter       scancode_filter;
 184         struct rc_scancode_filter       scancode_wakeup_filter;
 185         u32                             scancode_mask;
 186         u32                             users;
 187         void                            *priv;
 188         spinlock_t                      keylock;
 189         bool                            keypressed;
 190         unsigned long                   keyup_jiffies;
 191         struct timer_list               timer_keyup;
 192         struct timer_list               timer_repeat;
 193         u32                             last_keycode;
 194         enum rc_proto                   last_protocol;
 195         u32                             last_scancode;
 196         u8                              last_toggle;
 197         u32                             timeout;
 198         u32                             min_timeout;
 199         u32                             max_timeout;
 200         u32                             rx_resolution;
 201         u32                             tx_resolution;
 202 #ifdef CONFIG_LIRC
 203         struct device                   lirc_dev;
 204         struct cdev                     lirc_cdev;
 205         ktime_t                         gap_start;
 206         u64                             gap_duration;
 207         bool                            gap;
 208         spinlock_t                      lirc_fh_lock;
 209         struct list_head                lirc_fh;
 210 #endif
 211         bool                            registered;
 212         int                             (*change_protocol)(struct rc_dev *dev, u64 *rc_proto);
 213         int                             (*open)(struct rc_dev *dev);
 214         void                            (*close)(struct rc_dev *dev);
 215         int                             (*s_tx_mask)(struct rc_dev *dev, u32 mask);
 216         int                             (*s_tx_carrier)(struct rc_dev *dev, u32 carrier);
 217         int                             (*s_tx_duty_cycle)(struct rc_dev *dev, u32 duty_cycle);
 218         int                             (*s_rx_carrier_range)(struct rc_dev *dev, u32 min, u32 max);
 219         int                             (*tx_ir)(struct rc_dev *dev, unsigned *txbuf, unsigned n);
 220         void                            (*s_idle)(struct rc_dev *dev, bool enable);
 221         int                             (*s_learning_mode)(struct rc_dev *dev, int enable);
 222         int                             (*s_carrier_report) (struct rc_dev *dev, int enable);
 223         int                             (*s_filter)(struct rc_dev *dev,
 224                                                     struct rc_scancode_filter *filter);
 225         int                             (*s_wakeup_filter)(struct rc_dev *dev,
 226                                                            struct rc_scancode_filter *filter);
 227         int                             (*s_timeout)(struct rc_dev *dev,
 228                                                      unsigned int timeout);
 229 };
 230 
 231 #define to_rc_dev(d) container_of(d, struct rc_dev, dev)
 232 
 233 /*
 234  * From rc-main.c
 235  * Those functions can be used on any type of Remote Controller. They
 236  * basically creates an input_dev and properly reports the device as a
 237  * Remote Controller, at sys/class/rc.
 238  */
 239 
 240 /**
 241  * rc_allocate_device - Allocates a RC device
 242  *
 243  * @rc_driver_type: specifies the type of the RC output to be allocated
 244  * returns a pointer to struct rc_dev.
 245  */
 246 struct rc_dev *rc_allocate_device(enum rc_driver_type);
 247 
 248 /**
 249  * devm_rc_allocate_device - Managed RC device allocation
 250  *
 251  * @dev: pointer to struct device
 252  * @rc_driver_type: specifies the type of the RC output to be allocated
 253  * returns a pointer to struct rc_dev.
 254  */
 255 struct rc_dev *devm_rc_allocate_device(struct device *dev, enum rc_driver_type);
 256 
 257 /**
 258  * rc_free_device - Frees a RC device
 259  *
 260  * @dev: pointer to struct rc_dev.
 261  */
 262 void rc_free_device(struct rc_dev *dev);
 263 
 264 /**
 265  * rc_register_device - Registers a RC device
 266  *
 267  * @dev: pointer to struct rc_dev.
 268  */
 269 int rc_register_device(struct rc_dev *dev);
 270 
 271 /**
 272  * devm_rc_register_device - Manageded registering of a RC device
 273  *
 274  * @parent: pointer to struct device.
 275  * @dev: pointer to struct rc_dev.
 276  */
 277 int devm_rc_register_device(struct device *parent, struct rc_dev *dev);
 278 
 279 /**
 280  * rc_unregister_device - Unregisters a RC device
 281  *
 282  * @dev: pointer to struct rc_dev.
 283  */
 284 void rc_unregister_device(struct rc_dev *dev);
 285 
 286 void rc_repeat(struct rc_dev *dev);
 287 void rc_keydown(struct rc_dev *dev, enum rc_proto protocol, u32 scancode,
 288                 u8 toggle);
 289 void rc_keydown_notimeout(struct rc_dev *dev, enum rc_proto protocol,
 290                           u32 scancode, u8 toggle);
 291 void rc_keyup(struct rc_dev *dev);
 292 u32 rc_g_keycode_from_table(struct rc_dev *dev, u32 scancode);
 293 
 294 /*
 295  * From rc-raw.c
 296  * The Raw interface is specific to InfraRed. It may be a good idea to
 297  * split it later into a separate header.
 298  */
 299 struct ir_raw_event {
 300         union {
 301                 u32             duration;
 302                 u32             carrier;
 303         };
 304         u8                      duty_cycle;
 305 
 306         unsigned                pulse:1;
 307         unsigned                reset:1;
 308         unsigned                timeout:1;
 309         unsigned                carrier_report:1;
 310 };
 311 
 312 #define IR_DEFAULT_TIMEOUT      MS_TO_NS(125)
 313 #define IR_MAX_DURATION         500000000       /* 500 ms */
 314 #define US_TO_NS(usec)          ((usec) * 1000)
 315 #define MS_TO_US(msec)          ((msec) * 1000)
 316 #define MS_TO_NS(msec)          ((msec) * 1000 * 1000)
 317 
 318 void ir_raw_event_handle(struct rc_dev *dev);
 319 int ir_raw_event_store(struct rc_dev *dev, struct ir_raw_event *ev);
 320 int ir_raw_event_store_edge(struct rc_dev *dev, bool pulse);
 321 int ir_raw_event_store_with_filter(struct rc_dev *dev,
 322                                    struct ir_raw_event *ev);
 323 int ir_raw_event_store_with_timeout(struct rc_dev *dev,
 324                                     struct ir_raw_event *ev);
 325 void ir_raw_event_set_idle(struct rc_dev *dev, bool idle);
 326 int ir_raw_encode_scancode(enum rc_proto protocol, u32 scancode,
 327                            struct ir_raw_event *events, unsigned int max);
 328 int ir_raw_encode_carrier(enum rc_proto protocol);
 329 
 330 static inline void ir_raw_event_reset(struct rc_dev *dev)
 331 {
 332         ir_raw_event_store(dev, &((struct ir_raw_event) { .reset = true }));
 333         dev->idle = true;
 334         ir_raw_event_handle(dev);
 335 }
 336 
 337 /* extract mask bits out of data and pack them into the result */
 338 static inline u32 ir_extract_bits(u32 data, u32 mask)
 339 {
 340         u32 vbit = 1, value = 0;
 341 
 342         do {
 343                 if (mask & 1) {
 344                         if (data & 1)
 345                                 value |= vbit;
 346                         vbit <<= 1;
 347                 }
 348                 data >>= 1;
 349         } while (mask >>= 1);
 350 
 351         return value;
 352 }
 353 
 354 /* Get NEC scancode and protocol type from address and command bytes */
 355 static inline u32 ir_nec_bytes_to_scancode(u8 address, u8 not_address,
 356                                            u8 command, u8 not_command,
 357                                            enum rc_proto *protocol)
 358 {
 359         u32 scancode;
 360 
 361         if ((command ^ not_command) != 0xff) {
 362                 /* NEC transport, but modified protocol, used by at
 363                  * least Apple and TiVo remotes
 364                  */
 365                 scancode = not_address << 24 |
 366                         address     << 16 |
 367                         not_command <<  8 |
 368                         command;
 369                 *protocol = RC_PROTO_NEC32;
 370         } else if ((address ^ not_address) != 0xff) {
 371                 /* Extended NEC */
 372                 scancode = address     << 16 |
 373                            not_address <<  8 |
 374                            command;
 375                 *protocol = RC_PROTO_NECX;
 376         } else {
 377                 /* Normal NEC */
 378                 scancode = address << 8 | command;
 379                 *protocol = RC_PROTO_NEC;
 380         }
 381 
 382         return scancode;
 383 }
 384 
 385 #endif /* _RC_CORE */

/* [<][>][^][v][top][bottom][index][help] */