Add a method to pass the chosen config to the app

This commit is contained in:
Iscle 2023-05-16 13:02:26 +02:00
parent 3361fbfb7e
commit 93d64d9f36
2 changed files with 23 additions and 2 deletions

View File

@ -18,6 +18,7 @@ extern "C" {
#define PARAM_GET_DRIVER_VERSION_NAME 7 #define PARAM_GET_DRIVER_VERSION_NAME 7
#define PARAM_GET_DISABLE_REASON 8 #define PARAM_GET_DISABLE_REASON 8
#define PARAM_GET_DISABLE_REASON_MESSAGE 9 #define PARAM_GET_DISABLE_REASON_MESSAGE 9
#define PARAM_GET_CONFIG 10
// Param set // Param set
#define PARAM_SET_UPDATE_STATUS 0x9002 #define PARAM_SET_UPDATE_STATUS 0x9002

View File

@ -5,6 +5,8 @@
#include "ViperContext.h" #include "ViperContext.h"
#include "log.h" #include "log.h"
#define SET(type, ptr, value) (*(type *) (ptr) = (value))
ViperContext::ViperContext() : ViperContext::ViperContext() :
config({}), config({}),
disableReason(DisableReason::NONE), disableReason(DisableReason::NONE),
@ -232,14 +234,32 @@ int32_t ViperContext::handleGetParam(effect_param_t *pCmdParam, effect_param_t *
*pReplySize = sizeof(effect_param_t) + pReplyParam->psize + vOffset + pReplyParam->vsize; *pReplySize = sizeof(effect_param_t) + pReplyParam->psize + vOffset + pReplyParam->vsize;
return 0; return 0;
} }
case PARAM_GET_CONFIG: {
pReplyParam->status = 0;
pReplyParam->vsize = 40;
// Input
SET(uint64_t, pReplyParam->data + vOffset, config.inputCfg.buffer.frameCount);
SET(uint32_t, pReplyParam->data + vOffset + 8, config.inputCfg.samplingRate);
SET(uint32_t, pReplyParam->data + vOffset + 12, config.inputCfg.channels);
SET(uint8_t, pReplyParam->data + vOffset + 16, config.inputCfg.format);
SET(uint8_t, pReplyParam->data + vOffset + 17, config.inputCfg.accessMode);
SET(uint16_t, pReplyParam->data + vOffset + 18, config.inputCfg.mask);
// Output
SET(uint64_t, pReplyParam->data + vOffset + 20, config.outputCfg.buffer.frameCount);
SET(uint32_t, pReplyParam->data + vOffset + 28, config.outputCfg.samplingRate);
SET(uint32_t, pReplyParam->data + vOffset + 32, config.outputCfg.channels);
SET(uint8_t, pReplyParam->data + vOffset + 36, config.outputCfg.format);
SET(uint8_t, pReplyParam->data + vOffset + 37, config.outputCfg.accessMode);
SET(uint16_t, pReplyParam->data + vOffset + 38, config.outputCfg.mask);
*pReplySize = sizeof(effect_param_t) + pReplyParam->psize + vOffset + pReplyParam->vsize;
return 0;
}
default: { default: {
return -EINVAL; return -EINVAL;
} }
} }
} }
#define SET(type, ptr, value) (*(type *) (ptr) = (value))
int32_t ViperContext::handleCommand(uint32_t cmdCode, uint32_t cmdSize, void *pCmdData, uint32_t *pReplySize, void *pReplyData) { int32_t ViperContext::handleCommand(uint32_t cmdCode, uint32_t cmdSize, void *pCmdData, uint32_t *pReplySize, void *pReplyData) {
uint32_t replySize = pReplySize == nullptr ? 0 : *pReplySize; uint32_t replySize = pReplySize == nullptr ? 0 : *pReplySize;
switch (cmdCode) { switch (cmdCode) {