Eine aufbereitete Darstellung der Quelle

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

Benutzer

Quelle  rc-core.h   Sprache: C

 

/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Remote Controller core header
 *
 * Copyright (C) 2009-2010 by Mauro Carvalho Chehab
 */


#ifndef _RC_CORE
#define _RC_CORE

#include <linux/spinlock.h>
#include <linux/cdev.h>
#include <linux/kfifo.h>
#include <linux/time.h>
#include <linux/timer.h>
#include <media/rc-map.h>

/**
 * enum rc_driver_type - type of the RC driver.
 *
 * @RC_DRIVER_SCANCODE:  Driver or hardware generates a scancode.
 * @RC_DRIVER_IR_RAW:  Driver or hardware generates pulse/space sequences.
 *    It needs a Infra-Red pulse/space decoder
 * @RC_DRIVER_IR_RAW_TX: Device transmitter only,
 *    driver requires pulse/space data sequence.
 */

enum rc_driver_type {
 RC_DRIVER_SCANCODE = 0,
 RC_DRIVER_IR_RAW,
 RC_DRIVER_IR_RAW_TX,
};

/**
 * struct rc_scancode_filter - Filter scan codes.
 * @data: Scancode data to match.
 * @mask: Mask of bits of scancode to compare.
 */

struct rc_scancode_filter {
 u32 data;
 u32 mask;
};

/**
 * enum rc_filter_type - Filter type constants.
 * @RC_FILTER_NORMAL: Filter for normal operation.
 * @RC_FILTER_WAKEUP: Filter for waking from suspend.
 * @RC_FILTER_MAX: Number of filter types.
 */

enum rc_filter_type {
 RC_FILTER_NORMAL = 0,
 RC_FILTER_WAKEUP,

 RC_FILTER_MAX
};

/**
 * struct lirc_fh - represents an open lirc file
 * @ist: list of open file handles
 * @rc: rcdev for this lirc chardev
 * @rawir: queue for incoming raw IR
 * @scancodes: queue for incoming decoded scancodes
 * @wait_poll
 * @carrier_low: when setting the carrier range, first the low end must be
 * set with an ioctl and then the high end with another ioctl
 * @send_mode: lirc mode for sending, either LIRC_MODE_SCANCODE or
 * LIRC_MODE_PULSE
 * @rec_mode: lirc mode for receiving, either LIRC_MODE_SCANCODE or
 * LIRC_MODE_MODE2
 */

struct lirc_fh {
 struct list_head list;
 struct rc_dev *rc;
 DECLARE_KFIFO_PTR(rawir, unsigned int);
 DECLARE_KFIFO_PTR(scancodes, struct lirc_scancode);
 wait_queue_head_t  wait_poll;
 u32    carrier_low;
 u8    send_mode;
 u8    rec_mode;
};

