1 /*---------------------------------------------------------------------------* 2 * SR_EventLog.h * 3 * * 4 * Copyright 2007, 2008 Nuance Communciations, Inc. * 5 * * 6 * Licensed under the Apache License, Version 2.0 (the 'License'); * 7 * you may not use this file except in compliance with the License. * 8 * * 9 * You may obtain a copy of the License at * 10 * http://www.apache.org/licenses/LICENSE-2.0 * 11 * * 12 * Unless required by applicable law or agreed to in writing, software * 13 * distributed under the License is distributed on an 'AS IS' BASIS, * 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 15 * See the License for the specific language governing permissions and * 16 * limitations under the License. * 17 * * 18 *---------------------------------------------------------------------------*/ 19 20 #ifndef __SR_EventLog_H 21 #define __SR_EventLog_H 22 23 24 25 #include "SR_EventLogPrefix.h" 26 #include "ptypes.h" 27 #include "ESR_ReturnCode.h" 28 29 30 /** 31 * @addtogroup SR_EventLogModule SR_EventLog API functions 32 * Provides OSI logging. 33 * 34 * @{ 35 */ 36 37 /** 38 * OSI Event Log levels 39 */ 40 41 /** 42 * Basic logging level. 43 */ 44 #define OSI_LOG_LEVEL_BASIC 0x01 45 /** 46 * Log audio data. 47 */ 48 #define OSI_LOG_LEVEL_AUDIO 0x02 49 /** 50 * Log ADDWORD commands. 51 */ 52 #define OSI_LOG_LEVEL_ADDWD 0x04 53 54 /** 55 * Log a string token using the basic logging level. 56 */ 57 #define SR_EventLogToken_BASIC(log, loglevel, tokenName, value) \ 58 ((loglevel & OSI_LOG_LEVEL_BASIC) ? \ 59 log->token(log, tokenName, value) : ESR_SUCCESS ) \ 60 61 /** 62 * Log an integer token using the basic logging level. 63 */ 64 #define SR_EventLogTokenInt_BASIC(log, loglevel, tokenName, value) \ 65 ((loglevel & OSI_LOG_LEVEL_BASIC) ? \ 66 log->tokenInt(log, tokenName, value) : ESR_SUCCESS ) \ 67 68 /** 69 * Log a pointer token using the basic logging level. 70 */ 71 #define SR_EventLogTokenPointer_BASIC(log, loglevel, tokenName, value) \ 72 ((loglevel & OSI_LOG_LEVEL_BASIC) ? \ 73 log->tokenPointer(log, tokenName, value) : ESR_SUCCESS ) \ 74 75 /** 76 * Log a uint16 token using the basic logging level. 77 */ 78 #define SR_EventLogTokenUint16_t_BASIC(log, loglevel, tokenName, value) \ 79 ((loglevel & OSI_LOG_LEVEL_BASIC) ? \ 80 log->tokenUint16_t(log, tokenName, value) : ESR_SUCCESS ) \ 81 82 /** 83 * Log a size_t token using the basic logging level. 84 */ 85 #define SR_EventLogTokenSize_t_BASIC(log, loglevel, tokenName, value) \ 86 ((loglevel & OSI_LOG_LEVEL_BASIC) ? \ 87 log->tokenSize_t(log, tokenName, value) : ESR_SUCCESS ) \ 88 89 /** 90 * Log a boolean token using the basic logging level. 91 */ 92 #define SR_EventLogTokenBool_BASIC(log, loglevel, tokenName, value) \ 93 ((loglevel & OSI_LOG_LEVEL_BASIC) ? \ 94 log->tokenBool(log, tokenName, value) : ESR_SUCCESS ) \ 95 96 /** 97 * Log a float token using the basic logging level. 98 */ 99 #define SR_EventLogTokenFloat_BASIC(log, loglevel, tokenName, value) \ 100 ((loglevel & OSI_LOG_LEVEL_BASIC) ? \ 101 log->tokenFloat(log, tokenName, value) : ESR_SUCCESS ) \ 102 103 /** 104 * Log an event using the basic logging level. 105 */ 106 #define SR_EventLogEvent_BASIC(log, loglevel, eventName) \ 107 ((loglevel & OSI_LOG_LEVEL_BASIC) ? \ 108 log->event(log, eventName) : ESR_SUCCESS ) \ 109 110 /** 111 * Log a string token using the audio logging level. 112 */ 113 #define SR_EventLogToken_AUDIO(log, loglevel, tokenName, value) \ 114 ((loglevel & OSI_LOG_LEVEL_AUDIO) ? \ 115 log->token(log, tokenName, value) : ESR_SUCCESS ) \ 116 117 /** 118 * Log an integer token using the audio logging level. 119 */ 120 #define SR_EventLogTokenInt_AUDIO(log, loglevel, tokenName, value) \ 121 ((loglevel & OSI_LOG_LEVEL_AUDIO) ? \ 122 log->tokenInt(log, tokenName, value) : ESR_SUCCESS ) \ 123 124 /** 125 * Log an event using the audio logging level. 126 */ 127 #define SR_EventLogEvent_AUDIO(log, loglevel, eventName) \ 128 ((loglevel & OSI_LOG_LEVEL_AUDIO) ? \ 129 log->event(log, eventName) : ESR_SUCCESS ) \ 130 131 /** 132 * Represents a EventLog. 133 */ 134 typedef struct SR_EventLog_t 135 { 136 /** 137 * Destroys a EventLog. 138 * 139 * @param self EventLog handle 140 */ 141 ESR_ReturnCode(*destroy)(struct SR_EventLog_t* self); 142 143 /** 144 * Logs an OSI log token. 145 * 146 * @param self SR_EventLog handle 147 * @param token Token name 148 * @param value Token value 149 */ 150 ESR_ReturnCode(*token)(struct SR_EventLog_t* self, const LCHAR* token, const LCHAR *value); 151 152 /** 153 * Logs an OSI log token. 154 * 155 * @param self SR_EventLog handle 156 * @param token Token name 157 * @param value Token value 158 */ 159 ESR_ReturnCode(*tokenInt)(struct SR_EventLog_t* self, const LCHAR* token, int value); 160 161 /** 162 * Logs an OSI log token. 163 * 164 * @param self SR_EventLog handle 165 * @param token Token name 166 * @param value Token value 167 */ 168 ESR_ReturnCode(*tokenPointer)(struct SR_EventLog_t* self, const LCHAR* token, void* value); 169 170 /** 171 * Logs an OSI log token. 172 * 173 * @param self SR_EventLog handle 174 * @param token Token name 175 * @param value Token value 176 */ 177 ESR_ReturnCode(*tokenUint16_t)(struct SR_EventLog_t* self, const LCHAR* token, asr_uint16_t value); 178 179 /** 180 * Logs an OSI log token. 181 * 182 * @param self SR_EventLog handle 183 * @param token Token name 184 * @param value Token value 185 */ 186 ESR_ReturnCode(*tokenSize_t)(struct SR_EventLog_t* self, const LCHAR* token, size_t value); 187 188 /** 189 * Logs an OSI log token. 190 * 191 * @param self SR_EventLog handle 192 * @param token Token name 193 * @param value Token value 194 */ 195 ESR_ReturnCode(*tokenBool)(struct SR_EventLog_t* self, const LCHAR* token, ESR_BOOL value); 196 197 /** 198 * Logs an OSI log token. 199 * 200 * @param self SR_EventLog handle 201 * @param token Token name 202 * @param value Token value 203 */ 204 ESR_ReturnCode(*tokenFloat)(struct SR_EventLog_t* self, const LCHAR* token, float value); 205 206 /** 207 * Commits all previously accumulated log tokens. 208 * 209 * @param self SR_EventLog handle 210 * @param eventName Name of the event associated with the tokens 211 */ 212 ESR_ReturnCode(*event)(struct SR_EventLog_t* self, const LCHAR* eventName); 213 214 215 /** 216 * Log the contents of the ESR_Session. 217 * 218 * @param self SR_EventLog handle 219 */ 220 ESR_ReturnCode(*eventSession)(struct SR_EventLog_t* self); 221 222 /** 223 * Opens a new file for recording a waveform of audio. Filename is automatically generated. Opened file 224 * becomes the current one where data is written to until closed. 225 * 226 * @param self SR_EventLog handle 227 * @param audio_type String identifying type of audio e.g. L("audio/L16") 228 * @param sample_rate Sampling rate 229 * @param sample_size Size of sampling in bytes. 230 */ 231 ESR_ReturnCode(*audioOpen)(struct SR_EventLog_t* self, const LCHAR* audio_type, size_t sample_rate, size_t sample_size); 232 233 /** 234 * Closes the current file. 235 * 236 * @param self SR_EventLog handle 237 * @param eventName Name of the event associated with the tokens 238 */ 239 ESR_ReturnCode(*audioClose)(struct SR_EventLog_t* self); 240 241 /** 242 * Writes datat to the current audio file. 243 * 244 * @param self SR_EventLog handle 245 * @param buffer Buffer holding the data to write 246 * @param num_bytes The number of bytes in the buffer. 247 */ 248 ESR_ReturnCode(*audioWrite)(struct SR_EventLog_t* self, void* buffer, size_t num_bytes); 249 250 /** 251 * Returns the filename of the current audio file used for logging. 252 * 253 * @param self SR_EventLog handle 254 * @param waveformFilename Name of the current audio file. 255 * @param len Length of buffer. 256 */ 257 ESR_ReturnCode(*audioGetFilename)(struct SR_EventLog_t* self, LCHAR* waveformFilename, size_t* len); 258 } 259 SR_EventLog; 260 261 /** 262 * Create a new EventLog 263 * 264 * @param self EventLog handle 265 */ 266 SREC_EVENTLOG_API ESR_ReturnCode SR_EventLogCreate(SR_EventLog** self); 267 268 /** 269 * Destroys a EventLog. 270 * 271 * @param self EventLog handle 272 */ 273 SREC_EVENTLOG_API ESR_ReturnCode SR_EventLogDestroy(SR_EventLog* self); 274 275 /** 276 * Logs an OSI log token. 277 * 278 * @param self SR_EventLog handle 279 * @param token Token name 280 * @param value Token value 281 */ 282 SREC_EVENTLOG_API ESR_ReturnCode SR_EventLogToken(SR_EventLog* self, const LCHAR* token, const LCHAR *value); 283 284 /** 285 * Logs an OSI log token. 286 * 287 * @param self SR_EventLog handle 288 * @param token Token name 289 * @param value Token value 290 */ 291 SREC_EVENTLOG_API ESR_ReturnCode SR_EventLogTokenInt(SR_EventLog* self, const LCHAR* token, int value); 292 293 /** 294 * Logs an OSI log token. 295 * 296 * @param self SR_EventLog handle 297 * @param token Token name 298 * @param value Token value 299 */ 300 SREC_EVENTLOG_API ESR_ReturnCode SR_EventLogTokenPointer(SR_EventLog* self, const LCHAR* token, void* value); 301 302 /** 303 * Logs an OSI log token. 304 * 305 * @param self SR_EventLog handle 306 * @param token Token name 307 * @param value Token value 308 */ 309 SREC_EVENTLOG_API ESR_ReturnCode SR_EventLogTokenUint16_t(SR_EventLog* self, const LCHAR* token, asr_uint16_t value); 310 311 /** 312 * Logs an OSI log token. 313 * 314 * @param self SR_EventLog handle 315 * @param token Token name 316 * @param value Token value 317 */ 318 SREC_EVENTLOG_API ESR_ReturnCode SR_EventLogTokenSize_t(SR_EventLog* self, const LCHAR* token, size_t value); 319 320 /** 321 * Logs an OSI log token. 322 * 323 * @param self SR_EventLog handle 324 * @param token Token name 325 * @param value Token value 326 */ 327 SREC_EVENTLOG_API ESR_ReturnCode SR_EventLogTokenBool(SR_EventLog* self, const LCHAR* token, ESR_BOOL value); 328 329 /** 330 * Logs an OSI log token. 331 * 332 * @param self SR_EventLog handle 333 * @param token Token name 334 * @param value Token value 335 */ 336 SREC_EVENTLOG_API ESR_ReturnCode SR_EventLogTokenFloat(SR_EventLog* self, const LCHAR* token, float value); 337 338 /** 339 * Log the contents of the ESR_Session. 340 * 341 * @param self SR_EventLog handle 342 */ 343 SREC_EVENTLOG_API ESR_ReturnCode SR_EventLogEventSession(SR_EventLog* self); 344 345 /** 346 * Commits all previously accumulated log tokens. 347 * 348 * @param self SR_EventLog handle 349 * @param eventName Name of the event associated with the tokens 350 */ 351 SREC_EVENTLOG_API ESR_ReturnCode SR_EventLogEvent(SR_EventLog* self, const LCHAR* eventName); 352 353 /** 354 * Opens a new file for recording a waveform of audio. Filename is automatically generated. Opened file 355 * becomes the current one where data is written to until closed. 356 * 357 * @param self SR_EventLog handle 358 * @param audio_type String identifying type of audio e.g. L("audio/L16") 359 * @param sample_rate Sampling rate 360 * @param sample_size Size of sampling in bytes. 361 */ 362 SREC_EVENTLOG_API ESR_ReturnCode SR_EventLogAudioOpen(SR_EventLog* self, const LCHAR* audio_type, size_t sample_rate, size_t sample_size); 363 364 /** 365 * Closes the current file. 366 * 367 * @param self SR_EventLog handle 368 */ 369 SREC_EVENTLOG_API ESR_ReturnCode SR_EventLogAudioClose(SR_EventLog* self); 370 371 /** 372 * Writes datat to the current audio file. 373 * 374 * @param self SR_EventLog handle 375 * @param buffer Buffer holding the data to write 376 * @param num_bytes The number of bytes in the buffer. 377 */ 378 SREC_EVENTLOG_API ESR_ReturnCode SR_EventLogAudioWrite(SR_EventLog* self, void* buffer, size_t num_bytes); 379 380 /** 381 * Returns the filename of the current audio file used for logging. 382 * 383 * @param self SR_EventLog handle 384 * @param waveformFilename Name of the current audio file. 385 * @param len Length of buffer. 386 */ 387 SREC_EVENTLOG_API ESR_ReturnCode SR_EventLogAudioGetFilename(SR_EventLog* self, LCHAR* waveformFilename, size_t* len); 388 389 /** 390 * @} 391 */ 392 393 394 #endif /* __SR_EventLog_H */ 395