| 
									
										
										
										
											2012-05-22 17:09:48 +00:00
										 |  |  | #include "getfile.h"
 | 
					
						
							|  |  |  | #include <QDir>
 | 
					
						
							|  |  |  | #include <stdio.h>
 | 
					
						
							|  |  |  | #include <stdlib.h>
 | 
					
						
							|  |  |  | #include <math.h>
 | 
					
						
							| 
									
										
										
										
											2012-11-16 15:57:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #ifdef WIN32
 | 
					
						
							| 
									
										
										
										
											2012-10-28 15:47:43 +00:00
										 |  |  | #include <windows.h>
 | 
					
						
							| 
									
										
										
										
											2012-11-16 15:57:42 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2012-05-22 17:09:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-26 15:20:43 +00:00
										 |  |  | void getfile(QString fname, int ntrperiod) | 
					
						
							| 
									
										
										
										
											2012-05-22 17:09:48 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   char name[80]; | 
					
						
							|  |  |  |   strcpy(name,fname.toAscii()); | 
					
						
							|  |  |  |   FILE* fp=fopen(name,"rb"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-20 21:12:06 +00:00
										 |  |  |   int i0=fname.indexOf(".wav"); | 
					
						
							|  |  |  |   jt9com_.nutc=0; | 
					
						
							|  |  |  |   if(i0>0) jt9com_.nutc=100*fname.mid(i0-4,2).toInt() + | 
					
						
							|  |  |  |       fname.mid(i0-2,2).toInt(); | 
					
						
							| 
									
										
										
										
											2012-09-26 15:20:43 +00:00
										 |  |  |   int npts=ntrperiod*12000; | 
					
						
							| 
									
										
										
										
											2012-10-03 15:42:13 +00:00
										 |  |  |   memset(jt9com_.d2,0,2*npts); | 
					
						
							| 
									
										
										
										
											2012-05-22 17:09:48 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-05 16:16:03 +00:00
										 |  |  |   if(fp != NULL) { | 
					
						
							| 
									
										
										
										
											2012-07-06 20:31:42 +00:00
										 |  |  | // Read (and ignore) a 44-byte WAV header; then read data
 | 
					
						
							| 
									
										
										
										
											2012-10-03 15:42:13 +00:00
										 |  |  |     fread(jt9com_.d2,1,44,fp); | 
					
						
							| 
									
										
										
										
											2012-11-18 14:02:50 +00:00
										 |  |  | //    fread(jt9com_.d2,2,30000,fp);
 | 
					
						
							| 
									
										
										
										
											2012-11-14 17:02:54 +00:00
										 |  |  |     fread(jt9com_.d2,2,npts,fp); | 
					
						
							| 
									
										
										
										
											2012-05-22 17:09:48 +00:00
										 |  |  |     fclose(fp); | 
					
						
							| 
									
										
										
										
											2012-11-01 19:54:40 +00:00
										 |  |  |     jt9com_.newdat=1; | 
					
						
							| 
									
										
										
										
											2012-05-22 17:09:48 +00:00
										 |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-26 15:20:43 +00:00
										 |  |  | void savewav(QString fname, int ntrperiod) | 
					
						
							| 
									
										
										
										
											2012-05-22 17:09:48 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2012-07-05 19:18:58 +00:00
										 |  |  |   struct { | 
					
						
							| 
									
										
										
										
											2012-11-02 14:18:01 +00:00
										 |  |  |     char ariff[4];         //ChunkID:    "RIFF"
 | 
					
						
							|  |  |  |     int nchunk;            //ChunkSize: 36+SubChunk2Size
 | 
					
						
							|  |  |  |     char awave[4];         //Format: "WAVE"
 | 
					
						
							|  |  |  |     char afmt[4];          //Subchunk1ID: "fmt "
 | 
					
						
							|  |  |  |     int lenfmt;            //Subchunk1Size: 16
 | 
					
						
							|  |  |  |     short int nfmt2;       //AudioFormat: 1
 | 
					
						
							|  |  |  |     short int nchan2;      //NumChannels: 1
 | 
					
						
							|  |  |  |     int nsamrate;          //SampleRate: 12000
 | 
					
						
							|  |  |  |     int nbytesec;          //ByteRate: SampleRate*NumChannels*BitsPerSample/8
 | 
					
						
							|  |  |  |     short int nbytesam2;   //BlockAlign: NumChannels*BitsPerSample/8
 | 
					
						
							|  |  |  |     short int nbitsam2;    //BitsPerSample: 16
 | 
					
						
							|  |  |  |     char adata[4];         //Subchunk2ID: "data"
 | 
					
						
							|  |  |  |     int ndata;             //Subchunk2Size: numSamples*NumChannels*BitsPerSample/8
 | 
					
						
							| 
									
										
										
										
											2012-07-05 19:18:58 +00:00
										 |  |  |   } hdr; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-09-26 15:20:43 +00:00
										 |  |  |   int npts=ntrperiod*12000; | 
					
						
							| 
									
										
										
										
											2012-07-05 16:16:03 +00:00
										 |  |  | //  qint16* buf=(qint16*)malloc(2*npts);
 | 
					
						
							| 
									
										
										
										
											2012-05-22 17:09:48 +00:00
										 |  |  |   char name[80]; | 
					
						
							|  |  |  |   strcpy(name,fname.toAscii()); | 
					
						
							|  |  |  |   FILE* fp=fopen(name,"wb"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if(fp != NULL) { | 
					
						
							| 
									
										
										
										
											2012-07-05 16:16:03 +00:00
										 |  |  | // Write a WAV header
 | 
					
						
							| 
									
										
										
										
											2012-07-05 19:18:58 +00:00
										 |  |  |     hdr.ariff[0]='R'; | 
					
						
							|  |  |  |     hdr.ariff[1]='I'; | 
					
						
							|  |  |  |     hdr.ariff[2]='F'; | 
					
						
							|  |  |  |     hdr.ariff[3]='F'; | 
					
						
							| 
									
										
										
										
											2012-11-02 14:18:01 +00:00
										 |  |  |     hdr.nchunk=36 + 2*npts; | 
					
						
							| 
									
										
										
										
											2012-07-05 19:18:58 +00:00
										 |  |  |     hdr.awave[0]='W'; | 
					
						
							| 
									
										
										
										
											2012-11-02 14:18:01 +00:00
										 |  |  |     hdr.awave[1]='A'; | 
					
						
							|  |  |  |     hdr.awave[2]='V'; | 
					
						
							|  |  |  |     hdr.awave[3]='E'; | 
					
						
							| 
									
										
										
										
											2012-07-05 19:18:58 +00:00
										 |  |  |     hdr.afmt[0]='f'; | 
					
						
							|  |  |  |     hdr.afmt[1]='m'; | 
					
						
							|  |  |  |     hdr.afmt[2]='t'; | 
					
						
							|  |  |  |     hdr.afmt[3]=' '; | 
					
						
							|  |  |  |     hdr.lenfmt=16; | 
					
						
							|  |  |  |     hdr.nfmt2=1; | 
					
						
							|  |  |  |     hdr.nchan2=1; | 
					
						
							| 
									
										
										
										
											2012-09-26 15:20:43 +00:00
										 |  |  |     hdr.nsamrate=12000; | 
					
						
							|  |  |  |     hdr.nbytesec=2*12000; | 
					
						
							| 
									
										
										
										
											2012-07-05 19:18:58 +00:00
										 |  |  |     hdr.nbytesam2=2; | 
					
						
							|  |  |  |     hdr.nbitsam2=16; | 
					
						
							|  |  |  |     hdr.adata[0]='d'; | 
					
						
							|  |  |  |     hdr.adata[1]='a'; | 
					
						
							|  |  |  |     hdr.adata[2]='t'; | 
					
						
							|  |  |  |     hdr.adata[3]='a'; | 
					
						
							|  |  |  |     hdr.ndata=2*npts; | 
					
						
							| 
									
										
										
										
											2012-07-05 16:16:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-05 19:18:58 +00:00
										 |  |  |     fwrite(&hdr,sizeof(hdr),1,fp); | 
					
						
							| 
									
										
										
										
											2012-10-03 15:42:13 +00:00
										 |  |  | //    memcpy(jt9com_.d2,buf,2*npts);
 | 
					
						
							| 
									
										
										
										
											2012-07-05 16:16:03 +00:00
										 |  |  | //    fwrite(buf,2,npts,fp);
 | 
					
						
							| 
									
										
										
										
											2012-10-03 15:42:13 +00:00
										 |  |  |     fwrite(jt9com_.d2,2,npts,fp); | 
					
						
							| 
									
										
										
										
											2012-05-22 17:09:48 +00:00
										 |  |  |     fclose(fp); | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2012-07-05 16:16:03 +00:00
										 |  |  | //  free(buf);
 | 
					
						
							| 
									
										
										
										
											2012-05-22 17:09:48 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //#define	MAX_RANDOM	0x7fffffff
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Generate gaussian random float with mean=0 and std_dev=1 */ | 
					
						
							|  |  |  | float gran() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   float fac,rsq,v1,v2; | 
					
						
							|  |  |  |   static float gset; | 
					
						
							|  |  |  |   static int iset; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if(iset){ | 
					
						
							|  |  |  |     /* Already got one */ | 
					
						
							|  |  |  |     iset = 0; | 
					
						
							|  |  |  |     return gset; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   /* Generate two evenly distributed numbers between -1 and +1
 | 
					
						
							|  |  |  |    * that are inside the unit circle | 
					
						
							|  |  |  |    */ | 
					
						
							|  |  |  |   do { | 
					
						
							|  |  |  |     v1 = 2.0 * (float)rand() / RAND_MAX - 1; | 
					
						
							|  |  |  |     v2 = 2.0 * (float)rand() / RAND_MAX - 1; | 
					
						
							|  |  |  |     rsq = v1*v1 + v2*v2; | 
					
						
							|  |  |  |   } while(rsq >= 1.0 || rsq == 0.0); | 
					
						
							|  |  |  |   fac = sqrt(-2.0*log(rsq)/rsq); | 
					
						
							|  |  |  |   gset = v1*fac; | 
					
						
							|  |  |  |   iset++; | 
					
						
							|  |  |  |   return v2*fac; | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-10-28 15:47:43 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | int ptt(int nport, int ntx, int *iptt) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2012-11-16 15:57:42 +00:00
										 |  |  | #ifdef WIN32
 | 
					
						
							| 
									
										
										
										
											2012-10-28 15:47:43 +00:00
										 |  |  |   static HANDLE hFile; | 
					
						
							|  |  |  |   static int open=0; | 
					
						
							|  |  |  |   char s[10]; | 
					
						
							|  |  |  |   int i3=1,i4=1,i5=1,i6=1,i9=1,i00=1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if(nport==0) { | 
					
						
							|  |  |  |     *iptt=ntx; | 
					
						
							|  |  |  |     return(0); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if(ntx && (!open)) { | 
					
						
							| 
									
										
										
										
											2012-11-19 16:45:42 +00:00
										 |  |  |     sprintf(s,"\\\\.\\COM%d",nport); | 
					
						
							| 
									
										
										
										
											2012-10-28 15:47:43 +00:00
										 |  |  |     hFile=CreateFile(TEXT(s),GENERIC_WRITE,0,NULL,OPEN_EXISTING, | 
					
						
							|  |  |  |                      FILE_ATTRIBUTE_NORMAL,NULL); | 
					
						
							|  |  |  |     if(hFile==INVALID_HANDLE_VALUE) { | 
					
						
							|  |  |  |       //      printf("PTT: Cannot open COM port %d.\n",nport);
 | 
					
						
							|  |  |  |       return 1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     open=1; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if(ntx && open) { | 
					
						
							|  |  |  |     i3=EscapeCommFunction(hFile,SETRTS); | 
					
						
							|  |  |  |     i5=EscapeCommFunction(hFile,SETDTR); | 
					
						
							|  |  |  |     *iptt=1; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   else { | 
					
						
							|  |  |  |     i4=EscapeCommFunction(hFile,CLRRTS); | 
					
						
							|  |  |  |     i6=EscapeCommFunction(hFile,CLRDTR); | 
					
						
							|  |  |  |     i9=EscapeCommFunction(hFile,CLRBREAK); | 
					
						
							|  |  |  |     i00=CloseHandle(hFile); | 
					
						
							|  |  |  |     *iptt=0; | 
					
						
							|  |  |  |     open=0; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2012-11-19 16:45:42 +00:00
										 |  |  |   /*
 | 
					
						
							| 
									
										
										
										
											2012-10-28 15:47:43 +00:00
										 |  |  |   if(i3==0) return -(SETRTS); | 
					
						
							|  |  |  |   if(i4==0) return -(CLRRTS); | 
					
						
							|  |  |  |   if(i5==0) return -(SETDTR); | 
					
						
							|  |  |  |   if(i6==0) return -(CLRDTR); | 
					
						
							|  |  |  |   if(i9==0) return -(CLRBREAK); | 
					
						
							|  |  |  |   if(i00==0) return -10; | 
					
						
							| 
									
										
										
										
											2012-11-19 16:45:42 +00:00
										 |  |  |   */ | 
					
						
							| 
									
										
										
										
											2012-10-28 15:47:43 +00:00
										 |  |  |   return 0; | 
					
						
							| 
									
										
										
										
											2012-11-16 15:57:42 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2012-10-28 15:47:43 +00:00
										 |  |  | } |