ffi.dart 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. /// bindings for `libdart_ffi`
  2. import 'dart:ffi';
  3. import 'dart:io';
  4. // ignore: import_of_legacy_library_into_null_safe
  5. import 'package:ffi/ffi.dart' as ffi;
  6. import 'package:flutter/foundation.dart' as Foundation;
  7. // ignore_for_file: unused_import, camel_case_types, non_constant_identifier_names
  8. final DynamicLibrary _dl = _open();
  9. /// Reference to the Dynamic Library, it should be only used for low-level access
  10. final DynamicLibrary dl = _dl;
  11. DynamicLibrary _open() {
  12. if (Platform.isAndroid) return DynamicLibrary.open('libdart_ffi.so');
  13. if (Platform.isMacOS) return DynamicLibrary.executable();
  14. if (Platform.isIOS) return DynamicLibrary.executable();
  15. if (Platform.isWindows) return DynamicLibrary.open('dart_ffi.dll');
  16. throw UnsupportedError('This platform is not supported.');
  17. }
  18. /// C function `async_command`.
  19. void async_command(
  20. int port,
  21. Pointer<Uint8> input,
  22. int len,
  23. ) {
  24. _invoke_async(port, input, len);
  25. }
  26. final _invoke_async_Dart _invoke_async = _dl.lookupFunction<_invoke_async_C, _invoke_async_Dart>('async_command');
  27. typedef _invoke_async_C = Void Function(
  28. Int64 port,
  29. Pointer<Uint8> input,
  30. Uint64 len,
  31. );
  32. typedef _invoke_async_Dart = void Function(
  33. int port,
  34. Pointer<Uint8> input,
  35. int len,
  36. );
  37. /// C function `command_sync`.
  38. Pointer<Uint8> sync_command(
  39. Pointer<Uint8> input,
  40. int len,
  41. ) {
  42. return _invoke_sync(input, len);
  43. }
  44. final _invoke_sync_Dart _invoke_sync = _dl.lookupFunction<_invoke_sync_C, _invoke_sync_Dart>('sync_command');
  45. typedef _invoke_sync_C = Pointer<Uint8> Function(
  46. Pointer<Uint8> input,
  47. Uint64 len,
  48. );
  49. typedef _invoke_sync_Dart = Pointer<Uint8> Function(
  50. Pointer<Uint8> input,
  51. int len,
  52. );
  53. /// C function `init_sdk`.
  54. int init_sdk(
  55. Pointer<ffi.Utf8> path,
  56. ) {
  57. return _init_sdk(path);
  58. }
  59. final _init_sdk_Dart _init_sdk = _dl.lookupFunction<_init_sdk_C, _init_sdk_Dart>('init_sdk');
  60. typedef _init_sdk_C = Int64 Function(
  61. Pointer<ffi.Utf8> path,
  62. );
  63. typedef _init_sdk_Dart = int Function(
  64. Pointer<ffi.Utf8> path,
  65. );
  66. /// C function `init_stream`.
  67. int set_stream_port(int port) {
  68. return _set_stream_port(port);
  69. }
  70. final _set_stream_port_Dart _set_stream_port =
  71. _dl.lookupFunction<_set_stream_port_C, _set_stream_port_Dart>('set_stream_port');
  72. typedef _set_stream_port_C = Int32 Function(
  73. Int64 port,
  74. );
  75. typedef _set_stream_port_Dart = int Function(
  76. int port,
  77. );
  78. /// C function `link_me_please`.
  79. void link_me_please() {
  80. _link_me_please();
  81. }
  82. final _link_me_please_Dart _link_me_please =
  83. _dl.lookupFunction<_link_me_please_C, _link_me_please_Dart>('link_me_please');
  84. typedef _link_me_please_C = Void Function();
  85. typedef _link_me_please_Dart = void Function();
  86. /// Binding to `allo-isolate` crate
  87. void store_dart_post_cobject(
  88. Pointer<NativeFunction<Int8 Function(Int64, Pointer<Dart_CObject>)>> ptr,
  89. ) {
  90. _store_dart_post_cobject(ptr);
  91. }
  92. final _store_dart_post_cobject_Dart _store_dart_post_cobject =
  93. _dl.lookupFunction<_store_dart_post_cobject_C, _store_dart_post_cobject_Dart>('store_dart_post_cobject');
  94. typedef _store_dart_post_cobject_C = Void Function(
  95. Pointer<NativeFunction<Int8 Function(Int64, Pointer<Dart_CObject>)>> ptr,
  96. );
  97. typedef _store_dart_post_cobject_Dart = void Function(
  98. Pointer<NativeFunction<Int8 Function(Int64, Pointer<Dart_CObject>)>> ptr,
  99. );