Don't error on unused-function.
[rtaudio-cdist.git] / include / asiodrivers.cpp
1 #include <string.h>\r
2 #include "asiodrivers.h"\r
3 \r
4 AsioDrivers* asioDrivers = 0;\r
5 \r
6 bool loadAsioDriver(char *name);\r
7 \r
8 bool loadAsioDriver(char *name)\r
9 {\r
10         if(!asioDrivers)\r
11                 asioDrivers = new AsioDrivers();\r
12         if(asioDrivers)\r
13                 return asioDrivers->loadDriver(name);\r
14         return false;\r
15 }\r
16 \r
17 //------------------------------------------------------------------------------------\r
18 \r
19 #if MAC\r
20 \r
21 bool resolveASIO(unsigned long aconnID);\r
22 \r
23 AsioDrivers::AsioDrivers() : CodeFragments("ASIO Drivers", 'AsDr', 'Asio')\r
24 {\r
25         connID = -1;\r
26         curIndex = -1;\r
27 }\r
28 \r
29 AsioDrivers::~AsioDrivers()\r
30 {\r
31         removeCurrentDriver();\r
32 }\r
33 \r
34 bool AsioDrivers::getCurrentDriverName(char *name)\r
35 {\r
36         if(curIndex >= 0)\r
37                 return getName(curIndex, name);\r
38         return false;\r
39 }\r
40 \r
41 long AsioDrivers::getDriverNames(char **names, long maxDrivers)\r
42 {\r
43         for(long i = 0; i < getNumFragments() && i < maxDrivers; i++)\r
44                 getName(i, names[i]);\r
45         return getNumFragments() < maxDrivers ? getNumFragments() : maxDrivers;\r
46 }\r
47 \r
48 bool AsioDrivers::loadDriver(char *name)\r
49 {\r
50         char dname[64];\r
51         unsigned long newID;\r
52 \r
53         for(long i = 0; i < getNumFragments(); i++)\r
54         {\r
55                 if(getName(i, dname) && !strcmp(name, dname))\r
56                 {\r
57                         if(newInstance(i, &newID))\r
58                         {\r
59                                 if(resolveASIO(newID))\r
60                                 {\r
61                                         if(connID != -1)\r
62                                                 removeInstance(curIndex, connID);\r
63                                         curIndex = i;\r
64                                         connID = newID;\r
65                                         return true;\r
66                                 }\r
67                         }\r
68                         break;\r
69                 }\r
70         }\r
71         return false;\r
72 }\r
73 \r
74 void AsioDrivers::removeCurrentDriver()\r
75 {\r
76         if(connID != -1)\r
77                 removeInstance(curIndex, connID);\r
78         connID = -1;\r
79         curIndex = -1;\r
80 }\r
81 \r
82 //------------------------------------------------------------------------------------\r
83 \r
84 #elif WINDOWS\r
85 \r
86 #include "iasiodrv.h"\r
87 \r
88 extern IASIO* theAsioDriver;\r
89 \r
90 AsioDrivers::AsioDrivers() : AsioDriverList()\r
91 {\r
92         curIndex = -1;\r
93 }\r
94 \r
95 AsioDrivers::~AsioDrivers()\r
96 {\r
97 }\r
98 \r
99 bool AsioDrivers::getCurrentDriverName(char *name)\r
100 {\r
101         if(curIndex >= 0)\r
102                 return asioGetDriverName(curIndex, name, 32) == 0 ? true : false;\r
103         name[0] = 0;\r
104         return false;\r
105 }\r
106 \r
107 long AsioDrivers::getDriverNames(char **names, long maxDrivers)\r
108 {\r
109         for(long i = 0; i < asioGetNumDev() && i < maxDrivers; i++)\r
110                 asioGetDriverName(i, names[i], 32);\r
111         return asioGetNumDev() < maxDrivers ? asioGetNumDev() : maxDrivers;\r
112 }\r
113 \r
114 bool AsioDrivers::loadDriver(char *name)\r
115 {\r
116         char dname[64];\r
117         char curName[64];\r
118 \r
119         for(long i = 0; i < asioGetNumDev(); i++)\r
120         {\r
121                 if(!asioGetDriverName(i, dname, 32) && !strcmp(name, dname))\r
122                 {\r
123                         curName[0] = 0;\r
124                         getCurrentDriverName(curName);  // in case we fail...\r
125                         removeCurrentDriver();\r
126 \r
127                         if(!asioOpenDriver(i, (void **)&theAsioDriver))\r
128                         {\r
129                                 curIndex = i;\r
130                                 return true;\r
131                         }\r
132                         else\r
133                         {\r
134                                 theAsioDriver = 0;\r
135                                 if(curName[0] && strcmp(dname, curName))\r
136                                         loadDriver(curName);    // try restore\r
137                         }\r
138                         break;\r
139                 }\r
140         }\r
141         return false;\r
142 }\r
143 \r
144 void AsioDrivers::removeCurrentDriver()\r
145 {\r
146         if(curIndex != -1)\r
147                 asioCloseDriver(curIndex);\r
148         curIndex = -1;\r
149 }\r
150 \r
151 #elif SGI || BEOS\r
152 \r
153 #include "asiolist.h"\r
154 \r
155 AsioDrivers::AsioDrivers() \r
156         : AsioDriverList()\r
157 {\r
158         curIndex = -1;\r
159 }\r
160 \r
161 AsioDrivers::~AsioDrivers()\r
162 {\r
163 }\r
164 \r
165 bool AsioDrivers::getCurrentDriverName(char *name)\r
166 {\r
167         return false;\r
168 }\r
169 \r
170 long AsioDrivers::getDriverNames(char **names, long maxDrivers)\r
171 {\r
172         return 0;\r
173 }\r
174 \r
175 bool AsioDrivers::loadDriver(char *name)\r
176 {\r
177         return false;\r
178 }\r
179 \r
180 void AsioDrivers::removeCurrentDriver()\r
181 {\r
182 }\r
183 \r
184 #else\r
185 #error implement me\r
186 #endif\r