|
|
|
@ -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; |
|
|
|
|
} |
|
|
|
|
if (UINT32_MAX/8<size) { // too many bits to transfer
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
onewire_slave_transfer_data = data; // save buffer to read from
|
|
|
|
|
onewire_slave_transfer_bits = bits; // number of bits to write
|
|
|
|
|
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 */ |
|
|
|
|