uint8_t w1_byte_wr(uint8_t b) { uint8_t i = 8, j; do{ j = w1_bit_io( b & 1 ); b >>= 1; if( j ) b |= 0x80; }while( --i ); return b; }
uint w1_byte_wr( uchar b ) { uchar i = 8, j; do { j = w1_bit_io( b & 1 ); b >>= 1; if( j ) b |= 0x80; } while( --i ); return b; }
uint8_t w1_rom_search(uint8_t diff, uint8_t* id) { uint8_t i, j, next_diff; uint8_t b; if( w1_reset() ) return PRESENCE_ERR; // error, no device found w1_byte_wr( SEARCH_ROM ); // ROM search command next_diff = LAST_DEVICE; // unchanged on last device i = 8 * 8; // 8 bytes do{ j = 8; // 8 bits do{ b = w1_bit_io( 1 ); // read bit if( w1_bit_io( 1 ) ){ // read complement bit if( b ) // 11 return DATA_ERR; // data error }else{ if( !b ){ // 00 = 2 devices if( diff > i || ((*id & 1) && diff != i) ){ b = 1; // now 1 next_diff = i; // next pass 0 } } } w1_bit_io( b ); // write bit *id >>= 1; if( b ) // store bit *id |= 0x80; i--; }while( --j ); id++; // next byte }while( i ); return next_diff; // to continue search }