//--------------------------------------------------------------------------- #include #pragma hdrstop #include "AIOWDM.h" #include "unit1.h" #include "TIRQThread.h" #pragma package(smart_init) //--------------------------------------------------------------------------- // Important: Methods and properties of objects in VCL can only be // used in a method called using Synchronize, for example: // // Synchronize(UpdateCaption); // // where UpdateCaption could look like: // // void __fastcall Unit2::UpdateCaption() // { // Form1->Caption = "Updated in a thread"; // } //--------------------------------------------------------------------------- __fastcall TIRQThread::TIRQThread(bool CreateSuspended) : TThread(CreateSuspended) { } //--------------------------------------------------------------------------- void __fastcall TIRQThread::Execute(void) { while (WaitForIRQType() != 0) Synchronize(ReportIRQ); LastError = GetLastError(); Synchronize(ReportError); } //--------------------------------------------------------------------------- void __fastcall TIRQThread::ReportError(void) { if (LastError == ERROR_OPERATION_ABORTED) MainForm->AddLine(CardNum, "IRQ request aborted."); else if (LastError == ERROR_INVALID_FUNCTION) MainForm->AddLine(CardNum, "Error: this card already has a pending IRQ request. IRQ request aborted."); else MainForm->AddLine(CardNum, "Some error occurred in the driver. IRQ request aborted."); } //--------------------------------------------------------------------------- void __fastcall TIRQThread::ReportIRQ(void) { if (COSPPIs == 0) MainForm->ReceiveGenIRQ(CardNum); else MainForm->ReceiveCOSData(CardNum, &COSData[0]); } //--------------------------------------------------------------------------- unsigned long __fastcall TIRQThread::WaitForIRQType(void) { if (COSPPIs != 0) return (COSWaitForIRQ(CardNum, COSPPIs, &COSData[0])); else return (WaitForIRQ(CardNum)); } //---------------------------------------------------------------------------