dev_tp.c
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:1k
源码类别:

uCOS

开发平台:

C/C++

  1. #include "panel.h"
  2. #include "paneldrv.h"
  3. #include "err.h"
  4. #ifndef NULL
  5. #define NULL 0
  6. #endif
  7. #define CYGNUM_HAL_INTERRUPT_TOUCH 3
  8.  ts_info TsInfo = {CYGNUM_HAL_INTERRUPT_TOUCH};
  9. int ts_open(void* priv)
  10. {
  11. // Key related state,variable init.
  12. InitPanelQueue();
  13. InitTouchPen();    
  14. return 0;
  15. }
  16. int ts_set_callback(void* priv,HDEV hdev, DEV_CALLBACK callback) /* BIOS notify OS, called it in DSR typically */
  17. {
  18. TsInfo.hdev = hdev;
  19.    TsInfo.callback = callback;
  20. return 0;
  21. }
  22. int ts_read(void* priv,unsigned char* buf, unsigned int* len)
  23. {
  24.     ts_event *ts_buffer = (ts_event *)buf;
  25. if( ts_buffer == NULL )
  26. {
  27. if( Is_penexist() )
  28. *len = sizeof(ts_event);
  29. else
  30. *len = 0;
  31. return 0;
  32. }
  33.     /* may get multipl keys */
  34. if ( *len < sizeof(ts_event) )
  35. return -EINTR;
  36.     cyg_scheduler_lock();  // Prevent interaction with DSR code
  37. if(GetPanelInf((PANEL_STRUC *)ts_buffer))
  38. {
  39. *len = sizeof(ts_event);
  40.     cyg_scheduler_unlock(); // Allow DSRs again
  41.      return ENOERR;
  42. }
  43. else
  44. {
  45. *len = 0;
  46.     cyg_scheduler_unlock(); // Allow DSRs again
  47. return -EAGAIN;
  48. }
  49. }
  50. int ts_setopt(unsigned int type, void *argp, unsigned int size)
  51. {
  52. return ENOERR;
  53. }
  54. void ts_init(void){;}
  55. BIOS_DEVIO_TABLE( ts, 
  56. ts_open,
  57. NULL,
  58. ts_set_callback,
  59. ts_read,
  60. NULL,
  61. ts_setopt,
  62. NULL,
  63. NULL,
  64. NULL)
  65. BIOS_DEVTAB_ENTRY(ts, DEV_SYNC_MODE_NONE,0)