int Write_One_t(unsigned char device_var, unsigned short address, unsigned short val, int slot)
{
	int retVal = -100;
	int executeMBFunc = 0;
	static int writeCount = 0;

	if (MbPollOpen == 1)
	{
		executeMBFunc = 1;
	}
	else
	{
		executeMBFunc = 0;
	}

	if (executeMBFunc == 1)
	{
		//LoadWriteOneData(val, device_var, address);
		if ((trafficSlotNo == slot) && (trafficSlotNo != -1))
		{
			retVal = Write_One_log(device_var, address, val, &sendData[0], &recvData[0], &sendDataLen, &recvDataLen);
			insertDataString = 1;
		}
		else
		{
			retVal = Write_One(device_var, address, val);
		}

		mbpollTotalCount[slot]++;
		if (retVal < 0)
		{
			mbpollErrCount[slot]++;
		}
		/*CString temp;
		writeCount++;
		temp.Format(_T("addr = %d count = %d ret = %d"), address, writeCount, retVal); 
		MessageBox(NULL, temp, L"Write_One", MB_OK);*/
	}
	return retVal;
}
Example #2
0
	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,&register_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;
	}
void CFlashSN::FlashTstatSN()
{
	m_nSerialNumber=GetNewSerialNumber();// get last serialnumber of the file
	if(m_nSerialNumber==-1)//can't fine the serialnumber file on z drive
	{
		AfxMessageBox(_T("WARNING : Can't find serial number file on Z driver."));
		return;
	}

	unsigned int loword,hiword;
	loword=m_nSerialNumber & 0xffff;
	hiword=(m_nSerialNumber >> 16) & 0xffff;
	if (open_com(m_nComPort))
	{if(Write_One(m_nMBID,0,loword)>0 && Write_One(m_nMBID,2,hiword)>0)
	{		
		int nSWVersion=Read_One(m_nMBID, 4);//tstat version			
		if(nSWVersion >= 240 && nSWVersion < 250)
			nSWVersion /=10;
		else 
		{
			nSWVersion = Read_One(255,5)*256+Read_One(255,4);	
				nSWVersion /=10;
		}//tstat_version		
		
		if(nSWVersion >= 25)
		{
				Write_One(255,7,m_nProductModel);//write product_model register
				Write_One(255,8,m_nHardWareVersion);//write hardware_rev register
		}
			int year,month,day;
			char software_version[8]={'\0'};
			time_t curtime;
			struct tm* today = NULL;
			curtime = time(NULL);
			//today = localtime(&curtime);
			localtime_s(today, &curtime);
			year = today->tm_year + 1900;
			month = today->tm_mon + 1;
			day = today->tm_mday;
			//		getTime(&year,&month,&day);//get the month,day,year of now							
			float fl_temp=(float)nSWVersion;
			CString f_l_temp;
			f_l_temp.Format(_T("%.1f"),fl_temp);
			for(int j=0;j<f_l_temp.GetLength();j++)
				software_version[j]=(char)f_l_temp.GetAt(j);
		
			//fstream tstat;

			////tstat.open(_T("z:\\Serial_Records\\serial_records.txt"),ios_base::out | ios_base::app);
			//tstat.open(_T("e:\\serial_records.txt"),ios_base::out | ios_base::app);
			//if(tstat.is_open())
			//{
			//	tstat	<<endl<<m_nSerialNumber                    //serialnumber
			//			<<_T(", ")<<m_strProductModel                //product_model
			//			<<_T(", ")<<m_nHardWareVersion           //hardware version
			//			<<_T(", ")<<nSWVersion				        //software version
			//			<<_T(", ")<<month<<_T("-")<<day<<_T("-")<<year;        //the time									
			//}
			//tstat.close();
			CString stringlog;
			stringlog.Format(_T("%d,%s,%d,%s,%d-%d-%d"),
				m_nSerialNumber,
				m_strProductModel,
				m_nHardWareVersion,
				f_l_temp,
				month,
				day,
				year);
			CStdioFile seriallogfile;
			if(seriallogfile.Open(c_strSNRecordFileName.GetString(),CFile::modeReadWrite | CFile::shareDenyNone))
			{

				seriallogfile.SeekToEnd();

				seriallogfile.WriteString(_T("\n")+stringlog);



				seriallogfile.Close();
			}
			else
			{
				ASSERT(0);
				seriallogfile.Close();

			}
			CString index;
			index.Format(_T("SN=%d have been written,sucessfully."),m_nSerialNumber);
			AfxMessageBox(index);
	}
	else
	{
			m_nSerialNumber = 
				Read_One(255,0 ) +
				Read_One(255,1) * 256 +
				Read_One(255,2) * 65536 +           // 256 * 256 
				Read_One(255 , 3) * 16777216 ;// 256 *256 *256
			CString index;
			index.Format(_T("SN:%d have not been overwritten."),m_nSerialNumber);
			AfxMessageBox(index);
	}
	}
	else
	{
      AfxMessageBox(_T("COM Can't Open"));
	}
	

}
void binarySearchforview_networkcontroller(BYTE devLo, BYTE devHi)
{
	//	had_scaned=true;////////////////////////////////////////////////had scan
	if(net_work_is_exist_or_not==true)
		Sleep(200);	    
	else
		Sleep(10);//
	int a=NetController_CheckTstatOnline(devLo,devHi);

	TRACE("L:%d   H:%d  a:%d\n",devLo,devHi,a);
	if(binary_search_crc(a))
		return ;
	char c_array_temp[5]={'0'};
	CString temp="";
	if(a>0)
	{

			///////****************************************************************8888888
			//			TRACE("L:%d   H:%d\n",devLo,devHi);
			//			TRACE("%d\n",a);
		/*
#if 1
			binary_search_result temp;
			temp.baudrate=m_baudrate2;
			temp.id=a;
			temp.product_class_id=read_one(a,7);
			get_serialnumber(temp.serialnumber,temp.id );
			temp.hardware_version=read_one(temp.id ,8);
			m_binary_search_networkcontroller_background_thread.push_back(temp);
			if(read_one(a,7)==NET_WORK_CONT_PRODUCT_MODEL)//net work controller
				keep_back_mac_address(a);
#endif
				*/
			binary_search_result temp;
			temp.baudrate=m_baudrate2;
			unsigned short SerialNum[9];
			memset(SerialNum,0,sizeof(SerialNum));
			int nRet=0;
			temp.id=a;
			nRet=Read_Multi(temp.id,&SerialNum[0],0,9,3);
			if(nRet>0)
			{
				//serial=SerialNum[0]&0x00ff+(SerialNum[0]&0xff00>>8)*256+(SerialNum[1]&0x00ff)*65536
				//	+(SerialNum[1]&0xff00>>8)*16777216;

				if(SerialNum[0]==255&&SerialNum[1]==255&&SerialNum[2]==255&&SerialNum[3]==255)
				{
					srand((unsigned)time(NULL)); 
					SerialNum[0]=rand()%255; 
					SerialNum[1]=rand()%255; 
					SerialNum[2]=rand()%255; 
					SerialNum[3]=rand()%255; 

					write_one(temp.id,0,SerialNum[0]);
					write_one(temp.id,1,SerialNum[1]);
					write_one(temp.id,2,SerialNum[2]);
					write_one(temp.id,3,SerialNum[3]);
				}

				temp.serialnumber=SerialNum[0]+SerialNum[1]*256+SerialNum[2]*256*256+SerialNum[3]*256*256*256;
				temp.product_class_id=SerialNum[7];
				temp.hardware_version=SerialNum[8];
			float tstat_version2;
			tstat_version2=SerialNum[4];//tstat version			
			if(tstat_version2 >=240 && tstat_version2 <250)
				tstat_version2 /=10;
			else 
			{
				tstat_version2 = SerialNum[5]*256+SerialNum[4];	
				tstat_version2 /=10;
			}//tstat_version
			
			temp.software_version=tstat_version2;
					if(read_one(temp.id,185)==0)
						temp.baudrate=9600;
					else
					{
							temp.baudrate=19200;
					}
			temp.nEPsize=read_one(temp.id,326);
			if(temp.serialnumber>0)
			m_binary_search_networkcontroller_background_thread.push_back(temp);
			}

	}
	switch(a)
	{
	case -2:
		//crc error
		if(devLo!=devHi)
		{
			binarySearchforview_networkcontroller(devLo,(devLo+devHi)/2);
			binarySearchforview_networkcontroller((devLo+devHi)/2+1,devHi);
		}
		else
			binarySearchforview_networkcontroller(devLo,devHi);
		break;
	case -3:
		//more than 2 Tstat is connect
		if(devLo!=devHi)
		{
			binarySearchforview_networkcontroller(devLo,(devLo+devHi)/2);
			binarySearchforview_networkcontroller((devLo+devHi)/2+1,devHi);
		}
		else
		{//Two Tstat have the same ID,fewness
			do
			{
				Sleep(20);//////////////////////////////////for running is better
				char c_temp_arr[100]={'\0'};
				if(Read_One(devLo,10)!=-2)//one times
				{
					CString str_temp;
					for(int j=254;j>=1;j--)
						if(j!=devLo)
						{							
							if(!found_same_net_work_controller_by_mac(a))
							{
								bool find=false;//false==no find;true==find
								for(int w=0;w<m_binary_search_product_background_thread.size();w++)
									if(j==m_binary_search_product_background_thread.at(w).id)
									{
										find=true;
										break;
									}
									if(find==false)
									{
										//************************change the Id
										//									Sleep(20);//////////////////////////////////for running is better
										if(Write_One(devLo,10,j)>0)//sometimes write failure ,so inspect,important
											if(j<devLo)
											{
												/*
												#if 1
												binary_search_result temp;
												temp.baudrate=m_baudrate2;
												temp.id=j;
												temp.product_class_id=read_one(j,7);
												get_serialnumber(temp.serialnumber,j);
												temp.hardware_version=read_one(j,8);
												m_binary_search_networkcontroller_background_thread.push_back(temp);
												if(read_one(j,7)==NET_WORK_CONT_PRODUCT_MODEL)//net work controller
													keep_back_mac_address(j);
												#endif
												*/

												binary_search_result temp;
												temp.baudrate=m_baudrate2;
												unsigned short SerialNum[9];
												memset(SerialNum,0,sizeof(SerialNum));
												int nRet=0;
												temp.id=j;
												nRet=Read_Multi(temp.id,&SerialNum[0],0,9,3);
												if(nRet>0)
												{
													//serial=SerialNum[0]&0x00ff+(SerialNum[0]&0xff00>>8)*256+(SerialNum[1]&0x00ff)*65536
													//	+(SerialNum[1]&0xff00>>8)*16777216;

														if(SerialNum[0]==255&&SerialNum[1]==255&&SerialNum[2]==255&&SerialNum[3]==255)
														{
															srand((unsigned)time(NULL)); 
															SerialNum[0]=rand()%255; 
															SerialNum[1]=rand()%255; 
															SerialNum[2]=rand()%255; 
															SerialNum[3]=rand()%255; 
															write_one(temp.id,0,SerialNum[0]);
															write_one(temp.id,1,SerialNum[1]);
															write_one(temp.id,2,SerialNum[2]);
															write_one(temp.id,3,SerialNum[3]);

														}

													temp.serialnumber=SerialNum[0]+SerialNum[1]*256+SerialNum[2]*256*256+SerialNum[3]*256*256*256;
													temp.product_class_id=SerialNum[7];
													temp.hardware_version=SerialNum[8];
														float tstat_version2;
													tstat_version2=SerialNum[4];//tstat version			
													if(tstat_version2 >=240 && tstat_version2 <250)
														tstat_version2 /=10;
													else 
													{
														tstat_version2 = SerialNum[5]*256+SerialNum[4];	
														tstat_version2 /=10;
													}//tstat_version
													
													temp.software_version=tstat_version2;
															if(read_one(temp.id,185)==0)
													temp.baudrate=9600;
												else
												{
														temp.baudrate=19200;
												}
													temp.nEPsize=read_one(temp.id,326);
														
													if(temp.serialnumber>0)
													
													m_binary_search_networkcontroller_background_thread.push_back(temp);
												}



											}
											binarySearchforview_networkcontroller(devLo,devHi);
											return;
									}
							}
							else
							{
								return;
							}
						}
				}
			}while(1);
		}
		break;
	case -4:break;
		//no connection 
	case -5:break;
		//the input error
	}
}