argox 0.0.6 copy "argox: ^0.0.6" to clipboard
argox: ^0.0.6 copied to clipboard

PlatformWindows

Argox Printer FFI Wrapper

example/lib/main.dart

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();
    //         },
    //       )
    //     ],
    //   ),
    // );
  }
}