Commit | Line | Data |
---|---|---|
3719602c PC |
1 | /* Copyright (C) 2010-2020 The RetroArch team |
2 | * | |
3 | * --------------------------------------------------------------------------------------- | |
4 | * The following license statement only applies to this file (cdrom.h). | |
5 | * --------------------------------------------------------------------------------------- | |
6 | * | |
7 | * Permission is hereby granted, free of charge, | |
8 | * to any person obtaining a copy of this software and associated documentation files (the "Software"), | |
9 | * to deal in the Software without restriction, including without limitation the rights to | |
10 | * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, | |
11 | * and to permit persons to whom the Software is furnished to do so, subject to the following conditions: | |
12 | * | |
13 | * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. | |
14 | * | |
15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, | |
16 | * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |
18 | * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, | |
19 | * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
20 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
21 | */ | |
22 | ||
23 | #ifndef __LIBRETRO_SDK_CDROM_H | |
24 | #define __LIBRETRO_SDK_CDROM_H | |
25 | ||
26 | #include <stdio.h> | |
27 | #include <stdint.h> | |
28 | #include <stddef.h> | |
29 | #include <sys/types.h> | |
30 | ||
31 | #include <vfs/vfs.h> | |
32 | #include <libretro.h> | |
33 | #include <retro_common_api.h> | |
34 | #include <retro_inline.h> | |
35 | ||
36 | #include <boolean.h> | |
37 | ||
38 | struct string_list; | |
39 | ||
40 | RETRO_BEGIN_DECLS | |
41 | ||
42 | typedef struct | |
43 | { | |
44 | unsigned short g1_timeout; | |
45 | unsigned short g2_timeout; | |
46 | unsigned short g3_timeout; | |
47 | } cdrom_group_timeouts_t; | |
48 | ||
49 | typedef struct | |
50 | { | |
51 | unsigned lba_start; /* start of pregap */ | |
52 | unsigned lba; /* start of data */ | |
53 | unsigned track_size; /* in LBAs */ | |
54 | unsigned track_bytes; | |
55 | unsigned char track_num; | |
56 | unsigned char min; /* start of data */ | |
57 | unsigned char sec; | |
58 | unsigned char frame; | |
59 | unsigned char mode; | |
60 | bool audio; | |
61 | } cdrom_track_t; | |
62 | ||
63 | typedef struct | |
64 | { | |
65 | cdrom_track_t track[99]; /* unsigned alignment */ | |
66 | cdrom_group_timeouts_t timeouts; /* unsigned short alignment */ | |
67 | unsigned char num_tracks; | |
68 | char drive; | |
69 | } cdrom_toc_t; | |
70 | ||
71 | void cdrom_lba_to_msf(unsigned lba, unsigned char *min, unsigned char *sec, unsigned char *frame); | |
72 | ||
73 | unsigned cdrom_msf_to_lba(unsigned char min, unsigned char sec, unsigned char frame); | |
74 | ||
75 | void increment_msf(unsigned char *min, unsigned char *sec, unsigned char *frame); | |
76 | ||
77 | int cdrom_read_subq(libretro_vfs_implementation_file *stream, unsigned char *buf, size_t len); | |
78 | ||
79 | int cdrom_write_cue(libretro_vfs_implementation_file *stream, char **out_buf, size_t *out_len, char cdrom_drive, unsigned char *num_tracks, cdrom_toc_t *toc); | |
80 | ||
81 | /* needs 32 bytes for full vendor, product and version */ | |
82 | int cdrom_get_inquiry(libretro_vfs_implementation_file *stream, char *model, int len, bool *is_cdrom); | |
83 | ||
84 | int cdrom_read(libretro_vfs_implementation_file *stream, cdrom_group_timeouts_t *timeouts, unsigned char min, unsigned char sec, unsigned char frame, void *s, size_t len, size_t skip); | |
85 | ||
86 | int cdrom_set_read_speed(libretro_vfs_implementation_file *stream, unsigned speed); | |
87 | ||
88 | int cdrom_stop(libretro_vfs_implementation_file *stream); | |
89 | ||
90 | int cdrom_unlock(libretro_vfs_implementation_file *stream); | |
91 | ||
92 | int cdrom_open_tray(libretro_vfs_implementation_file *stream); | |
93 | ||
94 | int cdrom_close_tray(libretro_vfs_implementation_file *stream); | |
95 | ||
96 | /* must be freed by the caller */ | |
97 | struct string_list* cdrom_get_available_drives(void); | |
98 | ||
99 | bool cdrom_is_media_inserted(libretro_vfs_implementation_file *stream); | |
100 | ||
101 | bool cdrom_drive_has_media(const char drive); | |
102 | ||
103 | void cdrom_get_current_config_core(libretro_vfs_implementation_file *stream); | |
104 | ||
105 | void cdrom_get_current_config_profiles(libretro_vfs_implementation_file *stream); | |
106 | ||
107 | void cdrom_get_current_config_cdread(libretro_vfs_implementation_file *stream); | |
108 | ||
109 | void cdrom_get_current_config_multiread(libretro_vfs_implementation_file *stream); | |
110 | ||
111 | void cdrom_get_current_config_random_readable(libretro_vfs_implementation_file *stream); | |
112 | ||
113 | int cdrom_get_sense(libretro_vfs_implementation_file *stream, unsigned char *sense, size_t len); | |
114 | ||
115 | bool cdrom_set_read_cache(libretro_vfs_implementation_file *stream, bool enabled); | |
116 | ||
117 | bool cdrom_get_timeouts(libretro_vfs_implementation_file *stream, cdrom_group_timeouts_t *timeouts); | |
118 | ||
119 | bool cdrom_has_atip(libretro_vfs_implementation_file *stream); | |
120 | ||
121 | void cdrom_device_fillpath(char *path, size_t len, char drive, unsigned char track, bool is_cue); | |
122 | ||
123 | RETRO_END_DECLS | |
124 | ||
125 | #endif |