OpenCores
URL https://opencores.org/ocsvn/gpib_controller/gpib_controller/trunk

Subversion Repositories gpib_controller

[/] [gpib_controller/] [trunk/] [prototype_1/] [PC_software/] [test_src/] [gpibExplorer_Test.c] - Diff between revs 6 and 12

Only display areas with differences | Details | Blame | View Log

Rev 6 Rev 12
 
/*
 
*This file is part of fpga_gpib_controller.
 
*
 
* Fpga_gpib_controller is free software: you can redistribute it and/or modify
 
* it under the terms of the GNU General Public License as published by
 
* the Free Software Foundation, either version 3 of the License, or
 
* (at your option) any later version.
 
*
 
* Fpga_gpib_controller is distributed in the hope that it will be useful,
 
* but WITHOUT ANY WARRANTY; without even the implied warranty of
 
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
* GNU General Public License for more details.
 
*
 
* You should have received a copy of the GNU General Public License
 
* along with Fpga_gpib_controller.  If not, see <http://www.gnu.org/licenses/>.
 
* Author: Andrzej Paluch
 
*/
 
 
#include <string.h>
#include <string.h>
#include <stdio.h>
#include <stdio.h>
 
 
#include <unistd.h>
#include <unistd.h>
 
 
#include "GpibRegAccess.h"
#include "GpibRegAccess.h"
#include "GpibHwAdapter.h"
#include "GpibHwAdapter.h"
#include "GpibHw.h"
#include "GpibHw.h"
 
 
 
 
int gpibExplorerMain(int argc, char* argv[])
int gpibExplorerMain(int argc, char* argv[])
{
{
        struct GpibRegAccess ra;
        struct GpibRegAccess ra;
        struct GpibHwAdapter ghw;
        struct GpibHwAdapter ghw;
        struct GpibHw gpib;
        struct GpibHw gpib;
 
 
        RegType regVal;
        RegType regVal;
 
 
        GpibRegAccess_init(&ra);
        GpibRegAccess_init(&ra);
        GpibHwAdapter_init(&ghw, &ra, 0);
        GpibHwAdapter_init(&ghw, &ra, 0);
        GpibHw_init(&gpib, &ghw);
        GpibHw_init(&gpib, &ghw);
 
 
        struct GpibHwSettings gs;
        struct GpibHwSettings gs;
        // set T1
        // set T1
        GpibHw_getSettings(&gpib, &gs);
        GpibHw_getSettings(&gpib, &gs);
        gs.T1 = 132;
        gs.T1 = 132;
        GpibHw_setSettings(&gpib, &gs);
        GpibHw_setSettings(&gpib, &gs);
 
 
        // request system control
        // request system control
        GpibHw_requestSystemControl(&gpib, 1);
        GpibHw_requestSystemControl(&gpib, 1);
 
 
        // go to standby
        // go to standby
        GpibHw_goToStandby(&gpib, 0);
        GpibHw_goToStandby(&gpib, 0);
        GpibHw_takeControlAsynchronously(&gpib, 1);
        GpibHw_takeControlAsynchronously(&gpib, 1);
 
 
        // system interface clear
        // system interface clear
        GpibHw_systemInterfaceClear(&gpib, 1);
        GpibHw_systemInterfaceClear(&gpib, 1);
 
 
        // remote enable
        // remote enable
        GpibHw_sendRemoteEnable(&gpib, 1);
        GpibHw_sendRemoteEnable(&gpib, 1);
 
 
        do
        do
        {
        {
                GpibHwAdapter_getReg(&ghw, REG_ADDR_GPIB_STATUS, &regVal);
                GpibHwAdapter_getReg(&ghw, REG_ADDR_GPIB_STATUS, &regVal);
        }
        }
        while(!GpibHwAdapter_getBitValue(regVal, MASK_GPIB_STATUS_cwrc));
        while(!GpibHwAdapter_getBitValue(regVal, MASK_GPIB_STATUS_cwrc));
 
 
 
 
        GpibHw_systemInterfaceClear(&gpib, 0);
        GpibHw_systemInterfaceClear(&gpib, 0);
 
 
        GpibHw_takeControlAsynchronously(&gpib, 0);
        GpibHw_takeControlAsynchronously(&gpib, 0);
 
 
        do
        do
        {
        {
                GpibHwAdapter_getReg(&ghw, REG_ADDR_EVENT, &regVal);
                GpibHwAdapter_getReg(&ghw, REG_ADDR_EVENT, &regVal);
        }
        }
        while(GpibHwAdapter_getBitValue(regVal, MASK_EVENT_IFC));
        while(GpibHwAdapter_getBitValue(regVal, MASK_EVENT_IFC));
 
 
        char buf[2048];
        char buf[2048];
        SizeType bytesRead;
        SizeType bytesRead;
        SizeType bytesWritten;
        SizeType bytesWritten;
        bool endOfStream;
        bool endOfStream;
 
 
 
 
 
 
        do
        do
        {
        {
                // set not to listen ///////////////////////////////////////
                // set not to listen ///////////////////////////////////////
                /*if(!GpibHwAdapter_getReg(&ghw, REG_ADDR_CONTROL, &regVal))
                /*if(!GpibHwAdapter_getReg(&ghw, REG_ADDR_CONTROL, &regVal))
                {
                {
                        return false;
                        return false;
                }
                }
 
 
                GpibHwAdapter_setBitValue(regVal, MASK_CONTROL_ltn, 0);
                GpibHwAdapter_setBitValue(regVal, MASK_CONTROL_ltn, 0);
 
 
                if(!GpibHwAdapter_setReg(&ghw, REG_ADDR_CONTROL, regVal))
                if(!GpibHwAdapter_setReg(&ghw, REG_ADDR_CONTROL, regVal))
                {
                {
                        return false;
                        return false;
                }*/
                }*/
                ////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////
 
 
                // write command
                // write command
                int cmdLen = 2;
                int cmdLen = 2;
                buf[0] = 0x22;
                buf[0] = 0x22;
                buf[1] = 0x41;
                buf[1] = 0x41;
 
 
                bytesWritten = 0;
                bytesWritten = 0;
 
 
                do
                do
                {
                {
                        GpibHw_write(&gpib, buf + bytesWritten, cmdLen - bytesWritten,
                        GpibHw_write(&gpib, buf + bytesWritten, cmdLen - bytesWritten,
                                        &bytesWritten, false);
                                        &bytesWritten, false);
                }
                }
                while(bytesWritten < cmdLen);
                while(bytesWritten < cmdLen);
 
 
                do
                do
                {
                {
                        GpibHwAdapter_getReg(&ghw, REG_ADDR_WRITER_CONTROL_1, &regVal);
                        GpibHwAdapter_getReg(&ghw, REG_ADDR_WRITER_CONTROL_1, &regVal);
                }
                }
                while(GpibHwAdapter_getFieldValue(regVal, MASK_WRITER_CONTROL_1_bytesInFifo) > 0);
                while(GpibHwAdapter_getFieldValue(regVal, MASK_WRITER_CONTROL_1_bytesInFifo) > 0);
 
 
 
 
                // go to standby
                // go to standby
                GpibHw_goToStandby(&gpib, 1);
                GpibHw_goToStandby(&gpib, 1);
 
 
                do
                do
                {
                {
                        GpibHwAdapter_getReg(&ghw, REG_ADDR_GPIB_STATUS, &regVal);
                        GpibHwAdapter_getReg(&ghw, REG_ADDR_GPIB_STATUS, &regVal);
                }
                }
                while(!GpibHwAdapter_getBitValue(regVal, MASK_GPIB_STATUS_cwrd));
                while(!GpibHwAdapter_getBitValue(regVal, MASK_GPIB_STATUS_cwrd));
 
 
                GpibHw_goToStandby(&gpib, 0);
                GpibHw_goToStandby(&gpib, 0);
 
 
                FILE *file = 0;
                FILE *file = 0;
                bool readAgain;
                bool readAgain;
                bool doExit;
                bool doExit;
 
 
                do
                do
                {
                {
                        readAgain = false;
                        readAgain = false;
                        doExit = false;
                        doExit = false;
 
 
                        // gets command
                        // gets command
                        gets(buf);
                        gets(buf);
 
 
                        if(strlen(buf) == 1 && buf[0] == 'e')
                        if(strlen(buf) == 1 && buf[0] == 'e')
                        {
                        {
                                if(file)
                                if(file)
                                {
                                {
                                        fclose(file);
                                        fclose(file);
                                }
                                }
 
 
                                doExit = true;
                                doExit = true;
                                break;
                                break;
                        }
                        }
                        else if(strstr(buf, "save_to_file") != 0)
                        else if(strstr(buf, "save_to_file") != 0)
                        {
                        {
                                char fileName[512];
                                char fileName[512];
                                sscanf(buf, "save_to_file %s", fileName);
                                sscanf(buf, "save_to_file %s", fileName);
                                file = fopen(fileName, "wb");
                                file = fopen(fileName, "wb");
                                readAgain = true;
                                readAgain = true;
                        }
                        }
                }
                }
                while(readAgain);
                while(readAgain);
 
 
                if(doExit)
                if(doExit)
                {
                {
                        break;
                        break;
                }
                }
 
 
                //buf[strlen(buf) + 1] = 0;
                //buf[strlen(buf) + 1] = 0;
                //buf[strlen(buf)] = '\n';
                //buf[strlen(buf)] = '\n';
 
 
                // write data
                // write data
                bytesWritten = 0;
                bytesWritten = 0;
                u32 tmpBytesWritten;
                u32 tmpBytesWritten;
 
 
                do
                do
                {
                {
                        GpibHw_write(&gpib, buf + bytesWritten, strlen(buf) - bytesWritten,
                        GpibHw_write(&gpib, buf + bytesWritten, strlen(buf) - bytesWritten,
                                        &tmpBytesWritten, true);
                                        &tmpBytesWritten, true);
                        bytesWritten += tmpBytesWritten;
                        bytesWritten += tmpBytesWritten;
                }
                }
                while(bytesWritten < strlen(buf));
                while(bytesWritten < strlen(buf));
 
 
                do
                do
                {
                {
                        GpibHwAdapter_getReg(&ghw, REG_ADDR_WRITER_CONTROL_1, &regVal);
                        GpibHwAdapter_getReg(&ghw, REG_ADDR_WRITER_CONTROL_1, &regVal);
                }
                }
                while(GpibHwAdapter_getFieldValue(regVal, MASK_WRITER_CONTROL_1_bytesInFifo) > 0);
                while(GpibHwAdapter_getFieldValue(regVal, MASK_WRITER_CONTROL_1_bytesInFifo) > 0);
 
 
                // take control
                // take control
                GpibHw_takeControlAsynchronously(&gpib, 1);
                GpibHw_takeControlAsynchronously(&gpib, 1);
 
 
                do
                do
                {
                {
                        GpibHwAdapter_getReg(&ghw, REG_ADDR_GPIB_STATUS, &regVal);
                        GpibHwAdapter_getReg(&ghw, REG_ADDR_GPIB_STATUS, &regVal);
                }
                }
                while(!GpibHwAdapter_getBitValue(regVal, MASK_GPIB_STATUS_cwrc));
                while(!GpibHwAdapter_getBitValue(regVal, MASK_GPIB_STATUS_cwrc));
 
 
                GpibHw_takeControlAsynchronously(&gpib, 0);
                GpibHw_takeControlAsynchronously(&gpib, 0);
 
 
 
 
                // set to listen ///////////////////////////////////////
                // set to listen ///////////////////////////////////////
                /*if(!GpibHwAdapter_getReg(&ghw, REG_ADDR_CONTROL, &regVal))
                /*if(!GpibHwAdapter_getReg(&ghw, REG_ADDR_CONTROL, &regVal))
                {
                {
                        return false;
                        return false;
                }
                }
 
 
                GpibHwAdapter_setBitValue(regVal, MASK_CONTROL_ltn, 1);
                GpibHwAdapter_setBitValue(regVal, MASK_CONTROL_ltn, 1);
 
 
                if(!GpibHwAdapter_setReg(&ghw, REG_ADDR_CONTROL, regVal))
                if(!GpibHwAdapter_setReg(&ghw, REG_ADDR_CONTROL, regVal))
                {
                {
                        return false;
                        return false;
                }*/
                }*/
                ////////////////////////////////////////////////////////
                ////////////////////////////////////////////////////////
 
 
 
 
                // write command
                // write command
                bytesWritten = 0;
                bytesWritten = 0;
                buf[0] = 0x21;
                buf[0] = 0x21;
                buf[1] = 0x42;
                buf[1] = 0x42;
 
 
                do
                do
                {
                {
                        GpibHw_write(&gpib, buf + bytesWritten, 2 - bytesWritten,
                        GpibHw_write(&gpib, buf + bytesWritten, 2 - bytesWritten,
                                        &bytesWritten, false);
                                        &bytesWritten, false);
                }
                }
                while(bytesWritten < 2);
                while(bytesWritten < 2);
 
 
                do
                do
                {
                {
                        GpibHwAdapter_getReg(&ghw, REG_ADDR_WRITER_CONTROL_1, &regVal);
                        GpibHwAdapter_getReg(&ghw, REG_ADDR_WRITER_CONTROL_1, &regVal);
                }
                }
                while(GpibHwAdapter_getFieldValue(regVal, MASK_WRITER_CONTROL_1_bytesInFifo) > 0);
                while(GpibHwAdapter_getFieldValue(regVal, MASK_WRITER_CONTROL_1_bytesInFifo) > 0);
 
 
                GpibHwAdapter_getReg(&ghw, REG_ADDR_BUS_STATUS, &regVal);
                GpibHwAdapter_getReg(&ghw, REG_ADDR_BUS_STATUS, &regVal);
 
 
                // go to standby
                // go to standby
                GpibHw_goToStandby(&gpib, true);
                GpibHw_goToStandby(&gpib, true);
 
 
                do
                do
                {
                {
                        GpibHwAdapter_getReg(&ghw, REG_ADDR_GPIB_STATUS, &regVal);
                        GpibHwAdapter_getReg(&ghw, REG_ADDR_GPIB_STATUS, &regVal);
                }
                }
                while(!GpibHwAdapter_getBitValue(regVal, MASK_GPIB_STATUS_cwrd));
                while(!GpibHwAdapter_getBitValue(regVal, MASK_GPIB_STATUS_cwrd));
 
 
                GpibHw_goToStandby(&gpib, false);
                GpibHw_goToStandby(&gpib, false);
 
 
 
 
                int timeout = 0;
                int timeout = 0;
                // read data
                // read data
                do
                do
                {
                {
                        GpibHw_read(&gpib, buf, 2047, &bytesRead, &endOfStream);
                        GpibHw_read(&gpib, buf, 2047, &bytesRead, &endOfStream);
 
 
                        if(bytesRead > 0)
                        if(bytesRead > 0)
                        {
                        {
                                buf[bytesRead] = 0;
                                buf[bytesRead] = 0;
                                timeout = 0;
                                timeout = 0;
 
 
                                if(!file)
                                if(!file)
                                {
                                {
                                        printf("%s", buf);
                                        printf("%s", buf);
                                }
                                }
                                else
                                else
                                {
                                {
                                        fwrite(buf, 1, bytesRead, file);
                                        fwrite(buf, 1, bytesRead, file);
                                }
                                }
                        }
                        }
 
 
                        timeout ++;
                        timeout ++;
 
 
                        if((timeout > 500 && !file) || (timeout > 20000 && file))
                        if((timeout > 500 && !file) || (timeout > 20000 && file))
                        {
                        {
                                break;
                                break;
                        }
                        }
                }
                }
                while(!endOfStream);
                while(!endOfStream);
 
 
                if(file)
                if(file)
                {
                {
                        fclose(file);
                        fclose(file);
                        file = 0;
                        file = 0;
                }
                }
 
 
                // take control
                // take control
                GpibHw_takeControlAsynchronously(&gpib, 1);
                GpibHw_takeControlAsynchronously(&gpib, 1);
 
 
                do
                do
                {
                {
                        GpibHwAdapter_getReg(&ghw, REG_ADDR_GPIB_STATUS, &regVal);
                        GpibHwAdapter_getReg(&ghw, REG_ADDR_GPIB_STATUS, &regVal);
                }
                }
                while(!GpibHwAdapter_getBitValue(regVal, MASK_GPIB_STATUS_cwrc));
                while(!GpibHwAdapter_getBitValue(regVal, MASK_GPIB_STATUS_cwrc));
 
 
                GpibHw_takeControlAsynchronously(&gpib, 0);
                GpibHw_takeControlAsynchronously(&gpib, 0);
        }
        }
        while(true);
        while(true);
 
 
        // remote disable
        // remote disable
        GpibHw_sendRemoteEnable(&gpib, 0);
        GpibHw_sendRemoteEnable(&gpib, 0);
 
 
        GpibHw_release(&gpib);
        GpibHw_release(&gpib);
        GpibHwAdapter_release(&ghw);
        GpibHwAdapter_release(&ghw);
        GpibRegAccess_release(&ra);
        GpibRegAccess_release(&ra);
 
 
        return 0;
        return 0;
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.