DF-5719 / subq_test.c
/* subq_test.c -- isolate CDIOCREADSUBCHANNEL parameters */ #include <sys/types.h> #include <sys/ioctl.h> #include <sys/cdio.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> int main(int argc, char **argv) { const char *dev = argv[1]; int len = atoi(argv[2]); int track = atoi(argv[3]); int af = argc > 4 ? atoi(argv[4]) : CD_MSF_FORMAT; int df = argc > 5 ? atoi(argv[5]) : CD_CURRENT_POSITION; struct cd_sub_channel_info data; struct ioc_read_subchannel args; int fd = open(dev, O_RDONLY | O_NONBLOCK); printf("sizeof(cd_sub_channel_info)=%zu header=%zu\n", sizeof(data), sizeof(struct cd_sub_channel_header)); if (fd < 0) { printf("open: %s\n", strerror(errno)); return (2); } memset(&args, 0, sizeof(args)); memset(&data, 0, sizeof(data)); args.address_format = af; args.data_format = df; args.track = (u_char)track; args.data_len = len; args.data = &data; if (ioctl(fd, CDIOCREADSUBCHANNEL, &args) != 0) { printf("len=%d track=%d af=%d df=%d -> %s\n", len, track, af, df, strerror(errno)); return (1); } printf("len=%d track=%d af=%d df=%d -> OK returned track=%u " "audio_status=0x%02x\n", len, track, af, df, (unsigned)args.track, (unsigned)data.header.audio_status); return (0); } |