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