Skip to content

Commit 0968085

Browse files
committed
Rearchitect library
1 parent 1f569f3 commit 0968085

32 files changed

+1079
-962
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,6 @@ migrate_working_dir/
3333
/build/
3434
/coverage/
3535
pubspec.lock
36+
37+
# Runtime output
38+
output.ppm

packages/sane/example/main.dart

+17-18
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,20 @@ import 'dart:typed_data';
55

66
import 'package:logging/logging.dart';
77
import 'package:sane/sane.dart';
8+
import 'package:sane/src/impl/sane_dev.dart';
9+
import 'package:sane/src/impl/sane_native.dart';
810

911
void main(List<String> args) async {
1012
Logger.root.level = Level.ALL;
1113
Logger.root.onRecord.listen((record) {
1214
print('${record.level.name}: ${record.time}: ${record.message}');
1315
});
1416

15-
final sane = SaneNative(sane: SaneDev());
16-
await sane.spawn();
17+
final sane = NativeSane(MockSane());
1718

18-
await sane.init();
19+
final version = await sane.initialize();
20+
21+
print(version);
1922

2023
final devices = await sane.getDevices(localOnly: false);
2124
for (final device in devices) {
@@ -26,40 +29,36 @@ void main(List<String> args) async {
2629
return;
2730
}
2831

29-
final handle = await sane.openDevice(devices.first);
32+
final device = devices.first;
3033

31-
final optionDescriptors = await sane.getAllOptionDescriptors(handle);
34+
final optionDescriptors = await device.getAllOptionDescriptors();
3235

3336
for (final optionDescriptor in optionDescriptors) {
3437
if (optionDescriptor.name == 'mode') {
35-
await sane.controlStringOption(
36-
handle: handle,
37-
index: optionDescriptor.index,
38-
action: SaneAction.setValue,
39-
value: 'Color',
38+
await device.controlStringOption(
39+
optionDescriptor.index,
40+
SaneAction.setValue,
41+
'Color',
4042
);
4143
break;
4244
}
4345
}
4446

45-
await sane.start(handle);
47+
await device.start();
4648

47-
final parameters = await sane.getParameters(handle);
49+
final parameters = await device.getParameters();
4850
print('Parameters: format(${parameters.format}), depth(${parameters.depth})');
4951

5052
final rawPixelDataList = <Uint8List>[];
5153
Uint8List? bytes;
5254
while (true) {
53-
bytes = await sane.read(handle, parameters.bytesPerLine);
55+
bytes = await device.read(bufferSize: parameters.bytesPerLine);
5456
if (bytes.isEmpty) break;
5557
rawPixelDataList.add(bytes);
5658
}
5759

58-
await sane.cancel(handle);
59-
await sane.close(handle);
60-
await sane.exit();
61-
62-
sane.kill();
60+
await device.cancel();
61+
await device.close();
6362

6463
Uint8List mergeUint8Lists(List<Uint8List> lists) {
6564
final totalLength = lists.fold(0, (length, list) => length + list.length);

packages/sane/lib/sane.dart

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
library;
22

33
export 'src/exceptions.dart';
4-
export 'src/impl/sane_dev.dart';
5-
export 'src/impl/sane_native.dart';
6-
export 'src/impl/sane_sync.dart';
4+
export 'src/sane.dart';
75
export 'src/structures.dart';
8-
export 'src/utils.dart';

packages/sane/lib/src/bindings.g.dart

+11
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,17 @@ class LibSane {
250250
'sane_strstatus');
251251
late final _sane_strstatus =
252252
_sane_strstatusPtr.asFunction<SANE_String_Const Function(int)>();
253+
254+
late final addresses = _SymbolAddresses(this);
255+
}
256+
257+
class _SymbolAddresses {
258+
final LibSane _library;
259+
260+
_SymbolAddresses(this._library);
261+
262+
ffi.Pointer<ffi.NativeFunction<ffi.Void Function(SANE_Handle)>>
263+
get sane_close => _library._sane_closePtr;
253264
}
254265

255266
enum SANE_Status {

packages/sane/lib/src/extensions.dart

+2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
import 'package:meta/meta.dart';
12
import 'package:sane/src/bindings.g.dart';
23
import 'package:sane/src/exceptions.dart';
34

5+
@internal
46
extension SaneStatusExtension on SANE_Status {
57
/// Throws [SaneException] if the status is not [SANE_Status.STATUS_GOOD].
68
@pragma('vm:prefer-inline')

0 commit comments

Comments
 (0)