argox 0.0.6 argox: ^0.0.6 copied to clipboard
Argox Printer FFI Wrapper
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:argox/argox.dart' as argox;
import 'dart:ffi';
import 'package:ffi/ffi.dart';
typedef A_Get_DLL_VersionAFunc = Int32 Function(Int32 nShowMessage);
typedef A_Get_DLL_VersionA = int Function(int nShowMessage);
typedef A_GetUSBBufferLenFunc = Int32 Function();
typedef A_GetUSBBufferLen = int Function();
typedef A_EnumUSBFunc = Int32 Function(Pointer<Utf8>);
typedef A_EnumUSB = int Function(Pointer<Utf8>);
typedef A_GetUSBDeviceInfoFunc = Int32 Function(
Int32, Pointer<Utf8>, Pointer<Int32>, Pointer<Utf8>, Pointer<Int32>);
typedef A_GetUSBDeviceInfo = int Function(
int, Pointer<Utf8>, Pointer<Int32>, Pointer<Utf8>, Pointer<Int32>);
typedef A_CreatePrnFunc = Int32 Function(Int32, Pointer<Utf8>);
typedef A_CreatePrn = int Function(int, Pointer<Utf8>);
typedef A_CreateUSBPortFunc = Int32 Function(Int32);
typedef A_CreateUSBPort = int Function(int);
typedef A_WriteDataFunc = Int32 Function(Int32, Pointer<Utf8>, Int32);
typedef A_WriteData = int Function(int, Pointer<Utf8>, int);
typedef A_ReadDataFunc = Int32 Function(Pointer<Utf8>, Int32, Int32);
typedef A_ReadData = int Function(Pointer<Utf8>, int, int);
typedef A_Set_DebugDialogFunc = Int32 Function(Int32);
typedef A_Set_DebugDialog = int Function(int);
typedef A_Set_UnitFunc = Int32 Function(Int8);
typedef A_Set_Unit = int Function(int);
typedef A_Set_SyssettingFunc = Int32 Function(
Int32, Int32, Int32, Int32, Int32);
typedef A_Set_Syssetting = int Function(int, int, int, int, int);
typedef A_Set_DarknessFunc = Int32 Function(Int32);
typedef A_Set_Darkness = int Function(int);
typedef A_Del_GraphicFunc = Int32 Function(Int32, Pointer<Utf8>);
typedef A_Del_Graphic = int Function(int, Pointer<Utf8>);
typedef A_Clear_MemoryFunc = Void Function();
typedef A_Clear_Memory = void Function();
typedef A_Set_LabelForSmartPrintFunc = Int32 Function(Int32, Int32);
typedef A_Set_LabelForSmartPrint = int Function(int, int);
typedef A_Draw_BoxFunc = Int32 Function(
Int8, Int32, Int32, Int32, Int32, Int32, Int32);
typedef A_Draw_Box = int Function(int, int, int, int, int, int, int);
typedef A_Draw_LineFunc = Int32 Function(Int8, Int32, Int32, Int32, Int32);
typedef A_Draw_Line = int Function(int, int, int, int, int);
typedef A_Prn_TextFunc = Int32 Function(Int32, Int32, Int32, Int32, Int32,
Int32, Int32, Int8, Int32, Pointer<Utf8>);
typedef A_Prn_Text = int Function(
int, int, int, int, int, int, int, int, int, Pointer<Utf8>);
typedef A_Prn_Text_TrueTypeFunc = Int32 Function(
Int32,
Int32,
Int32,
Pointer<Utf8>,
Int32,
Int32,
Int32,
Int32,
Int32,
Pointer<Utf8>,
Pointer<Utf8>,
Int32);
typedef A_Prn_Text_TrueType = int Function(int, int, int, Pointer<Utf8>, int,
int, int, int, int, Pointer<Utf8>, Pointer<Utf8>, int);
typedef A_Prn_Text_TrueType_WFunc = Int32 Function(
Int32,
Int32,
Int32,
Int32,
Pointer<Utf8>,
Int32,
Int32,
Int32,
Int32,
Int32,
Pointer<Utf8>,
Pointer<Utf8>,
Int32);
typedef A_Prn_Text_TrueType_W = int Function(int, int, int, int, Pointer<Utf8>,
int, int, int, int, int, Pointer<Utf8>, Pointer<Utf8>, int);
typedef A_Prn_Text_TrueType_UniFunc = Int32 Function(
Int32,
Int32,
Int32,
Pointer<Utf8>,
Int32,
Int32,
Int32,
Int32,
Int32,
Pointer<Utf8>,
Pointer<Utf8>,
Int32,
Int32);
typedef A_Prn_Text_TrueType_Uni = int Function(int, int, int, Pointer<Utf8>,
int, int, int, int, int, Pointer<Utf8>, Pointer<Utf8>, int, int);
typedef A_Prn_Text_TrueType_UniBFunc = Int32 Function(
Int32,
Int32,
Int32,
Pointer<Utf8>,
Int32,
Int32,
Int32,
Int32,
Int32,
Pointer<Utf8>,
Pointer<Utf8>,
Int32,
Int32);
typedef A_Prn_Text_TrueType_UniB = int Function(int, int, int, Pointer<Utf8>,
int, int, int, int, int, Pointer<Utf8>, Pointer<Utf8>, int, int);
typedef A_Prn_BarcodeFunc = Int32 Function(
Int32, Int32, Int32, Int8, Int32, Int32, Int32, Int8, Int32, Pointer<Utf8>);
typedef A_Prn_Barcode = int Function(
int, int, int, int, int, int, int, int, int, Pointer<Utf8>);
typedef A_Print_OutFunc = Int32 Function(Int32, Int32, Int32, Int32);
typedef A_Print_Out = int Function(int, int, int, int);
typedef A_ClosePrnFunc = Void Function();
typedef A_ClosePrn = void Function();
//Open library
final dylib = DynamicLibrary.open('Winppla.dll');
// Declaring functions
final getDllVersionPointer =
dylib.lookup<NativeFunction<A_Get_DLL_VersionAFunc>>('A_Get_DLL_VersionA');
final getDllVersion = getDllVersionPointer.asFunction<A_Get_DLL_VersionA>();
final getUsbBufferLenPointer =
dylib.lookup<NativeFunction<A_GetUSBBufferLenFunc>>('A_GetUSBBufferLen');
final getUsbBufferLen = getUsbBufferLenPointer.asFunction<A_GetUSBBufferLen>();
final enumUsbPointer = dylib.lookup<NativeFunction<A_EnumUSBFunc>>('A_EnumUSB');
final enumUsb = enumUsbPointer.asFunction<A_EnumUSB>();
final getUsbDeviceInfoPointer =
dylib.lookup<NativeFunction<A_GetUSBDeviceInfoFunc>>('A_GetUSBDeviceInfo');
final getUsbDeviceInfo =
getUsbDeviceInfoPointer.asFunction<A_GetUSBDeviceInfo>();
final createPrnPointer =
dylib.lookup<NativeFunction<A_CreatePrnFunc>>('A_CreatePrn');
final createPrn = createPrnPointer.asFunction<A_CreatePrn>();
final createUsbPortPointer =
dylib.lookup<NativeFunction<A_CreateUSBPortFunc>>('A_CreateUSBPort');
final createUsbPort = createUsbPortPointer.asFunction<A_CreateUSBPort>();
final writeDataPointer =
dylib.lookup<NativeFunction<A_WriteDataFunc>>('A_WriteData');
final writeData = writeDataPointer.asFunction<A_WriteData>();
final readDataPointer =
dylib.lookup<NativeFunction<A_ReadDataFunc>>('A_ReadData');
final readData = readDataPointer.asFunction<A_ReadData>();
final setDebugDialogPointer =
dylib.lookup<NativeFunction<A_Set_DebugDialogFunc>>('A_Set_DebugDialog');
final setDebugDialog = setDebugDialogPointer.asFunction<A_Set_DebugDialog>();
final setUnitPointer =
dylib.lookup<NativeFunction<A_Set_UnitFunc>>('A_Set_Unit');
final setUnit = setUnitPointer.asFunction<A_Set_Unit>();
final setSyssettingPointer =
dylib.lookup<NativeFunction<A_Set_SyssettingFunc>>('A_Set_Syssetting');
final setSyssetting = setSyssettingPointer.asFunction<A_Set_Syssetting>();
final setDarknessPointer =
dylib.lookup<NativeFunction<A_Set_DarknessFunc>>('A_Set_Darkness');
final setDarkness = setDarknessPointer.asFunction<A_Set_Darkness>();
final delGraphicPointer =
dylib.lookup<NativeFunction<A_Del_GraphicFunc>>('A_Del_Graphic');
final delGraphic = delGraphicPointer.asFunction<A_Del_Graphic>();
final clearMemoryPointer =
dylib.lookup<NativeFunction<A_Clear_MemoryFunc>>('A_Clear_Memory');
final clearMemory = clearMemoryPointer.asFunction<A_Clear_Memory>();
final setLabelForSmartPrintPointer =
dylib.lookup<NativeFunction<A_Set_LabelForSmartPrintFunc>>(
'A_Set_LabelForSmartPrint');
final setLabelForSmartPrint =
setLabelForSmartPrintPointer.asFunction<A_Set_LabelForSmartPrint>();
final drawBoxPointer =
dylib.lookup<NativeFunction<A_Draw_BoxFunc>>('A_Draw_Box');
final drawBox = drawBoxPointer.asFunction<A_Draw_Box>();
final drawLinePointer =
dylib.lookup<NativeFunction<A_Draw_LineFunc>>('A_Draw_Line');
final drawLine = drawLinePointer.asFunction<A_Draw_Line>();
final prnTextPointer =
dylib.lookup<NativeFunction<A_Prn_TextFunc>>('A_Prn_Text');
final prnText = prnTextPointer.asFunction<A_Prn_Text>();
final prnTextTrueTypePointer = dylib
.lookup<NativeFunction<A_Prn_Text_TrueTypeFunc>>('A_Prn_Text_TrueType');
final prnTextTrueType =
prnTextTrueTypePointer.asFunction<A_Prn_Text_TrueType>();
final prnTextTrueTypeWPointer = dylib
.lookup<NativeFunction<A_Prn_Text_TrueType_WFunc>>('A_Prn_Text_TrueType_W');
final prnTextTrueTypeW =
prnTextTrueTypeWPointer.asFunction<A_Prn_Text_TrueType_W>();
final prnTextTrueTypeUniPointer =
dylib.lookup<NativeFunction<A_Prn_Text_TrueType_UniFunc>>(
'A_Prn_Text_TrueType_Uni');
final prnTextTrueTypeUni =
prnTextTrueTypeUniPointer.asFunction<A_Prn_Text_TrueType_Uni>();
final prnTextTrueTypeUniBPointer =
dylib.lookup<NativeFunction<A_Prn_Text_TrueType_UniBFunc>>(
'A_Prn_Text_TrueType_UniB');
final prnTextTrueTypeUniB =
prnTextTrueTypeUniBPointer.asFunction<A_Prn_Text_TrueType_UniB>();
final prnBarcodePointer =
dylib.lookup<NativeFunction<A_Prn_BarcodeFunc>>('A_Prn_Barcode');
final prnBarcode = prnBarcodePointer.asFunction<A_Prn_Barcode>();
final printOutPointer =
dylib.lookup<NativeFunction<A_Print_OutFunc>>('A_Print_Out');
final printOut = printOutPointer.asFunction<A_Print_Out>();
final closePrnPointer =
dylib.lookup<NativeFunction<A_ClosePrnFunc>>('A_ClosePrn');
final closePrn = closePrnPointer.asFunction<A_ClosePrn>();
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late int sumResult;
late Future<int> sumAsyncResult;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
const textStyle = TextStyle(fontSize: 25);
const spacerSmall = SizedBox(height: 10);
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Native Packages'),
),
body: SingleChildScrollView(
child: Container(
padding: const EdgeInsets.all(10),
child: Column(
children: [
const Text(
'This calls a native function through FFI that is shipped as source in the package. '
'The native code is built as part of the Flutter Runner build.',
style: textStyle,
textAlign: TextAlign.center,
),
TextButton(
onPressed: testPrint,
child: const Text('Testar'),
),
],
),
),
),
),
);
}
Future<void> testPrint() async {
String info = '';
// call get version
info += '\nGET VERSION: ${getDllVersion(0)}';
// get buffer len
final int nLen = getUsbBufferLen() + 1;
info += '\nUSB BUFFER LENTH: $nLen';
if (nLen > 1) {
// A_EnumUSB
final pbuf = ''.padLeft(128).toNativeUtf8();
final result = enumUsb(pbuf);
info += '\nEnumUSB:';
info += result.toString();
info += '\npBuf :${pbuf.toDartString()}';
info += '$pbuf';
// A_GetUSBDeviceInfo
final len1 = calloc<Int32>();
len1.value = 128;
final buf1 = ''.padLeft(len1.value).toNativeUtf8();
final len2 = calloc<Int32>();
len2.value = 128;
final buf2 = ''.padLeft(len2.value).toNativeUtf8();
final getUsbDeviceInfoResult =
getUsbDeviceInfo(1, buf1, len1, buf2, len2);
info += '\nA_GetUSBDeviceInfo';
info += '\nreturn: $getUsbDeviceInfoResult';
info += '\nlen1: ${len1.value}';
info += '\nbuf1: ${buf1.toDartString()}';
info += '\nlen2: ${len2.value}';
info += '\nbuf2: ${buf2.toDartString()}';
calloc.free(len1);
calloc.free(len2);
final sw = true;
int ret;
if (sw) {
ret = createPrn(12, buf2);
} else {
ret = createUsbPort(1);
}
if (ret != 0) {
info += '\n\nErro #$ret ao abrir porta usb!';
} else {
info += '\nAbrindo USB:';
info += '\nDevice name:';
info += buf1.toDartString();
info += '\nDevice path:';
info += buf2.toDartString();
if (sw == 2) {
//get printer status
writeData(1, "\x01\x46\r\n".toNativeUtf8(), 4); //<SOH>F
ret = readData(pbuf, 2, 1000);
}
}
if (ret != 0) {
info += '\n\nERROR: $ret';
}
// sample setting.
setDebugDialog(1);
setUnit('m'.codeUnitAt(0));
clearMemory();
info +=
'${prnText(10, 10, 1, 2, 0, 1, 1, 'N'.codeUnitAt(0), 2, 'teste'.toNativeUtf8())}';
info +=
'${prnBarcode(10, 40, 1, 'A'.codeUnitAt(0), 0, 0, 20, 'B'.codeUnitAt(0), 1, '1'.toNativeUtf8())}';
info += '${printOut(1, 1, 2, 1)}';
// close port.
closePrn();
} else {
print('\nUSB Printer not found!');
}
// _printer.getVersion(true);
// _printer.setDebugDialog(true);
// final int nLen = _printer.getUSBBufferLen() + 1;
// info += "Buffer len: $nLen\n";
// if (nLen > 1) {
// final test = _printer.enumUSB();
// info += "USB: $test\n";
// final printerData = _printer.getUSBDeviceInfo(1);
// info += 'Printer data: ${printerData.join(' - ')}\n';
// final ret = _printer.createPrinter(12, printerData[1]); // open usb.
// // final sw = true;
// // if (sw) {
// // final ret = _printer.createPrinter(12, buf2); // open usb.
// // } else {
// // final ret = _printer.createUSBPort(
// // 1); // must call A_GetUSBBufferLen() function fisrt.
// // }
// if (0 != ret) {
// throw PlatformException(
// code: ret, message: 'Erro ao abrir porta usb');
// } else {
// info += 'Porta USB aberta\n';
// info += 'Dispositivo: ${printerData[0]}\n';
// info += 'Caminho: ${printerData[1]}\n';
// }
// } else {
// info += 'No printers found\n';
// _printer.createPrinter(0, 'printer.log');
// }
// _printer.setUnit('m');
// _printer.clearMemory();
// _printer.printText(
// 10, 10, 1, 2, 0, 1, 1, 'N', 2, dados['descricao'].toString());
// _printer.printBarcode(
// 10, 40, 1, 'A', 0, 0, 20, 'B', 1, dados['id'].toString());
// _printer.printOut(1, 1, 2, 1);
// _printer.closePrn();
print('DEBUG ------');
print(info);
// showDialog(
// context: context,
// builder: (_) => AlertDialog(
// title: const Text('Debug'),
// content: Text(info),
// actions: [
// TextButton(
// child: const Text('ok'),
// onPressed: () {
// Navigator.of(context).pop();
// },
// )
// ],
// ),
// );
}
}