コード例 #1
0
ファイル: cpu.cpp プロジェクト: aerdnar/emu-ex-plus-alpha
static void S9xSoftResetCPU (void)
{
	CPU.Cycles = 182; // Or 188. This is the cycle count just after the jump to the Reset Vector.
	CPU.PrevCycles = CPU.Cycles;
	CPU.V_Counter = 0;
	CPU.Flags = CPU.Flags & (DEBUG_MODE_FLAG | TRACE_FLAG);
	CPU.PCBase = NULL;
	CPU.NMILine = FALSE;
	CPU.IRQLine = FALSE;
	CPU.IRQTransition = FALSE;
	CPU.IRQLastState = FALSE;
	CPU.IRQExternal = FALSE;
	CPU.IRQPending = Timings.IRQPendCount;
	CPU.MemSpeed = SLOW_ONE_CYCLE;
	CPU.MemSpeedx2 = SLOW_ONE_CYCLE * 2;
	CPU.FastROMSpeed = SLOW_ONE_CYCLE;
	CPU.InDMA = FALSE;
	CPU.InHDMA = FALSE;
	CPU.InDMAorHDMA = FALSE;
	CPU.InWRAMDMAorHDMA = FALSE;
	CPU.HDMARanInDMA = 0;
	CPU.CurrentDMAorHDMAChannel = -1;
	CPU.WhichEvent = HC_RENDER_EVENT;
	CPU.NextEvent  = Timings.RenderPos;
	CPU.WaitingForInterrupt = FALSE;
	CPU.AutoSaveTimer = 0;
	CPU.SRAMModified = FALSE;

	Registers.PBPC = 0;
	Registers.PB = 0;
	Registers.PCw = S9xGetWord(0xfffc);
	OpenBus = Registers.PCh;
	Registers.D.W = 0;
	Registers.DB = 0;
	Registers.SH = 1;
	Registers.SL -= 3;
	Registers.XH = 0;
	Registers.YH = 0;

	ICPU.ShiftedPB = 0;
	ICPU.ShiftedDB = 0;
	SetFlags(MemoryFlag | IndexFlag | IRQ | Emulation);
	ClearFlags(Decimal);

	Timings.InterlaceField = FALSE;
	Timings.H_Max = Timings.H_Max_Master;
	Timings.V_Max = Timings.V_Max_Master;
	Timings.NMITriggerPos = 0xffff;
	if (Model->_5A22 == 2)
		Timings.WRAMRefreshPos = SNES_WRAM_REFRESH_HC_v2;
	else
		Timings.WRAMRefreshPos = SNES_WRAM_REFRESH_HC_v1;

	S9xSetPCBase(Registers.PBPC);

	ICPU.S9xOpcodes = S9xOpcodesE1;
	ICPU.S9xOpLengths = S9xOpLengthsM1X1;

	S9xUnpackStatus();
}
コード例 #2
0
ファイル: Registers.cpp プロジェクト: tt-jsr/VMEngine
 void Registers::Restart()
 {
     ClearFlags();
     halt = false;
     ip = 0;
     totalInstructions = 0;
 }
コード例 #3
0
ファイル: LOGEVENT.CPP プロジェクト: cdaffara/symbiandump-os2
EXPORT_C void CLogEvent::CopyL(const CLogEvent& aEvent)
/** Makes a copy of the specified log event.

@param aEvent The log event to be copied. */
	{
	// Set data first as this is the only function that can leave
	// If this function fails nothing will be changed
	SetDataL(aEvent.Data());

	SetId(aEvent.Id());
	SetEventType(aEvent.EventType());
	SetTime(aEvent.Time());
	SetDurationType(aEvent.DurationType());
	SetDuration(aEvent.Duration());
	SetContact(aEvent.Contact());
	SetLink(aEvent.Link());
	SetDescription(aEvent.Description());
	SetRemoteParty(aEvent.RemoteParty());
	SetDirection(aEvent.Direction());
	SetStatus(aEvent.Status());
	SetSubject(aEvent.Subject());
	SetNumber(aEvent.Number());

	ClearFlags(KLogFlagsMask);
	SetFlags(aEvent.Flags());
#ifdef SYMBIAN_ENABLE_EVENTLOGGER_DUALSIM
	SetSimId(aEvent.SimId());
#endif
	}
