コード例 #1
0
ファイル: owpgrw.c プロジェクト: AriZuu/OneWire
//--------------------------------------------------------------------------
// ExtendedRead_Page:
//
// Read a extended page from the current Eprom Touch Memory.
// The record will be placed into a (uchar) memory location
// starting at the location pointed to by (buf).  This function will 
// read a page out of normal memory.  If the page being read is
// redirected then an error is returned
// The following return codes will be provided to the caller:
//
// portnum    the port number of the port being used for the
//            1-Wire Network.
// SNum       the serial number for the part that the read is
//            to be done on.
// buff       the buffer for the data that was read
// pg         the page that starts the read
//
// return TRUE if the read was successful.
//  
SMALLINT ExtendedRead_Page(int portnum, uchar *SNum, uchar *buff, PAGE_TYPE pg)               
{    
	SMALLINT  bank;
   PAGE_TYPE page;
	uchar     extra[20]; 
   int       len,i;
                     
	bank = getBank(portnum,SNum,pg,REGMEM);
	page = getPage(portnum,SNum,pg,REGMEM);
	
	if(!owIsWriteOnce(bank,portnum,SNum) && ((SNum[0] != 0x18) && 
      (SNum[0] != 0x33) && (SNum[0] != 0xB3)) )
	{
		OWERROR(OWERROR_NOT_WRITE_ONCE);
		return FALSE;
	}
	
   // check on the program job to see if this page is in it 
   if(isJob(portnum,SNum))
   {      
      if(getJobData(portnum,SNum,pg,&buff[1],&len))
      {
         return TRUE;
      }
   }     
  
   if(owIsWriteOnce(bank,portnum,SNum))
   {
      if(!owReadPageExtraCRC(bank,portnum,SNum,page,&buff[0],&extra[0]))
     	   return FALSE;    
   }
   else
   {
      if(!owReadPageExtra(bank,portnum,SNum,page,FALSE,&buff[0],&extra[0]))
         return FALSE;

      for(i=0;i<owGetExtraInfoLength(bank,SNum);i++)
         buff[i+32] = extra[i];

      extra[0] = 0xFF;
   }

	if(extra[0] != 0xFF)
	{
		OWERROR(OWERROR_REDIRECTED_PAGE);
		return FALSE;
	}
   	
   return TRUE;
}
コード例 #2
0
ファイル: memutil.c プロジェクト: devenfan/sparrow-hawk
/**
 * Read a page from a memory bank and print in hex
 *
 * bank    MemoryBank to read a page from
 * portnum port number
 * SNum    The serial number of the device to read.
 * pg      page to read
 *
 * @return 'true' if the bank page was dumped.
 */
SMALLINT dumpBankPage (SMALLINT bank, int portnum, uchar SNum[8], int pg)
{
   uchar read_buf[64];
   uchar extra_buf[32];
   int i;
   int result;

   // read a page (use the most verbose and secure method)
   if (owHasPageAutoCRC(bank,SNum))
   {
      if(owHasExtraInfo(bank,SNum))
         result = owReadPageExtraCRC(bank,portnum,&SNum[0],
                     pg,&read_buf[0],&extra_buf[0]);
      else
         result = owReadPageCRC(bank,portnum,&SNum[0],pg,&read_buf[0]);
   }
   else
   {
      if(owHasExtraInfo(bank,SNum))
         result = owReadPageExtra(bank,portnum,&SNum[0],
                     pg,FALSE,&read_buf[0],&extra_buf[0]);
      else
         result = owReadPage(bank,portnum,&SNum[0],pg,FALSE,&read_buf[0]);
   }

   if(!result)
      return FALSE;

   printf("Page %d:  ",pg);

   for(i=0;i<owGetPageLength(bank,SNum);i++)
      printf("%02X ",read_buf[i]);
   printf("\n");

   if(owHasExtraInfo(bank,SNum))
   {
      printf("Extra: ");
      for(i=0;i<owGetExtraInfoLength(bank,SNum);i++)
         printf("%02X ",extra_buf[i]);
      printf("\n");
   }

   return TRUE;
}