1
2 #include "osd_freebsd_cd.h"
3
4
5 int cd_drive_handle = 0;
6
7
osd_cd_init(char * device)8 int osd_cd_init(char *device)
9 {
10 /*
11 Log("Init linux cdrom device\n");
12
13 if (strcmp(device, ""))
14 cd_drive_handle = open(device, O_RDONLY | O_NONBLOCK);
15 else
16 cd_drive_handle = open("/dev/cdrom", O_RDONLY | O_NONBLOCK);
17
18 return (cd_drive_handle == 0);
19 */
20 }
21
22
osd_cd_stop_audio()23 void osd_cd_stop_audio()
24 {
25 /*
26 if (ioctl(cd_drive_handle, CDROMSTOP) == -1)
27 perror("osd_cd_stop_audio");
28 */
29 }
30
31
osd_cd_close()32 void osd_cd_close()
33 {
34 /*
35 osd_cd_stop_audio();
36 close(cd_drive_handle);
37 */
38 }
39
40
osd_cd_read(UChar * p,UInt32 sector)41 void osd_cd_read(UChar *p, UInt32 sector)
42 {
43 /*
44 int retries = 0;
45 char buf[128];
46
47 while ((lseek(cd_drive_handle, 2048 * sector, SEEK_SET) < 0) && (retries < 3)) {
48 sprintf(buf, "osd_cd_read:lseek (sector=%d, retry=%d)", sector, retries);
49 perror(buf);
50 retries++;
51 }
52
53 while ((read(cd_drive_handle, p, 2048) < 0) && (retries++ < 3)) {
54 sprintf(buf, "osd_cd_read:read (sector=%d, retry=%d)", sector, retries);
55 perror(buf);
56 }
57 */
58 }
59
60 extern unsigned char binbcd[];
61
osd_cd_subchannel_info(unsigned short offset)62 void osd_cd_subchannel_info(unsigned short offset)
63 {
64 /*
65 struct cdrom_subchnl subc;
66
67 subc.cdsc_format = CDROM_MSF;
68
69 if (ioctl(cd_drive_handle, CDROMSUBCHNL, &subc) == -1)
70 perror("osd_cd_subchannel_info");
71 */
72
73 /*
74 switch(subc.cdsc_audiostatus) {
75 case CDROM_AUDIO_PLAY:
76 put_8bit_addr(offset, 0);
77 break;
78 case CDROM_AUDIO_PAUSED:
79 put_8bit_addr(offset, 1);
80 break;
81 case CDROM_AUDIO_COMPLETED:
82 put_8bit_addr(offset, 3);
83 break;
84 default:
85 put_8bit_addr(offset, 4);
86 break;
87 }
88 */
89
90 /*
91 put_8bit_addr(offset, subc.cdsc_audiostatus - 0x11);
92
93 put_8bit_addr(offset + 1, subc.cdsc_ctrl);
94 put_8bit_addr(offset + 2, binbcd[subc.cdsc_trk]);
95 put_8bit_addr(offset + 3, binbcd[subc.cdsc_ind]);
96 put_8bit_addr(offset + 4, binbcd[subc.cdsc_reladdr.msf.minute]);
97 put_8bit_addr(offset + 5, binbcd[subc.cdsc_reladdr.msf.second]);
98 put_8bit_addr(offset + 6, binbcd[subc.cdsc_reladdr.msf.frame]);
99 put_8bit_addr(offset + 7, binbcd[subc.cdsc_absaddr.msf.minute]);
100 put_8bit_addr(offset + 8, binbcd[subc.cdsc_absaddr.msf.second]);
101 put_8bit_addr(offset + 9, binbcd[subc.cdsc_absaddr.msf.frame]);
102 */
103 }
104
105
osd_cd_status(int * status)106 void osd_cd_status(int *status)
107 {
108 /*
109 struct cdrom_subchnl subc;
110
111 subc.cdsc_format = CDROM_MSF;
112
113 if (ioctl(cd_drive_handle, CDROMSUBCHNL, &subc) == -1)
114 perror("osd_cd_status");
115
116 *status = subc.cdsc_audiostatus - 0x10;
117 // switch(subc.cdsc_audiostatus) {
118 // case CDROM_AUDIO_PLAY:
119 // *status = 1;
120 // break;
121 // default:
122 // *status = subc.cdsc_audiostatus;
123 // break;
124 // }
125 */
126 }
127
128
osd_cd_track_info(UChar track,int * min,int * sec,int * fra,int * control)129 void osd_cd_track_info(UChar track, int *min, int *sec, int *fra, int *control)
130 {
131 /*
132 struct cdrom_tocentry tocentry;
133
134 tocentry.cdte_track = track;
135 tocentry.cdte_format = CDROM_MSF;
136
137 if (ioctl(cd_drive_handle, CDROMREADTOCENTRY, &tocentry) == -1)
138 perror("osd_cd_track_info");
139
140 // Log("Track %d begins at %d and got command byte of %d\n", track,
141 // tocentry.cdte_addr.lba + 150, tocentry.cdte_ctrl);
142
143 // Frame2Time(tocentry.cdte_addr.lba + 150, min, sec, fra);
144
145 *min = tocentry.cdte_addr.msf.minute;
146 *sec = tocentry.cdte_addr.msf.second;
147 *fra = tocentry.cdte_addr.msf.frame;
148 *control = tocentry.cdte_ctrl;
149 */
150 }
151
152
osd_cd_nb_tracks(int * first,int * last)153 void osd_cd_nb_tracks(int *first, int *last)
154 {
155 /*
156 struct cdrom_tochdr track_info;
157
158 if (ioctl(cd_drive_handle, CDROMREADTOCHDR, &track_info) == -1)
159 perror("cd_nb_tracks");
160
161 *first = track_info.cdth_trk0;
162 *last = track_info.cdth_trk1;
163 */
164 }
165
166
osd_cd_length(int * min,int * sec,int * fra)167 void osd_cd_length(int *min, int *sec, int *fra)
168 {
169 /*
170 struct cdrom_tocentry toc_info;
171
172 toc_info.cdte_track = CDROM_LEADOUT;
173 toc_info.cdte_format = CDROM_MSF;
174
175 if (ioctl(cd_drive_handle, CDROMREADTOCENTRY, &toc_info) == -1)
176 perror("cd_length");
177
178 *min = toc_info.cdte_addr.msf.minute;
179 *sec = toc_info.cdte_addr.msf.second;
180 *fra = toc_info.cdte_addr.msf.frame;
181 */
182 }
183
184
osd_cd_pause(void)185 void osd_cd_pause(void)
186 {
187 /*
188 if (ioctl(cd_drive_handle, CDROMPAUSE) == -1)
189 perror("osd_cd_pause");
190 */
191 }
192
193
osd_cd_resume(void)194 void osd_cd_resume(void)
195 {
196 /*
197 if (ioctl(cd_drive_handle, CDROMRESUME) == -1)
198 perror("osd_cd_resume");
199 */
200 }
201
202
203 /* TODO : check for last track asked */
osd_cd_play_audio_track(UChar track)204 void osd_cd_play_audio_track(UChar track)
205 {
206 /*
207 struct cdrom_ti cdrom_ti_dat =
208 {
209 track,
210 0,
211 track + 1,
212 0
213 };
214
215 if (ioctl(cd_drive_handle, CDROMPLAYTRKIND, &cdrom_ti_dat) == -1)
216 perror("play_audio_track");
217 */
218 }
219
220
osd_cd_play_audio_range(UChar min_from,UChar sec_from,UChar fra_from,UChar min_to,UChar sec_to,UChar fra_to)221 void osd_cd_play_audio_range(UChar min_from, UChar sec_from, UChar fra_from,
222 UChar min_to, UChar sec_to, UChar fra_to)
223 {
224 /*
225 struct cdrom_msf cdrom_msf_dat =
226 {
227 min_from,
228 sec_from,
229 fra_from,
230 min_to,
231 sec_to,
232 fra_to
233 };
234
235 if (ioctl(cd_drive_handle, CDROMPLAYMSF, &cdrom_msf_dat) == -1)
236 perror("play_audio_range");
237 */
238 }
239