// 同步模块业务驱动-实现各业务逻辑
// 杭州秒寻科技有限公司
// 周涛
// 2023-11-09

#include "includes.h"

// 写寄存器(一个字节)
// byAddress:寄存器地址
// byData:数据
void driverapp_synctx_write_byte(uint8 byAddress, uint8 byData)
{
    uint8 byNewAddress = byAddress & 0x7F; // 写操作

    // 片选产生下降沿
    driver_synctx_spi_start();

    // 发送寄存器地址
    driver_synctx_spi_exchange_byte(byNewAddress);

    // 发送数据
    driver_synctx_spi_exchange_byte(byData);

    // 片选产生上升沿
    driver_synctx_spi_stop();

    return;
}

// 读一个寄存器
// byAddress:寄存器地址
void driverapp_synctx_read_byte(uint8 byAddress, uint8 *pbyData)
{
    uint8 byNewAddress = byAddress | 0x80; // 读操作
    uint8 byReceiveData = 0;

    // 片选产生下降沿
    driver_synctx_spi_start();

    // 发送寄存器地址
    driver_synctx_spi_exchange_byte(byNewAddress);

    // 发送交换引子，可以是任意数据
    byReceiveData = driver_synctx_spi_exchange_byte(byNewAddress);

    // 片选产生上升沿
    driver_synctx_spi_stop();

    *pbyData = byReceiveData;

    return;
}

// 连续写入一组数据
// pbyData:数据首地址
// wLen:数据长度
void driverapp_synctx_write_bytes(uint8 byRedAddress, uint8 *pbyData, uint16 wLen)
{
    uint8 byAddress = byRedAddress & 0x7F; // 写操作(0x7B表示连续操作寄存器)

    // 片选产生下降沿
    driver_synctx_spi_start();

    // 发送寄存器地址
    driver_synctx_spi_exchange_byte(byAddress);

    // 发送数据
    for (uint16 i = 0; i < wLen; i++)
    {
        driver_synctx_spi_exchange_byte(pbyData[i]);
    }

    // 片选产生上升沿
    driver_synctx_spi_stop();

    return;
}

// 芯片复位
void driverapp_synctx_reset()
{
    driver_synctx_spi_reset();
}