Mercurial > pygar
comparison modules/bluespec/Pygar/core/AudioCoreSystem.cpp @ 13:6d461680c6d9 pygar svn.14
[svn r14] more stuff
author | punk |
---|---|
date | Tue, 27 Apr 2010 09:03:28 -0400 |
parents | |
children | 90197e3375e2 |
comparison
equal
deleted
inserted
replaced
12:394aa40fd812 | 13:6d461680c6d9 |
---|---|
1 #include <stdio.h> | |
2 #include <pthread.h> | |
3 #include <semaphore.h> | |
4 | |
5 #include "asim/provides/connected_application.h" | |
6 #include "asim/provides/stats_device.h" | |
7 //#include "asim/provides/SndfileWavUtil.h" | |
8 | |
9 #include "asim/rrr/client_stub_AUDIOCORERRR.h" | |
10 | |
11 using namespace std; | |
12 | |
13 pthread_mutex_t CONNECTED_APPLICATION_CLASS::lock; | |
14 pthread_cond_t CONNECTED_APPLICATION_CLASS::cond; | |
15 sem_t CONNECTED_APPLICATION_CLASS::throttle; | |
16 | |
17 // constructor | |
18 CONNECTED_APPLICATION_CLASS::CONNECTED_APPLICATION_CLASS(VIRTUAL_PLATFORM vp) : | |
19 clientStub(new AUDIOCORERRR_CLIENT_STUB_CLASS(this)) | |
20 { | |
21 } | |
22 | |
23 // destructor | |
24 CONNECTED_APPLICATION_CLASS::~CONNECTED_APPLICATION_CLASS() | |
25 { | |
26 } | |
27 | |
28 // init | |
29 void | |
30 CONNECTED_APPLICATION_CLASS::Init() | |
31 { | |
32 | |
33 pthread_mutex_init(&lock, NULL); | |
34 pthread_cond_init(&cond, NULL); | |
35 sem_init(&throttle, 0, 64); | |
36 | |
37 // enable stats | |
38 STATS_DEVICE_SERVER_CLASS::GetInstance()->SetupStats(); | |
39 } | |
40 | |
41 void | |
42 CONNECTED_APPLICATION_CLASS::UpdateSemaphore() | |
43 { | |
44 sem_post(&throttle); | |
45 } | |
46 | |
47 void | |
48 CONNECTED_APPLICATION_CLASS::EndSimulation() | |
49 { | |
50 printf("EndSimulation Called\n"); | |
51 fflush(stdout); | |
52 pthread_mutex_lock(&lock); | |
53 // Do something about the race occuring here | |
54 pthread_cond_signal(&cond); | |
55 pthread_mutex_unlock(&lock); | |
56 printf("EndSimulation done\n"); | |
57 fflush(stdout); | |
58 } | |
59 | |
60 // main | |
61 void | |
62 CONNECTED_APPLICATION_CLASS::Main() | |
63 { | |
64 FILE *inputFile; | |
65 UINT16 sample; | |
66 | |
67 // Convert input wav to pcm | |
68 generate_pcm("input.wav","input.pcm"); | |
69 | |
70 //Send data to the machine here. | |
71 inputFile = fopen("input.pcm","r"); | |
72 assert(inputFile); | |
73 | |
74 | |
75 int count = 0; | |
76 | |
77 printf("main: about to enter loop %d\n", count); | |
78 | |
79 while(fread(&sample, 2, 1, inputFile)) { | |
80 if(count%1000 == 0) | |
81 printf("main: %d\n", count); | |
82 count++; | |
83 sem_wait(&throttle); | |
84 clientStub->SendUnprocessedStream(Data,(UINT32)sample); | |
85 } | |
86 | |
87 printf("main: out of loop\n"); | |
88 | |
89 // Need to put lock here to prevent potential race condition | |
90 pthread_mutex_lock(&lock); | |
91 clientStub->SendUnprocessedStream(EndOfFile,0); | |
92 | |
93 printf("main: wait for end of file\n"); | |
94 | |
95 pthread_cond_wait(&cond, &lock); | |
96 pthread_mutex_unlock(&lock); | |
97 | |
98 printf("main: lastt data out\n"); | |
99 | |
100 // Convert input wav to pcm | |
101 generate_wav("out_hw.pcm","input.wav","out_hw.wav"); | |
102 | |
103 printf("generate wav done\n"); | |
104 | |
105 fflush(stdout); | |
106 exit(0); | |
107 } | |
108 | |
109 /* THIS IS THE CODE HANDLING FROM THE REGULAR SOFT-CORE | |
110 TO BE INCORPORATED | |
111 // main | |
112 void | |
113 CONNECTED_APPLICATION_CLASS::Main() | |
114 { | |
115 int sleepCount = 0; | |
116 int result = 0; | |
117 | |
118 fflush(stdout); | |
119 | |
120 while ((result = clientStub->ReadCPUToHost(0)) != 1) { | |
121 sleep(1); | |
122 //printf("System controller sleeps with result: %d\n", result); | |
123 sleepCount++; | |
124 if(sleepCount == 100) { | |
125 printf("Failed to get response from hardware, bailing\n\n"); | |
126 printf("This means that either your hardware is hanging\n"); | |
127 printf("or that the software hasn't given it enough time\n"); | |
128 printf("to complete. If you think it needs more time, then\n"); | |
129 printf("edit CONNECTED_APPLICATION_CLASS::Main() in ProcessorSystem.cpp\n"); | |
130 printf("(connected_application)\n"); | |
131 exit(0); | |
132 } | |
133 } | |
134 | |
135 if(result == 1) { | |
136 printf("\n***PASSED***\n"); | |
137 } | |
138 | |
139 // Dump the stats file | |
140 | |
141 STATS_DEVICE_SERVER_CLASS::GetInstance()->DumpStats(); | |
142 STATS_DEVICE_SERVER_CLASS::GetInstance()->EmitFile(); | |
143 | |
144 fflush(stdout); | |
145 exit(0); | |
146 }*/ |