onewire_slave: use byte sizes instead of bits

This commit is contained in:
King Kévin 2017-08-07 23:15:16 +02:00
parent 84a3da0449
commit f37b8309bb
2 changed files with 25 additions and 15 deletions

View File

@ -154,35 +154,43 @@ void onewire_slave_setup(uint8_t family, uint64_t serial)
nvic_enable_irq(NVIC_EXTI_IRQ(ONEWIRE_SLAVE_PIN)); // enable interrupt
}
void onewire_slave_function_read(uint8_t* data, uint32_t bits)
bool onewire_slave_function_read(uint8_t* data, size_t size)
{
if (NULL==data || 0==bits) { // verify input
return;
if (NULL==data || 0==size) { // verify input
return false;
}
if (UINT32_MAX/8<size) { // too many bits to transfer
return false;
}
if (onewire_slave_state!=ONEWIRE_STATE_FUNCTION_DATA) { // not in the right state to transfer data
return;
return false;
}
onewire_slave_transfer_data = data; // save buffer to write to
onewire_slave_transfer_bits = bits; // number of bits to read
onewire_slave_transfer_bits = size*8; // number of bits to read
onewire_slave_transfer_complete = false; // reset state
bits_bit = 0; // reset number of bits read
onewire_slave_state = ONEWIRE_STATE_FUNCTION_READ; // read data
return true;
}
void onewire_slave_function_write(uint8_t* data, uint32_t bits)
bool onewire_slave_function_write(const uint8_t* data, size_t size)
{
if (NULL==data || 0==bits) { // verify input
return;
if (NULL==data || 0==size) { // verify input
return false;
}
if (onewire_slave_state!=ONEWIRE_STATE_FUNCTION_DATA) { // not in the right state to transfer data
return;
return false;
}
onewire_slave_transfer_data = data; // save buffer to read from
onewire_slave_transfer_bits = bits; // number of bits to write
if (UINT32_MAX/8<size) { // too many bits to transfer
return false;
}
onewire_slave_transfer_data = (uint8_t*)data; // save buffer to read from
onewire_slave_transfer_bits = size*8; // number of bits to write
onewire_slave_transfer_complete = false; // reset state
bits_bit = 0; // reset number of bits written
bits_buffer = onewire_slave_transfer_data[0]; // prepare byte to write
onewire_slave_state = ONEWIRE_STATE_FUNCTION_WRITE; // write data
return true;
}
/** interrupt service routine called when 1-Wire signal changes */

View File

@ -39,13 +39,15 @@ extern volatile bool onewire_slave_transfer_complete;
void onewire_slave_setup(uint8_t family, uint64_t serial);
/** read data from master
* @param[out] data buffer to save read bits
* @param[in] bits number of bits to read
* @param[in] size number of bytes to read
* @return if transfer initialization succeeded
* @note onewire_slave_transfer_complete is set when transfer is completed
*/
void onewire_slave_function_read(uint8_t* data, uint32_t bits);
bool onewire_slave_function_read(uint8_t* data, size_t size);
/** write data to master
* @param[in] data data to write
* @param[in] bits number of bits to write
* @param[in] size number of bytes to write
* @return if transfer initialization succeeded
* @note onewire_slave_transfer_complete is set when transfer is completed
*/
void onewire_slave_function_write(uint8_t* data, uint32_t bits);
bool onewire_slave_function_write(const uint8_t* data, size_t size);