/** * 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; }
//-------------------------------------------------------------------------- // Read_Page: // // Read a default data structure page from the current Touch Memory. // The record will be placed shorto a (uchar) memory location // starting at the location poshorted to by (buf). This function will // read a page out of normal memory (flag = REGMEM) or a status memory // page out of an eprom (flag = STATUSMEM). If the page being read is // redirected as in an eprom device then the page value passes by referece // is changed to match the new page. // // 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. // flag tells weather to read regular memory or status memory // buff location for data read // page page number to read packet from // len the length of the data read // // return TRUE if the data was read correctly // SMALLINT Read_Page(int portnum, uchar *SNum, uchar *buff, uchar flag, PAGE_TYPE *pg, int *len) { SMALLINT bank; PAGE_TYPE page; int jobopen = FALSE; int cnt = 0; uchar extra[3],space; uchar temp_buff[32]; uchar rd_buf[2]; uchar addpg; int i; // Are program jobs possible // is there a job that has been opened and is this a regular memory read if(isJob(portnum,SNum)) jobopen = TRUE; // loop while redirected for (cnt = 0; cnt <= 256; cnt++) { // if an program job is open then check there for page if(jobopen && (flag != STATUSMEM)) { if(getJobData(portnum,SNum,*pg,buff,len)) { return TRUE; } } // nope so look for page in cache if(FindPage(portnum,SNum,pg,flag,TRUE,buff,len,&space)) { if(*len == 0x41) { *pg = buff[0]; } else if(flag != STATUSMEM) { return TRUE; } } bank = getBank(portnum,SNum,*pg,flag); page = getPage(portnum,SNum,*pg,flag); // nope so get it from the part // if the page is in the status memory then call read status if (flag == STATUSMEM) { if(owIsWriteOnce(bank,portnum,SNum) && owHasExtraInfo(bank,SNum)) { if(!owReadPageExtraCRC(bank,portnum,SNum,page,&temp_buff[0],&extra[0])) { if(extra[0] == 0xFF) return FALSE; } } else { if(owHasPageAutoCRC(bank,SNum)) { if(!owReadPageCRC(bank,portnum,SNum,page,&temp_buff[0])) return FALSE; } else { if(!owReadPage(bank,portnum,SNum,page,FALSE,&temp_buff[0])) return FALSE; } extra[0] = 0xFF; } if(extra[0] != 0xFF) { rd_buf[0] = ~extra[0]; addpg = AddPage(portnum,SNum,*pg,&rd_buf[0],STATUSMEM); *pg = (PAGE_TYPE) rd_buf[0]; continue; } else { *len = 8; for(i=0;i<*len;i++) buff[i] = temp_buff[i]; addpg = AddPage(portnum,SNum,*pg,&buff[0],STATUSMEM); // AddPage(portnum,SNum,*pg,&buff[0],*len); // AddPage(portnum,SNum,*pg,&buff[0],0x41); return TRUE; } } // else call on the regular readpack function else { *len = 0; if(owIsWriteOnce(bank,portnum,SNum) && owHasExtraInfo(bank,SNum)) { if(!owReadPagePacketExtra(bank,portnum,SNum,page,FALSE, &temp_buff[0],len,&extra[0])) { if(extra[0] == 0xFF) return FALSE; } } else { if(owHasPageAutoCRC(bank,SNum)) { if(!owReadPageCRC(bank,portnum,SNum,page,&temp_buff[0])) return FALSE; } else { if(!owReadPage(bank,portnum,SNum,page,FALSE,&temp_buff[0])) return FALSE; } extra[0] = 0xFF; } if(extra[0] != 0xFF) { rd_buf[0] = ~extra[0]; addpg = AddPage(portnum,SNum,*pg,&rd_buf[0],REDIRMEM); *pg = (PAGE_TYPE) rd_buf[0]; continue; } else { if(*len > 0) { if(*len > 32) { OWERROR(OWERROR_INVALID_PACKET_LENGTH); return FALSE; } for(i=0;i<(*len);i++) buff[i] = temp_buff[i]; } else { if(temp_buff[0] > 32) { OWERROR(OWERROR_INVALID_PACKET_LENGTH); return FALSE; } for(i=1;i<(temp_buff[0]+1);i++) buff[i-1] = temp_buff[i]; *len = temp_buff[0]; } addpg = AddPage(portnum,SNum,*pg,&buff[0],*len); return TRUE; } } } // could not find the page return FALSE; }