From 510510f035a927fe8bbb1dddf822c5cb003c47ad Mon Sep 17 00:00:00 2001 From: Konstantin Ullrich Date: Fri, 22 Nov 2024 15:30:56 +0100 Subject: Add Ledger Stuff --- impls/monero.dart/lib/monero.dart | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) (limited to 'impls') diff --git a/impls/monero.dart/lib/monero.dart b/impls/monero.dart/lib/monero.dart index 5acc431..643bcb9 100644 --- a/impls/monero.dart/lib/monero.dart +++ b/impls/monero.dart/lib/monero.dart @@ -72,7 +72,9 @@ library; // ignore_for_file: non_constant_identifier_names, camel_case_types import 'dart:ffi'; +import 'dart:ffi' as ffi; import 'dart:io'; +import 'dart:typed_data'; import 'package:ffi/ffi.dart'; import 'package:monero/src/generated_bindings_monero.g.dart'; @@ -3279,16 +3281,38 @@ int MONERO_Wallet_getBytesSent(wallet ptr) { return getBytesSent; } -typedef LedgerExchangeFunction = Pointer< - NativeFunction< - Int Function(Pointer command, UnsignedInt cmd_len, - Pointer response, UnsignedInt max_resp_len)>>; +// Ledger Stuff + +typedef LedgerExchangeFunctionNative = Int Function( + Pointer command, + UnsignedInt cmd_len, + Pointer response, + UnsignedInt max_resp_len); void Wallet_setLedgerExchange( - wallet ptr, LedgerExchangeFunction sendToLedgerDevice) { + wallet ptr, Uint8List Function(Uint8List, int) sendToLedgerDevice) { debugStart?.call('MONERO_Wallet_setLedgerExchange'); lib ??= MoneroC(DynamicLibrary.open(libPath)); - final ret = lib!.MONERO_Wallet_setLedgerExchange(ptr, sendToLedgerDevice); + + int sendToLedgerDeviceWrapper(Pointer command, int cmd_len, + Pointer response, int max_resp_len) { + final command_ = command.cast().asTypedList(cmd_len); + + final res = sendToLedgerDevice(command_, max_resp_len); + + calloc.free(command); + + for (var i = 0; i < res.length; i++) { + response.cast().asTypedList(res.length)[i] = res[i]; + } + + return res.length; + } + + final sendToLedgerDevice_ = + Pointer.fromFunction( + sendToLedgerDeviceWrapper, 0); + final ret = lib!.MONERO_Wallet_setLedgerExchange(ptr, sendToLedgerDevice_); debugEnd?.call('MONERO_Wallet_setLedgerExchange'); return ret; } -- cgit v1.2.3