mcu_hi3321_watch/tjd/driver/encoder/encoder_api.c
2025-05-26 20:15:20 +08:00

55 lines
1.4 KiB
C

#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; }