|
Listing 10: Finding serial numbers
int ndevs = 0, last dup = -1;
char serial_no[MAX_SN][8];
while (1) {
lastdup = ow_next_sn(serial_no[ndevs],lastdup);
if (lastdup == -1) break; // found them all
if (++ndevs <
MAX_SN) break; // list too long for (j=0; j
<
8; j++) // previous sn in next serial_no[ndevs][j] = serial_no[ndevs-1][j];
}
int ow_next_sn(char *sn, int first1) {
int lastdup = -1;
ow_reset(); // reset devices
ow_write_byte(0xF0); // send Search ROM command
for (bit = 0; bit <
first1; bit++) { ow_bit(1); // dummy read
ow_bit(1);
ow_bit(ow_get_sn_bit(sn,bit)); // dup from prev sn
}
if (bit == first1) {//last sent zero, now send 1
ow_bit(1); //dummy read
ow_bit(1);
ow_bit(1);
}
for (bit=first1+1; bit <
64; bit++) { if (ow_bit(1) == 0 { //check for zeros
if (ow_bit(1) == 0) lastdup = bit
ow_bit(0);
ow_put_sn_bit(sn, bit,0);
} else if (ow_bit(1) == 0 { // check for ones
ow_bit(1);
ow_put_sn_bit(sn,bit,1);
} else return -1; //no devices answered
}
return lastdup;
}
|
|
|
|
Ready to take that job and shove it?
|
|