| # An implementation of the audio codec protocol |
| |
| This library is a C++ implementation of the audio codec protocol for both servers and clients. |
| The goal is to facilitate simple codec drivers writing and usage. |
| |
| On the server side, i.e. the audio codec driver, this library simplifies publishing the composite |
| device, and provides C++ hooks to be overridden by the driver implementing the protocol. |
| Users of the library should only need to subclass the SimpleCodecServer class and implement |
| Initialization and Shutdown methods, and respond to protocol messages in their overloaded methods. |
| |
| On the client side, i.e. the audio DAI controller driver communicating with an audio codec, this |
| library provides C++ synchronous versions of the protocol functions. Users of the library |
| should intantiate a SimpleCodecClient class and use it to query the codec capabilities and configure |
| it by calling the appropiate methods. |
| |
| In the board configuration file, instantiate a composite codec device with binding rules for the |
| codec protocol, and vendor and device ids, for instance: |
| |
| zx_bind_inst_t codec_match[] = { |
| BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_CODEC), |
| BI_ABORT_IF(NE, BIND_PLATFORM_DEV_VID, PDEV_VID_TI), |
| BI_MATCH_IF(EQ, BIND_PLATFORM_DEV_DID, PDEV_DID_TI_TAS2770), |
| }; |
| |
| If there are more than one instance of the same codec in the system, also specify a non-zero |
| BIND_CODEC_INSTANCE value also returned by the each instance of the driver in |
| DriverIds.instance_count, for instance: |
| |
| zx_bind_inst_t codec_woofer_match[] = { |
| BI_ABORT_IF(NE, BIND_PROTOCOL, ZX_PROTOCOL_CODEC), |
| BI_ABORT_IF(NE, BIND_PLATFORM_DEV_VID, PDEV_VID_TI), |
| BI_ABORT_IF(NE, BIND_PLATFORM_DEV_DID, PDEV_DID_TI_TAS5720), |
| BI_MATCH_IF(EQ, BIND_CODEC_INSTANCE, 1), |
| }; |