-int xbox_ref_gdr8050l_dump_with_handle(void *native_handle, const char *device, const char *filename, char mode);
-int xbox_ref_gdr8050l_dump(const char *device, const char *filename, char mode);
+#define XBOX_REF_RESULT_PATH_MAX 4096
+#define XBOX_REF_RESULT_TITLE_MAX 256
+#define XBOX_REF_RESULT_MEDIA_ID_MAX 64
+#define XBOX_REF_RESULT_REGION_MAX 128
+
+typedef int (*xbox_ref_cancel_func)(void *cancel_data);
+
+typedef struct xbox_ref_dump_result_s {
+ int attempted;
+ int dump_success;
+ int cancelled;
+ int hashes_complete;
+ char mode;
+ uint32_t output_sectors;
+ uint32_t completed_sectors;
+ uint64_t output_size;
+ double elapsed_seconds;
+ char output_path[XBOX_REF_RESULT_PATH_MAX];
+ char title[XBOX_REF_RESULT_TITLE_MAX];
+ char media_id[XBOX_REF_RESULT_MEDIA_ID_MAX];
+ int have_game_region;
+ uint32_t game_region;
+ char region[XBOX_REF_RESULT_REGION_MAX];
+ char crc32[9];
+ char md5[33];
+ char sha1[41];
+ char sha256[65];
+} xbox_ref_dump_result;
+
+void xbox_ref_dump_result_init(xbox_ref_dump_result *result);
+int xbox_ref_gdr8050l_dump_with_handle(void *native_handle,
+ const char *device,
+ const char *filename,
+ char mode,
+ xbox_ref_cancel_func cancel,
+ void *cancel_data,
+ xbox_ref_dump_result *result);
+int xbox_ref_gdr8050l_dump(const char *device,
+ const char *filename,
+ char mode,
+ xbox_ref_dump_result *result);
+int xbox_ref_xgd1_layout_probe_with_handle(void *native_handle,
+ const char *device,
+ const char *report_path);
+int xbox_ref_xgd1_layout_probe(const char *device,
+ const char *report_path);
+int xbox_ref_xgd1_raw_id_probe_with_handle(void *native_handle,
+ const char *device,
+ const char *report_path);
+int xbox_ref_xgd1_raw_id_probe(const char *device,
+ const char *report_path);