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 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 if (NULL==data || 0==size) { // verify input
return; 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 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_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 onewire_slave_transfer_complete = false; // reset state
bits_bit = 0; // reset number of bits read bits_bit = 0; // reset number of bits read
onewire_slave_state = ONEWIRE_STATE_FUNCTION_READ; // read data 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 if (NULL==data || 0==size) { // verify input
return; return false;
} }
if (onewire_slave_state!=ONEWIRE_STATE_FUNCTION_DATA) { // not in the right state to transfer data 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 if (UINT32_MAX/8<size) { // too many bits to transfer
onewire_slave_transfer_bits = bits; // number of bits to write 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 onewire_slave_transfer_complete = false; // reset state
bits_bit = 0; // reset number of bits written bits_bit = 0; // reset number of bits written
bits_buffer = onewire_slave_transfer_data[0]; // prepare byte to write bits_buffer = onewire_slave_transfer_data[0]; // prepare byte to write
onewire_slave_state = ONEWIRE_STATE_FUNCTION_WRITE; // write data onewire_slave_state = ONEWIRE_STATE_FUNCTION_WRITE; // write data
return true;
} }
/** interrupt service routine called when 1-Wire signal changes */ /** 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); void onewire_slave_setup(uint8_t family, uint64_t serial);
/** read data from master /** read data from master
* @param[out] data buffer to save read bits * @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 * @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 /** write data to master
* @param[in] data data to write * @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 * @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);