// 同步模块，信号收发
// 杭州秒寻科技有限公司
// 周涛
// 2023-11-20
// 注意：这部分代码为厂家提供，没做修改

#include "includes.h"

static SYNC_RXTX_STATUS_MANAGE_T g_Sync_stRxTxStatusManage = {0}; // 模块状态管理结构
static uint8 gSync_abySendData[2] = {0x55, 0x55};                 // 每次发送的数据

// 模块初始化
void sync_rxtx_init()
{
    SYS_MEMSET(&g_Sync_stRxTxStatusManage, 0, sizeof(SYNC_RXTX_STATUS_MANAGE_T));
}

// 发送信号
uint8 sync_rxtx_send_signal()
{
    uint8 byFlag = 0;

    // 清空tx fifo
    sync_rxtx_clear_tx_fifo();

    // 将数据写入tx fifo
    driverapp_sync_write_bytes(SYNC_BURST_WRITE_FIFO, (uint8 *)gSync_abySendData, 0x02);

    // 切换至go tx状态(这里会出现0-20us的不定延时)
    byFlag = sync_switch_work_status(SYNC_STATUS_GO_TX, SYNC_STATUS_TX);
    if (!byFlag)
    {
        return 0;
    }

    return 1;
}

// 数据发送完成-后处理
uint8 sync_rxtx_send_signal_over()
{
    uint8 byFlag = 0;

    sync_rxtx_clear_tx_int_flag(); // 清除发送完成中断标志

    // 发送数据前预准备(芯片状态切换)，最后切换至tfs状态以缩短切换至tx状态的时间
    byFlag = sync_pre_send_data();
    if (!byFlag)
    {
        return 0;
    }

    return 1;
}

// 清空发送缓存
uint8 sync_rxtx_clear_tx_fifo()
{
    return sync_rewrite_reg(0x1B, 0x01, 0x01);
}

// 清除发送中断标志
uint8 sync_rxtx_clear_tx_int_flag()
{
    uint8 byMask = 0x01 << 0;
    return sync_rewrite_reg(0x18, 0x01, byMask);
}

// 更新发送告警状态
// byValue:告警状态
void sync_rxtx_update_tx_alarm(uint8 byValue)
{
    g_Sync_stRxTxStatusManage.bySendAlarm = byValue;
}

// 查询发送告警
uint8 sync_rxtx_query_tx_alarm()
{
    return g_Sync_stRxTxStatusManage.bySendAlarm;
}

// 更新发送完成标识位
// byValue:状态
void sync_rxtx_update_tx_cplt_flag(uint8 byValue)
{
    g_Sync_stRxTxStatusManage.byTxCplt = byValue;
}

// 查询发送完成标识位
uint8 sync_rxtx_query_tx_cplt_flag()
{
    return g_Sync_stRxTxStatusManage.byTxCplt;
}

// 设置同步信号载荷数据
void sync_rxtx_set_payload(uint8 byPayload)
{
    gSync_abySendData[0] = byPayload;
    gSync_abySendData[1] = byPayload;

    return;
}