コード例 #4
0
void SCH_VIEW::HighlightItem( EDA_ITEM *aItem, LIB_PIN* aPin )
{
    if( !aItem )
    {
        for( auto item : *m_allItems )
        {
            // Not all view items can be highlighted, only EDA_ITEMs
            // So clear flag of only EDA_ITEMs.
            auto eitem = dynamic_cast<EDA_ITEM *>( item );

            if( eitem )
            {
                eitem->ClearFlags( HIGHLIGHTED );

                if( eitem->Type() == SCH_COMPONENT_T )
                {
                    // Items inside a component (pins, fields can be highlighted.
                    static_cast<SCH_COMPONENT*>( eitem )->ClearAllHighlightFlags();
                }
            }
        }
    }
    else
    {
        if( ( aItem->Type() == SCH_COMPONENT_T ) && aPin )
        {
            static_cast<SCH_COMPONENT*>( aItem )->HighlightPin( aPin );
        }
        else
            aItem->SetFlags( HIGHLIGHTED );
    }

    // ugly but I guess OK for the moment...
    UpdateAllItems( ALL );
}
コード例 #5
0
ファイル: object.cpp プロジェクト: vseryakov/lmbox
void Object::SetChanged(int flag)
{
    if (flag) {
        SetFlags(WIDGET_CHANGED);
    } else {
        ClearFlags(WIDGET_CHANGED);
    }
}
コード例 #6
0
/// Reinitialize data
void CvTacticalAnalysisCell::Clear()
{
	ClearFlags();
	m_iDeploymentScore = 0;
	m_eTargetType = AI_TACTICAL_TARGET_NONE;
	m_iDominanceZoneID = -1;
	m_iTargetDistance = INT_MAX;
	m_bHasLOSToTarget = false;
}
コード例 #7
0
ファイル: cpu.cpp プロジェクト: Nukotan/s9xTYLmecm_mod
void S9xResetCPU ()
{		
    CPUPack.Registers.PB = 0;
    CPUPack.Registers.PC = S9xGetWord (0xFFFC);
    CPUPack.Registers.D.W = 0;
    CPUPack.Registers.DB = 0;
    CPUPack.Registers.SH = 1;
    CPUPack.Registers.SL = 0xFF;
    CPUPack.Registers.XH = 0;
    CPUPack.Registers.YH = 0;
    CPUPack.Registers.P.W = 0;

    CPUPack.ICPU.ShiftedPB = 0;
    CPUPack.ICPU.ShiftedDB = 0;
    SetFlags (MemoryFlag | IndexFlag | IRQ | Emulation);
    ClearFlags (Decimal);

    CPUPack.CPU.Flags = CPUPack.CPU.Flags & (DEBUG_MODE_FLAG | TRACE_FLAG);
    CPUPack.CPU.BranchSkip = FALSE;
    CPUPack.CPU.NMIActive = FALSE;
    CPUPack.CPU.IRQActive = FALSE;
    CPUPack.CPU.WaitingForInterrupt = FALSE;
    CPUPack.CPU.InDMA = FALSE;
    CPUPack.CPU.WhichEvent = HBLANK_START_EVENT;
    S9x_Current_HBlank_Event=S9xDoHBlankProcessing_HBLANK_START_EVENT;
    
    CPUPack.CPU.PC = NULL;
    CPUPack.CPU.PCBase = NULL;
    CPUPack.CPU.PCAtOpcodeStart = NULL;
    CPUPack.CPU.WaitAddress = NULL;
    CPUPack.CPU.WaitCounter = 0;
    CPUPack.CPU.Cycles = 0;
    old_cpu_cycles=0;
    cpu_glob_cycles=0;
    
    CPUPack.CPU.NextEvent = Settings.HBlankStart;
    CPUPack.CPU.V_Counter = 0;
    CPUPack.CPU.MemSpeed = SLOW_ONE_CYCLE;
    CPUPack.CPU.MemSpeedx2 = SLOW_ONE_CYCLE * 2;
    CPUPack.CPU.FastROMSpeed = SLOW_ONE_CYCLE;
    CPUPack.CPU.AutoSaveTimer = 0;
    CPUPack.CPU.SRAMModified = FALSE;
    // CPUPack.CPU.NMITriggerPoint = 4; // Set when ROM image loaded
    CPUPack.CPU.BRKTriggered = FALSE;
    //CPUPack.CPU.TriedInterleavedMode2 = FALSE; // Reset when ROM image loaded
    CPUPack.CPU.NMICycleCount = 0;
    CPUPack.CPU.IRQCycleCount = 0;
    S9xSetPCBase (CPUPack.Registers.PC);

#ifndef VAR_CYCLES
    CPUPack.ICPU.Speed = S9xE1M1X1;
#endif
    CPUPack.ICPU.S9xOpcodes = S9xOpcodesM1X1;
    CPUPack.ICPU.CPUExecuting = TRUE;

    S9xUnpackStatus();
}
コード例 #8
0
void CLR_RT_HeapBlock_XmlNode::Clear()
{
    CLR_RT_HeapBlock_String* empty = CLR_RT_HeapBlock_String::GetStringEmpty();

    SetName        ( empty );
    SetNamespaceURI( empty );
    SetPrefix      ( empty );
    SetLocalName   ( empty );
    ClearFlags     (       );
}
コード例 #9
0
ファイル: icp.cpp プロジェクト: JagHond/freefalcon-central
void ICPClass::NewMode(int mode)
{
	AircraftClass *playerAC = SimDriver.GetPlayerAircraft();

	//Clear our Flags
	ClearFlags();
	//Clear our strings
	ClearStrings();
	
	LastMode = mICPTertiaryMode;
	mICPTertiaryMode = mode;

	ResetSubPages();
	Manual_Input = FALSE;
	MadeInput = FALSE;

	ClearCount = 0;
	InputsMade = 0;

	playerAC->FCC->SetStptMode(FireControlComputer::FCCWaypoint);
	playerAC->FCC->waypointStepCmd = 127;

	switch (mode)
	{
	case COMM1_BUTTON:
		LeaveCNI();
		SetICPFlag(ICPClass::MODE_COMM1);
		if(VM) 
			VM->SetRadio(0);
		WhichRadio = 0;
		ExecCOMM1Mode();
		break;
	case COMM2_BUTTON:
		LeaveCNI();
		SetICPFlag(ICPClass::MODE_COMM2);
		if(VM) 
			VM->SetRadio(1);
		WhichRadio = 1;
		ExecCOMM2Mode();
		break;
	case LIST_BUTTON:
		LeaveCNI();
		SetICPFlag(ICPClass::MODE_LIST);
		SetICPFlag(ICPClass::EDIT_STPT);
		ExecLISTMode();
		break;
	case IFF_BUTTON:
		LeaveCNI();
		SetICPFlag(ICPClass::MODE_IFF);
		ExecIFFMode();
		break;
	default:
		break;
	}
}
コード例 #10
0
ファイル: cpu.cpp プロジェクト: loveemu/snsf9x
static void S9xResetCPU (void)
{
	S9xSoftResetCPU();
	Registers.SL = 0xff;
	Registers.P.W = 0;
	Registers.A.W = 0;
	Registers.X.W = 0;
	Registers.Y.W = 0;
	SetFlags(MemoryFlag | IndexFlag | IRQ | Emulation);
	ClearFlags(Decimal);
}
コード例 #11
0
/* Set the option for page 1
 * aChoice = 0 if the item has no specific option for page 1
 * > 0  if the item is only on page 1
 * < 0  if the item is not on page 1
 */
