1-wire improvements.

1) Functions reading bit from PAL now return ioline_t type.
2) Functions that handle acquired buffer with acquired bits
   now use uint8_t type because it corresponds to buffer type.
3) Cryptic bit shifting in bit storage functions replaced by
   dividion operations because all modern compilers perfectly
   optimise such operations.
This commit is contained in:
barthess 2016-05-31 00:04:19 +03:00
parent 0fb26389ea
commit b10e423406
5 changed files with 36 additions and 36 deletions

View File

@ -342,8 +342,8 @@ extern "C" {
uint8_t *result, size_t max_rom_cnt);
#endif /* ONEWIRE_USE_SEARCH_ROM */
#if ONEWIRE_SYNTH_SEARCH_TEST
void _synth_ow_write_bit(onewireDriver *owp, uint8_t bit);
uint_fast8_t _synth_ow_read_bit(void);
void _synth_ow_write_bit(onewireDriver *owp, ioline_t bit);
ioline_t _synth_ow_read_bit(void);
void synthSearchRomTest(onewireDriver *owp);
#endif /* ONEWIRE_SYNTH_SEARCH_TEST */
#ifdef __cplusplus

View File

@ -58,6 +58,7 @@ on every timer overflow event.
#if (HAL_USE_ONEWIRE == TRUE) || defined(__DOXYGEN__)
#include <string.h>
#include <limits.h>
/*===========================================================================*/
/* Driver local definitions. */
@ -172,7 +173,7 @@ static void ow_bus_active(onewireDriver *owp) {
* @brief Function performing read of single bit.
* @note It must be callable from any context.
*/
static uint_fast8_t ow_read_bit(onewireDriver *owp) {
static ioline_t ow_read_bit(onewireDriver *owp) {
#if ONEWIRE_SYNTH_SEARCH_TEST
(void)owp;
return _synth_ow_read_bit();
@ -221,7 +222,7 @@ static void pwm_search_rom_cb(PWMDriver *pwmp) {
*
* @notapi
*/
static void ow_write_bit_I(onewireDriver *owp, uint_fast8_t bit) {
static void ow_write_bit_I(onewireDriver *owp, ioline_t bit) {
#if ONEWIRE_SYNTH_SEARCH_TEST
_synth_ow_write_bit(owp, bit);
#else
@ -348,12 +349,11 @@ static void ow_write_bit_cb(PWMDriver *pwmp, onewireDriver *owp) {
* @param[in] sr pointer to the @p onewire_search_rom_t helper structure
* @param[in] bit discovered bit to be stored in helper structure
*/
static void store_bit(onewire_search_rom_t *sr, uint_fast8_t bit) {
static void store_bit(onewire_search_rom_t *sr, uint8_t bit) {
size_t rb = sr->reg.rombit;
/* / 8 % 8 */
sr->retbuf[rb >> 3] |= bit << (rb & 7);
sr->retbuf[rb / CHAR_BIT] |= bit << (rb % CHAR_BIT);
sr->reg.rombit++;
}
@ -365,9 +365,9 @@ static void store_bit(onewire_search_rom_t *sr, uint_fast8_t bit) {
* 'search ROM' helper structure
* @param[in] bit number of bit [0..63]
*/
static uint_fast8_t extract_path_bit(const uint8_t *path, uint_fast8_t bit) {
/* / 8 % 8 */
return (path[bit >> 3] >> (bit & 7)) & 1;
static uint8_t extract_path_bit(const uint8_t *path, uint8_t bit) {
return (path[bit / CHAR_BIT] >> (bit % CHAR_BIT)) & 1;
}
/**
@ -377,9 +377,9 @@ static uint_fast8_t extract_path_bit(const uint8_t *path, uint_fast8_t bit) {
*
* @param[in,out] sr pointer to the @p onewire_search_rom_t helper structure
*/
static uint_fast8_t collision_handler(onewire_search_rom_t *sr) {
static uint8_t collision_handler(onewire_search_rom_t *sr) {
uint_fast8_t bit;
uint8_t bit;
switch(sr->reg.search_iter) {
case ONEWIRE_SEARCH_ROM_NEXT:

View File

@ -41,7 +41,7 @@ typedef struct {
OWSynthDevice devices[SYNTH_DEVICES_MAX];
size_t dev_present;
bool complement_bit;
uint_fast8_t rom_bit;
ioline_t rom_bit;
} OWSynthBus;
/*
@ -86,12 +86,12 @@ static uint64_t detected_devices[SYNTH_DEVICES_MAX];
/**
*
*/
void _synth_ow_write_bit(onewireDriver *owp, uint8_t bit) {
void _synth_ow_write_bit(onewireDriver *owp, ioline_t bit) {
(void)owp;
size_t i;
for (i=0; i<SYNTH_DEVICES_MAX; i++) {
if (((synth_bus.devices[i].id >> synth_bus.rom_bit) & 1) != bit) {
if (((synth_bus.devices[i].id >> synth_bus.rom_bit) & 1U) != bit) {
synth_bus.devices[i].active = false;
}
}
@ -101,16 +101,16 @@ void _synth_ow_write_bit(onewireDriver *owp, uint8_t bit) {
/**
*
*/
uint_fast8_t _synth_ow_read_bit(void) {
uint_fast8_t ret = 0xFF;
ioline_t _synth_ow_read_bit(void) {
ioline_t ret = 0xFF;
size_t i;
uint_fast8_t bit;
ioline_t bit;
for (i=0; i<SYNTH_DEVICES_MAX; i++) {
if (synth_bus.devices[i].active){
bit = (synth_bus.devices[i].id >> synth_bus.rom_bit) & 1;
bit = (synth_bus.devices[i].id >> synth_bus.rom_bit) & 1U;
if (synth_bus.complement_bit){
bit ^= 1;
bit ^= 1U;
}
if (0xFF == ret)
ret = bit;

View File

@ -41,7 +41,7 @@ typedef struct {
OWSynthDevice devices[SYNTH_DEVICES_MAX];
size_t dev_present;
bool complement_bit;
uint_fast8_t rom_bit;
ioline_t rom_bit;
} OWSynthBus;
/*
@ -86,12 +86,12 @@ static uint64_t detected_devices[SYNTH_DEVICES_MAX];
/**
*
*/
void _synth_ow_write_bit(onewireDriver *owp, uint8_t bit) {
void _synth_ow_write_bit(onewireDriver *owp, ioline_t bit) {
(void)owp;
size_t i;
for (i=0; i<SYNTH_DEVICES_MAX; i++) {
if (((synth_bus.devices[i].id >> synth_bus.rom_bit) & 1) != bit) {
if (((synth_bus.devices[i].id >> synth_bus.rom_bit) & 1U) != bit) {
synth_bus.devices[i].active = false;
}
}
@ -101,16 +101,16 @@ void _synth_ow_write_bit(onewireDriver *owp, uint8_t bit) {
/**
*
*/
uint_fast8_t _synth_ow_read_bit(void) {
uint_fast8_t ret = 0xFF;
ioline_t _synth_ow_read_bit(void) {
ioline_t ret = 0xFF;
size_t i;
uint_fast8_t bit;
ioline_t bit;
for (i=0; i<SYNTH_DEVICES_MAX; i++) {
if (synth_bus.devices[i].active){
bit = (synth_bus.devices[i].id >> synth_bus.rom_bit) & 1;
bit = (synth_bus.devices[i].id >> synth_bus.rom_bit) & 1U;
if (synth_bus.complement_bit){
bit ^= 1;
bit ^= 1U;
}
if (0xFF == ret)
ret = bit;

View File

@ -41,7 +41,7 @@ typedef struct {
OWSynthDevice devices[SYNTH_DEVICES_MAX];
size_t dev_present;
bool complement_bit;
uint_fast8_t rom_bit;
ioline_t rom_bit;
} OWSynthBus;
/*
@ -86,12 +86,12 @@ static uint64_t detected_devices[SYNTH_DEVICES_MAX];
/**
*
*/
void _synth_ow_write_bit(onewireDriver *owp, uint8_t bit) {
void _synth_ow_write_bit(onewireDriver *owp, ioline_t bit) {
(void)owp;
size_t i;
for (i=0; i<SYNTH_DEVICES_MAX; i++) {
if (((synth_bus.devices[i].id >> synth_bus.rom_bit) & 1) != bit) {
if (((synth_bus.devices[i].id >> synth_bus.rom_bit) & 1U) != bit) {
synth_bus.devices[i].active = false;
}
}
@ -101,16 +101,16 @@ void _synth_ow_write_bit(onewireDriver *owp, uint8_t bit) {
/**
*
*/
uint_fast8_t _synth_ow_read_bit(void) {
uint_fast8_t ret = 0xFF;
ioline_t _synth_ow_read_bit(void) {
ioline_t ret = 0xFF;
size_t i;
uint_fast8_t bit;
ioline_t bit;
for (i=0; i<SYNTH_DEVICES_MAX; i++) {
if (synth_bus.devices[i].active){
bit = (synth_bus.devices[i].id >> synth_bus.rom_bit) & 1;
bit = (synth_bus.devices[i].id >> synth_bus.rom_bit) & 1U;
if (synth_bus.complement_bit){
bit ^= 1;
bit ^= 1U;
}
if (0xFF == ret)
ret = bit;