EXPORT_CDECL(bool) IsTaskbarWindow(HWND window) { if (!IsWindow(window) || !IsWindowVisible(window)) { return false; } LONG_PTR exStyle = GetWindowLongPtr(window, GWL_EXSTYLE); return CHECKFLAG(exStyle, WS_EX_APPWINDOW) || GetParent(window) == nullptr && GetWindow(window, GW_OWNER) == nullptr && !CHECKFLAG(exStyle, WS_EX_TOOLWINDOW) && GetWindowTextLength(window) != 0; }
void TaskButton::ToggleAlwaysOnTop() { if (CHECKFLAG(GetWindowLongPtr(mWindow, GWL_EXSTYLE), WS_EX_TOPMOST)) { SetWindowPos(mWindow, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); } else { SetWindowPos(mWindow, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); } }
VOID VioStorVQUnlock( IN PVOID DeviceExtension, IN ULONG MessageID, IN PSTOR_LOCK_HANDLE LockHandle, IN BOOLEAN isr ) { PADAPTER_EXTENSION adaptExt; RhelDbgPrint(TRACE_LEVEL_VERBOSE, ("--->%s MessageID = %d\n", __FUNCTION__, MessageID)); adaptExt = (PADAPTER_EXTENSION)DeviceExtension; if (!adaptExt->msix_enabled) { if (!isr) { StorPortReleaseSpinLock(DeviceExtension, LockHandle); } } else { if ((adaptExt->num_queues == 1) || (!CHECKFLAG(adaptExt->perfFlags, STOR_PERF_CONCURRENT_CHANNELS))) { if (!isr) { StorPortReleaseMSISpinLock(DeviceExtension, (adaptExt->msix_one_vector ? 0 : MessageID), LockHandle->Context.OldIrql); } } else { NT_ASSERT(MessageID > 0); NT_ASSERT(MessageID <= adaptExt->num_queues); StorPortReleaseSpinLock(DeviceExtension, LockHandle); } } RhelDbgPrint(TRACE_LEVEL_VERBOSE, ("<---%s MessageID = %d\n", __FUNCTION__, MessageID)); }
void TaskButton::Redraw(DWORD parts) { mPane->Lock(); if (CHECKFLAG(parts, Part::Text)) { wchar_t windowText[256]; GetWindowText(mWindow, windowText, 256); mPane->SetText(windowText); } if (CHECKFLAG(parts, Part::Icon)) { mIconPainter->SetImage(nCore::GetWindowIcon(mWindow, 32)); mPane->Repaint(&mIconPosition); } if (CHECKFLAG(parts, Part::OverlayIcon)) { mOverlayIconPainter->SetImage(mTaskData.overlayIcon); mPane->Repaint(&mOverlayIconPosition); } mPane->Unlock(); }
BOOLEAN SendSRB( IN PVOID DeviceExtension, IN PSRB_TYPE Srb ) { PADAPTER_EXTENSION adaptExt = (PADAPTER_EXTENSION)DeviceExtension; PSRB_EXTENSION srbExt = SRB_EXTENSION(Srb); PVOID va = NULL; ULONGLONG pa = 0; ULONG QueueNumber = 0; ULONG OldIrql = 0; ULONG MessageId = 0; BOOLEAN kick = FALSE; STOR_LOCK_HANDLE LockHandle = { 0 }; ULONG status = STOR_STATUS_SUCCESS; ENTER_FN(); SET_VA_PA(); if (adaptExt->num_queues > 1) { QueueNumber = adaptExt->cpu_to_vq_map[srbExt->cpu] + VIRTIO_SCSI_REQUEST_QUEUE_0; MessageId = QueueNumber + 1; } else { QueueNumber = VIRTIO_SCSI_REQUEST_QUEUE_0; } VioScsiAcquireSpinLock(DeviceExtension, MessageId, &LockHandle); if (virtqueue_add_buf(adaptExt->vq[QueueNumber], &srbExt->sg[0], srbExt->out, srbExt->in, &srbExt->cmd, va, pa) >= 0){ kick = TRUE; } else { RhelDbgPrint(TRACE_LEVEL_ERROR, ("%s Can not add packet to queue.\n", __FUNCTION__)); //FIXME } VioScsiReleaseSpinLock(DeviceExtension, MessageId, &LockHandle); if (kick == TRUE) { virtqueue_kick(adaptExt->vq[QueueNumber]); } if (adaptExt->num_queues > 1) { if (CHECKFLAG(adaptExt->perfFlags, STOR_PERF_OPTIMIZE_FOR_COMPLETION_DURING_STARTIO)) { // ProcessQueue(DeviceExtension, MessageId, FALSE); } } EXIT_FN(); return kick; }
BOOLEAN RhelDoReadWrite(PVOID DeviceExtension, PSRB_TYPE Srb) { PADAPTER_EXTENSION adaptExt = (PADAPTER_EXTENSION)DeviceExtension; PSRB_EXTENSION srbExt = SRB_EXTENSION(Srb); PVOID va = NULL; ULONGLONG pa = 0ULL; ULONG QueueNumber = 0; ULONG OldIrql = 0; ULONG MessageId = 0; BOOLEAN result = FALSE; bool notify = FALSE; STOR_LOCK_HANDLE LockHandle = { 0 }; ULONG status = STOR_STATUS_SUCCESS; struct virtqueue *vq = NULL; SET_VA_PA(); if (adaptExt->num_queues > 1) { STARTIO_PERFORMANCE_PARAMETERS param; param.Size = sizeof(STARTIO_PERFORMANCE_PARAMETERS); status = StorPortGetStartIoPerfParams(DeviceExtension, (PSCSI_REQUEST_BLOCK)Srb, ¶m); if (status == STOR_STATUS_SUCCESS && param.MessageNumber != 0) { MessageId = param.MessageNumber; QueueNumber = MessageId - 1; RhelDbgPrint(TRACE_LEVEL_INFORMATION, ("%s srb %p, cpu %d :: QueueNumber %lu, MessageNumber %lu, ChannelNumber %lu.\n", __FUNCTION__, Srb, srbExt->cpu, QueueNumber, param.MessageNumber, param.ChannelNumber)); } else { RhelDbgPrint(TRACE_LEVEL_ERROR, ("%s StorPortGetStartIoPerfParams failed srb %p cpu %d status 0x%x.\n", __FUNCTION__, Srb, srbExt->cpu, status)); QueueNumber = 0; MessageId = 1; } } else { QueueNumber = 0; MessageId = 1; } srbExt->MessageID = MessageId; vq = adaptExt->vq[QueueNumber]; RhelDbgPrint(TRACE_LEVEL_VERBOSE, ("<--->%s : QueueNumber 0x%x vq = %p\n", __FUNCTION__, QueueNumber, vq)); VioStorVQLock(DeviceExtension, MessageId, &LockHandle, FALSE); if (virtqueue_add_buf(vq, &srbExt->vbr.sg[0], srbExt->out, srbExt->in, &srbExt->vbr, va, pa) >= 0) { notify = virtqueue_kick_prepare(vq); VioStorVQUnlock(DeviceExtension, MessageId, &LockHandle, FALSE); #ifdef DBG InterlockedIncrement((LONG volatile*)&adaptExt->inqueue_cnt); #endif result = TRUE; } else { VioStorVQUnlock(DeviceExtension, MessageId, &LockHandle, FALSE); RhelDbgPrint(TRACE_LEVEL_FATAL, ("%s Can not add packet to queue %d.\n", __FUNCTION__, QueueNumber)); StorPortBusy(DeviceExtension, 2); } if (notify) { virtqueue_notify(vq); } #if (NTDDI_VERSION > NTDDI_WIN7) if (adaptExt->num_queues > 1) { if (CHECKFLAG(adaptExt->perfFlags, STOR_PERF_OPTIMIZE_FOR_COMPLETION_DURING_STARTIO)) { VioStorCompleteRequest(DeviceExtension, MessageId, FALSE); } } #endif return result; }
void TrayIcon::Modify(LPLSNOTIFYICONDATA nid) { if (CHECKFLAG(nid->uFlags, NIF_ICON)) { mIconPainter->SetImage(nid->hIcon); mPane->Repaint(nullptr); } }
BOOLEAN SendSRB( IN PVOID DeviceExtension, IN PSCSI_REQUEST_BLOCK Srb ) { PADAPTER_EXTENSION adaptExt = (PADAPTER_EXTENSION)DeviceExtension; PSRB_EXTENSION srbExt = (PSRB_EXTENSION)Srb->SrbExtension; PVOID va = NULL; ULONGLONG pa = 0; ULONG QueueNumber = 0; ULONG OldIrql = 0; ULONG MessageId = 0; BOOLEAN kick = FALSE; STOR_LOCK_HANDLE LockHandle = { 0 }; ULONG status = STOR_STATUS_SUCCESS; ENTER_FN(); SET_VA_PA(); RhelDbgPrint(TRACE_LEVEL_INFORMATION, ("Srb %p issued on %d::%d QueueNumber %d\n", Srb, srbExt->procNum.Group, srbExt->procNum.Number, QueueNumber)); if (adaptExt->num_queues > 1) { QueueNumber = adaptExt->cpu_to_vq_map[srbExt->procNum.Number]; MessageId = QueueNumber + 1; if (CHECKFLAG(adaptExt->perfFlags, STOR_PERF_OPTIMIZE_FOR_COMPLETION_DURING_STARTIO)) { ProcessQueue(DeviceExtension, MessageId, FALSE); } // status = StorPortAcquireMSISpinLock(DeviceExtension, MessageId, &OldIrql); if (status != STOR_STATUS_SUCCESS) { RhelDbgPrint(TRACE_LEVEL_ERROR, ("%s StorPortAcquireMSISpinLock returned status 0x%x\n", __FUNCTION__, status)); } } else { QueueNumber = VIRTIO_SCSI_REQUEST_QUEUE_0; StorPortAcquireSpinLock(DeviceExtension, InterruptLock, NULL, &LockHandle); } if (virtqueue_add_buf(adaptExt->vq[QueueNumber], &srbExt->sg[0], srbExt->out, srbExt->in, &srbExt->cmd, va, pa) >= 0){ kick = TRUE; } else { RhelDbgPrint(TRACE_LEVEL_WARNING, ("%s Cant add packet to queue.\n", __FUNCTION__)); //FIXME } if (adaptExt->num_queues > 1) { // status = StorPortReleaseMSISpinLock(DeviceExtension, MessageId, OldIrql); if (status != STOR_STATUS_SUCCESS) { RhelDbgPrint(TRACE_LEVEL_ERROR, ("%s StorPortReleaseMSISpinLock returned status 0x%x\n", __FUNCTION__, status)); } } else { StorPortReleaseSpinLock(DeviceExtension, &LockHandle); } if (kick == TRUE) { virtqueue_kick(adaptExt->vq[QueueNumber]); } return kick; EXIT_FN(); }
void S9xMainLoop (void) { struct SCPUState *cpu = &CPU; struct SICPU *icpu = &ICPU; struct SIAPU *iapu = &IAPU; struct SAPU *apu = &APU; struct SRegisters *reg = &Registers; struct SAPURegisters *areg = &APURegisters; for (;;) { APU_EXECUTE (); if (cpu->Flags) { if (cpu->Flags & NMI_FLAG) { if (--cpu->NMICycleCount == 0) { cpu->Flags &= ~NMI_FLAG; if (cpu->WaitingForInterrupt) { cpu->WaitingForInterrupt = FALSE; ++cpu->PC; } S9xOpcode_NMI (); } } #ifdef DEBUGGER if ((cpu->Flags & BREAK_FLAG) && !(cpu->Flags & SINGLE_STEP_FLAG)) { for (int Break = 0; Break != 6; Break++) { if (S9xBreakpoint[Break].Enabled && S9xBreakpoint[Break].Bank == Registers.PB && S9xBreakpoint[Break].Address == cpu->PC - cpu->PCBase) { if (S9xBreakpoint[Break].Enabled == 2) S9xBreakpoint[Break].Enabled = TRUE; else cpu->Flags |= DEBUG_MODE_FLAG; } } } #endif CHECK_SOUND (); if (cpu->Flags & IRQ_PENDING_FLAG) { if (cpu->IRQCycleCount == 0) { if (cpu->WaitingForInterrupt) { cpu->WaitingForInterrupt = FALSE; cpu->PC++; } if (cpu->IRQActive) // if (cpu->IRQActive && !Settings.DisableIRQ) { if (!CHECKFLAG (IRQ)) S9xOpcode_IRQ (); } else cpu->Flags &= ~IRQ_PENDING_FLAG; } else cpu->IRQCycleCount--; } #ifdef DEBUGGER if (cpu->Flags & DEBUG_MODE_FLAG) break; #endif if (cpu->Flags & SCAN_KEYS_FLAG) break; #ifdef DEBUGGER if (cpu->Flags & TRACE_FLAG) S9xTrace (); if (cpu->Flags & SINGLE_STEP_FLAG) { cpu->Flags &= ~SINGLE_STEP_FLAG; cpu->Flags |= DEBUG_MODE_FLAG; } #endif } //if (CPU.Flags) #ifdef CPU_SHUTDOWN cpu->PCAtOpcodeStart = cpu->PC; #endif #ifdef VAR_CYCLES cpu->Cycles += cpu->MemSpeed; #else cpu->Cycles += icpu->Speed [*cpu->PC]; #endif (*icpu->S9xOpcodes [*cpu->PC++].S9xOpcode) (reg, icpu, cpu); #ifndef _ZAURUS if (SA1.Executing) S9xSA1MainLoop (); #endif DO_HBLANK_CHECK(); } // for(;;) Registers.PC = cpu->PC - cpu->PCBase; S9xPackStatus (); areg->PC = iapu->PC - iapu->RAM; S9xAPUPackStatus_OP (); if (cpu->Flags & SCAN_KEYS_FLAG) { #ifdef DEBUGGER if (!(cpu->Flags & FRAME_ADVANCE_FLAG)) #endif S9xSyncSpeed (); cpu->Flags &= ~SCAN_KEYS_FLAG; } #ifndef _ZAURUS if (cpu->BRKTriggered && Settings.SuperFX && !cpu->TriedInterleavedMode2) { cpu->TriedInterleavedMode2 = TRUE; cpu->BRKTriggered = FALSE; S9xDeinterleaveMode2 (); } #endif }
void handleBit(){ if(onCounter > 7 && onCounter < 14){ errorInHandle = handleDCF(0, secondCounter); }else if(onCounter > 17 && onCounter < 24){ errorInHandle = handleDCF(1, secondCounter); }else if(onCounter != 0){ //Error bit! //SETFLAG(FLAG_ERROR); if(secondCounter > 20 && secondCounter < 36){ errorInHandle = 1; } //The rest isn't needed } secondCounter++; if(offCounter >= 93 && secondCounter < 59 && secondCounter > 2){ //It CAN read the clock, just not handle it yet SETFLAG(FLAG_SYNCED); RESETFLAG(FLAG_STARTUP); RESETFLAG(FLAG_ERROR); secondCounter = 0; //This probably means it just started up.. }else if(offCounter >= 93 && secondCounter >= 59){ if(errorInHandle){ SETFLAG(FLAG_ERROR); errorInHandle = 0; }else{ RESETFLAG(FLAG_ERROR); } //Oh, new minute! :O secondCounter = 0; SETFLAG(FLAG_SYNCED); //Display the new time if(dcfTime.hours > 24 || dcfTime.minutes > 59){ //ERROR! SETFLAG(FLAG_ERROR); dcfTime.hours = 0; dcfTime.minutes = 0; } //if(!checkTime(dcfTime)){ // SETFLAG(FLAG_ERROR); //} /*if(dcfHours > currentHour && dcfHours - currentHour >= 2 && currentHour != 0 && currentHour != 23){ SETFLAG(FLAG_ERROR); addMinute(); }else if(dcfHours < currentHour && currentHour - dcfHours >= 2 && currentHour != 0 && currentHour != 23){ SETFLAG(FLAG_ERROR); addMinute(); } if(dcfMinutes > currentMinutes && dcfMinutes - currentMinutes >= 9 && currentMinutes != 0 && currentMinutes != 59){ SETFLAG(FLAG_ERROR); addMinute(); }else if(dcfMinutes < currentMinutes && currentMinutes - dcfMinutes >= 9 && currentMinutes != 0 && currentMinutes != 59){ SETFLAG(FLAG_ERROR); addMinute(); }*/ if(!CHECKFLAG(FLAG_ERROR)){ currentTime.hours = dcfTime.hours; currentTime.minutes = dcfTime.minutes; RESETFLAG(FLAG_STARTUP); }else{ //RESETFLAG(FLAG_ERROR); RESETFLAG(FLAG_SYNCED); if(currentTime.hours == 0 && currentTime.minutes == 0){ currentTime.hours = dcfTime.hours; currentTime.minutes = dcfTime.minutes; }else{ addMinute(¤tTime); } } } onCounter = 0; offCounter = 0; }
int main(void){ //PORT mapping //On PORTD, we have the matrix the lines. //On PORTC, we have inputs, 2 buttons and the DCF and Time sensors //On PortB we have control over the shift registers and the DEBUG led! // 76543210 DDRC = 0b00000110; DDRD = 0b11111111; DDRB = 0b11111111; PORTC = 0b00111001; PORTD = 0; PORTB = 0; //Initialize Interrupt for timer0 TCNT0 = 0xFC; TCCR0A = (1 << WGM01); TCCR0B = (0<<CS02)|(0<<CS01)|(1<<CS00); //TIMSK0 |= _BV(TOIE0); //Initialize Interrupt for timer1 TCCR1A |= (0 << COM1A1) | (0 << COM1A0); TCCR1B |= (1 << WGM12) | (1 << CS11); // Set CTC and prescaler :8 OCR1A = 0x61A7; TIMSK1 |= (1 << OCIE1A); sei(); DEBUG_UIT(); SPI_MasterInit(); //SETFLAG(FLAG_STARTUP); uint16_t refreshCounter = 0; uint16_t ttCounter = 0; uint8_t tempCounter = 0; doDisplay(0); while(1) { if(CHECKFLAG(FLAG_REFRESHDISPLAY)){ RESETFLAG(FLAG_REFRESHDISPLAY); refreshDisplay(); } if(CHECKFLAG(FLAG_HANDLEBIT)){ RESETFLAG(FLAG_HANDLEBIT); //DEBUG_AAN(); //handleBit(); } if(CHECKFLAG(FLAG_STARTUP)){ //Do something nice.. if(ttCounter == 4000){ for(uint8_t display = 0;display <= MAX_DISPLAY; display++){ for(uint8_t row = 0;row<=8;row++){ if(display == (tempCounter / 5)){ displays[display][row] = (3 << (tempCounter % 5)); }else{ displays[display][row] = 0; } } } tempCounter++; ttCounter=0; if(tempCounter == MAX_DISPLAY * 5){ tempCounter=0; } } ttCounter++; }else{ //if(secondCounter % 10 >= 8){ /*if(CHECKFLAG(FLAG_READTEMP)){ temperature = (uint16_t) ds1820_read(); RESETFLAG(FLAG_READTEMP); //doDisplay(temperature); }else{*/ showClock(12,34); //} //}else{ //showClock(currentTime.hours,currentTime.minutes); //} } if(refreshCounter == 20){ SETFLAG(FLAG_REFRESHDISPLAY); refreshCounter = 0; //doDisplay(refreshCounter); } refreshCounter++; //doDisplay(refreshCounter); } }
void S9xMainLoop (struct SRegisters * reg, struct SICPU * icpu, struct SCPUState * cpu) { #else void S9xMainLoop (void) { struct SICPU * icpu = &ICPU; struct SCPUState * cpu = &CPU; struct SRegisters * reg = &Registers; #endif for (;;) { APU_EXECUTE (); if (CPU.Flags) { if (CPU.Flags & NMI_FLAG) { if (--CPU.NMICycleCount == 0) { CPU.Flags &= ~NMI_FLAG; if (CPU.WaitingForInterrupt) { CPU.WaitingForInterrupt = FALSE; ++CPU.PC; } S9xOpcode_NMI (); } } #ifdef DEBUGGER if ((CPU.Flags & BREAK_FLAG) && !(CPU.Flags & SINGLE_STEP_FLAG)) { for (int Break = 0; Break != 6; Break++) { if (S9xBreakpoint[Break].Enabled && S9xBreakpoint[Break].Bank == Registers.PB && S9xBreakpoint[Break].Address == CPU.PC - CPU.PCBase) { if (S9xBreakpoint[Break].Enabled == 2) S9xBreakpoint[Break].Enabled = TRUE; else CPU.Flags |= DEBUG_MODE_FLAG; } } } #endif CHECK_SOUND (); if (CPU.Flags & IRQ_PENDING_FLAG) { if (CPU.IRQCycleCount == 0) { if (CPU.WaitingForInterrupt) { CPU.WaitingForInterrupt = FALSE; CPU.PC++; } if (CPU.IRQActive && !Settings.DisableIRQ) { if (!CHECKFLAG (IRQ)) S9xOpcode_IRQ (); } else CPU.Flags &= ~IRQ_PENDING_FLAG; } else CPU.IRQCycleCount--; } #ifdef DEBUGGER if (CPU.Flags & DEBUG_MODE_FLAG) break; #endif if (CPU.Flags & SCAN_KEYS_FLAG) break; #ifdef DEBUGGER if (CPU.Flags & TRACE_FLAG) S9xTrace (); if (CPU.Flags & SINGLE_STEP_FLAG) { CPU.Flags &= ~SINGLE_STEP_FLAG; CPU.Flags |= DEBUG_MODE_FLAG; } #endif } //if (CPU.Flags) #ifdef CPU_SHUTDOWN CPU.PCAtOpcodeStart = CPU.PC; #endif #ifdef VAR_CYCLES CPU.Cycles += CPU.MemSpeed; #else CPU.Cycles += ICPU.Speed [*CPU.PC]; #endif (*ICPU.S9xOpcodes [*CPU.PC++].S9xOpcode) (&Registers, &ICPU, &CPU); if (SA1.Executing) S9xSA1MainLoop (); DO_HBLANK_CHECK(); } // for(;;) Registers.PC = CPU.PC - CPU.PCBase; S9xPackStatus (); APURegisters.PC = IAPU.PC - IAPU.RAM; S9xAPUPackStatus (); if (CPU.Flags & SCAN_KEYS_FLAG) { #ifdef DEBUGGER if (!(CPU.Flags & FRAME_ADVANCE_FLAG)) #endif S9xSyncSpeed (); CPU.Flags &= ~SCAN_KEYS_FLAG; } if (CPU.BRKTriggered && Settings.SuperFX && !CPU.TriedInterleavedMode2) { CPU.TriedInterleavedMode2 = TRUE; CPU.BRKTriggered = FALSE; S9xDeinterleaveMode2 (); } } void S9xSetIRQ (uint32 source) { CPU.IRQActive |= source; CPU.Flags |= IRQ_PENDING_FLAG; CPU.IRQCycleCount = 3; if (CPU.WaitingForInterrupt) { // Force IRQ to trigger immediately after WAI - // Final Fantasy Mystic Quest crashes without this. CPU.IRQCycleCount = 0; CPU.WaitingForInterrupt = FALSE; CPU.PC++; } }