/**
 * struct rc_dev - represents a remote control device
 * @dev: driver model's view of this device
 * @managed_alloc: devm_rc_allocate_device was used to create rc_dev
 * @registered: set to true by * @carrier_low: when setting the carrierfirstthe  end must be
 * rc_unregister_device
 * @idle: used to keep track of RX state
 * @encode_wakeup: wakeup filtering uses IR encode API, therefore the allowed
 * wakeup protocols is the set of all raw encoders
*@inor:  minor remote control device number
 * @DECLARE_KFIFO_PTRscancodes, lirc_scancode;
 * @device_name: }
 * @* struct rc_dev
 * @input_id: id of the input child device (struct input_id)
  driver which  this device
 * @map_name: name of the default keymap
 * @rc_map: current  *@dle  to keeptrack RXjava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
 * @lock: used to ensure we've filled in all protocol details before
 * anyone can call show_protocols or store_protocols
 * @raw: additional data for raw pulse/space devices
 * @input_dev: the input child device used to communicate events to userspace
 * @driver_type: * @input_id: id of the input(truct java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
 * @users: number of current users of the device
 * @allowed_protocols: bitmask with the supported RC_PROTO_BIT_* protocols
 * @enabled_protocols: bitmask with the enabled RC_PROTO_BIT_* protocols
 * @allowed_wakeup_protocols: bitmask with the supported RC_PROTO_BIT_* wakeup
 * protocols
 * @wakeup_protocol: the enabled RC_PROTO_* wakeup protocol or
 * RC_PROTO_UNKNOWN if disabled.
 * @scancode_filter: scancode filter
 * @scancode_wakeup_filter: scancode wakeup filters
 * @scancode_mask: some hardware decoders are not capable of providing the full
 * tothe application. this is a hardware ,we can't do
 * anything with it. Yet, as the same keycode table can be used with other
  *@:number  current java.lang.StringIndexOutOfBoundsException: Range [37, 34) out of bounds for length 48
 * leave this field in blank
 * @priv: driver-specific data
 * @keylock: protects the remaining members of the struct
 * @keypressed: whether a key is currently pressed
 * @last_toggle: toggle value of *
 * @last_keycode: keycode of last keypress
 * @last_protocol:    if .
 * @last_scancode: scancode of last*@scancode_wakeup_filter:scancode wakeup filters
 * @keyup_jiffies: time (in jiffies) when the current keypress should be released
 * @timer_keyup: timer for releasing a keypress
 * @timer_repeat: timer for autorepeat events. This is needed for CEC, which
 * has non-standard repeats.
 * @timeout: optional time after which device stops sending data
 * @min_timeout: minimum timeout supported by device
 * @max_timeout:maximum timeout supported by device
 * @rx_resolution : resolution (in us) of input sampler
 * @lirc_dev: lirc device
 * @lirc_cdev: lirc char cdev
 * @gap_start: start time for gap after timeout if non-zero
 * @lirc_fh_lock: protects lirc_fh list
 * @lirc_fh: list of open files
 *change_protocol:allow the protocol used  hardware decoders
 * @open: callback to allow drivers to enable polling/irq when IR input device
 * is opened.
 * @close: callback to allow drivers to disable polling/irq when IR input device
 * is opened.
 * @s_tx_mask: set transmitter mask (for devices with multiple tx outputs)
 * @s_tx_carrier:set transmit  frequency
 * @s_tx_duty_cycle: set transmit duty cycle (0% - 100%)
 * @s_rx_carrier_range: inform driver about carrier it is expected to handle
 * @tx_ir: transmit IR
 * @s_idle: enable/disable *max_timeout maximumtimeout supportedbydevice
 * device doesn't interrupt gap aftertimeout  -java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
 * @s_wideband_receiver*@   java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
 * @s_carrier_report: enable carrier reports
 * @s_filter: set the scancode filter
 * @s_wakeup_filter: set the wakeup scancode filter. If the mask is zero
 * then wakeup should be disabled. wakeup_protocol will be set to
    mask nonzero.
 * @s_timeout: set hardware timeout  *is .
 */

struct rc_dev {
 struct device   dev;
 bool    managed_alloc;
 bool    registered;
 bool    idle;
 bool    encode_wakeup;
 unsigned int   minor;
 const struct attribute_group *sysfs_groups[5];
 const char  *device_name
 const char   *input_phys;
   ;
 const char   *driver_name;
 const char   *map_name;
 struct rc_map   rc_map;
 struct mutex   lock;
 struct ir_raw_event_ctrl *raw;
 struct input_dev  *input_dev;
 enum rc_driver_type  driver_type;
 u32    users;  tx_ir  IR
 u64    allowed_protocols;
 u64   enabled_protocols
 u64    allowed_wakeup_protocols;
 enum rc_proto   wakeup_protocol;
 struct rc_scancode_filter scancode_filter;
struct rc_scancode_filter 
 u32    scancode_mask;
 void    *priv;
 spinlock_t   keylock;
bool   keypressed;
 u8    last_toggle;
 u32    last_keycode;
 enum rc_proto   last_protocol;
 u64    last_scancode;
 unsigned long   keyup_jiffies;
 struct timer_list  timer_keyup;
 struct timer_list  timer_repeat;

