uint8_t doSlave(uint8_t* message) { uint8_t i; uint8_t cmd = message[0]; uint8_t datalen = 0; uint8_t retval = 0; debugPrint("command=%x\r\n", cmd); if (cmd == 0x10) { } else if (cmd == 0x11) { message[2] = OWFirst() ? 1 : 0; datalen = 1; } else if (cmd == 0x12) { message[2] = OWNext() ? 1 : 0; datalen = 1; } else if (cmd == 0x13) { datalen = 8; for (i = 0; i < 8; i++) { message[i + 2] = getROM_NO(i); } } else if (cmd == 0x16) { OWTargetSetup(0x00); } else if (cmd == 0x19) { message[2] = OWReadByte(); datalen = 1; } else if (cmd == 0x1B) { uint8_t len; uint8_t* _buf; len = message[1]; _buf = message + 2; retval = OWBlock(_buf, len) ? 0x00 : 0xFF; memcpy(message + 2, _buf, len); datalen = len; } else if (cmd == 0x1C) { message[2] = OWReset(); datalen = 1; } else if (cmd == 0x1D) { // OWWriteByte(message[1]); uint8_t len; uint8_t* _buf; len = message[1]; _buf = message + 2; retval = OWBlock(_buf, len) ? 0x00 : 0xFF; memcpy(message + 2, _buf, len); datalen = len; } else if (cmd == 0x1E) { // OWLevel(MODE_NORMAL); } else if (cmd == 0x1F) { OWTargetSetup(message[1]); } else if (cmd == 0x20) { OWFamilySkipSetup(); } else if (cmd == 0x21) { uint8_t address[8]; memcpy(address, message + 2, 8); message[2] = OWSearchROM(address); datalen = 1; } else if (cmd == 0x22) { uint8_t address[8]; memcpy(address, message + 2, 8); message[2] = OWMatchROM(address); datalen = 1; } else { retval = 0xFF; } message[0] = retval; if (retval == 0xFF) { datalen = 0; } message[1] = datalen; return datalen; }
//-------------------------------------------------------------------------- // TEST BUILD MAIN // int main(void) { int rslt,i,cnt; double temp; char buf[12]; // find ALL devices printf("\nFIND ALL\n"); cnt = 0; rslt = OWFirst(); while (rslt) { // print device found for (i = 7; i >= 0; i--) printf("%02X", ROM_NO[i]); printf(" %d\n",++cnt); rslt = OWNext(); } // find only 0x10 printf("\nFIND ONLY 0x10\n"); cnt = 0; OWTargetSetup(0x10); while (OWNext()) { // check for incorrect type if (ROM_NO[0] != 0x10) break; // print device found for (i = 7; i >= 0; i--) printf("%02X", ROM_NO[i]); printf(" %d\n",++cnt); } if (cnt == 1) { DS1820_startConversion(); uint8_t spdata[10]; sleep10(7); DS1820_readScratchPad(spdata); temp = DS1820_getTemperature(spdata); temp = temp*9.0/5.0 +32.0; printf("TEMP(F) = %s\n\n",dtostrf(temp,7,2,(char *)buf)); } // find all but 0x04, 0x1A, 0x23, and 0x01 printf("\nFIND ALL EXCEPT 0x10, 0x04, 0x0A, 0x1A, 0x23, 0x01\n"); cnt = 0; rslt = OWFirst(); while (rslt) { // check for incorrect type if ((ROM_NO[0] == 0x04) || (ROM_NO[0] == 0x1A) || (ROM_NO[0] == 0x01) || (ROM_NO[0] == 0x23) || (ROM_NO[0] == 0x0A) || (ROM_NO[0] == 0x10)) OWFamilySkipSetup(); else { // print device found for (i = 7; i >= 0; i--) printf("%02X", ROM_NO[i]); printf(" %d\n",++cnt); } rslt = OWNext(); } //////////////////////////////////////////////////////////////////////////////////////////////// // find ALL DS2438 double voltage = 0.0; int myDS2438 = 0; uint8_t DS2438deviceNumber[8]; double bigT = -1.; int micro10voltage = 0; printf("\nFind all DS2438; Read Temperature and Voltage\n"); for (rslt=OWFirstType(0x26); rslt; rslt=OWNextType(0x26)) { // print device found for (i = 7; i >= 0; i--) printf("%02X", ROM_NO[i]); printf("\n"); // Save the first ROM if (myDS2438 == 0) { myDS2438++; for (i = 0; i < 8; i++) { DS2438deviceNumber[i] = ROM_NO[i]; } } if (myDS2438 > 0) { // (default) Read Vdd SetupAtoD(0x0F, DS2438deviceNumber); bigT = Get_Temperature(DS2438deviceNumber); printf("TEMP = %s\n\n",dtostrf(bigT,7,3,(char *)buf)); voltage = ReadAtoD(DS2438deviceNumber); printf("VDD = %s\n",dtostrf(voltage,6,2,(char *)buf)); } if (myDS2438 > 0) { // (default) Read Vad SetupAtoD(0x07, DS2438deviceNumber); voltage = ReadAtoD(DS2438deviceNumber); micro10voltage = getDS2438Voltage(DS2438deviceNumber); printf("VAD = %s\n",dtostrf(voltage,6,2,(char *)buf)); printf("Micro V = %d\n", micro10voltage); } } sleep(1); return 0 ; }