1141cc406Sopenharmony_ci/* sane - Scanner Access Now Easy. 2141cc406Sopenharmony_ci Copyright (C) 1997 Jeffrey S. Freedman 3141cc406Sopenharmony_ci This file is part of the SANE package. 4141cc406Sopenharmony_ci 5141cc406Sopenharmony_ci This program is free software; you can redistribute it and/or 6141cc406Sopenharmony_ci modify it under the terms of the GNU General Public License as 7141cc406Sopenharmony_ci published by the Free Software Foundation; either version 2 of the 8141cc406Sopenharmony_ci License, or (at your option) any later version. 9141cc406Sopenharmony_ci 10141cc406Sopenharmony_ci This program is distributed in the hope that it will be useful, but 11141cc406Sopenharmony_ci WITHOUT ANY WARRANTY; without even the implied warranty of 12141cc406Sopenharmony_ci MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13141cc406Sopenharmony_ci General Public License for more details. 14141cc406Sopenharmony_ci 15141cc406Sopenharmony_ci You should have received a copy of the GNU General Public License 16141cc406Sopenharmony_ci along with this program. If not, see <https://www.gnu.org/licenses/>. 17141cc406Sopenharmony_ci 18141cc406Sopenharmony_ci As a special exception, the authors of SANE give permission for 19141cc406Sopenharmony_ci additional uses of the libraries contained in this release of SANE. 20141cc406Sopenharmony_ci 21141cc406Sopenharmony_ci The exception is that, if you link a SANE library with other files 22141cc406Sopenharmony_ci to produce an executable, this does not by itself cause the 23141cc406Sopenharmony_ci resulting executable to be covered by the GNU General Public 24141cc406Sopenharmony_ci License. Your use of that executable is in no way restricted on 25141cc406Sopenharmony_ci account of linking the SANE library code into it. 26141cc406Sopenharmony_ci 27141cc406Sopenharmony_ci This exception does not, however, invalidate any other reasons why 28141cc406Sopenharmony_ci the executable file might be covered by the GNU General Public 29141cc406Sopenharmony_ci License. 30141cc406Sopenharmony_ci 31141cc406Sopenharmony_ci If you submit changes to SANE to the maintainers to be included in 32141cc406Sopenharmony_ci a subsequent release, you agree by submitting the changes that 33141cc406Sopenharmony_ci those changes may be distributed with this exception intact. 34141cc406Sopenharmony_ci 35141cc406Sopenharmony_ci If you write modifications of your own for SANE, it is your choice 36141cc406Sopenharmony_ci whether to permit this exception to apply to your modifications. 37141cc406Sopenharmony_ci If you do not wish that, delete this exception notice. */ 38141cc406Sopenharmony_ci 39141cc406Sopenharmony_ciclass Test 40141cc406Sopenharmony_ci{ 41141cc406Sopenharmony_cipublic static void main(String[] args) 42141cc406Sopenharmony_ci { 43141cc406Sopenharmony_ci Sane sane = new Sane(); 44141cc406Sopenharmony_ci int version[] = new int[1]; // Array to get version #. 45141cc406Sopenharmony_ci int status = sane.init(version); 46141cc406Sopenharmony_ci if (status != Sane.STATUS_GOOD) 47141cc406Sopenharmony_ci { 48141cc406Sopenharmony_ci System.out.println("getDevices() failed. Status= " + status); 49141cc406Sopenharmony_ci return; 50141cc406Sopenharmony_ci } 51141cc406Sopenharmony_ci System.out.println("VersionMajor =" + sane.versionMajor(version[0])); 52141cc406Sopenharmony_ci System.out.println("VersionMinor =" + sane.versionMinor(version[0])); 53141cc406Sopenharmony_ci System.out.println("VersionBuild =" + sane.versionBuild(version[0])); 54141cc406Sopenharmony_ci // Get list of devices. 55141cc406Sopenharmony_ci // Allocate room for 50. 56141cc406Sopenharmony_ci SaneDevice devList[] = new SaneDevice[50]; 57141cc406Sopenharmony_ci status = sane.getDevices(devList, false); 58141cc406Sopenharmony_ci if (status != Sane.STATUS_GOOD) 59141cc406Sopenharmony_ci { 60141cc406Sopenharmony_ci System.out.println("getDevices() failed. Status= " + status); 61141cc406Sopenharmony_ci return; 62141cc406Sopenharmony_ci } 63141cc406Sopenharmony_ci for (int i = 0; i < 50 && devList[i] != null; i++) 64141cc406Sopenharmony_ci { 65141cc406Sopenharmony_ci System.out.println("Device '" + devList[i].name + "' is a " + 66141cc406Sopenharmony_ci devList[i].vendor + " " + devList[i].model + " " + 67141cc406Sopenharmony_ci devList[i].type); 68141cc406Sopenharmony_ci } 69141cc406Sopenharmony_ci int handle[] = new int[1]; 70141cc406Sopenharmony_ci status = sane.open(devList[0].name, handle); 71141cc406Sopenharmony_ci if (status != Sane.STATUS_GOOD) 72141cc406Sopenharmony_ci { 73141cc406Sopenharmony_ci System.out.println("open() failed. Status= " + status); 74141cc406Sopenharmony_ci return; 75141cc406Sopenharmony_ci } 76141cc406Sopenharmony_ci System.out.println("Open handle=" + handle[0]); 77141cc406Sopenharmony_ci // Get # of device options. 78141cc406Sopenharmony_ci int numDevOptions[] = new int[1]; 79141cc406Sopenharmony_ci status = sane.getControlOption(handle[0], 0, numDevOptions, null); 80141cc406Sopenharmony_ci if (status != Sane.STATUS_GOOD) 81141cc406Sopenharmony_ci { 82141cc406Sopenharmony_ci System.out.println("controlOption() failed. Status= " 83141cc406Sopenharmony_ci + status); 84141cc406Sopenharmony_ci return; 85141cc406Sopenharmony_ci } 86141cc406Sopenharmony_ci System.out.println("Number of device options=" + numDevOptions[0]); 87141cc406Sopenharmony_ci for (int i = 0; i < numDevOptions[0]; i++) 88141cc406Sopenharmony_ci { 89141cc406Sopenharmony_ci SaneOption opt = sane.getOptionDescriptor(handle[0], i); 90141cc406Sopenharmony_ci if (opt == null) 91141cc406Sopenharmony_ci { 92141cc406Sopenharmony_ci System.out.println("getOptionDescriptor() failed for " 93141cc406Sopenharmony_ci + i); 94141cc406Sopenharmony_ci continue; 95141cc406Sopenharmony_ci } 96141cc406Sopenharmony_ci System.out.println("Option name: " + opt.name); 97141cc406Sopenharmony_ci System.out.println("Option title: " + opt.title); 98141cc406Sopenharmony_ci System.out.println("Option desc: " + opt.desc); 99141cc406Sopenharmony_ci switch (opt.constraintType) 100141cc406Sopenharmony_ci { 101141cc406Sopenharmony_ci case SaneOption.CONSTRAINT_RANGE: 102141cc406Sopenharmony_ci System.out.println("Range: " + 103141cc406Sopenharmony_ci opt.rangeConstraint.min + ", " + 104141cc406Sopenharmony_ci opt.rangeConstraint.max + ", " + 105141cc406Sopenharmony_ci opt.rangeConstraint.quant); 106141cc406Sopenharmony_ci break; 107141cc406Sopenharmony_ci case SaneOption.CONSTRAINT_WORD_LIST: 108141cc406Sopenharmony_ci System.out.print("Word list: "); 109141cc406Sopenharmony_ci for (int j = 0; j < opt.wordListConstraint[0]; j++) 110141cc406Sopenharmony_ci System.out.print(opt.wordListConstraint[j]); 111141cc406Sopenharmony_ci System.out.println(); 112141cc406Sopenharmony_ci break; 113141cc406Sopenharmony_ci case SaneOption.CONSTRAINT_STRING_LIST: 114141cc406Sopenharmony_ci for (int j = 0; opt.stringListConstraint[j] != null; 115141cc406Sopenharmony_ci j++) 116141cc406Sopenharmony_ci System.out.print("String constraint: " + 117141cc406Sopenharmony_ci opt.stringListConstraint[j]); 118141cc406Sopenharmony_ci break; 119141cc406Sopenharmony_ci default: 120141cc406Sopenharmony_ci System.out.println("No constraint."); 121141cc406Sopenharmony_ci break; 122141cc406Sopenharmony_ci } 123141cc406Sopenharmony_ci } 124141cc406Sopenharmony_ci status = sane.setControlOption(handle[0], 2, 125141cc406Sopenharmony_ci SaneOption.ACTION_SET_VALUE, "../test1.pnm", null); 126141cc406Sopenharmony_ci if (status != Sane.STATUS_GOOD) 127141cc406Sopenharmony_ci { 128141cc406Sopenharmony_ci System.out.println("setControlOption() failed. Status= " 129141cc406Sopenharmony_ci + status); 130141cc406Sopenharmony_ci } 131141cc406Sopenharmony_ci // 132141cc406Sopenharmony_ci // Main scanning loop. 133141cc406Sopenharmony_ci // 134141cc406Sopenharmony_ci SaneParameters parm = new SaneParameters(); 135141cc406Sopenharmony_ci int dataLen = 32*1024; 136141cc406Sopenharmony_ci byte [] data = new byte[dataLen]; 137141cc406Sopenharmony_ci int [] readLen = new int[1]; 138141cc406Sopenharmony_ci int frameCnt = 0; 139141cc406Sopenharmony_ci do 140141cc406Sopenharmony_ci { 141141cc406Sopenharmony_ci frameCnt++; 142141cc406Sopenharmony_ci System.out.println("Reading frame #" + frameCnt); 143141cc406Sopenharmony_ci status = sane.start(handle[0]); 144141cc406Sopenharmony_ci if (status != Sane.STATUS_GOOD) 145141cc406Sopenharmony_ci { 146141cc406Sopenharmony_ci System.out.println("start() failed. Status= " 147141cc406Sopenharmony_ci + status); 148141cc406Sopenharmony_ci return; 149141cc406Sopenharmony_ci } 150141cc406Sopenharmony_ci status = sane.getParameters(handle[0], parm); 151141cc406Sopenharmony_ci if (status != Sane.STATUS_GOOD) 152141cc406Sopenharmony_ci { 153141cc406Sopenharmony_ci System.out.println("getParameters() failed. Status= " 154141cc406Sopenharmony_ci + status); 155141cc406Sopenharmony_ci return; //++++cleanup. 156141cc406Sopenharmony_ci } 157141cc406Sopenharmony_ci while ((status = sane.read(handle[0], data, dataLen, readLen)) 158141cc406Sopenharmony_ci == Sane.STATUS_GOOD) 159141cc406Sopenharmony_ci { 160141cc406Sopenharmony_ci System.out.println("Read " + readLen[0] + " bytes."); 161141cc406Sopenharmony_ci // ++++++++Process data. 162141cc406Sopenharmony_ci } 163141cc406Sopenharmony_ci if (status != Sane.STATUS_EOF) 164141cc406Sopenharmony_ci { 165141cc406Sopenharmony_ci System.out.println("read() failed. Status= " 166141cc406Sopenharmony_ci + status); 167141cc406Sopenharmony_ci } 168141cc406Sopenharmony_ci } 169141cc406Sopenharmony_ci while (!parm.lastFrame); 170141cc406Sopenharmony_ci 171141cc406Sopenharmony_ci sane.close(handle[0]); 172141cc406Sopenharmony_ci } 173141cc406Sopenharmony_ci} 174