|
|
|
//
|
|
|
|
// Created by MightyPork on 2018/01/02.
|
|
|
|
//
|
|
|
|
// Dallas 1-Wire master unit
|
|
|
|
//
|
|
|
|
|
|
|
|
#ifndef GEX_F072_UNIT_1WIRE_H
|
|
|
|
#define GEX_F072_UNIT_1WIRE_H
|
|
|
|
|
|
|
|
#include "unit.h"
|
|
|
|
|
|
|
|
extern const UnitDriver UNIT_1WIRE;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check if there are any units present on the bus
|
|
|
|
*
|
|
|
|
* @param[in,out] unit
|
|
|
|
* @param[out] presence - any devices present
|
|
|
|
* @return success
|
|
|
|
*/
|
|
|
|
error_t UU_1WIRE_CheckPresence(Unit *unit, bool *presence);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Read a device's address (use only with a single device attached)
|
|
|
|
*
|
|
|
|
* @param[in,out] unit
|
|
|
|
* @param[out] address - the device's address, 0 on error or CRC mismatch
|
|
|
|
* @return success
|
|
|
|
*/
|
|
|
|
error_t UU_1WIRE_ReadAddress(Unit *unit, uint64_t *address);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Write bytes to a device / devices
|
|
|
|
*
|
|
|
|
* @param[in,out] unit
|
|
|
|
* @param[in] address - device address, 0 to skip match (single device or broadcast)
|
|
|
|
* @param[in] buff - bytes to write
|
|
|
|
* @param[in] len - buffer length
|
|
|
|
* @return success
|
|
|
|
*/
|
|
|
|
error_t UU_1WIRE_Write(Unit *unit, uint64_t address, const uint8_t *buff, uint32_t len);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Read bytes from a device / devices, first writing a query
|
|
|
|
*
|
|
|
|
* @param[in,out] unit
|
|
|
|
* @param[in] address - device address, 0 to skip match (single device ONLY!)
|
|
|
|
* @param[in] request_buff - bytes to write before reading a response
|
|
|
|
* @param[in] request_len - number of bytes to write
|
|
|
|
* @param[out] response_buff - buffer for storing the read response
|
|
|
|
* @param[in] response_len - number of bytes to read
|
|
|
|
* @param[in] check_crc - verify CRC
|
|
|
|
* @return success
|
|
|
|
*/
|
|
|
|
error_t UU_1WIRE_Read(Unit *unit, uint64_t address,
|
|
|
|
const uint8_t *request_buff, uint32_t request_len,
|
|
|
|
uint8_t *response_buff, uint32_t response_len, bool check_crc);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Perform a ROM search operation.
|
|
|
|
* The algorithm is on a depth-first search without backtracking,
|
|
|
|
* taking advantage of the open-drain topology.
|
|
|
|
*
|
|
|
|
* This function either starts the search, or continues it.
|
|
|
|
*
|
|
|
|
* @param[in,out] unit
|
|
|
|
* @param[in] with_alarm - true to match only devices in alarm state
|
|
|
|
* @param[in] restart - true to restart the search (search from the lowest address)
|
|
|
|
* @param[out] buffer - buffer for storing found addresses
|
|
|
|
* @param[in] capacity - buffer capacity in address entries (8 bytes)
|
|
|
|
* @param[out] real_count - real number of found addresses (for which the CRC matched)
|
|
|
|
* @param[out] have_more - flag indicating there are more devices to be found
|
|
|
|
* @return success
|
|
|
|
*/
|
|
|
|
error_t UU_1WIRE_Search(Unit *unit, bool with_alarm, bool restart,
|
|
|
|
uint64_t *buffer, uint32_t capacity, uint32_t *real_count,
|
|
|
|
bool *have_more);
|
|
|
|
|
|
|
|
#endif //GEX_F072_UNIT_1WIRE_H
|