void WORKSHEET_DATAITEM::SetPage1Option( int aChoice )
{
    ClearFlags( PAGE1OPTION );

    if( aChoice > 0)
        SetFlags( PAGE1OPTION_PAGE1ONLY );

    else if( aChoice < 0)
        SetFlags( PAGE1OPTION_NOTONPAGE1 );

}
コード例 #12
0
ファイル: sch_no_connect.cpp プロジェクト: cpavlina/kicad
bool SCH_NO_CONNECT::IsSelectStateChanged( const wxRect& aRect )
{
    bool previousState = IsSelected();

    if( aRect.Contains( m_pos ) )
        SetFlags( SELECTED );
    else
        ClearFlags( SELECTED );

    return previousState != IsSelected();
}
コード例 #13
0
ファイル: sch_text.cpp プロジェクト: johnbeard/kicad
bool SCH_TEXT::IsSelectStateChanged( const wxRect& aRect )
{
    bool previousState = IsSelected();

    if( aRect.Contains( GetTextPos() ) )
        SetFlags( SELECTED );
    else
        ClearFlags( SELECTED );

    return previousState != IsSelected();
}
コード例 #14
0
ファイル: sch_bus_entry.cpp プロジェクト: cpavlina/kicad
bool SCH_BUS_ENTRY_BASE::IsSelectStateChanged( const wxRect& aRect )
{
    bool previousState = IsSelected();

    // If either end of the bus entry is inside the selection rectangle, the entire
    // bus entry is selected.  Bus entries have a fixed length and angle.
    if( aRect.Contains( m_pos ) || aRect.Contains( m_End() ) )
        SetFlags( SELECTED );
    else
        ClearFlags( SELECTED );

    return previousState != IsSelected();
}
コード例 #15
0
ファイル: sch_sheet.cpp プロジェクト: cpavlina/kicad
bool SCH_SHEET::IsSelectStateChanged( const wxRect& aRect )
{
    bool previousState = IsSelected();

    EDA_RECT boundingBox = GetBoundingBox();

    if( aRect.Intersects( boundingBox ) )
        SetFlags( SELECTED );
    else
        ClearFlags( SELECTED );

    return previousState != IsSelected();
}
コード例 #16
0
ファイル: object.cpp プロジェクト: vseryakov/lmbox
int DynamicObject::pset_Flags(Variant value)
{
    char *ptr, *str = value;
    for (int i = 0; mapFlags[i].name; i ++) {
        if ((ptr = strstr(str, mapFlags[i].name))) {
            if (ptr > str && *(ptr-1) == '!') {
                ClearFlags(mapFlags[i].flags);
            } else {
                SetFlags(mapFlags[i].flags);
            }
        }
    }
    return 0;
}
コード例 #17
0
ファイル: sch_field.cpp プロジェクト: james-sakalaukus/kicad
void SCH_FIELD::Place( SCH_EDIT_FRAME* frame, wxDC* DC )
{
    frame->GetCanvas()->SetMouseCapture( NULL, NULL );

    SCH_COMPONENT* component = (SCH_COMPONENT*) GetParent();

    // save old cmp in undo list
    frame->SaveUndoItemInUndoList( component );

    Draw( frame->GetCanvas(), DC, wxPoint( 0, 0 ), GR_DEFAULT_DRAWMODE );
    ClearFlags();
    frame->GetScreen()->SetCurItem( NULL );
    frame->OnModify();
}
コード例 #18
0
/// Reinitialize data
void CvTacticalAnalysisCell::Clear()
{
	ClearFlags();
	m_pEnemyMilitary = NULL;
	m_pEnemyCivilian = NULL;
	m_pNeutralMilitary = NULL;
	m_pNeutralCivilian = NULL;
	m_pFriendlyMilitary = NULL;
	m_pFriendlyCivilian = NULL;
	m_iDefenseModifier = 0;
	m_iDeploymentScore = 0;
	m_eTargetType = AI_TACTICAL_TARGET_NONE;
	m_iDominanceZoneID = -1;
}
コード例 #19
0
ファイル: cpu.c プロジェクト: Carlanga/CATSFC-libretro
void S9xResetCPU()
{
   ICPU.Registers.PB = 0;
   ICPU.Registers.PC = S9xGetWord(0xFFFC);
   ICPU.Registers.D.W = 0;
   ICPU.Registers.DB = 0;
   ICPU.Registers.SH = 1;
   ICPU.Registers.SL = 0xFF;
   ICPU.Registers.XH = 0;
   ICPU.Registers.YH = 0;
   ICPU.Registers.P.W = 0;

   ICPU.ShiftedPB = 0;
   ICPU.ShiftedDB = 0;
   SetFlags(MemoryFlag | IndexFlag | IRQ | Emulation);
   ClearFlags(Decimal);

   CPU.Flags = CPU.Flags & (DEBUG_MODE_FLAG | TRACE_FLAG);
   CPU.BranchSkip = false;
   CPU.NMIActive = false;
   CPU.IRQActive = false;
   CPU.WaitingForInterrupt = false;
   CPU.InDMA = false;
   CPU.WhichEvent = HBLANK_START_EVENT;
   CPU.PC = NULL;
   CPU.PCBase = NULL;
   CPU.PCAtOpcodeStart = NULL;
   CPU.WaitAddress = NULL;
   CPU.WaitCounter = 0;
   CPU.Cycles = 0;
   CPU.NextEvent = Settings.HBlankStart;
   CPU.V_Counter = 0;
   CPU.MemSpeed = SLOW_ONE_CYCLE;
   CPU.MemSpeedx2 = SLOW_ONE_CYCLE * 2;
   CPU.FastROMSpeed = SLOW_ONE_CYCLE;
   CPU.AutoSaveTimer = 0;
   CPU.SRAMModified = false;
   // CPU.NMITriggerPoint = 4; // Set when ROM image loaded
   CPU.BRKTriggered = false;
   //CPU.TriedInterleavedMode2 = false; // Reset when ROM image loaded
   CPU.NMICycleCount = 0;
   CPU.IRQCycleCount = 0;
   S9xSetPCBase(ICPU.Registers.PC);

   ICPU.S9xOpcodes = S9xOpcodesE1;
   ICPU.CPUExecuting = true;

   S9xUnpackStatus();
}
コード例 #20
0
ファイル: mm.cpp プロジェクト: joedrago/mirror
void Parser::ProcessStatement()
{
    if(IsSet(FLAG_UNOPENED|FLAG_FRIEND))
    {
        int size = mScopes.size();
        if(size > 0)
        {
            Scope *pScope = mScopes[size-1];

            // Most likely this is a pre-declare or a friend declare
            //printf("Throwing out uninteresting scope: %s\n", pScope->mpName);
            PopScope();
        }
    }
    else if(!IsSet(FLAG_PAREN))
    {
        int ssize = mScopes.size();
        if(ssize > 0)
        {
            Scope *pScope = mScopes[ssize-1];
            if(pScope->isClass)
            {
                int isize = mIdentifiers.size();
                if(isize >= 2)
                {
                    Identifier *varType = mIdentifiers[isize-2];
                    Identifier *varName = mIdentifiers[isize-1];
                    int flags = 0;
                    if(varType->isBracketed && isize > 2)
                    {
                        Identifier *templateType = mIdentifiers[isize-3];
                        if(!strcmp(templateType->mpName, "std::vector"))
                        {
                            flags |= MacroGenerator::FLAG_ARRAY;
                        }
                    }

                    if(!mIgnore)
                        mpGenerator->AddMember(pScope->mpName, varType->mpName, varName->mpName, varType->starCount, flags);
                }
            }
        }
    }

    mIdentifiers.clear();
    ClearFlags();
}
コード例 #21
0
UActorComponent* UInheritableComponentHandler::CreateOverridenComponentTemplate(FComponentKey Key)
{
	for (int32 Index = 0; Index < Records.Num(); ++Index)
	{
		FComponentOverrideRecord& Record = Records[Index];
		if (Record.ComponentKey.Match(Key))
		{
			if (Record.ComponentTemplate)
			{
				return Record.ComponentTemplate;
			}
			Records.RemoveAtSwap(Index);
			break;
		}
	}

	auto BestArchetype = FindBestArchetype(Key);
	if (!BestArchetype)
	{
		UE_LOG(LogBlueprint, Warning, TEXT("CreateOverridenComponentTemplate '%s': cannot find archetype for component '%s' from '%s'"),
			*GetPathNameSafe(this), *Key.GetSCSVariableName().ToString(), *GetPathNameSafe(Key.GetComponentOwner()));
		return NULL;
	}
	ensure(Cast<UBlueprintGeneratedClass>(GetOuter()));
	auto NewComponentTemplate = NewObject<UActorComponent>(
		GetOuter(), BestArchetype->GetClass(), BestArchetype->GetFName(), RF_ArchetypeObject | RF_Public | RF_InheritableComponentTemplate, BestArchetype);

	// HACK: NewObject can return a pre-existing object which will not have been initialized to the archetype.  When we remove the old handlers, we mark them pending
	//       kill so we can identify that situation here (see UE-13987/UE-13990)
	if (NewComponentTemplate->IsPendingKill())
	{
		NewComponentTemplate->ClearFlags(RF_PendingKill);
		UEngine::FCopyPropertiesForUnrelatedObjectsParams CopyParams;
		CopyParams.bDoDelta = false;
		UEngine::CopyPropertiesForUnrelatedObjects(BestArchetype, NewComponentTemplate, CopyParams);
	}

	FComponentOverrideRecord NewRecord;
	NewRecord.ComponentKey = Key;
	NewRecord.ComponentTemplate = NewComponentTemplate;
	Records.Add(NewRecord);

	return NewComponentTemplate;
}
コード例 #22
0
ファイル: ScenarioBallRL.cpp プロジェクト: xbpeng/NNTest
void cScenarioBallRL::NewCycleUpdate()
{
	if (EnableTraining())
	{
		// finish recording tuple from previous cycle
		RecordState(mCurrTuple.mStateEnd);
		RecordEndFlags(mCurrTuple);
		mCurrTuple.mReward = CalcReward(mCurrTuple);

		// do something with the tuple
		if (!mFirstCycle)
		{
			mTupleBuffer[mNumTuples] = mCurrTuple;
			++mNumTuples;

			if (mNumTuples == static_cast<int>(mTupleBuffer.size()))
			{
				Train();

				double exp_rate = GetExpRate();
				double exp_temp = GetExpTemp();
				auto& ctrl = mBall.GetController();
				ctrl->SetExpRate(exp_rate);
				ctrl->SetExpTemp(exp_temp);

				printf("\n");
				printf("Exp Rate: %.3f\n", exp_rate);
				printf("Exp Temp: %.3f\n", exp_temp);
			}
		}
		
		// start recording new tuple
		mCurrTuple.mStateBeg = mCurrTuple.mStateEnd;
		RecordAction(mCurrTuple.mAction);
		mCurrTuple.mActionLikelihood = GetActionLikelihood();

		ClearFlags(mCurrTuple);
		RecordBegFlags(mCurrTuple);

		mFirstCycle = false;
	}
}
コード例 #23
0
ファイル: icp.cpp プロジェクト: JagHond/freefalcon-central
void ICPClass::ChangeToCNI(void)
{
	AircraftClass *playerAC = SimDriver.GetPlayerAircraft();

	ResetSubPages();
	if (playerAC && playerAC->FCC)
	{
		playerAC->FCC->SetStptMode(FireControlComputer::FCCWaypoint);
		playerAC->FCC->waypointStepCmd = 127;
	}
	ClearFlags();
	ClearStrings();
	ClearString();
	ClearDigits();
	ClearCount = 0;
	InputsMade = 0;
	SetICPFlag(ICPClass::MODE_CNI);
	SetICPFlag(ICPClass::EDIT_STPT);
	LaserLine = 1;
}
コード例 #24
0
void UAnimSet::PostLoad()
{
	Super::PostLoad();

#if WITH_EDITORONLY_DATA
	// Make sure that AnimSets (and sequences) within level packages are not marked as standalone.
	if(GetOutermost()->ContainsMap() && HasAnyFlags(RF_Standalone))
	{
		ClearFlags(RF_Standalone);

		for(int32 i=0; i<Sequences.Num(); i++)
		{
			UAnimSequence* Seq = Sequences[i];
			if(Seq)
			{
				Seq->ClearFlags(RF_Standalone);
			}
		}
	}
#endif	//#if WITH_EDITORONLY_DATA
}	
コード例 #25
0
ファイル: IFsh1.C プロジェクト: EPLab/Eco_AccBabyMonitor
/*
** ===================================================================
**     Method      :  WriteWord (bean IntFLASH)
**
**     Description :
**         This method is internal. It is used by Processor Expert
**         only.
** ===================================================================
*/
static byte WriteWord(dword Addr,word Data16)
{
  EnterCritical();                     /* Enter critical section */
  ClearFlags();                        /* Clear all flags */
  if (FSTAT_CBEIF == 0) {              /* Is command buffer full ? */
    ExitCritical();                    /* Exit critical section */
    return ERR_BUSY;                   /* If yes then error */
  }
  *(word *far) Addr = Data16;          /* Array address and program data */
  FCMD = 32;                           /* Word program command */
  FSTAT = 128;                         /* Clear flag command buffer empty */
  if ((FSTAT_PVIOL == 1)||(FSTAT_ACCERR == 1)) { /* Is protection violation or acces error detected ? */
    ExitCritical();                    /* Exit critical section */
    return ERR_NOTAVAIL;               /* If yes then error */
  }
  while (FSTAT_CBEIF == 0);            /* Wait to buffer empty */
  while (FSTAT_CCIF == 0);             /* Wait to command complete */
  ExitCritical();                      /* Exit critical section */
  if (*(word *far) Addr != Data16)     /* Was attempt to write data to the given address errorneous? */
    return ERR_VALUE;                  /* If yes then error */
 return ERR_OK;                        /* OK */
}
コード例 #26
0
ファイル: mission.c プロジェクト: ARTSAT/INVADER
/*************************************************
        ミッションテレメトリ初期化関数
*************************************************/
unsigned char InitMissionTelemetry(void)
{
	ClearFlags(flag_misst);
	
	return 1;
}
int ste_adm_hw_handler_u8500(sqlite3* db_p, hw_handler_dev_next_fp_t dev_next_fp, hw_handler_dev_to_dev_next_fp_t dev_next_d2d_fp, fadeSpeed_t fadeSpeed)
{
    SRV_DBG_ASSERT_IS_NOT_WORKER_THREAD;
    SRV_DBG_ASSERT_IS_SERIALIZED_REQUEST;

    const char* name = NULL;
    char* dev_names = NULL;
    int ret = 0;
    int ret_func = STE_ADM_RES_ALSA_ERROR;
    char *command = NULL;
    char* data = NULL;
    int is_input, nDev_combo, idx_data;
    bool activeFMRx = false;
    bool activeFMTx = false;
    bool activeOutputDev = false;
    bool activeInputDev = false;
    bool activeInputDev_MIC = false;
    const char* dev_top = NULL;
    bool controls_open = false;

    ALOG_INFO("%s: Enter.", __func__);

    // Make sure that the settings that is written from ADM is not overwritten
    // by any sink or source
    audio_hal_alsa_set_ignore_defaults(true);

    // Create SQL-statement
    ClearFlags();
    command = malloc(1024 * sizeof(char));
    memset(command, 0, 1024);

    nDev_combo = 0;
    strcat(command, "SELECT * FROM HW_Settings_Combo WHERE (Codec = '");
    strcat(command, codec_name_ab8500_p);
    strcat(command, "')");
    while (dev_next_fp(&name) == 0) {
        if (strcmp(name, STE_ADM_DEVICE_STRING_FMRX) == 0) {
            activeFMRx = true;
        } else if (strcmp(name, STE_ADM_DEVICE_STRING_FMTX) == 0) {
            activeFMTx = true;
        } else if (is_asoc_device(name)) {
            if (adm_db_io_info(name, &is_input) != STE_ADM_RES_OK) {
                ALOG_INFO("%s: Warning: Device direction not found for device %s!", __func__, name);
            } else {
                if (is_input == 1) {
                    activeInputDev = true;
                    if (strcmp(name, STE_ADM_DEVICE_STRING_MIC) == 0) {
                        activeInputDev_MIC = true;
                    }
                } else {
                    activeOutputDev = true;
                }
            }
            UpdateFlags(name);
            nDev_combo++;
            strcat(command, " AND ('");
            strcat(command, name);
            strcat(command, "' IN (Dev1, Dev2, Dev3, Dev4, Dev5, Dev6)) ");
        }
    }

    // Become worker thread before opening ALSA controls (to avoid having the
    // "normal-thread" lock at the same time as the ALSA lock)
    srv_become_worker_thread();

    if (audio_hal_alsa_open_controls(card_name_p) < 0) {
        ALOG_ERR("%s: ERROR: Unable to open ALSA-card '%s'!\n", __func__, card_name_p);
        goto cleanup_worker;
    }
    controls_open = true;

    if (nDev_combo == 0) {
        strcat(command, " AND (Dev1 ='')");
    }
    strcat(command, " ORDER BY rowid LIMIT 1");

    /* Combo-data */
    idx_data = GetComboDataIndex(db_p, command);
    if (idx_data == -1) {
        ALOG_INFO("%s: WARNING: Data-index not found (idx_data = %d)!", __func__, idx_data);
        ret_func = STE_ADM_RES_OK;
        goto cleanup_worker;
    }

    data = GetData(db_p, idx_data);
    if (data == NULL) {
        ALOG_ERR("%s: ERROR: Failed to get data with index = %d!", __func__, idx_data);
        goto cleanup_worker;
    }

    ALOG_INFO("%s: Write HW-settings from file to ALSA-interface.", __func__);
    ret = audio_hal_alsa_set_controls_cfg((const char*)data);
    if (ret < 0) {
        ALOG_ERR("%s: ERROR: Failed to write HW-settings! ste_adm_hw_handler_alsa_set_controls returned %d.", __func__, ret);
        goto cleanup_worker;
    }

    if (data != NULL) {
        free(data);
        data = NULL;
    }

    /* Device-data */
    while (dev_next_fp(&name) == 0) {
        if (strlen(name) == 0)
            continue;

        ret = adm_db_toplevel_mapping_get(name, &dev_top);
        if (ret < 0) {
            ALOG_INFO("%s: ERROR: Unable to find top-level device for '%s'!\n", __func__, name);
            ret_func = ret;
            goto cleanup_worker;
        }
        ALOG_INFO("%s: '%s' maps to '%s'\n", __func__, name, dev_top);

        idx_data = GetDeviceDataIndex(db_p, dev_top);
        if (idx_data == -1) {
            ALOG_INFO("%s: No top-level device-specific data exists for '%s'!", __func__, dev_top);
            continue;
        }

        if (data != NULL) {
            free(data);
            data = NULL;
        }
        data = GetData(db_p, idx_data);
        if (data == NULL) {
            ALOG_ERR("%s: ERROR: Failed to get data with index = %d!", __func__, idx_data);
            goto cleanup_worker;
        }

        // Set Digital Gain Fade Speed Switch
        audio_hal_alsa_set_control("Digital Gain Fade Speed Switch", 0, fadeSpeed);

        ALOG_INFO("%s: Write HW-settings for device '%s'.", __func__, dev_top);
        ret = audio_hal_alsa_set_controls_cfg((const char*)data);
        if (ret < 0) {
            ALOG_ERR("%s: ERROR: Failed to write HW-settings! ste_adm_hw_handler_alsa_set_controls returned %d.", __func__, ret);
            goto cleanup_worker;
        }
    };

    /* Appending device to device connections */
    AppendD2D(db_p, dev_next_d2d_fp);
    ExecuteFlags();

    /* FM-devices */
    if (activeFMRx || activeFMTx) {
        ALOG_INFO("%s: FM-device active!", __func__);

        if (activeFMRx) {
            configure_fm_t config;

            if (FM_TYPE_DIGITAL == fmrx_type) {
                ALOG_INFO("%s: FMRx digital active! Setting DA-from-slot and AD-to-slot mapping...", __func__);

                config.type = AUDIO_HAL_DIGITAL;

                audio_hal_alsa_set_control("Digital Interface AD 5 Loopback Switch", 0, 1);
                audio_hal_alsa_set_control("Digital Interface AD 6 Loopback Switch", 0, 1);
                audio_hal_alsa_set_control("Digital Interface AD To Slot 6 Map", 0, 4); // REG_ADSLOTSELX_AD_OUT5_TO_SLOT_EVEN
                audio_hal_alsa_set_control("Digital Interface AD To Slot 7 Map", 0, 5); // REG_ADSLOTSELX_AD_OUT6_TO_SLOT_ODD
                audio_hal_alsa_set_control("Digital Interface DA 7 From Slot Map", 0, 24); // Slot 24 -> DA_IN7
                audio_hal_alsa_set_control("Digital Interface DA 8 From Slot Map", 0, 25); // Slot 25 -> DA_IN8
            } else {
                ALOG_INFO("%s: FMRx analog active! Setting DA-from-slot and AD-to-slot mapping...", __func__);

                config.type = AUDIO_HAL_ANALOG;

                audio_hal_alsa_set_control("Digital Interface AD 5 Loopback Switch", 0, 0);
                audio_hal_alsa_set_control("Digital Interface AD 6 Loopback Switch", 0, 0);
                audio_hal_alsa_set_control("Digital Interface AD To Slot 6 Map", 0, 0);
                audio_hal_alsa_set_control("Digital Interface AD To Slot 7 Map", 0, 1);
                audio_hal_alsa_set_control("AD 1 Select Capture Route", 0, 0);
                audio_hal_alsa_set_control("AD 2 Select Capture Route", 0, 0);
                audio_hal_alsa_set_control("Mic 2 or LINR Select Capture Route", 0, 1);
                audio_hal_alsa_set_control("LineIn Left", 0, 1);
                audio_hal_alsa_set_control("LineIn Right", 0, 1);
            }
            audio_hal_configure_channel(AUDIO_HAL_CHANNEL_FMRX, &config);

        } else if (activeFMTx) {
            ALOG_INFO("%s: FMTx active! Setting DA-from-slot and AD-to-slot mapping...", __func__);
            audio_hal_alsa_set_control("Digital Interface AD 5 Loopback Switch", 0, 1);
            audio_hal_alsa_set_control("Digital Interface AD 6 Loopback Switch", 0, 1);
            audio_hal_alsa_set_control("Digital Interface AD To Slot 16 Map", 0, 4); // REG_ADSLOTSELX_AD_OUT5_TO_SLOT_EVEN
            audio_hal_alsa_set_control("Digital Interface AD To Slot 17 Map", 0, 5); // REG_ADSLOTSELX_AD_OUT6_TO_SLOT_ODD
            audio_hal_alsa_set_control("Digital Interface DA 7 From Slot Map", 0, 14); // Slot 14 -> DA_IN7
            audio_hal_alsa_set_control("Digital Interface DA 8 From Slot Map", 0, 15); // Slot 15 -> DA_IN8
        }
    }

    /* Input-devices */
    if (activeInputDev) {
        int ADSel_slot0 = 2; // REG_ADSLOTSELX_AD_OUT3_TO_SLOT_EVEN
        int ADSel_slot1 = 1; // REG_ADSLOTSELX_AD_OUT2_TO_SLOT_ODD
        ALOG_INFO("%s: Input-device active!", __func__);
        if (activeInputDev_MIC) {
            int nChannels = GetMICChannelCount(db_p, STE_ADM_DEVICE_STRING_MIC);
            if (mic_type == MICROPHONE_TYPE_DIGITAL) {
                ALOG_INFO("%s: Device MIC actice (mic_type = MICROPHONE_TYPE_DIGITAL, nChannels = %d).", __func__, nChannels);
                ADSel_slot0 = 0;
                ADSel_slot1 = 1;
                audio_hal_alsa_set_control("AD 1 Select Capture Route", 0, 1); // DMic 1
                if (nChannels > 1)
                    audio_hal_alsa_set_control("AD 2 Select Capture Route", 0, 1); // DMic 2
            } else {
                ALOG_INFO("%s: Device MIC active (mic_type = MICROPHONE_TYPE_ANALOG, nChannels = %d).", __func__, nChannels);
                audio_hal_alsa_set_control("AD 3 Select Capture Route", 0, 0); // Mic 1
                if (nChannels > 1) {
                    audio_hal_alsa_set_control("AD 2 Select Capture Route", 0, 0); // LineIn (Mic 2)
                    audio_hal_alsa_set_control("Mic 2 or LINR Select Capture Route", 0, 0); // Mic 2
                } else {
                    // Force dual mono
                    ADSel_slot0 = 2; // REG_ADSLOTSELX_AD_OUT3_TO_SLOT_EVEN
                    ADSel_slot1 = 2; // REG_ADSLOTSELX_AD_OUT3_TO_SLOT_ODD
                }
            }
            audio_hal_alsa_set_control("DMic 1", 0, mic_type == MICROPHONE_TYPE_DIGITAL);
            audio_hal_alsa_set_control("DMic 2", 0, (mic_type == MICROPHONE_TYPE_DIGITAL) && (nChannels > 1));
            audio_hal_alsa_set_control("Mic 1", 0, mic_type != MICROPHONE_TYPE_DIGITAL);
            audio_hal_alsa_set_control("Mic 2", 0, (mic_type != MICROPHONE_TYPE_DIGITAL) && (nChannels > 1));
        }
        audio_hal_alsa_set_control("Digital Interface AD To Slot 0 Map", 0, ADSel_slot0);
        audio_hal_alsa_set_control("Digital Interface AD To Slot 1 Map", 0, ADSel_slot1);
    }

    /* Output-devices */
    if (activeOutputDev) {
        ALOG_INFO("%s: Output-device active! Setting DA from Slot mapping...", __func__);
        audio_hal_alsa_set_control("Digital Interface DA 1 From Slot Map", 0, 8); // Slot 8 -> DA_IN1
        audio_hal_alsa_set_control("Digital Interface DA 2 From Slot Map", 0, 9); // Slot 9 -> DA_IN2
        audio_hal_alsa_set_control("Digital Interface DA 3 From Slot Map", 0, 10); // Slot 10 -> DA_IN3
        audio_hal_alsa_set_control("Digital Interface DA 4 From Slot Map", 0, 11); // Slot 11 -> DA_IN4
        audio_hal_alsa_set_control("Digital Interface DA 5 From Slot Map", 0, 12); // Slot 12 -> DA_IN5
        audio_hal_alsa_set_control("Digital Interface DA 6 From Slot Map", 0, 13); // Slot 13 -> DA_IN6
    }

    ret_func = STE_ADM_RES_OK;

cleanup_worker:
    if (controls_open) {
        audio_hal_alsa_close_controls();
    }
    srv_become_normal_thread();

    if (command != NULL) free(command);
    if (dev_names != NULL) free(dev_names);
    if (data != NULL) free(data);

    ALOG_INFO("%s: Exit (%s).", __func__, (ret_func == STE_ADM_RES_OK) ? "OK" : "ERROR");

    return ret_func;
}