stm32f1/lib/onewire_master.h

81 lines
3.7 KiB
C

/* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
/** library for 1-wire protocol as master (API)
* @file onewire_master.h
* @author King Kévin <kingkevin@cuvoodoo.info>
* @date 2017
* @note peripherals used: timer @ref onewire_master_timer, GPIO @ref onewire_master_gpio
* @note overdrive mode is not provided
*/
#pragma once
/** setup 1-wire peripheral
* @param[in] parasite enable parasite power (provide power over 1-Wire line when not communicating)
* @warning multiple masters and interrupts are prevented when parasite power is used
* @param[in] recovery recovery time in us between timeslot, e.g. to ensure enough parasite power is provided (0 if not required)
*/
void onewire_master_setup(bool parasite, uint16_t recovery);
/** send reset pulse
* @return if slaves have indicated their presence
*/
bool onewire_master_reset(void);
/** compute CRC for 1-Wire
* @note this CRC-8 uses normal polynomial 0x31, reverse polynomial 0x8C, start value 0x00
* @param[in] data bytes on which to calculate CRC checksum on
* @param[in] length number of bytes in data
* @return computed CRC checksum
*/
uint8_t onewire_master_crc(uint8_t* data, uint32_t length);
/** send READ ROM command and read ROM code response
* @note user needs to send reset pulse before
* @return ROM code read
*/
uint64_t onewire_master_rom_read(void);
/** send SEARCH ROM command
* @note user needs to send reset pulse before
* @warning undefined behaviour if a ROM code different than the last found is provided
* @param[in,out] code use 0 to start search ROM code from scratch, or last know value to search next; writes back next ROM code found, or 0 if error occurred
* @param[in] alarm search only for ROM codes for slaves with an alarm flag set
* @return if an additional slave has been detected
*/
bool onewire_master_rom_search(uint64_t* code, bool alarm);
/** send SKIP ROM command (all slaves on the bus will be selected)
* @note user needs to send reset pulse before
* @return if operation succeeded
*/
bool onewire_master_rom_skip(void);
/** send MATCH ROM command to select a specific slave
* @note user needs to send reset pulse before
* @param[in] code ROM code of slave to select
* @return if operation succeeded
*/
bool onewire_master_rom_match(uint64_t code);
/** issue function and read data
* @note user needs to send a ROM command before
* @param[in] function function command to send
* @param[out] data buffer to save read bits (NULL if only the function command should be sent)
* @param[in] bits number of bits to read (0 if only the function command should be sent)
* @return if operation succeeded
*/
bool onewire_master_function_read(uint8_t function, uint8_t* data, uint32_t bits);
/** issue function and write data
* @note user needs to send a ROM command before
* @param[in] function function command to send
* @param[out] data data to write (NULL if only the function command should be sent)
* @param[in] bits number of bits to write (0 if only the function command should be sent)
* @return if operation succeeded
*/
bool onewire_master_function_write(uint8_t function, uint8_t* data, uint32_t bits);