Example #1
0
//************************************
// Method:    Write
// FullName:  CBuffer::Write
// Access:    public 
// Returns:   UINT
// Qualifier:
// Parameter: PBYTE pData
// Parameter: UINT nSize
//************************************
UINT CBuffer::Write(PBYTE pData,UINT nSize){
	ReAllocateBuffer(nSize + GetBufferLen());
	CopyMemory(m_pPtr,pData,nSize);
	m_pPtr += nSize;
	return nSize;
}
Example #2
0
void XInstrument::Run() {
	BOOL exit=FALSE;BYTE comCh;int i,key=0;
	ScreenLayOut();
	BOOL hasKey=FALSE,hasComCmd=FALSE;
	PrepairAdConv();
	StartComService(0,B28800,8,1,NONE);
	while(!exit)
	{
		while(!(hasKey=(BOOL)bioskey(1))&&!(hasComCmd=CheckComBuffer()))
		{
			Update();Show();
		}
		if(hasKey)
		{
			key=bioskey(0);
			switch(key)
			{
			case 0x11b:
				exit = TRUE;
				break;
			case 0x3b00: //F1
				m_status=SwitchToIdle;
				break;
			case 0x3c00: //F2
				//m_status=SwitchToStandBy;
				break;
			case 0x3d00: //F3
				m_status=SwitchToSampling;
				break;
			case 0x3e00: //F4
				if(!Running){
				    pCh->ShowCurve();
				    ScreenLayOut();
				}
				break;
			case 0x3f00:
				break;
			    /*
				DWORD crc;BYTE ret;
				OneChannel* p1Ch=NULL;
				p1Ch=pCh->GetChnAndMoveToNext();
				if(p1Ch==NULL)	{
					AddToSendBuffer(0xff);
					gotoxy(50,1);textattr(0x17);cprintf("Null      ",comCh);
				}
				crc=0xffffffff;
				ret=0x50;AddToSendBuffer(ret);UpdateCRC32(ret,crc);
				ret=p1Ch->Finished;AddToSendBuffer(ret);UpdateCRC32(ret,crc);
				Add2ToSendBuffer(p1Ch->CurrTimes,crc);
				DWORD chData;
				for(i=0;i<1024;i++)
				{
					chData=p1Ch->data[i];
					//chData=1024 - abs(i-512);//DEBUG
					Add4ToSendBuffer(chData,crc);
				}
				crc^=0xffffffff;
				AddToSendBuffer(crc>>24);
				AddToSendBuffer(crc>>16);
				AddToSendBuffer(crc>>8);
				AddToSendBuffer(crc);
				UpdateCommport();
				break;*/
			 /*
			 case 0x1910:
				Running=FALSE;
				pCh->ReadyStart=FALSE;
				pause=TRUE;
				gotoxy(70,1);textattr(0x16);cprintf(" Paused... ");
				break;
			case 0x1414:
				Running=FALSE;
				pCh->ReadyStart=FALSE;
				gotoxy(70,1);textattr(0x4e);cprintf("  Stoped!  ");
				break; */
			}
		}
		else if(hasComCmd)
		{
			DWORD crc,crcClip;BYTE ret;int len,curCh=0;
			if(ReceivingBxConfig)
			{
			    len=GetBufferLen();
			    if(len>=38)  // @2012-06-05
			    {
			        FloatByte floatByte;
			        ShortByte shortByte;
			        //set env param
					for(i=0;i<4;i++) {
						ret=floatByte.byte[i]=ReadComBuffer();
						UpdateCRC32(ret,crcBxConfig);
					}
					m_pXRayTube->m_WorkingHV=floatByte.real;
					//m_pXRayTube->SetHV(floatByte.real); //DEBUG


					for(i=0;i<4;i++) {
						ret=floatByte.byte[i]=ReadComBuffer();
						UpdateCRC32(ret,crcBxConfig);
					}
					m_pXRayTube->m_WorkingMA=floatByte.real;
					//m_pXRayTube->SetMA(floatByte.real); //DEBUG

					for(i=0;i<4;i++) {
						ret=floatByte.byte[i]=ReadComBuffer();
						UpdateCRC32(ret,crcBxConfig);
					}
					m_pXRayTube->m_H2500WorkingHV=floatByte.real;
					m_pXRayTube->bH2500VolDaout=TRUE;
					//m_pXRayTube->SetH2500HV(floatByte.real); //DEBUG

					ret=ReadComBuffer();
					//m_pLight->SetPanel1((BOOL)ret);
					UpdateCRC32(ret,crcBxConfig);

					ret=ReadComBuffer();
					//m_pLight->SetPanel2((BOOL)ret);
					UpdateCRC32(ret,crcBxConfig);

					ret=ReadComBuffer();
					//m_pLight->SetPanel3((BOOL)ret);
					UpdateCRC32(ret,crcBxConfig);

					ret=ReadComBuffer();
					//m_pLight->SetPanel4((BOOL)ret);
					UpdateCRC32(ret,crcBxConfig);

					ret=ReadComBuffer();
					//m_pLight->SetPanel5((BOOL)ret);
					UpdateCRC32(ret,crcBxConfig);

					ret=ReadComBuffer();
					//m_pLight->SetLamp1((BOOL)ret);
					UpdateCRC32(ret,crcBxConfig);

					ret=ReadComBuffer();
					//m_pLight->SetLamp2((BOOL)ret);
					UpdateCRC32(ret,crcBxConfig);

					ret=ReadComBuffer();
					//m_pLight->SetLamp3((BOOL)ret);
					UpdateCRC32(ret,crcBxConfig);

					ret=ReadComBuffer();
					//m_pLight->SetLamp4((BOOL)ret);
					UpdateCRC32(ret,crcBxConfig);

					ret=ReadComBuffer(); UpdateCRC32(ret,crcBxConfig);
					if(!ret){
						//if(m_pShamber->CanClose()) m_pShamber->Close(); //close fan
					}
					else{
						//if(m_pShamber->CanOpen()) m_pShamber->Open();   //open fan
					}
					
					ret=ReadComBuffer(); UpdateCRC32(ret,crcBxConfig);
					if(ret) {
					    //m_status=SwitchToTubeReady; //m_pXRayTube->WarmUpXTube();
					}
					else {
					    //m_status=SwitchToIdle; //m_pXRayTube->CoolDnXTube();
					}

					ret=ReadComBuffer(); UpdateCRC32(ret,crcBxConfig); 
					if(!ret){
						//if(m_pBeamStop->CanClose())
						//m_pBeamStop->Close();
					}
					else{
						//if(m_pBeamStop->CanOpen())
						//m_pBeamStop->Open();

					}

					for(i=0;i<2;i++) {
						ret=shortByte.byte[i]=ReadComBuffer();
						UpdateCRC32(ret,crcBxConfig);
					}
					pCh->SetChannelTimer(0,shortByte.real);
					
					for(i=0;i<4;i++) {
						ret=floatByte.byte[i]=ReadComBuffer();
						UpdateCRC32(ret,crcBxConfig);
					}
					m_pShamber->m_ULimitTemp=floatByte.real;
					
					for(i=0;i<4;i++) {
						ret=floatByte.byte[i]=ReadComBuffer();
						UpdateCRC32(ret,crcBxConfig);
					}
					m_pShamber->m_DLimitTemp=floatByte.real;

					crcBxConfig^=0xffffffff; 
					crcClip=ReadComBuffer();
					crc=crcClip<<24;
					crcClip=ReadComBuffer();
					crc+=crcClip<<16;
					crcClip=ReadComBuffer();
					crc+=crcClip<<8;
					crcClip=ReadComBuffer();
					crc+=crcClip;  

					if(crcBxConfig==crc)
					{
						AddToSendBuffer('*');
						//gotoxy(1,1);textattr(0x17);cprintf("0x%x,len=%2d,crc ok  ,",comCh,len+1); //debug
					}
					else
					{
						AddToSendBuffer(0xff);
						gotoxy(1,1);textattr(0x17);cprintf("0x78,len=%2d,crc err ,",len+1); //debug
					}
					UpdateCommport();
					ReceivingBxConfig=FALSE;
				}
			    else //receive time out
			    {
					if(getTimerTicks()-ReceivingBxConfigStart>4)
			        {
						gotoxy(1,1);textattr(0x17);cprintf("0x%x,len=%2d,Time out,",comCh,len+1); //debug
			            ClearReceiveBuff();
						AddToSendBuffer(0XFF);
						UpdateCommport();
						ReceivingBxConfig=FALSE;
			        }
			    }
			}
			else
			{	    
				DWORD crc,crcClip;BYTE ret;int len;
				FloatByte floatByte;	
				comCh=ReadComBuffer();
				
				switch(comCh) {
				case 'x': // 0x78, receive configuration
					ReceivingBxConfig=TRUE;
				    ReceivingBxConfigStart=getTimerTicks();
					crcBxConfig=0xffffffff;
					UpdateCRC32('x',crcBxConfig);
					break;
				case 'E': // 0x45, 
					AddToSendBuffer('*');
					UpdateCommport();
					m_status=SwitchToTubeReady;
				    break;
				case 'e': // 0x65, 
					AddToSendBuffer('*');
					UpdateCommport();
					m_status=SwitchToIdle;//SwitchToStandBy;
				    break;
				case 'L':
				    //open beam-shut
				    AddToSendBuffer('*');
					UpdateCommport();
				    m_pBeamStop->Open();
				    break;
				case 'l':
				    //close beam-shut
				    AddToSendBuffer('*');
					UpdateCommport();
				    m_pBeamStop->Close();
				    break;
				case 'B':
				    AddToSendBuffer('*');
					UpdateCommport();
				    m_pLight->SetLamp1(TRUE);
				    m_pLight->SetLamp2(TRUE);
				    m_pLight->SetLamp3(TRUE);
				    m_pLight->SetLamp4(TRUE);
				    break;
				case 'b':
				    AddToSendBuffer('*');
					UpdateCommport();
				    m_pLight->SetLamp1(FALSE);
				    m_pLight->SetLamp2(FALSE);
				    m_pLight->SetLamp3(FALSE);
				    m_pLight->SetLamp4(FALSE);
				    break;
				case 'S': // 0x53, start sampling
					AddToSendBuffer('*');
					UpdateCommport();
					m_status=SwitchToSampling;
					break;
				case 'P': // 0x50, upload sample data, 1034 Bytes, @2012-06-05
					OneChannel* p1Ch=NULL;
					p1Ch=pCh->GetChnAndMoveToNext();
					if(p1Ch==NULL)	{
						AddToSendBuffer(0xff);
						gotoxy(50,1);textattr(0x17);cprintf("Null      ",comCh);
					}
					else{
						crc=0xffffffff;
						ret=0x50;AddToSendBuffer(ret);UpdateCRC32(ret,crc);
						ret=p1Ch->Finished;AddToSendBuffer(ret);UpdateCRC32(ret,crc);
						Add2ToSendBuffer(p1Ch->CurrTimes,crc);
						Add2ToSendBuffer(p1Ch->SetRepeatTimes,crc); //added by Chen @2012-06-04
						DWORD chData;
						//for(i=0;i<1024;i++) //debug
						//{
							//chData=p1Ch->data[i];
							//chData^=0xaaaaaaaa;
							//p1Ch->data[i]=chData=512 - abs(i-512);//DEBUG
							//Add4ToSendBuffer(chData,crc);
						//}
						
						for(i=0;i<256;i++)
						{
						    chData=p1Ch->data[i*4]+
						        p1Ch->data[i*4+1]+
						        p1Ch->data[i*4+2]+
						        p1Ch->data[i*4+3];
						    //chData = chData/4;
						    Add4ToSendBuffer(chData,crc);
						}
						crc^=0xffffffff;
						AddToSendBuffer(crc>>24);
						AddToSendBuffer(crc>>16);
						AddToSendBuffer(crc>>8);
						AddToSendBuffer(crc);
					}
					UpdateCommport();    
					break;			
				case 'X': // 0x58,upload Environment, 52 Bytes, @2012-06-05
					crc=0xffffffff;
					ret=0x58; AddToSendBuffer(ret); UpdateCRC32(ret,crc);
					ret=m_status; AddToSendBuffer(ret); UpdateCRC32(ret,crc);
					
					//m_pXRayTube->ReadHV();    //(1)KV
					floatByte.real=m_pXRayTube->m_CurrHV; 
					//for(i=3;i>=0;i--){
					for(i=0;i<4;i++){
						ret=floatByte.byte[i];
						AddToSendBuffer(ret);UpdateCRC32(ret,crc);
					}

					//m_pXRayTube->ReadMA();
					floatByte.real=m_pXRayTube->m_CurrMA; //(2)MA
					for(i=0;i<4;i++){
					//for(i=3;i>=0;i--){
						ret=floatByte.byte[i];
						AddToSendBuffer(ret);UpdateCRC32(ret,crc);
					}

					//m_pXRayTube->ReadStdHV();
					floatByte.real=m_pXRayTube->m_StdCurrHV; //(3)Std KV
					for(i=0;i<4;i++) {
					//for(i=3;i>=0;i--){
						ret=floatByte.byte[i];
						AddToSendBuffer(ret);UpdateCRC32(ret,crc);
					}

					//m_pXRayTube->ReadH2500HV();
					floatByte.real=m_pXRayTube->m_H2500CurrentHV; //(4)H2500 Vol
					for(i=0;i<4;i++) {
					//for(i=3;i>=0;i--){
						ret=floatByte.byte[i];
						AddToSendBuffer(ret);UpdateCRC32(ret,crc);
					}

					//m_pXRayTube->ReadPower24Vol();
					floatByte.real=m_pXRayTube->Power24Vol; //(5)power 24v
					for(i=0;i<4;i++) {
					//for(i=3;i>=0;i--){
						ret=floatByte.byte[i];
						AddToSendBuffer(ret);UpdateCRC32(ret,crc);
					}

					//m_pXRayTube->ReadPower12Vol();
					floatByte.real=m_pXRayTube->Power12Vol; //(6)power 12v
					for(i=0;i<4;i++) {
					//for(i=3;i>=0;i--){
						ret=floatByte.byte[i];
						AddToSendBuffer(ret);UpdateCRC32(ret,crc);
					}

					//m_pXRayTube->ReadPower5Vol();
					floatByte.real=m_pXRayTube->Power5Vol; //(7)power 5v
					//for(i=0;i<4;i++) {
					for(i=3;i>=0;i--){
						ret=floatByte.byte[i];
						AddToSendBuffer(ret);UpdateCRC32(ret,crc);
					}

					//m_pShamber->ReadAngle();
					floatByte.real=m_pShamber->CurrAngle; //(8)angle
					for(i=0;i<4;i++) {
					//for(i=3;i>=0;i--){
						ret=floatByte.byte[i];
						AddToSendBuffer(ret);UpdateCRC32(ret,crc);
					}

					//m_pShamber->ReadTemp();
					floatByte.real=m_pShamber->m_CurrTemp1; //(9) temperature 1
					for(i=0;i<4;i++) {
					//for(i=3;i>=0;i--){
						ret=floatByte.byte[i];
						AddToSendBuffer(ret);UpdateCRC32(ret,crc);
					}

					floatByte.real=m_pShamber->m_CurrTemp2; //(10) temperature 2
					for(i=0;i<4;i++) {
					//for(i=3;i>=0;i--){
						ret=floatByte.byte[i];
						AddToSendBuffer(ret);UpdateCRC32(ret,crc);
					}

					m_pKey->ReadAllKeyStatus();
					ret=m_pKey->Key1OnStatus;
					AddToSendBuffer(ret);UpdateCRC32(ret,crc);
					ret=m_pKey->Key2OnStatus;
					AddToSendBuffer(ret);UpdateCRC32(ret,crc);

					m_pBeamStop->ReadBeamStopPos();
					ret=m_pBeamStop->OpenPos; //shut open position 
					AddToSendBuffer(ret);UpdateCRC32(ret,crc);
					
					ret=m_pBeamStop->ClosePos; //shut close position 
					AddToSendBuffer(ret);UpdateCRC32(ret,crc);
						
                    m_pSampleLid->ReadSampleLidPos();
					ret=m_pSampleLid->Lid1OpenedStatus; //lid1 status
					AddToSendBuffer(ret);UpdateCRC32(ret,crc);

					ret=m_pSampleLid->Lid2OpenedStatus; //lid2 status
					AddToSendBuffer(ret);UpdateCRC32(ret,crc);
					crc^=0xffffffff;
					AddToSendBuffer(crc>>24);
					AddToSendBuffer(crc>>16);
					AddToSendBuffer(crc>>8);
					AddToSendBuffer(crc);
					UpdateCommport();
					break;
				default:
					//len=GetBufferLen();
					//gotoxy(1,1);textattr(0x17);printf("unknow=%x,len=%d,",comCh,len);
					break;
				}//end switch
				//len = GetBufferLen();
				//gotoxy(1,1);textattr(0x17);printf("0x%x,len=%2d,         ",comCh,len+1);

		    }
		}
	}
	StopComService();
	_setcursortype(_NORMALCURSOR);
}