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 }

Generated on Mon Sep 11 00:52:12 2006 for libnjb by  doxygen 1.4.7