/**
* @file hx710a.c
*
* @param Project DEVICE_GENERAL_ATY_LIB
*
* @author ATY
*
* @copyright
* - Copyright 2017 - 2026 MZ-ATY
* - This code follows:
* - MZ-ATY Various Contents Joint Statement -
*
* https://mengze.top/MZ-ATY_VCJS
* - CC 4.0 BY-NC-SA -
*
* https://creativecommons.org/licenses/by-nc-sa/4.0/
* - Your use will be deemed to have accepted the terms of this statement.
*
* @brief functions of HX710A for C platform (Dev-style)
*
* @version
* - 1_01_251112 > ATY
* -# Add Dev-style interface aligned to LED_ATY; keep legacy APIs
********************************************************************************
*/
#ifndef __HX710A_C
#define __HX710A_C
#include "hx710a.h"
uint8_t HX710A_InitDev(struct HX710A_ATY_Dev* dev)
{
__ATY_LOCK(dev);
if (dev->sckSet) dev->sckSet(__ATY_HL_H);
if (dev->delay_ms) dev->delay_ms(2);
if (dev->sckSet) dev->sckSet(__ATY_HL_L);
if (dev->delay_ms) dev->delay_ms(2);
if (dev->debugEnable == 1 && dev->LOG) dev->LOG("\r\nHX710A init done.");
__ATY_UNLOCK(dev);
return 0;
}
uint8_t HX710A_IsReadyDev(struct HX710A_ATY_Dev* dev)
{
return (dev->doutRead && dev->doutRead() == __ATY_HL_L) ? 1 : 0;
}
uint8_t HX710A_ReadRawDev(uint8_t p, uint32_t* raw, struct HX710A_ATY_Dev* dev)
{
__ATY_LOCK(dev);
uint32_t data = 0;
if (dev->sckSet) dev->sckSet(__ATY_HL_L);
while (!HX710A_IsReadyDev(dev)) { /* wait ready */ }
for (uint8_t i = 0; i < 24; i++) {
if (dev->sckSet) dev->sckSet(__ATY_HL_H);
data = (data << 1);
if (dev->sckSet) dev->sckSet(__ATY_HL_L);
if (dev->doutRead) data += dev->doutRead();
}
if (dev->sckSet) dev->sckSet(__ATY_HL_H);
data = data ^ 0x800000; // sign bit adjust
if (dev->sckSet) dev->sckSet(__ATY_HL_L);
if (p == 1 || p == 2) {
// internal temp select pulse
if (dev->sckSet) dev->sckSet(__ATY_HL_H);
if (dev->sckSet) dev->sckSet(__ATY_HL_L);
}
if (p == 2) {
// 40Hz out select pulse
if (dev->sckSet) dev->sckSet(__ATY_HL_H);
if (dev->sckSet) dev->sckSet(__ATY_HL_L);
}
*raw = data;
if (dev->debugEnable == 1 && dev->LOG) dev->LOG("\r\nHX710A read raw.");
__ATY_UNLOCK(dev);
return 0;
}
// No legacy APIs retained; use Dev-style interfaces only.
#endif /* __HX710A_C */
/******************************** End Of File *********************************/