punk@13
|
1 #include <cstdio>
|
punk@13
|
2 #include <cstdlib>
|
punk@13
|
3 #include <iostream>
|
punk@13
|
4 #include <iomanip>
|
punk@13
|
5 #include <stdio.h>
|
punk@13
|
6 #include <sys/stat.h>
|
punk@13
|
7
|
punk@13
|
8 #include "asim/rrr/service_ids.h"
|
punk@13
|
9
|
punk@13
|
10 #include "asim/provides/connected_application.h"
|
punk@13
|
11
|
punk@13
|
12 using namespace std;
|
punk@13
|
13
|
punk@13
|
14 // ===== service instantiation =====
|
punk@13
|
15 AUDIOCORERRR_SERVER_CLASS AUDIOCORERRR_SERVER_CLASS::instance;
|
punk@13
|
16
|
punk@13
|
17 // constructor
|
punk@13
|
18 AUDIOCORERRR_SERVER_CLASS::AUDIOCORERRR_SERVER_CLASS() :
|
punk@15
|
19 serverStub(new AUDIOCORERRR_SERVER_STUB_CLASS(this))
|
punk@13
|
20 {
|
punk@13
|
21 // instantiate stub
|
rlm@23
|
22
|
rlm@23
|
23 printf("rlm: init called\n\n");
|
punk@13
|
24 outputFile = NULL;
|
punk@13
|
25 memory = NULL;
|
punk@13
|
26 fflush(stdout);
|
punk@52
|
27 count = 0;
|
punk@13
|
28 }
|
punk@13
|
29
|
punk@13
|
30 // destructor
|
punk@13
|
31 AUDIOCORERRR_SERVER_CLASS::~AUDIOCORERRR_SERVER_CLASS()
|
punk@13
|
32 {
|
rlm@23
|
33 printf("rlm: AUDIOCORERRR_SERVER_CLASS::~AUDIOCORERRR_SERVER_CLASS()\n");
|
punk@13
|
34 Cleanup();
|
punk@13
|
35 }
|
punk@13
|
36
|
punk@13
|
37 // init
|
punk@13
|
38 void
|
punk@13
|
39 AUDIOCORERRR_SERVER_CLASS::Init(PLATFORMS_MODULE p)
|
punk@13
|
40 {
|
rlm@23
|
41 printf("rlm: AUDIOCORERRR_SERVER_CLASS::Init(PLATFORMS_MODULE p)\n");
|
rlm@23
|
42 parent = p;
|
punk@13
|
43 }
|
punk@13
|
44
|
punk@13
|
45 // uninit
|
punk@13
|
46 void
|
punk@13
|
47 AUDIOCORERRR_SERVER_CLASS::Uninit()
|
punk@13
|
48 {
|
rlm@23
|
49 printf("rlm: AUDIOCORERRR_SERVER_CLASS::Uninit()\n");
|
rlm@23
|
50 Cleanup();
|
punk@13
|
51 }
|
punk@13
|
52
|
punk@13
|
53 // cleanup
|
punk@13
|
54 void
|
punk@13
|
55 AUDIOCORERRR_SERVER_CLASS::Cleanup()
|
punk@13
|
56 {
|
rlm@23
|
57 printf("rlm: AUDIOCORERRR_SERVER_CLASS::Cleanup() \n\n");
|
rlm@23
|
58 delete serverStub;
|
punk@13
|
59 }
|
punk@13
|
60
|
punk@13
|
61
|
punk@13
|
62 //
|
punk@13
|
63 // RRR service methods
|
punk@13
|
64 //
|
punk@13
|
65
|
punk@33
|
66 /* Not used by scratchpad
|
punk@13
|
67 UINT32
|
punk@13
|
68 AUDIOCORERRR_SERVER_CLASS::MemoryRequestLoad (UINT32 address)
|
punk@13
|
69 {
|
punk@13
|
70 UINT32 returnVal;
|
rlm@23
|
71 printf("rlm: AUDIOCORERRR_SERVER_CLASS::MemoryRequestLoad (UINT32 address)\n");
|
punk@13
|
72 if(memory == NULL) {
|
punk@13
|
73 memory = new FUNCP_SIMULATED_MEMORY_CLASS();
|
punk@13
|
74 }
|
punk@13
|
75
|
punk@13
|
76
|
punk@13
|
77 memory->Read(0,(UINT64) address, sizeof(UINT32), &returnVal);
|
punk@13
|
78 return returnVal;
|
punk@13
|
79 }
|
punk@13
|
80
|
punk@13
|
81 void
|
punk@13
|
82 AUDIOCORERRR_SERVER_CLASS::MemoryRequestStore (UINT32 address, UINT32 data)
|
punk@13
|
83 {
|
rlm@23
|
84 printf("rlm: AUDIOCORERRR_SERVER_CLASS::MemoryRequestStore (UINT32 address, UINT32 data)\n");
|
punk@13
|
85 if(memory == NULL) {
|
punk@13
|
86 memory = new FUNCP_SIMULATED_MEMORY_CLASS();
|
punk@13
|
87 }
|
punk@13
|
88
|
punk@13
|
89 memory->Write(0,(UINT64) address, sizeof(UINT32), &data);
|
punk@22
|
90 }
|
punk@33
|
91 */
|
punk@13
|
92
|
punk@13
|
93 void
|
punk@52
|
94 AUDIOCORERRR_SERVER_CLASS::SendTerminate(UINT32 flag)
|
punk@52
|
95 {
|
punk@52
|
96 printf("lsp: Received Process Termination\n");
|
punk@52
|
97 CONNECTED_APPLICATION_CLASS::EndSimulation();
|
punk@52
|
98 }
|
punk@52
|
99
|
punk@52
|
100 void
|
punk@13
|
101
|
punk@13
|
102 AUDIOCORERRR_SERVER_CLASS::SendProcessedStream(UINT16 control, UINT16 data)
|
punk@13
|
103 {
|
punk@13
|
104
|
punk@25
|
105 // printf("rlm: SendProcessedStream called,\n");
|
punk@13
|
106 AudioProcessorControl audioProcessorControl = (AudioProcessorControl) control;
|
punk@13
|
107 switch(control) {
|
punk@13
|
108 case EndOfFile:
|
punk@13
|
109 if(outputFile != NULL) {
|
rlm@23
|
110 printf("rlm: FILE is NULL\n");
|
punk@13
|
111 fflush(outputFile);
|
punk@13
|
112 fclose(outputFile);
|
punk@13
|
113 outputFile = NULL;
|
punk@13
|
114 } else {
|
rlm@23
|
115 printf("rlm: Opening file for output.\n");
|
punk@13
|
116 outputFile = fopen("out_hw.pcm","w");
|
punk@13
|
117 assert(outputFile);
|
punk@13
|
118 fflush(outputFile);
|
punk@13
|
119 fclose(outputFile);
|
punk@13
|
120 }
|
punk@13
|
121
|
punk@13
|
122 // Long term this should be in the data portion. But until I have code running, keep it here.
|
punk@52
|
123 count++;
|
punk@52
|
124 if (count == 2)
|
punk@52
|
125 CONNECTED_APPLICATION_CLASS::EndSimulation();
|
punk@13
|
126 break;
|
punk@13
|
127
|
punk@13
|
128 case Data:
|
punk@13
|
129 if(outputFile == NULL) {
|
punk@13
|
130 outputFile = fopen("out_hw.pcm","w");
|
punk@13
|
131 assert(outputFile);
|
punk@13
|
132 }
|
punk@13
|
133
|
rlm@23
|
134 CONNECTED_APPLICATION_CLASS::UpdateSemaphore();
|
punk@25
|
135 // printf("rlm: writing data to out_hw.pcm\n");
|
punk@13
|
136 fwrite(&data, 2,1 , outputFile);
|
punk@13
|
137 break;
|
punk@13
|
138 }
|
punk@13
|
139 }
|