//************************************ // 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; }
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); }