Exemple #1
0
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;
}
Exemple #2
0
	//--------------------------------------------------------------------------
	// 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 ;
	}