Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[update] add dac driver. #16

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
157 changes: 157 additions & 0 deletions bsp_skeleton/drivers/drv_audio.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
*/

#include <rtdevice.h>
#include <rtthread.h>
#include "board.h"
#include "drv_audio.h"

#ifdef BSP_USING_AUDIO

#define SKT_AUDIO_DEVICE(audio_dev) (struct skt_audio_dev *)(audio_dev)

struct skt_audio_dev
{
struct rt_audio_device audio;
struct rt_audio_configure replay_config;
rt_uint8_t *tx_fifo;
rt_uint8_t volume;
};
static struct skt_audio_dev audio_dev0;

static rt_err_t skt_audio_getcaps(struct rt_audio_device *device, struct rt_audio_caps *caps)
{
rt_err_t result = RT_EOK;
struct skt_audio_device *audio = SKT_AUDIO_DEVICE(device);

RT_ASSERT(audio != RT_NULL);

switch (caps->main_type)
{
case AUDIO_TYPE_QUERY:
{
/* Todo: qurey audio types */
break;
}

case AUDIO_TYPE_OUTPUT:
{
/* Todo: get audio functional attribute */
break;
}

case AUDIO_TYPE_MIXER:
{
/* Todo : get audio mixer units */
break;
}

default:
break;
}

return result;
}

static rt_err_t skt_audio_configure(struct rt_audio_device *device, struct rt_audio_caps *caps)
{
rt_err_t result = RT_EOK;
struct skt_audio_device *audio = SKT_AUDIO_DEVICE(device);

RT_ASSERT(audio != RT_NULL);

switch (caps->main_type)
{
case AUDIO_TYPE_MIXER:
{
/* Todo : set audio mixer units */
break;
}

case AUDIO_TYPE_OUTPUT:
{
/* Todo : set audio functional attribute */
break;
}

default:
break;
}

return result;
}

static rt_err_t skt_audio_start(struct rt_audio_device *device, int stream)
{
rt_err_t result = RT_EOK;
struct skt_audio_device *audio = SKT_AUDIO_DEVICE(device);

RT_ASSERT(audio != RT_NULL);

/* Todo : start audio */

return result;
}

static rt_err_t skt_audio_stop(struct rt_audio_device *device, int stream)
{
rt_err_t result = RT_EOK;
struct skt_audio_device *audio = SKT_AUDIO_DEVICE(device);

RT_ASSERT(audio != RT_NULL);

/* Todo : stop audio */

return result;
}

static rt_size_t skt_audio_transmit(struct rt_audio_device *device, const void *writeBuf, void *readBuf, rt_size_t size)
{
rt_size_t tsize = 0;
struct skt_audio_device *audio = SKT_AUDIO_DEVICE(device);

RT_ASSERT(audio != RT_NULL);

/* Todo : transmit audio data */

return tsize;
}

static void skt_audio_buffer_info(struct rt_audio_device *device, struct rt_audio_buf_info *info)
{
struct skt_audio_device *audio = SKT_AUDIO_DEVICE(device);

RT_ASSERT(audio != RT_NULL);

/* Todo : get audio buffer info */
}

static struct rt_audio_ops skt_audio_ops =
{
skt_audio_getcaps,
skt_audio_configure,
skt_audio_start,
skt_audio_stop,
skt_audio_transmit,
skt_audio_buffer_info
};

int rt_hw_audio_init(void)
{
rt_err_t ret = RT_EOK;

/* Todo: register audio device */
audio_dev0.audio.ops = &skt_audio_ops;
ret = rt_audio_register(&audio_dev0.audio, "audio0", RT_DEVICE_FLAG_RDWR, &audio_dev0);

return ret;
}
INIT_DEVICE_EXPORT(rt_hw_audio_init);

#endif /* BSP_USING_AUDIO */
14 changes: 14 additions & 0 deletions bsp_skeleton/drivers/drv_audio.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
*/

#ifndef DRV_AUDIO_H__
#define DRV_AUIDO_H__

int rt_hw_audio_init(void);

#endif
77 changes: 77 additions & 0 deletions bsp_skeleton/drivers/drv_dac.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
*/

#include <rtdevice.h>
#include <rtthread.h>
#include "board.h"
#include "drv_dac.h"

#define SKT_DAC_DEVICE(dac_dev) (struct skt_dac_dev *)(dac_dev)

struct skt_dac_dev
{
struct rt_dac_device parent;
rt_uint32_t dac_periph;
};

static rt_err_t skt_dac_enabled(struct rt_dac_device *device, rt_uint32_t channel)
{
rt_err_t ret = RT_EOK;
struct skt_dac_dev *dac = SKT_DAC_DEVICE(device);

RT_ASSERT(dac != RT_NULL);

/* Todo: enable dac->dac_periph */

return ret;
}

static rt_err_t skt_dac_disabled(struct rt_dac_device *device, rt_uint32_t channel)
{
rt_err_t ret = RT_EOK;
struct skt_dac_dev *dac = SKT_DAC_DEVICE(device);

RT_ASSERT(dac != RT_NULL);

/* Todo: disable dac->dac_periph */

return ret;
}

static rt_err_t skt_dac_convert(struct rt_dac_device *device, rt_uint32_t channel, rt_uint32_t *value)
{
rt_err_t ret = RT_EOK;
struct skt_dac_dev *dac = SKT_DAC_DEVICE(device);

RT_ASSERT(dac != RT_NULL);

/* Todo: convert dac->dac_periph */

return ret;
}

const static struct rt_dac_ops skt_dac_ops =
{
skt_dac_enabled,
skt_dac_disabled,
skt_dac_convert
};

int rt_hw_dac_init(void)
{
rt_err_t ret = RT_EOK;
static struct skt_dac_dev dac_dev0;

/* Todo: Init dac Hardware */

ret = rt_hw_dac_register(&dac_dev0.parent, "dac0", &skt_dac_ops, &dac_dev0);

return ret;
}
INIT_DEVICE_EXPORT(rt_hw_dac_init);
15 changes: 15 additions & 0 deletions bsp_skeleton/drivers/drv_dac.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
*/

#ifndef DRV_DAC_H__
#define DRV_DAC_H__

int rt_hw_dac_init(void);

#endif
Loading