void create_multis_cfg( FILE* multi_idx, FILE* multi_mul, FILE* multis_cfg ) { if ( fseek( multi_idx, 0, SEEK_SET ) != 0 ) throw std::runtime_error("create_multis_cfg: fseek failed"); unsigned count = 0; USTRUCT_IDX idxrec; for ( int i = 0; fread( &idxrec, sizeof idxrec, 1, multi_idx ) == 1; ++i ) { const USTRUCT_VERSION* vrec = NULL; if ( check_verdata( VERFILE_MULTI_MUL, i, vrec ) ) { write_multi( multis_cfg, i, verfile, vrec->filepos, vrec->length ); ++count; } else { if ( idxrec.offset == 0xFFffFFffLu ) continue; write_multi( multis_cfg, i, multi_mul, idxrec.offset, idxrec.length ); ++count; } } INFO_PRINT << count << " multi definitions written to multis.cfg\n"; }
int write_multi_t(unsigned char device_var,unsigned char *to_write,unsigned short start_address,int length, int slot) { int retVal = -100; int executeMBFunc = 0; static int writeCount = 0; if (MbPollOpen == 1) { executeMBFunc = 1; } else { executeMBFunc = 0; } if (executeMBFunc == 1) { //LoadWriteMultiData(device_var, to_write, start_address, length); if ((trafficSlotNo == slot) && (trafficSlotNo != -1)) { retVal = write_multi_log(device_var, to_write, start_address, length, &sendData[0], &recvData[0], &sendDataLen, &recvDataLen); insertDataString = 1; } else { retVal = write_multi(device_var, to_write, start_address, length); } mbpollTotalCount[slot]++; if (retVal < 0) { mbpollErrCount[slot]++; } /*CString temp; writeCount++; temp.Format(_T("addr = %d count = %d ret = %d"), start_address, writeCount, retVal); MessageBox(NULL, temp, L"write_multi", MB_OK);*/ } return retVal; }
int flash_a_tstat(BYTE m_ID,unsigned int the_max_register_number,unsigned char *register_data_orginal,int baudrate_var,int &which_register_was_interrupt) { //the return value 1,successful //<0 ,have some trouble unsigned char *register_data=register_data_orginal; unsigned int ii=0; //**************************************************inspect the flash that last flash position ** if(read_one(m_ID,0xee10)<0)//retry times is better { //read_one from globle_function.h //the return value == -1 ,no connecting //AfxMessageBox("before write,need to open the com!"); //close_com(); //error -1 return -1; } { //from 0000 register flash //from 0000 flash update ii=0; showing_text="initializing!"; Sleep(500); //********************write register 16 value 0x7f ************** int temp_baudrate=baudrate_var;//get the input baudrate do{ if(ii<RETRY_TIMES) if(-2==Write_One(m_ID,16,0x7f))//From Common.h { ii++; if(ii==RETRY_TIMES && baudrate_var==9600 && temp_baudrate!=19200) { Change_BaudRate(19200);//From Common.h temp_baudrate=19200; ii=1;// } Sleep(6000); } else ii=0; else { return -2;//error -2 Unable to Initialize... } }while(ii); //********************write register 16 value 0x3f ************** ii=0; showing_text+="erasing!"; do{ if(ii<RETRY_TIMES) if(-2==Write_One(m_ID,16,0x3f))//From common.h ii++; else ii=0; else { return -6;//error -6 } }while(ii); //********************write register 16 value 0x1f ************** ii=0; Sleep(3000); //must have this ,the Tstat need } while(ii<=the_max_register_number) { unsigned char data_to_send[160]={0};// buffer that writefile() will to use int itemp=0; replace_flag=TRUE; showing_text.Format(_T("initialized!erasing!programming!Programing progress %.1f%%"),100*((float)ii)/the_max_register_number); do{ if(itemp<RETRY_TIMES) { //From common.h if(-2==write_multi(m_ID,®ister_data[ii],ii,WRITE_MUTLI_NUMBER)) //to write multiple WRITE_MUTLI_NUMBER bytes { itemp++; //showing_text.Format("initialized!erasing!programming!Writing line %d to %d...",ii,ii+WRITE_MUTLI_NUMBER); replace_flag=TRUE; showing_text.Format(_T("initialized!erasing!programming!Programing progress %.1f%%"),100*((float)ii)/the_max_register_number); } else { itemp=0; which_register_was_interrupt=ii; } } else { return -8;//the com connection is wrong! error -8 } }while(itemp); ii+=WRITE_MUTLI_NUMBER; } //********************write register 16 value 0x01 ************** ii=0; which_register_was_interrupt=-9; //********************write register 16 value 01 ************** do{ if(ii<RETRY_TIMES) if(-2==Write_One(m_ID,16,1)) ii++; else ii=0; else { return -8;//error -8 } }while(ii); Change_BaudRate(baudrate_var);//back baudrate return 1; }