#include "encoder_api.h" #include "common_pm.h" #include "encoder_port.h" #include "stdio.h" static void encoder_screen_event_callback(screen_status_t status) { if (status == PM_STATUS_ON) { encoder_resume(); } else { encoder_suspend(); } } static int32_t encoder_dev_open(void) { uint32_t ret = ENC_SUCC; ret = rotary_encoder_init(NULL); if (ret != ENC_SUCC) { return -1; } tjd_driver_common_pm_get_ops()->register_screen_on_event(encoder_screen_event_callback); return 0; } static int32_t encoder_dev_close(void) { uint32_t ret = ENC_SUCC; tjd_driver_common_pm_get_ops()->unregister_screen_on_event(encoder_screen_event_callback); ret = rotary_encoder_deinit(); if (ret != ENC_SUCC) { return -1; } return 0; } static void register_report_event_cb(void *callback) { encoder_register_report_event_cb(callback); } static int32_t unregister_report_event_cb(void) { uint32_t ret = encoder_unregister_report_event_cb(); if (ret != ENC_SUCC) { return -1; } return 0; } static struct encoder_class_ops g_encoder_ops = { .open = encoder_dev_open, .close = encoder_dev_close, .register_report_event_cb = register_report_event_cb, .unregister_report_event_cb = unregister_report_event_cb, }; struct encoder_class_ops *tjd_driver_encoder_get_ops(void) { return &g_encoder_ops; }