firesat-rc.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "firesat.h"
  2. #include "firesat-rc.h"
  3. #include <linux/input.h>
  4. static u16 firesat_irtable[] = {
  5. KEY_ESC,
  6. KEY_F9,
  7. KEY_1,
  8. KEY_2,
  9. KEY_3,
  10. KEY_4,
  11. KEY_5,
  12. KEY_6,
  13. KEY_7,
  14. KEY_8,
  15. KEY_9,
  16. KEY_I,
  17. KEY_0,
  18. KEY_ENTER,
  19. KEY_RED,
  20. KEY_UP,
  21. KEY_GREEN,
  22. KEY_F10,
  23. KEY_SPACE,
  24. KEY_F11,
  25. KEY_YELLOW,
  26. KEY_DOWN,
  27. KEY_BLUE,
  28. KEY_Z,
  29. KEY_P,
  30. KEY_PAGEDOWN,
  31. KEY_LEFT,
  32. KEY_W,
  33. KEY_RIGHT,
  34. KEY_P,
  35. KEY_M,
  36. KEY_R,
  37. KEY_V,
  38. KEY_C,
  39. 0
  40. };
  41. static struct input_dev firesat_idev;
  42. int firesat_register_rc(void)
  43. {
  44. int index;
  45. memset(&firesat_idev, 0, sizeof(firesat_idev));
  46. firesat_idev.evbit[0] = BIT(EV_KEY);
  47. for (index = 0; firesat_irtable[index] != 0; index++)
  48. set_bit(firesat_irtable[index], firesat_idev.keybit);
  49. return input_register_device(&firesat_idev);
  50. }
  51. int firesat_unregister_rc(void)
  52. {
  53. input_unregister_device(&firesat_idev);
  54. return 0;
  55. }
  56. int firesat_got_remotecontrolcode(u16 code)
  57. {
  58. u16 keycode;
  59. if (code > 0x4500 && code < 0x4520)
  60. keycode = firesat_irtable[code - 0x4501];
  61. else if (code > 0x453f && code < 0x4543)
  62. keycode = firesat_irtable[code - 0x4521];
  63. else {
  64. printk(KERN_DEBUG "%s: invalid key code 0x%04x\n", __func__,
  65. code);
  66. return -EINVAL;
  67. }
  68. input_report_key(&firesat_idev, keycode, 1);
  69. input_report_key(&firesat_idev, keycode, 0);
  70. return 0;
  71. }