event-test.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include "test_common.h"
  2. TEST_START
  3. extern PikaEventListener* g_pika_device_event_listener;
  4. #if PIKA_EVENT_ENABLE
  5. TEST(event, gpio) {
  6. /* init */
  7. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  8. /* run */
  9. pikaVM_runSingleFile(pikaMain, "test/python/TemplateDevice/gpio_cb.py");
  10. #define EVENT_SIGAL_IO_RISING_EDGE 0x01
  11. #define EVENT_SIGAL_IO_FALLING_EDGE 0x02
  12. #define GPIO_PA8_EVENT_ID 0x08
  13. /* simulate run in the call back */
  14. pks_eventListener_sendSignal(g_pika_device_event_listener,
  15. GPIO_PA8_EVENT_ID, EVENT_SIGAL_IO_RISING_EDGE);
  16. pks_eventListener_sendSignal(g_pika_device_event_listener,
  17. GPIO_PA8_EVENT_ID,
  18. EVENT_SIGAL_IO_FALLING_EDGE);
  19. /* assert */
  20. obj_run(pikaMain, "io1.eventTest()");
  21. EXPECT_STREQ(log_buff[3], "get rising edge!\r\n");
  22. EXPECT_STREQ(log_buff[2], "get falling edge!\r\n");
  23. EXPECT_STREQ(log_buff[1], "get rising edge!\r\n");
  24. EXPECT_STREQ(log_buff[0], "get falling edge!\r\n");
  25. for (int i = 0; i < 255; i++) {
  26. obj_run(pikaMain, "io1.eventTest()");
  27. }
  28. /* simulate run in the call back */
  29. Arg* res_123 = pks_eventListener_sendSignalAwaitResult(
  30. g_pika_device_event_listener, GPIO_PA8_EVENT_ID, 123);
  31. Arg* res_456 = pks_eventListener_sendSignalAwaitResult(
  32. g_pika_device_event_listener, GPIO_PA8_EVENT_ID, 456);
  33. EXPECT_EQ(arg_getInt(res_123), 123);
  34. EXPECT_EQ(arg_getInt(res_456), 456);
  35. /* simulate task queue overflow */
  36. for (int i = 0; i < PIKA_EVENT_LIST_SIZE * 2; i++) {
  37. _do_pks_eventListener_send(
  38. g_pika_device_event_listener, GPIO_PA8_EVENT_ID,
  39. arg_newInt(EVENT_SIGAL_IO_FALLING_EDGE), PIKA_FALSE);
  40. }
  41. obj_run(pikaMain, "io1.close()");
  42. /* deinit */
  43. obj_deinit(pikaMain);
  44. EXPECT_EQ(pikaMemNow(), 0);
  45. }
  46. TEST(event, remove_regist) {
  47. /* init */
  48. PikaObj* pikaMain = newRootObj("pikaMain", New_PikaMain);
  49. /* run */
  50. pks_eventListener_init(&g_pika_device_event_listener);
  51. PikaObj* testobj = newNormalObj(New_TinyObj);
  52. pks_eventListener_registEvent(g_pika_device_event_listener, 0, testobj);
  53. EXPECT_EQ(testobj->refcnt, 2);
  54. pks_eventListener_removeEvent(g_pika_device_event_listener, 0);
  55. EXPECT_EQ(testobj->refcnt, 1);
  56. /* deinit */
  57. obj_deinit(pikaMain);
  58. obj_deinit(testobj);
  59. pks_eventListener_deinit(&g_pika_device_event_listener);
  60. EXPECT_EQ(pikaMemNow(), 0);
  61. }
  62. #endif
  63. TEST_END