struct rc_dev — represents a remote control device
struct rc_dev { struct device dev; atomic_t initialized; const struct attribute_group * sysfs_groups[5]; const char * input_name; const char * input_phys; struct input_id input_id; char * driver_name; const char * map_name; struct rc_map rc_map; struct mutex lock; unsigned int minor; struct ir_raw_event_ctrl * raw; struct input_dev * input_dev; enum rc_driver_type driver_type; bool idle; u64 allowed_protocols; u64 enabled_protocols; u64 allowed_wakeup_protocols; u64 enabled_wakeup_protocols; struct rc_scancode_filter scancode_filter; struct rc_scancode_filter scancode_wakeup_filter; u32 scancode_mask; u32 users; void * priv; spinlock_t keylock; bool keypressed; unsigned long keyup_jiffies; struct timer_list timer_keyup; u32 last_keycode; enum rc_type last_protocol; u32 last_scancode; u8 last_toggle; u32 timeout; u32 min_timeout; u32 max_timeout; u32 rx_resolution; u32 tx_resolution; int (* change_protocol) (struct rc_dev *dev, u64 *rc_type); int (* change_wakeup_protocol) (struct rc_dev *dev, u64 *rc_type); int (* open) (struct rc_dev *dev); void (* close) (struct rc_dev *dev); int (* s_tx_mask) (struct rc_dev *dev, u32 mask); int (* s_tx_carrier) (struct rc_dev *dev, u32 carrier); int (* s_tx_duty_cycle) (struct rc_dev *dev, u32 duty_cycle); int (* s_rx_carrier_range) (struct rc_dev *dev, u32 min, u32 max); int (* tx_ir) (struct rc_dev *dev, unsigned *txbuf, unsigned n); void (* s_idle) (struct rc_dev *dev, bool enable); int (* s_learning_mode) (struct rc_dev *dev, int enable); int (* s_carrier_report) (struct rc_dev *dev, int enable); int (* s_filter) (struct rc_dev *dev,struct rc_scancode_filter *filter); int (* s_wakeup_filter) (struct rc_dev *dev,struct rc_scancode_filter *filter); int (* s_timeout) (struct rc_dev *dev,unsigned int timeout); };
driver model's view of this device
1 if the device init has completed, 0 otherwise
sysfs attribute groups
name of the input child device
physical path to the input child device
id of the input child device (struct input_id)
name of the hardware driver which registered this device
name of the default keymap
current scan/key table
used to ensure we've filled in all protocol details before anyone can call show_protocols or store_protocols
unique minor remote control device number
additional data for raw pulse/space devices
the input child device used to communicate events to userspace
specifies if protocol decoding is done in hardware or software
used to keep track of RX state
bitmask with the supported RC_BIT_* protocols
bitmask with the enabled RC_BIT_* protocols
bitmask with the supported RC_BIT_* wakeup protocols
bitmask with the enabled RC_BIT_* wakeup protocols
scancode filter
scancode wakeup filters
some hardware decoders are not capable of providing the full scancode to the application. As this is a hardware limit, we can't do anything with it. Yet, as the same keycode table can be used with other devices, a mask is provided to allow its usage. Drivers should generally leave this field in blank
number of current users of the device
driver-specific data
protects the remaining members of the struct
whether a key is currently pressed
time (in jiffies) when the current keypress should be released
timer for releasing a keypress
keycode of last keypress
protocol of last keypress
scancode of last keypress
toggle value of last command
optional time after which device stops sending data
minimum timeout supported by device
maximum timeout supported by device
resolution (in ns) of input sampler
resolution (in ns) of output sampler
allow changing the protocol used on hardware decoders
allow changing the protocol used for wakeup filtering
callback to allow drivers to enable polling/irq when IR input device is opened.
callback to allow drivers to disable polling/irq when IR input device is opened.
set transmitter mask (for devices with multiple tx outputs)
set transmit carrier frequency
set transmit duty cycle (0% - 100%)
inform driver about carrier it is expected to handle
transmit IR
enable/disable hardware idle mode, upon which, device doesn't interrupt host until it sees IR pulses
enable wide band receiver used for learning
enable carrier reports
set the scancode filter
set the wakeup scancode filter
set hardware timeout in ns