/src/backend/native/ftk_backend_fb.c

http://ftk.googlecode.com/ · C · 119 lines · 103 code · 15 blank · 1 comment · 26 complexity · 85fe372134434e4ffb20713df4e86500 MD5 · raw file

  1. #include "ftk_log.h"
  2. #include "ftk_globals.h"
  3. #include "ftk_display_fb.h"
  4. #include "ftk_source_input.h"
  5. #include "ftk_wnd_manager.h"
  6. #include "ftk_source_tslib.h"
  7. #include "ftk_source_ps2mouse.h"
  8. static Ret ftk_init_input(void)
  9. {
  10. char filename[260] = {0};
  11. const char* tsdev = NULL;
  12. FtkSource* source = NULL;
  13. struct dirent* iter = NULL;
  14. const char* extra_input = NULL;
  15. DIR* dir = opendir("/dev/input");
  16. return_val_if_fail(dir != NULL, RET_FAIL);
  17. tsdev = getenv("FTK_TSLIB_FILE") ? getenv("FTK_TSLIB_FILE") : FTK_TSLIB_FILE;
  18. while((iter = readdir(dir)) != NULL)
  19. {
  20. if(iter->d_name[0] == '.') continue;
  21. if(!(iter->d_type & DT_CHR)) continue;
  22. ftk_snprintf(filename, sizeof(filename), "/dev/input/%s", iter->d_name);
  23. #ifdef USE_TSLIB
  24. if(strcmp(filename, tsdev) == 0)
  25. {
  26. /*skip tsdev now, open it later.*/
  27. continue;
  28. }
  29. else
  30. #endif
  31. if(strcmp(filename, "/dev/input/mice") == 0)
  32. {
  33. int max_x = ftk_display_width(ftk_default_display());
  34. int max_y = ftk_display_height(ftk_default_display());
  35. source = ftk_source_ps2mouse_create(filename,
  36. (FtkOnEvent)ftk_wnd_manager_queue_event_auto_rotate, ftk_default_wnd_manager(), max_x, max_y);
  37. }
  38. else
  39. {
  40. source = ftk_source_input_create(filename,
  41. (FtkOnEvent)ftk_wnd_manager_queue_event_auto_rotate, ftk_default_wnd_manager());
  42. }
  43. if(source != NULL)
  44. {
  45. ftk_sources_manager_add(ftk_default_sources_manager(), source);
  46. }
  47. }
  48. closedir(dir);
  49. #ifdef USE_TSLIB
  50. source = ftk_source_tslib_create(tsdev,
  51. (FtkOnEvent)ftk_wnd_manager_queue_event_auto_rotate, ftk_default_wnd_manager());
  52. if(source != NULL)
  53. {
  54. ftk_sources_manager_add(ftk_default_sources_manager(), source);
  55. }
  56. ftk_logd("%s: tsdev %s source=%p\n", __func__, tsdev, source);
  57. #endif
  58. extra_input = getenv("FTK_EXTRA_INPUT");
  59. if(extra_input != NULL)
  60. {
  61. source = ftk_source_input_create(filename,
  62. (FtkOnEvent)ftk_wnd_manager_queue_event_auto_rotate, ftk_default_wnd_manager());
  63. if(source != NULL)
  64. {
  65. ftk_sources_manager_add(ftk_default_sources_manager(), source);
  66. ftk_logd("add %s input device\n", extra_input);
  67. }
  68. }
  69. return RET_OK;
  70. }
  71. static const char* fb_dev[] =
  72. {
  73. FTK_FB_NAME,
  74. "/dev/fb0",
  75. "/dev/graphic/fb0",
  76. NULL
  77. };
  78. Ret ftk_backend_init(int argc, char* argv[])
  79. {
  80. ftk_set_display(ftk_display_fb_create(getenv("FTK_FB_NAME") ? getenv("FTK_FB_NAME") : FTK_FB_NAME));
  81. if(ftk_default_display() == NULL)
  82. {
  83. size_t i = 0;
  84. for(i = 0; fb_dev[i] != NULL; i++)
  85. {
  86. ftk_set_display(ftk_display_fb_create(fb_dev[i]));
  87. if(ftk_default_display() != NULL)
  88. {
  89. break;
  90. }
  91. else
  92. {
  93. ftk_loge("open %s failed.\n", fb_dev[i]);
  94. }
  95. }
  96. }
  97. if(ftk_default_display() == NULL)
  98. {
  99. ftk_loge("open display failed %s.\n", FTK_FB_NAME);
  100. exit(0);
  101. }
  102. ftk_init_input();
  103. return RET_OK;
  104. }