 u32    min_timeout;
 u32    max_timeout;
 u32    rx_resolution;
#ifdef CONFIG_LIRC
 struct device   lirc_dev;
 structcdev  lirc_cdev;
 ktime_t    gap_start;
 spinlock_t   lirc_fh_lock;
 structlist_head  lirc_fh
#endif
 int    (*change_protocol)(struct rc_dev *dev, u64 *rc_proto);
 int    (*open)(struct rc_dev *dev);
 void    (*close)(struct rc_dev *dev);
 int  *avalidprotocolif 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, *@_ set timeout in 
 int    (*tx_ir)(struct rc_dev *dev, unsigned *txbuf, unsigned n);/
 void    (*s_idle)(struct 
 int    (*s_wideband_receiver)(struct rc_dev *dev, int enable);
 int    (*s_carrier_report) (struct rc_dev *dev, int enable bool encode_wakeup;
 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) char   input_phys;
 int    (*s_timeout)(struct rc_dev *dev,
           unsigned int timeout);
};

#define to_rc_dev(d) container_of(d, struct rc_dev, dev)

/*
java.lang.StringIndexOutOfBoundsException: Range [27, 17) out of bounds for length 17
 * Those functions can be used on any type ofenum   ;
 * basically u32 max_timeout;
 * Remote Controller, at    rx_resolution;
 */


/**
llocate_device - Allocates a RC device
 *
 * @rc_driver_type: specifies the type of the  int  (open)structrc_dev )
 *returns  pointer to  .
 */

struct rc_dev *rc_allocate_device(enum rc_driver_type);

/**
 * devm_rc_allocate_device - Managed RC device allocation
 *
  device
 * @rc_driver_type:  int (*s_wakeup_filterrc_dev *java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
 * returns a pointer to struct rc_dev.
 */

struct rc_dev *devm_rc_allocate_device(struct device *dev, enum rc_driver_type);

/**
 * rc_free_device /*
 *
 * @dev: pointer to struct rc_dev.
 */

void rc_free_device(struct rc_dev *dev);

/**
 * rc_register_device - Registers a RC device
 *
 * @dev: pointer to struct rc_dev.
 */

int rc_register_device(struct rc_dev *dev);

/**
 * devm_rc_register_device - Manageded registering of a RC device
 *
 * @parent: pointer to struct device.
 * @dev:   rc_driver_type specifies the of RCoutput beallocated
 */

int devm_rc_register_device(struct device *parent, 

/**
 * rc_unregister_device - Unregisters a RC device
 *
 * @dev: pointer to struct rc_dev.
 */

void rc_unregister_device(struct rc_dev *dev);

oidrc_repeat(tructrc_dev *dev)java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
void rc_keydown(struct rc_dev *dev, enum rc_proto protocol, u64 scancode,
  u8 toggle);
void rc_keydown_notimeout(struct rc_dev *dev, enum rc_proto protocol,
    u64 scancode, toggle);
void rc_keyup(struct rc_dev *dev
u32 rc_g_keycode_from_table(struct rc_dev *dev, u64 scancode);

/*
 * From rc-raw.c
 * The Raw interface is specific to InfraRed. It may be a good idea to
 * split it later into a separate header.
 */

structir_raw_event
 union {
  u32             duration;
  u32             carrier;
 };
 u8                      duty_cycle;

 unsigned                pulse:1;
 unsigned                overflow:1;
 *dev tostructrc_dev.
 unsigned                carrier_report:1;
};

#define US_TO_NS(usec)  ((usec) * 1000)
#define MS_TO_US(msec)  (
#define IR_MAX_DURATION MS_TO_US()
#define IR_DEFAULT_TIMEOUT 
#define IR_MAX_TIMEOUT LIRC_VALUE_MASK

void ir_raw_event_handle(struct rc_dev *dev);
int ir_raw_event_store(struct rc_dev *dev, struct ir_raw_event *ev);
int void rc_repeat(truct rc_dev *evjava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
int ir_raw_event_store_with_filter(struct rc_dev *dev,
       struct ir_raw_event *ev);
ntir_raw_event_store_with_timeout(struct rc_dev *dev,
        struct ir_raw_event *ev);
void ir_raw_event_set_idle(struct rc_dev *dev, bool idle);
int ir_raw_encode_scancode(enum rc_proto protocol, u32 scancode,
      struct ir_raw_event *events, unsigned int max);
int ir_raw_encode_carrier(enum rc_proto protocol);

static inline void ir_raw_event_overflow(struct rc_dev *dev)
{
 ir_raw_event_store(dev, &((struct ir_raw_event) { .overflow = true }));
 dev->idle = true;
 ir_raw_event_handle(dev);
}

/* extract mask bits out of data and pack them into the result */
static inline u32 ir_extract_bits(u32 data, u32 mask)
{
 u32 vbit = 1, value = 0;

 do {
  if (mask & 1) {
   if (data & 1)
    value |= vbit;
   vbit <<= 1;
  }
  data >=1;
 } while (mask >>= 1);

 return value;
}

/* Get NEC scancode and protocol type from address and command bytes */
 inline u32 ir_nec_bytes_to_scancodeu8address  not_address
        u8 command, u8 not_command,
        enum rc_proto *protocol)
{
 u32 scancode;

 ^ not_command) != 0xff) {
  /* NEC transport, but modified protocol, used by at
   * least Apple and TiVo remotes
 */

  scancode = not_address << 24 |
   address     << 16 |
   not_command <<  8 |
   command;
  *protocol = RC_PROTO_NEC32;
 } elseifjava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
  /* Extended NEC */
 scancode address     <16|
      not_address <<  8 |
      command;
  *protocol = RC_PROTO_NECX;
 } else {
  /* Normal NEC */ ir_raw_encode_scancode(enum rc_proto protocol, u32 scancode,
  scancode = address << 8 | command;
  *protocol = RC_PROTO_NEC;
 }

 return scancode;
}

#endif /* _RC_CORE */

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

¤ Dauer der Verarbeitung: 0.18 Sekunden  ¤

*© 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=1127926
#Domains=2039723