mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 08:36:24 +08:00
feature:add audio AUDIOIOC_SETPARAMTER ioctl command
add AUDIOIOC_SETPARAMTER iotcl command in include/nuttx/audio/audio.h Signed-off-by: genghuihui <genghuihui@xiaomi.com> Change-Id: I8d88c649a87cb5fbdd0fb1f83c111a1fff380507
This commit is contained in:
@@ -59,7 +59,7 @@ typedef enum
|
||||
{
|
||||
DEFAULT_OUTPUT_SPEAKER = 0,
|
||||
SCO_OUTPUT,
|
||||
VoIP,
|
||||
VOIP,
|
||||
}aw88266a_dev_t;
|
||||
|
||||
typedef struct
|
||||
@@ -124,6 +124,12 @@ struct aw88266a_dev_s
|
||||
bool mute; /* True: Output is muted */
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
aw88266a_dev_t dev; /* aw88266a device type */
|
||||
FAR char *dev_str; /* aw88266a device string */
|
||||
}aw88266a_dev_info_t;
|
||||
|
||||
/****************************************************************************
|
||||
* Private Function Prototypes
|
||||
****************************************************************************/
|
||||
@@ -339,6 +345,13 @@ static const struct audio_ops_s g_audioops =
|
||||
.release = aw88266a_release,
|
||||
};
|
||||
|
||||
static const aw88266a_dev_info_t g_aw88266a_device_mode[] =
|
||||
{
|
||||
{DEFAULT_OUTPUT_SPEAKER, "speaker"},
|
||||
{SCO_OUTPUT, "sco"},
|
||||
{VOIP, "voip"}
|
||||
};
|
||||
|
||||
/****************************************************************************
|
||||
* Private Functions
|
||||
****************************************************************************/
|
||||
@@ -1146,6 +1159,36 @@ static int aw88266a_resume(FAR struct audio_lowerhalf_s *dev)
|
||||
static int aw88266a_ioctl(FAR struct audio_lowerhalf_s *dev, int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
FAR const char *ptr = (FAR const char *)arg;
|
||||
uint8_t i;
|
||||
FAR struct aw88266a_dev_s *priv = (FAR struct aw88266a_dev_s *)dev;
|
||||
|
||||
switch (cmd)
|
||||
{
|
||||
case AUDIOIOC_SETPARAMTER:
|
||||
if ((strncmp(ptr, "mode=", 5)) == 0)
|
||||
{
|
||||
ptr = ptr + 5;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(g_aw88266a_device_mode); i++)
|
||||
{
|
||||
if (strncmp(ptr, g_aw88266a_device_mode[i].dev_str,
|
||||
strlen(g_aw88266a_device_mode[i].dev_str)) == 0)
|
||||
{
|
||||
aw88266a_set_device(priv, g_aw88266a_device_mode[i].dev);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case AUDIOIOC_HWRESET:
|
||||
audinfo("AUDIOIOC_HWRESET\n");
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
audinfo("Return OK\n");
|
||||
return OK;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user