/*
 * Copyright (c) 2020-2021 Huawei Device Co., Ltd.
 *
 * HDF is dual licensed: you can use it either under the terms of
 * the GPL, or the BSD license, at your option.
 * See the LICENSE file in the root of this repository for complete details.
 */

#ifndef EVENT_HUB_H
#define EVENT_HUB_H

#include "input-event-codes.h"
#include "hdf_input_device_manager.h"
#include "osal_time.h"

#define input_report_abs    ReportAbs
#define input_report_key    ReportKey
#define input_report_rel    ReportRel
#define input_sync          ReportSync
#define input_mt_sync       ReportMtSync

typedef struct {
    uint32_t type;
    uint32_t code;
    int32_t value;
    uint64_t time;
} EventPackage;

void PushOnePackage(InputDevice *inputDev, uint32_t type, uint32_t code, int32_t value);

static inline void ReportAbs(InputDevice *inputDev, uint32_t code, int32_t value)
{
    PushOnePackage(inputDev, EV_ABS, code, value);
}

static inline void ReportKey(InputDevice *inputDev, uint32_t code, int32_t value)
{
    PushOnePackage(inputDev, EV_KEY, code, !!value);
}

static inline void ReportRel(InputDevice *inputDev, uint32_t code, int32_t value)
{
    PushOnePackage(inputDev, EV_REL, code, value);
}

static inline void ReportSync(InputDevice *inputDev)
{
    PushOnePackage(inputDev, EV_SYN, SYN_REPORT, 0);
}

static inline void ReportMtSync(InputDevice *inputDev)
{
    PushOnePackage(inputDev, EV_SYN, SYN_MT_REPORT, 0);
}

#endif