Exemple #1
0
/* 0 = success, -1 = error */
int8_t get_persistent_mac(uint8_t portnum, uint8_t * mac)
{
	uint8_t read_buffer[32];
	uint8_t i;
	int8_t out;

	out = -1;

	if (devsnum == 0)
		return out;

	for (i = 0; i < devsnum; ++i) {
//#if DEBUG_PMAC
		mprintf("Found device: "
			"%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",
		FamilySN[i][7], FamilySN[i][6], FamilySN[i][5], FamilySN[i][4],
		FamilySN[i][3], FamilySN[i][2], FamilySN[i][1], FamilySN[i][0]);
//#endif

		/* If there is a temperature sensor, use it for the low three MAC values */
		if (FamilySN[i][0] == 0x28 || FamilySN[i][0] == 0x42) {
			mac[3] = FamilySN[i][3];
			mac[4] = FamilySN[i][2];
			mac[5] = FamilySN[i][1];
			out = 0;
#if DEBUG_PMAC
			mprintf("Using temperature ID for MAC\n");
#endif
		}

		/* If there is an EEPROM, read page 0 for the MAC */
		if (FamilySN[i][0] == 0x43) {
			owLevel(portnum, MODE_NORMAL);
			if (ReadMem43(portnum, FamilySN[i], EEPROM_MAC_PAGE,
				      read_buffer) == TRUE) {
				if (read_buffer[0] == 0 && read_buffer[1] == 0
				    && read_buffer[2] == 0) {
					/* Skip the EEPROM since it has not been programmed! */
#if DEBUG_PMAC
					mprintf("EEPROM has not been "
						"programmed with a MAC\n");
#endif
				} else {
					memcpy(mac, read_buffer, 6);
					out = 0;
#if DEBUG_PMAC
					mprintf("Using EEPROM page: "
						"%02x:%02x:%02x:%02x:%02x:%02x\n",
					     mac[0], mac[1], mac[2], mac[3],
					     mac[4], mac[5]);
#endif
				}
			}
		}
	}

	return out;
}
Exemple #2
0
void scu_init()
{
  	uchar FamilySN[MAXDEVICES][8];
	int current_temp;
	int c_frac;
  	int i = 0;
  	int j = 0;
	int cnt = 0;
  	int NumDevices = 0;
  	SMALLINT didRead = 0;
	uchar read_buffer[32];
	uchar write_buffer[32];

	owInit();
	uart_init();
	uart_write_string("SCU\n");
 
  	//use port number for 1-wire
  	uchar portnum = ONEWIRE_PORT;
     j = 0;
     // Find the device(s)
     NumDevices  = 0;
     NumDevices += FindDevices(portnum, &FamilySN[NumDevices], 0x42, MAXDEVICES-NumDevices);
     NumDevices += FindDevices(portnum, &FamilySN[NumDevices], 0x20, MAXDEVICES-NumDevices);
     NumDevices += FindDevices(portnum, &FamilySN[NumDevices], 0x43, MAXDEVICES-NumDevices);
     if (NumDevices)
     {
        mprintf("\r\n");

        // read the temperature and print serial number and temperature
        for (i = NumDevices; i; i--)
        {
           mprintf("(%d) ", j++);
           DisplaySerialNum(FamilySN[i-1]);
           if (FamilySN[i-1][0] == 0x43) {
//		if(!Write43(portnum, FamilySN[i-1], write_buffer))
//			mprintf("write failed!\n");
	  	owLevel(portnum, MODE_NORMAL); 
		if (ReadMem43(portnum, FamilySN[i-1], read_buffer))
		{
			for(cnt = 0; cnt < 32; cnt++)
			{
				mprintf("read_buffer[%x]: %x\n",cnt, read_buffer[cnt]);
			}
		}
		continue;
	   }

	   if (FamilySN[i-1][0] == 0x42) {
             didRead = ReadTemperature42(portnum, FamilySN[i-1],&current_temp,&c_frac);
	   }
           if (didRead)
           {
             	mprintf(" %d",current_temp);
		if (c_frac)
			mprintf(".5");
		else
			mprintf(".0");
		mprintf(" deegree celsius\r\n");
	   }
           else
           {
             mprintf("  Convert failed.  Device is");
             if(!owVerify(portnum, FALSE))
                mprintf(" not");
             mprintf(" present.\r\n");
#ifdef SOCKIT_OWM_ERR_ENABLE
             while(owHasErrors())
                 mprintf("  - Error %d\r\n", owGetErrorNum());
#endif
           }
 
        }
     }
     else
        mprintf("No temperature devices found!\r\n");
	
}