libnjb: play.c

- Main Page
- Modules
- Data Structures
- Files
- Directories
- Examples

# play.c

    00001 #include "common.h"
    00002 #include <signal.h>
    00003
    00004 int repeat= 1;
    00005
    00006 void stopplay (int signo);
    00007 void hhmmss (u_int16_t seconds, u_int16_t *hh, u_int16_t *mm, u_int16_t *ss);
    00008 void usage (void);
    00009
    00010 int main (int argc, char **argv)
    00011 {
    00012         njb_t njbs[NJB_MAX_DEVICES], *njb;
    00013         int i, n, status, change, opt, debug;
    00014         u_int16_t sec, hh, mm, ss;
    00015         u_int32_t trackid;
    00016         extern char *optarg;
    00017         extern int optind;
    00018
    00019         debug= 0;
    00020
    00021         while ( (opt= getopt(argc, argv, "D:")) != -1 ) {
    00022                 switch (opt) {
    00023                 case 'D':
    00024                         debug= atoi(optarg);
    00025                         break;
    00026                 default:
    00027                         break;
    00028                 }
    00029         }
    00030         argc-= optind;
    00031         argv+= optind;
    00032
    00033         if ( ! argc ) usage();
    00034
    00035         if ( debug ) NJB_Set_Debug(debug);
    00036
    00037         signal(SIGINT, stopplay);
    00038
    00039         if (NJB_Discover(njbs, 0, &n) == -1) {
    00040           fprintf(stderr, "could not locate any jukeboxes\n");
    00041           return 1;
    00042         }
    00043
    00044         if ( n == 0 ) {
    00045                 fprintf(stderr, "no NJB devices found\n");
    00046                 return 0;
    00047         }
    00048
    00049         njb= njbs;
    00050
    00051         if ( NJB_Open(njb) == -1 ) {
    00052                 NJB_Error_Dump(njb,stderr);
    00053                 return 1;
    00054         }
    00055
    00056         if ( NJB_Capture(njb) == -1 ) {
    00057                 NJB_Error_Dump(njb,stderr);
    00058                 return 1;
    00059         }
    00060
    00061         for (i= 0; i< argc; i++) {
    00062                 trackid= strtoul(argv[i], NULL, 10);
    00063
    00064                 if ( i == 0 ) {
    00065                         status= NJB_Play_Track(njb, trackid);
    00066                 } else {
    00067                         status= NJB_Queue_Track(njb, trackid);
    00068                 }
    00069
    00070                 if ( status == -1 ) NJB_Error_Dump(njb,stderr);
    00071         }
    00072
    00073         printf("---> Hit ^C to exit <---\n");
    00074
    00075         change= 0;
    00076         i= 0;
    00077         printf("Track ID %10.10s: 00:00:00\b\b\b\b\b\b\b", argv[i]);
    00078         fflush(stdout);
    00079         while ( repeat ) {
    00080                 if ( change ) {
    00081                         i++;
    00082                         if ( i == argc ) {
    00083                                 repeat= 0;
    00084                         } else {
    00085                                 printf("\rTrack ID %10.10s: 00:00:00\b\b\b\b\b\b\b",
    00086                                         argv[i]);
    00087                                 fflush(stdout);
    00088                         }
    00089                         change= 0;
    00090                 } else
    00091                         NJB_Elapsed_Time(njb, &sec, &change);
    00092                 hhmmss(sec, &hh, &mm, &ss);
    00093                 printf("%02u:%02u:%02u\b\b\b\b\b\b\b\b", hh, mm, ss);
    00094                 fflush(stdout);
    00095
    00096                 sleep(1);
    00097         }
    00098         printf("\n");
    00099
    00100         NJB_Stop_Play(njb);
    00101
    00102         NJB_Release(njb);
    00103
    00104         NJB_Close(njb);
    00105         return 0;
    00106 }
    00107
    00108 void stopplay (int signo)
    00109 {
    00110         repeat= 0;
    00111 }
    00112
    00113 void hhmmss (u_int16_t seconds, u_int16_t *hh, u_int16_t *mm, u_int16_t *ss)
    00114 {
    00115         if ( seconds >= 3600 ) *hh= seconds/3600;
    00116         seconds-= 3600*(*hh);
    00117         if ( seconds >= 60 ) *mm= seconds/60;
    00118         *ss= seconds-(60*(*mm));
    00119 }
    00120
    00121 void usage (void) {
    00122         fprintf(stderr, "usage: play [ -D debuglvl ] <trackid> ...\n");
    00123         exit(1);
    00124 }