static inline int32_t GPT__SetCtrlValue()

in IndustrialDeviceController/Software/MT3620_IDC_RTApp/lib/GPT.c [130:222]


static inline int32_t GPT__SetCtrlValue(
    GPT       *handle,
    bool      *enabled,
    GPT_Mode  *mode,
    bool      *speed,
    bool      *restart)
{
    if (!handle) {
        return ERROR_PARAMETER;
    }

    int32_t error = ERROR_NONE;
    switch (handle->id) {
    case MT3620_UNIT_GPT0:
        if (enabled) {
            MT3620_GPT_FIELD_WRITE(gpt0_ctrl, en, *enabled);
        }
        if (mode) {
            MT3620_GPT_FIELD_WRITE(gpt0_ctrl, mode, *mode);
        }
        if (speed) {
            MT3620_GPT_FIELD_WRITE(gpt0_ctrl, speed, *speed);
        }
        if (restart) {
            MT3620_GPT_FIELD_WRITE(gpt0_ctrl, restart, *restart);
        }
        break;

    case MT3620_UNIT_GPT1:
        if (enabled) {
            MT3620_GPT_FIELD_WRITE(gpt1_ctrl, en, *enabled);
        }
        if (mode) {
            MT3620_GPT_FIELD_WRITE(gpt1_ctrl, mode, *mode);
        }
        if (speed) {
            MT3620_GPT_FIELD_WRITE(gpt1_ctrl, speed, *speed);
        }
        if (restart) {
            MT3620_GPT_FIELD_WRITE(gpt1_ctrl, restart, *restart);
        }
        break;

    case MT3620_UNIT_GPT2:
        if (enabled) {
            MT3620_GPT_FIELD_WRITE(gpt2_ctrl, en, *enabled);
        }
        if (mode && (*mode != GPT_MODE_NONE)) {
            error = ERROR_UNSUPPORTED;
        }
        if (speed) {
            MT3620_GPT_FIELD_WRITE(gpt2_ctrl, speed, *speed);
        }
        if (restart) {
            error = ERROR_UNSUPPORTED;
        }
        break;

    case MT3620_UNIT_GPT3:
        if (enabled) {
            MT3620_GPT_FIELD_WRITE(gpt3_ctrl, en, *enabled);
        }
        if (mode) {
            // GPT3 doesn't support repeat in HW, but we can emulate it in HW
            handle->mode = *mode;
        }
        if (speed || restart) {
            error = ERROR_UNSUPPORTED;
        }
        break;

    case MT3620_UNIT_GPT4:
        if (enabled) {
            MT3620_GPT_FIELD_WRITE(gpt4_ctrl, en, *enabled);
        }
        if (mode && (*mode != GPT_MODE_NONE)) {
            error = ERROR_UNSUPPORTED;
        }
        if (speed) {
            MT3620_GPT_FIELD_WRITE(gpt4_ctrl, speed, *speed);
        }
        if (restart) {
            error = ERROR_UNSUPPORTED;
        }
        break;

    default:
        error = ERROR_UNSUPPORTED;
        break;
    }

    return error;
}