//--------------------------------------------------------------------------- #include #pragma hdrstop #include #include #define MAX_PATHNAME_LEN 256 #define MAX_RESPONSE_SIZE 9000 //define DEVICE_ID 1 typedef long (__stdcall *INITPROC) (void); typedef long (__stdcall *WRITEPROC)(long nDeviceID, unsigned char *strCommand, long command_length); typedef long (__stdcall *READPROC) (long nDeviceID, unsigned char *strResponse, long buffer_size, long *response_length); typedef long (__stdcall *GETINSTR) (int *arInstruments, int *arInstrumentsModel, int *arInstrumentsSN, int *nArraySize); INITPROC UsbdllInit; WRITEPROC UsbdllWrite; READPROC UsbdllRead; GETINSTR UsbdllInstr; HINSTANCE hinstUsbdll; long lError; long lDevice; #include "unitMain.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TfrmMain *frmMain; //--------------------------------------------------------------------------- __fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TfrmMain::FormCreate(TObject *Sender) { char szPathName[MAX_PATHNAME_LEN]; shStatus->Brush->Color = clRed; stbarMain->Panels->Items [0]->Width = frmMain->Width /2; lDevice = 1; txtAddress->Text = (AnsiString)lDevice; txtAddress->Update(); hinstUsbdll = 0; // Get windows system directory. *szPathName = '\0'; if (GetSystemDirectory (szPathName, MAX_PATHNAME_LEN) == FALSE) // strcpy (szPathName, "C:\\WINDOWS\\system32"); strcpy (szPathName, "C:\\Program Files\\Newport\\Newport Power Meter Application\\USB_Drivers"); strcat (szPathName, "\\usbdll.dll"); // Create path of the dll. // Load the library module. if ((hinstUsbdll = LoadLibrary (TEXT(szPathName))) == NULL) stbarMain->Panels->Items [0]->Text = "Error : Loading usbdll.dll failed!"; else { // Get usbdll.dll function addresses. stbarMain->Panels->Items [0]->Text = "usbdll.dll loaded"; UsbdllInit = (INITPROC) GetProcAddress(hinstUsbdll, "newp_usb_init_system"); UsbdllWrite = (WRITEPROC) GetProcAddress(hinstUsbdll, "newp_usb_send_ascii"); UsbdllRead = (READPROC) GetProcAddress(hinstUsbdll, "newp_usb_get_ascii"); UsbdllInstr = (GETINSTR) GetProcAddress(hinstUsbdll, "GetInstrumentList"); butInitClick (Sender); // Common initialization mgr } } //--------------------------------------------------------------------------- void __fastcall TfrmMain::butInitClick(TObject *Sender) { lError = (UsbdllInit) (); // Execute newp_usb_init_system function. if (!lError) { shStatus->Brush->Color = clGreen; butSend->Enabled = true; GetInstrumentList (); } else { stbarMain->Panels->Items [0]->Text = "Init dll code = " + (AnsiString)lError; Application->MessageBox ("Error while initializing.", "Error", MB_OK|MB_ICONEXCLAMATION); txtAddress->Text = (AnsiString)lDevice; txtAddress->Update(); // PostQuitMessage (0); } } //--------------------------------------------------------------------------- void __fastcall TfrmMain::FormCloseQuery(TObject *Sender, bool &CanClose) { timSampler->Enabled = false; butSend->Enabled = false; if (hinstUsbdll) FreeLibrary (hinstUsbdll); } //--------------------------------------------------------------------------- // Execute newp_usb_send_ascii function. void __fastcall TfrmMain::butSendClick(TObject *Sender) { long lMsg; timSampler->Enabled = true; txtSend->Text += "\r\n"; lError = (UsbdllWrite) (lDevice, txtSend->Text.c_str(), txtSend->Text.Length()); /*** ERROR during debug : unhandled exception ***/ if (lError) stbarMain->Panels->Items [0]->Text = "Error : Error while writing [" + (AnsiString)lError + "]"; else stbarMain->Panels->Items [0]->Text = ""; } //--------------------------------------------------------------------------- // Flush a string. void Flush (char *pcVar, long liLen) { long liIndex; for (liIndex = 0; liIndex < liLen; pcVar [liIndex++] = '\0'); } //--------------------------------------------------------------------------- // Read the USB port AnsiString ReadUSBPort (long lAddress) { char pcRes[MAX_RESPONSE_SIZE]; long liResLen; AnsiString saRes; Flush (pcRes, MAX_RESPONSE_SIZE); lError = (UsbdllRead) (lAddress, pcRes, MAX_RESPONSE_SIZE, &liResLen); if (lError) { frmMain->stbarMain->Panels->Items [0]->Text = "Error : Error while reading [" + (AnsiString)lError + "]"; *pcRes = '\0'; } else frmMain->stbarMain->Panels->Items [0]->Text = ""; return (strncpy (pcRes, pcRes, liResLen)); } //--------------------------------------------------------------------------- // Use Newport GetInstrumentList function void GetInstrumentList (void) { int iIndex; long lError; AnsiString saMsg; frmMain->cbAddress->Items->Clear(); for (iIndex = 0; iIndex < 31; iIndex++) { if (UsbdllWrite != NULL) { lError = (UsbdllWrite) ((long)iIndex, "*IDN?\r\n", 6); /*** ERROR during debug : unhandled exception ***/ if (!lError) { saMsg.sprintf("%2d - %s", iIndex, ReadUSBPort ((long)iIndex)); frmMain->cbAddress->Items->Add(saMsg); } } } } //--------------------------------------------------------------------------- // Execute newp_usb_get_ascii function. void __fastcall TfrmMain::timSamplerTimer(TObject *Sender) { char pcRes[MAX_RESPONSE_SIZE]; long liResLen; AnsiString saRes; Flush (pcRes, MAX_RESPONSE_SIZE); lError = (UsbdllRead) (lDevice, pcRes, MAX_RESPONSE_SIZE, &liResLen); if (lError) stbarMain->Panels->Items [0]->Text = "Error : Error while reading [" + (AnsiString)lError + "]"; else { stbarMain->Panels->Items [0]->Text = ""; stbarMain->Panels->Items [1]->Text = ""; stbarMain->Panels->Items [1]->Text = AnsiString (strncpy (pcRes, pcRes, liResLen)); } timSampler->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TfrmMain::butQuitClick(TObject *Sender) { PostQuitMessage (0); } //--------------------------------------------------------------------------- void __fastcall TfrmMain::txtAddressChange(TObject *Sender) { lDevice = (long)(txtAddress->Text.ToInt()); // shStatus->Brush->Color = clRed; // timSampler->Enabled = false; // butSend->Enabled = false; } //--------------------------------------------------------------------------- void __fastcall TfrmMain::txtSendKeyUp(TObject *Sender, WORD &Key, TShiftState Shift) { if (Key == 0x0d) butSendClick (Sender); } //--------------------------------------------------------------------------- void __fastcall TfrmMain::cbAddressSelect(TObject *Sender) { AnsiString saMsg; saMsg = cbAddress->Text; lDevice = (long)(saMsg.SubString(1, 2).ToInt()); txtAddress->Text = saMsg.SubString(1, 2).Trim(); } //---------------------------------------------------------------------------