*
* \brief I2S driver functions.
*
- * This driver uses a double buffering technique to keep i2s bus busy. First fill in the two buffers
- * using i2s_getBuffer(), then start audio playing with i2s_start(). Then call i2s_getFreeBuffer()
- * until you have finished your samples. The reproduction will automatically stop if you don't
- * call i2s_getFreeBuffer() frequently enough.
- *
- * Example:
- * \code
- * // fill in the buffers before start
- * buf = i2s_getBuffer(I2S_FIRST_BUF);
- * // ...
- * buf = i2s_getBuffer(I2S_SECOND_BUF);
- * // ...
- * // here the driver will play only the first two buffers...
- * i2s_start();
- * // ...call getFreeBuffer() to continue playing.
- * while (!(buf = i2s_getFreeBuffer()))
- * ;
- * // now fill the buffer again
- * \endcode
- *
* \author Daniele Basile <asterix@develer.com>
- *
- * $WIZ$ module_name = "i2s"
- * $WIZ$ module_configuration = "bertos/cfg/cfg_i2s.h"
- * $WIZ$ module_supports = "sam3"
*/
#ifndef DRV_I2S_SAM3_H
#define DRV_I2S_SAM3_H
-
-#include <cfg/compiler.h>
-#include <cfg/macros.h>
#include <io/cm3.h>
-/**
- * First buffer.
- */
-#define I2S_FIRST_BUF 0
-/**
- * Second buffer.
- */
-#define I2S_SECOND_BUF 1
-
-/**
- * Initializes the module and sets current buffer to I2S_FIRST_BUF.
- */
-void i2s_init(void);
-
-/**
- * Returns one of the two buffers or NULL if none is available.
- *
- * You can't call this function if you have already started the player.
- * \param buf_num The number of the buffer, ie I2S_FIRST_BUF or I2S_SECOND_BUF.
- * \return A pointer to the buffer if the buffer is available (not full), 0 on errors
- */
-uint8_t *i2s_getBuffer(unsigned buf_num);
+enum
+{
+ SSC0,
-/**
- * Returns a buffer that will be played after the current one.
- *
- * You should fill it faster than your reproduction time. You can't call this function
- * if the player is not running
- * \return The next buffer to be played, 0 if both are busy.
- */
-uint8_t *i2s_getFreeBuffer(void);
+ SSC_CNT
+};
-/**
- * Starts playing from I2S_FIRST_BUFFER.
- *
- * You must have filled both buffers before calling this function. Does nothing if already playing.
- * \return false on errors, true otherwise.
- */
-bool i2s_start(void);
-void i2s_stop(void);
-INLINE bool i2s_isPlaying(void)
-{
- return !(SSC_SR & BV(SSC_TXEMPTY));
-}
+#define I2S_SAM3X MAKE_ID('I', '2', 'S', '3')
#endif /* DRV_I2S_SAM3_H */