示例#1
0
/*--------------------------------------------------------------------------*/
void audioInit()
{
	VsPlayerInit();
}
示例#2
0
/*
 * \brief Play MP3 stream.
 *
 * \param stream Socket stream to read MP3 data from.
 */
void PlayMp3Stream(FILE *stream, u_long metaint)
{
       
        size_t rbytes;
        char *mp3buf;
        u_char ief;
        int got = 0;
        u_long last;
        u_long mp3left = metaint;

        /*
        * Initialize the MP3 buffer. The NutSegBuf routines provide a global
        * system buffer, which works with banked and non-banked systems.
        */
        if (NutSegBufInit(8192) == 0) 
        {
                puts("Error: MP3 buffer init failed");
                return;
        }

        /* 
        * Initialize the MP3 decoder hardware.
        */
        if (VsPlayerInit() || VsPlayerReset(0)) 
        {
                puts("Error: MP3 hardware init failed");
                return;
        }
        
        
        VsSetVolume(0,0);
        /* 
        * Reset the MP3 buffer. 
        */
        ief = VsPlayerInterrupts(0);
        NutSegBufReset();
        VsPlayerInterrupts(ief);
        last = NutGetSeconds();

        for (;playing == 1;) 
        {
                /*
                 * Query number of byte available in MP3 buffer.
                 */
                ief = VsPlayerInterrupts(0);
                mp3buf = NutSegBufWriteRequest(&rbytes);
                VsPlayerInterrupts(ief);

                /*
                 * If the player is not running, kick it.
                 */
                if (VsGetStatus() != VS_STATUS_RUNNING) {
                            if(rbytes < 1024 || NutGetSeconds() - last > 4UL) {
                                last = NutGetSeconds();
                                puts("Kick player");
                                VsPlayerKick();
                            }
                }

                /* 
                 * Do not read pass metadata. 
                 */
                if (metaint && rbytes > mp3left)
                {
                        rbytes = mp3left;
                }

                /* 
                 * Read data directly into the MP3 buffer. 
                 */
                while (rbytes && playing == 1)
                {
                        if ((got = fread(mp3buf, 1, rbytes, stream)) > 0) 
                        {
                                ief = VsPlayerInterrupts(0);
                                mp3buf = NutSegBufWriteCommit(got);
                                VsPlayerInterrupts(ief);

                                if (metaint) 
                                {
                                            mp3left -= got;
                                            if (mp3left == 0) 
                                            {
                                                        ProcessMetaData(stream);
                                                        mp3left = metaint;
                                            }
                                }

                                if(got < rbytes && got < 512)
                                {
                                            printf("%lu buffered\n", NutSegBufUsed());
                                            NutSleep(250);
                                }
                                else 
                                        NutThreadYield();
                        } 
                        else 
                                break;
                        rbytes -= got;
                }
                if(got <= 0)
                    break;
        }
}
示例#3
0
THREAD(StreamPlayer, arg)
{
	FILE *stream = (FILE *)arg;
	size_t rbytes = 0;
	char *mp3buf;
	int result = NOK;
	int nrBytesRead = 0;
	unsigned char iflag;

	//
	// Init MP3 buffer. NutSegBuf is een globale, systeem buffer
	//
	if (0 != NutSegBufInit(8192))
	{
		// Reset global buffer
		iflag = VsPlayerInterrupts(0);
		NutSegBufReset();
		VsPlayerInterrupts(iflag);

		result = OK;
	}

	// Init the Vs1003b hardware
	if (OK == result)
	{
		if (-1 == VsPlayerInit())
		{
			if (-1 == VsPlayerReset(0))
			{
				result = NOK;
			}
		}
	}

	for (;;)
	{
		/*
		* Query number of byte available in MP3 buffer.
		*/
		iflag = VsPlayerInterrupts(0);
		mp3buf = NutSegBufWriteRequest(&rbytes);
		VsPlayerInterrupts(iflag);

		// Bij de eerste keer: als player niet draait maak player wakker (kickit)
		if (VS_STATUS_RUNNING != VsGetStatus())
		{
			if (rbytes < 1024)
			{
				printf("VsPlayerKick()\n");
				VsPlayerKick();
			}
		}

		while (rbytes)
		{
			// Copy rbytes (van 1 byte) van stream naar mp3buf.
			nrBytesRead = fread(mp3buf, 1, rbytes, stream);

			if (nrBytesRead > 0)
			{
				iflag = VsPlayerInterrupts(0);
				mp3buf = NutSegBufWriteCommit(nrBytesRead);
				VsPlayerInterrupts(iflag);
				if (nrBytesRead < rbytes && nrBytesRead < 512)
				{
					NutSleep(250);
				}
			}
			else
			{
				break;
			}
			rbytes -= nrBytesRead;

			if (nrBytesRead <= 0)
			{
				break;
			}
		}
	}
}
示例#4
0
int main(void)
{
    struct _tm timeCheck;

    WatchDogDisable();

    NutDelay(100);

    SysInitIO();

	SPIinit();

	LedInit();

	LcdLowLevelInit();

    Uart0DriverInit();
    Uart0DriverStart();
	LogInit();

    X12Init();

    VsPlayerInit();

    NtpInit();

    NutThreadCreate("BackgroundThread", StartupInit, NULL, 1024);
    NutThreadCreate("BackgroundThread", AlarmSync, NULL, 2500);
    NutThreadCreate("BackgroundThread", AlarmCheck, NULL, 256);

	KbInit();

    SysControlMainBeat(ON);             // enable 4.4 msecs heartbeat interrupt

    /*
     * Increase our priority so we can feed the watchdog.
     */
    NutThreadSetPriority(1);

	/* Enable global interrupts */
	sei();
	
	LcdBackLight(LCD_BACKLIGHT_ON);
    setCurrentDisplay(DISPLAY_DateTime, 5);

    X12RtcGetClock(&timeCheck);
    int hours;
    int mins;
    int secs;
    if(!NutNvMemLoad(100, &hours, sizeof(hours)))
    {
        printf("uren: %d", hours);
    }
    if(!NutNvMemLoad(105, &mins, sizeof(mins)))
    {
        printf(" minuten: %d", mins);
    }
    if(!NutNvMemLoad(110, &secs, sizeof(secs)))
    {
        printf(" seconden %d", secs);
    }
    printf("Welcome to Saltyradio.\nI'm using mac address:  %s\n\n\n", getMacAdress());

    for (;;)
    {
        //Key detecten
        if(KbGetKey() == KEY_01){
            setCurrentDisplay(DISPLAY_DateTime, 5);
        }
        else if(KbGetKey() == KEY_OK)
        {
            if(getCurrentDisplay() == DISPLAY_MainMenu)
            {
                clickOk();
            }
            else if(getCurrentDisplay() == DISPLAY_SettingsMenu)
            {
                clickOkSettings();
            }
            else if(getCurrentDisplay() == DISPLAY_Play || getCurrentDisplay() == DISPLAY_Song)
            {
                clickOkPlay();
            }
            else
            {
                setCurrentDisplay(DISPLAY_MainMenu, 10000);
            }
        }
        else if(KbGetKey() == KEY_LEFT)
        {
            switchLeft();
        }
        else if(KbGetKey() == KEY_RIGHT)
        {
            switchItem();
        }
        else if(KbGetKey() == KEY_DOWN){
            setCurrentDisplay(DISPLAY_Volume, 5);
            volumeDown();
        }else if(KbGetKey() == KEY_UP) {
            setCurrentDisplay(DISPLAY_Volume, 5);
            volumeUp();
        }
        refreshScreen();
        WatchDogRestart();
        NutSleep(100);
    }
    return(0);
}