Beispiel #1
1
TDAPA::~TDAPA()
{
  OutData(1); SckDelay();
  OutSck(1); SckDelay();
  OutEnaSck(0);
  OutReset(1);
  OutEnaReset(0);

  if (ppdev_fd != -1) {
    if (pa_type_is_serial)
      tcsetattr(ppdev_fd, TCSADRAIN, &saved_modes);
    else
      par_release(ppdev_fd);
    close(ppdev_fd);
    ppdev_fd = -1;
  } else
    (void) ioport_disable(IOBASE, IOSIZE);
}
Beispiel #2
0
////////////////////////////////////////////////////////////////
// イベントコールバック関数
//
// 引数:	id		イベントID
//			clock	クロック
// 返値:	なし
////////////////////////////////////////////////////////////////
void SUB6::EventCallback( int id, int clock )
{
	switch( id ){
	case EID_INTCHK:	// 割込みチェック
		
		if( (Status8049 == D8049_IDLE) && IntrFlag ){
			int wt = WAIT_DATA;
			
			PRINTD( SUB_LOG, "[8049][EventCallback] EID_INTCHK %02X->", Status8049 );
			
			// 割込み要求を調べる
			if     ( IntrFlag & IR_JOY )  { Status8049 = D8049_JOY;   wt += WAIT_JOY; }
			else if( IntrFlag & IR_KEY1 ) { Status8049 = D8049_KEY1;  }
			else if( IntrFlag & IR_KEY12 ){ Status8049 = D8049_KEY12; }
			else if( IntrFlag & IR_CMTR ) { Status8049 = D8049_CMTR;  }
			else if( IntrFlag & IR_CMTE ) { Status8049 = D8049_CMTE;  }
			else if( IntrFlag & IR_KEY2 ) { Status8049 = D8049_KEY2;  }
			else if( IntrFlag & IR_KEY3 ) { Status8049 = D8049_KEY3;  }
			else if( IntrFlag & IR_SIO )  { Status8049 = D8049_SIO;   }
			else if( IntrFlag & IR_TVR )  { Status8049 = D8049_TVRR;  }
			else if( IntrFlag & IR_DATE ) { Status8049 = D8049_DATE;  }
			
			if( Status8049 != D8049_IDLE )
				vm->EventAdd( this, EID_VECTOR, wt, EV_LOOP|EV_STATE );
			
			PRINTD( SUB_LOG, "%02X\n", Status8049 );
		}
		break;
		
	case EID_VECTOR:	// 割込みベクタ出力
		// T0=IBF=H つまり8255のバッファが空いていなければリトライ
		if( GetT0() ) break;
		vm->EventDel( this, EID_VECTOR );
		
		OutVector();	// 割込みベクタ出力
		
		// 続いてデータ出力
		vm->EventAdd( this, EID_DATA, WAIT_DATA, EV_LOOP|EV_STATE );
		break;
		
	case EID_DATA:		// 割込みデータ出力
		// T0=IBF=H つまり8255のバッファが空いていなければリトライ
		if( GetT0() ) break;
		vm->EventDel( this, EID_DATA );
		
		OutData();		// 割込みデータ出力
		break;
	}
}
Beispiel #3
0
int
TDAPA::SendRecv(int b)
{
  unsigned int mask, received=0;

  for (mask = 0x80; mask; mask >>= 1) {
     OutData(b & mask);
     SckDelay();
     /* MM 20020613: we used to read the bit here, but ... */
     OutSck(1);
     SckDelay();
     /* ... here we have more room for propagation delays (almost the
	whole SCK period, instead of half of it) - good for long cables,
	slow RS232 drivers/receivers, opto-isolated interfaces, etc.  */
     if (InData())
       received |= mask;
     OutSck(0);
  }
  return received;
}
Beispiel #4
0
int run_main(int argc, char *argv[], int numprocs0, int myid0) 
{
  int MD_iter,i,j,po,ip;
  char fileE[YOUSO10] = ".ene"; 
  char fileDRC[YOUSO10] = ".md";
  char fileMemory[YOUSO10]; 
  char fileRestart[YOUSO10];
  char operate[200];
  double TStime,TEtime;

  /* for idle CPUs */
  int tag;
  int complete;
  MPI_Request request;
  MPI_Status  status;

  /* for measuring elapsed time */

  dtime(&TStime);

  /* allocation of CompTime */
  CompTime = (double**)malloc(sizeof(double*)*numprocs0); 
  for (i=0; i<numprocs0; i++){
    CompTime[i] = (double*)malloc(sizeof(double)*30); 
    for (j=0; j<30; j++) CompTime[i][j] = 0.0;
  }

  if (myid0==Host_ID){  
    printf("\n*******************************************************\n"); 
    printf("*******************************************************\n"); 
    printf(" Welcome to OpenMX   Ver. %s                           \n",Version_OpenMX); 
    printf(" Copyright (C), 2002-2009, T.Ozaki                     \n"); 
    printf(" OpenMX comes with ABSOLUTELY NO WARRANTY.             \n"); 
    printf(" This is free software, and you are welcome to         \n"); 
    printf(" redistribute it under the constitution of the GNU-GPL.\n");
    printf("*******************************************************\n"); 
    printf("*******************************************************\n\n"); 
  } 

  Init_List_YOUSO();
  remake_headfile = 0;
  ScaleSize = 1.2; 

  /****************************************************
                   Read the input file
  ****************************************************/

  init_alloc_first();
  CompTime[myid0][1] = readfile(argv);
  MPI_Barrier(MPI_COMM_WORLD1);

  /* initialize PrintMemory routine */

  sprintf(fileMemory,"%s%s.memory%i",filepath,filename,myid0);
  PrintMemory(fileMemory,0,"init"); 
  PrintMemory_Fix();
 
  /* initialize */
  
  init();
  fnjoint(filepath,filename,fileE);
  fnjoint(filepath,filename,fileDRC);

  /****************************************************
      SCF-DFT calculations and MD and geometrical
      optimization.
  ****************************************************/

  MD_iter = 1;

  do {

    CompTime[myid0][2] += truncation(MD_iter,1);

    if (ML_flag==1 && myid0==Host_ID) Get_VSZ(MD_iter);  

    if (Solver==4) {
      TRAN_Calc_GridBound( mpi_comm_level1, atomnum, WhatSpecies, Spe_Atom_Cut1,
                           Ngrid1, Grid_Origin, Gxyz, tv, gtv, rgtv, Left_tv, Right_tv );

      /* output: TRAN_region[], TRAN_grid_bound */
    }

    CompTime[myid0][3] += DFT(MD_iter,(MD_iter-1)%orbitalOpt_per_MDIter+1);
    if (myid0==Host_ID) iterout(MD_iter,MD_TimeStep*MD_iter,fileE,fileDRC);

    if (ML_flag==0) CompTime[myid0][4] += MD_pac(MD_iter,argv[1]);

    MD_iter++;

  } while(MD_Opt_OK==0 && MD_iter<=MD_IterNumber);

  if ( TRAN_output_hks ) {
    /* left is dummy */
    TRAN_RestartFile(mpi_comm_level1, "write","left",filepath,TRAN_hksoutfilename);
  }

  /****************************************************
               calculate Voronoi charge
  ****************************************************/
 
  if (Voronoi_Charge_flag==1) Voronoi_Charge();

  /****************************************************
  making of a file *.frac for the fractional coordinates
  ****************************************************/

  Make_FracCoord(argv[1]);

  /****************************************************
   generate Wannier functions added by Hongming Weng
  ****************************************************/

  /* hmweng */
  if(Wannier_Func_Calc){
    if (myid0==Host_ID) printf("Calling Generate_Wannier...\n");fflush(0);

    Generate_Wannier(argv[1]);
  }

  /****************************************************
                  Making of output files
  ****************************************************/

  CompTime[myid0][20] = OutData(argv[1]);

  /****************************************************
    write connectivity, Hamiltonian, overlap, density
    matrices, and etc. to a file, filename.scfout 
  ****************************************************/

  if (HS_fileout==1) SCF2File("write",argv[1]);

  /* elapsed time */

  dtime(&TEtime);
  CompTime[myid0][0] = TEtime - TStime;
  Output_CompTime();
  for (i=0; i<numprocs0; i++){
    free(CompTime[i]);
  }
  free(CompTime);

  /* merge log files */

  Merge_LogFile(argv[1]);

  /* free arrays */

  Free_Arrays(0);

  /* print memory */

  PrintMemory("total",0,"sum");

  /****************************************************
         reconstruct the original MPI group
  ****************************************************/

  {
    int *new_ranks; 
    MPI_Group  new_group,old_group; 

    new_ranks = (int*)malloc(sizeof(int)*numprocs0);
    for (i=0; i<numprocs0; i++) {
      new_ranks[i]=i; /* a new group is made of original rank=0:Pnum[k]-1 */
    }

    MPI_Comm_group(MPI_COMM_WORLD1, &old_group);

    /* define a new group */
    MPI_Group_incl(old_group,numprocs0,new_ranks,&new_group);
    MPI_Comm_create(MPI_COMM_WORLD1,new_group,&mpi_comm_level1);

    MPI_Group_free(&new_group);
    free(new_ranks); /* never forget cleaning! */
  }

  MPI_Barrier(MPI_COMM_WORLD1);
  if (myid0==Host_ID){
    printf("\nThe calculation was normally finished.\n");
  }

  return 0;
}
Beispiel #5
0
bool ActorEquipmentOverrider::OverrideHandler::HandleEquipment(ActorBodyModelData * ModelData,
															   TESForm* ModelSource,
															   TESObjectREFR * Ref,
															   TESNPC * NPC,
															   OverrideResultListT & OutResults) const
{
	_MESSAGE("Handler %d | Filters: REF(%08X), NPC(%s %08X), RACE(%s %08X), ITEM(%s %08X)",
			 ID,
			 Filters.Reference ? Filters.Reference->refID : 0,
			 Filters.NPC ? InstanceAbstraction::GetFormName(Filters.NPC) : "",
			 Filters.NPC ? Filters.NPC->refID : 0,
			 Filters.Race ? InstanceAbstraction::GetFormName(Filters.Race) : "",
			 Filters.Race ? Filters.Race->refID : 0,
			 Filters.EquippedItem ? InstanceAbstraction::GetFormName(Filters.EquippedItem) : "",
			 Filters.EquippedItem ? Filters.EquippedItem->refID : 0);
	gLog.Indent();

	bool Result = false;
	TESRace* Race = NPC->race.race;
	UInt32 Female = NPC->actorBaseData.IsFemale();

	// check filters
	bool FiltersMatch = true;
	if (Filters.Reference && Filters.Reference != Ref)
		FiltersMatch = false;
	else if (Filters.NPC && Filters.NPC != NPC)
		FiltersMatch = false;
	else if (Filters.Race && Filters.Race != Race)
		FiltersMatch = false;
	else if (Filters.EquippedItem && Filters.EquippedItem != ModelSource)
		FiltersMatch = false;

	if (FiltersMatch)
	{
		TESForm* OrgModelSource = ModelSource;
		OBSEArrayElement HandlerResult;

		// call function script and extract results
		if (Interfaces::kOBSEScript->CallFunction(Handler, Ref, NULL, &HandlerResult, 4, OrgModelSource, NPC, Race, Female))
		{
			if (HandlerResult.IsValid())
			{
				OBSEArrayVarInterface::Array* ResultData = HandlerResult.Array();
				if (ResultData)
				{
					UInt32 Size = Interfaces::kOBSEArrayVar->GetArraySize(ResultData);
					if (Size == kResultArray__Size)
					{
						OBSEArrayElement Priority, OverrideModelSource;
						Interfaces::kOBSEArrayVar->GetElement(ResultData, kResultArrayIndex_Priority, Priority);
						Interfaces::kOBSEArrayVar->GetElement(ResultData, kResultArrayIndex_OverrideModelSource, OverrideModelSource);

						if (Priority.IsValid() && Priority.GetType() == OBSEArrayElement::kType_Numeric &&
							OverrideModelSource.IsValid() && OverrideModelSource.GetType() == OBSEArrayElement::kType_Form)
						{
							TESForm* Override = OverrideModelSource.Form();
							double ApplyPriority = Priority.Number();
							if (ApplyPriority < 0)
								ApplyPriority = 0;
							else if (ApplyPriority > 100)
								ApplyPriority = 100;

							if (Settings::kEquipmentOverrideCheckOverrideSourceType().i == 0 || Override->typeID == OrgModelSource->typeID)
							{
								TESBipedModelForm* NewBiped = OBLIVION_CAST(Override, TESForm, TESBipedModelForm);
								SME_ASSERT(NewBiped);

								TESModel* NewModel = &NewBiped->bipedModel[0];
								if (Female)
									NewModel = &NewBiped->bipedModel[1];

								if (NewModel->nifPath.m_dataLen != 0)
								{
									OverrideHandler::Result OutData(ID, (UInt32)ApplyPriority, Override, NewModel);
									OutResults.push_back(OutData);
									Result = true;

									_MESSAGE("Added override item with priority %d, model source %s (%08X), model %s",
											 (UInt32)ApplyPriority, InstanceAbstraction::GetFormName(Override), Override->refID, NewModel->nifPath.m_data);

								}
								else
								{
									_MESSAGE("Invalid path for override model source %08X", Override->refID);
								}
							}
							else
							{
								_MESSAGE("Model source type mismatch. Expected %d but received %d", (UInt32)OrgModelSource->typeID, (UInt32)Override->typeID);
							}
						}
						else
						{
							_MESSAGE("Couldn't extract result array arguments. Expected types %d and %d but received %d and %d",
									 (UInt32)OBSEArrayElement::kType_Numeric,
									 (UInt32)OBSEArrayElement::kType_Form,
									 (UInt32)Priority.GetType(), (UInt32)OverrideModelSource.GetType());
						}
					}
					else
					{
						_MESSAGE("Unexpected result array size. Expected %d but received %d", (UInt32)kResultArray__Size, Size);
					}
				}
				else
				{
					_MESSAGE("Handler script returned an invalid result of type %d", (UInt32)HandlerResult.GetType());
				}
			}
			else
			{
				_MESSAGE("Handler script returned no result");
			}
		}
		else
		{
			_MESSAGE("Handler script call failed for script %08X", Handler->refID);
		}
	}
	else
	{
		_MESSAGE("Filter mismatch");
	}

	gLog.Outdent();
	return Result;
}
Beispiel #6
0
//---------------------------------------------------------------------------
void __fastcall CComm::Execute()
{
	m_Execute = 1;
    int BitLen = pMod->m_BitLen;
	//---- スレッドのコードをここに記述 ----
//	Priority = tpLower;
	while(1){
_try:;
		if( Terminated == TRUE ){
			return;
		}
		if( m_Command == COMM_CLOSE ){
			m_Command = 0;
			return;
		}
		if( m_CreateON == TRUE ){
			if( !m_TxEnb ){
				::Sleep(10);
			}
			else if( !TxBusy() ){
				if( m_FirstGaurd ){		// 最初のガード時間の確保
					m_FirstGaurd = 0;
					::Sleep(250);
					if( m_DisDiddle == -1 ) m_DisDiddle = 0;
				}
				else if( m_txcnt && (FSKDeff <= DEFFSOUND) ){	// 送信データあり
					m_DisDiddle = pMod->m_DisDiddle;
					m_Data = m_txbuf[m_txrp];
					if( m_figout && (m_fig == 0x1b) && (m_Data != 0x1f) ){
						m_Data = 0x1b;
					}
					else {
						switch(m_Data){
							case 0xff:		// Mark
								::Sleep((pMod->m_ReCount * 3 * 1000) / SampFreq);
								NextBuf();
								goto _try;
							case 0xfe:		// キャリア断続
								NextBuf();
								goto _try;
							case 0xfd:		// disable diddle
								m_DisDiddle = 0;
								NextBuf();
								goto _try;
							case 0xfc:		// enable diddle
								m_DisDiddle = 1;
								NextBuf();
								goto _try;
							case 0x1b:
							case 0x1f:
								m_fig = m_Data;
								break;
						}
						NextBuf();
					}
					m_figout = 0;
					if( !pMod->m_CharWaitDiddle ){
						WaitTXD(pMod->m_CharWait);
					}
					m_WaitTimerCount = 4;
					OutData(m_Data);
				}
				else if( (BitLen < 6) && ((FSKDeff > DEFFSOUND) || (pMod->m_diddle && !m_DisDiddle)) ){
					if( FSKDeff > DEFFSOUND ){
						WaitTXD(pMod->m_CharWait);
					}
					else if( (sys.m_LWait == 2) || !pMod->m_WaitTimer || m_WaitTimerCount ){
						if( !pMod->m_CharWaitDiddle ){
							if( sys.m_LWait == 2 ){
								WaitTXD(pMod->m_CharWait);
							}
							else if( pMod->m_DiddleWait ){
								WaitTXD(pMod->m_DiddleWait);
							}
						}
					}
					m_idle = 1;
					switch(pMod->m_diddle){
						case 1:		// BLK
							if( pMod->m_RandomDiddle && !(rand() & 3) ){
								m_Data = 0x1f;
								if( pMod->m_BitLen <= 6 ) m_figout = 1;
							}
							else {
								m_Data = 0x00;
							}
							break;
						default:	// LTR
							if( pMod->m_RandomDiddle && !(rand() & 3) ){
								m_Data = 0x00;
							}
							else {
								m_Data = 0x1f;
								if( pMod->m_BitLen <= 6 ) m_figout = 1;
							}
							break;
					}
					if( m_WaitTimerCount ) m_WaitTimerCount--;
					OutData(m_Data);
				}
				else {
					if( !m_idle ){
						::Sleep((pMod->m_ReCount * pMod->m_BitLen)*1000/SampFreq);
					}
					m_idle = 1;
				}
				::Sleep(10);
			}
			else {
				::Sleep(1);
			}
		}
		else {
			::Sleep(10);
		}
	}
}