forked from len0rd/rockbox
Add FS #10214. Initial commit of the original PDa code for the GSoC Pure Data plugin project of Wincent Balin. Stripped some non-sourcefiles and added a rockbox readme that needs a bit more info from Wincent. Is added to CATEGORIES and viewers, but not yet to SUBDIRS (ie doesn't build yet)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21044 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
95fa7f6a2e
commit
513389b4c1
199 changed files with 139349 additions and 1 deletions
238
apps/plugins/pdbox/pdbox-net.c
Normal file
238
apps/plugins/pdbox/pdbox-net.c
Normal file
|
@ -0,0 +1,238 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2009 Wincent Balin
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#include "plugin.h"
|
||||
#include "pdbox.h"
|
||||
|
||||
/* Datagram pool will contains 16 datagrams. */
|
||||
#define MAX_DATAGRAMS 16
|
||||
|
||||
/* Datagram pool. */
|
||||
struct datagram datagrams[MAX_DATAGRAMS];
|
||||
|
||||
/* UDP message queues. */
|
||||
struct event_queue gui_to_core;
|
||||
struct event_queue core_to_gui;
|
||||
|
||||
/* Initialize net infrastructure. */
|
||||
void net_init(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
/* Initialize message pool. */
|
||||
for(i = 0; i < MAX_DATAGRAMS; i++)
|
||||
datagrams[i].used = false;
|
||||
|
||||
/* Initialize and register message queues. */
|
||||
rb->queue_init(&gui_to_core, true);
|
||||
rb->queue_init(&core_to_gui, true);
|
||||
}
|
||||
|
||||
/* Send datagram. */
|
||||
bool send_datagram(struct event_queue* route,
|
||||
int port,
|
||||
char* data,
|
||||
size_t size)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
/* If datagram too long, abort. */
|
||||
if(size > MAX_DATAGRAM_SIZE)
|
||||
return false;
|
||||
|
||||
/* Find free datagram buffer. */
|
||||
for(i = 0; i < MAX_DATAGRAMS; i++)
|
||||
if(!datagrams[i].used)
|
||||
break;
|
||||
|
||||
/* If no free buffer found, abort. */
|
||||
if(i == MAX_DATAGRAMS)
|
||||
return false;
|
||||
|
||||
/* Copy datagram to the buffer. */
|
||||
rb->memcpy(datagrams[i].data, data, size);
|
||||
datagrams[i].size = size;
|
||||
|
||||
/* Mark datagram buffer as used. */
|
||||
datagrams[i].used = true;
|
||||
|
||||
/* Send event via route. */
|
||||
rb->queue_post(route, port, (intptr_t) &datagrams[i]);
|
||||
|
||||
/* Everything went ok. */
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Receive datagram. */
|
||||
bool receive_datagram(struct event_queue* route,
|
||||
int port,
|
||||
struct datagram* buffer)
|
||||
{
|
||||
struct queue_event event;
|
||||
|
||||
/* If route queue empty, abort. */
|
||||
if(rb->queue_empty(route))
|
||||
return false;
|
||||
|
||||
/* Receive event. */
|
||||
rb->queue_wait(route, &event);
|
||||
|
||||
/* If wrong port, abort.
|
||||
NOTE: Event is removed from the queue in any case! */
|
||||
if(event.id != port)
|
||||
return false;
|
||||
|
||||
/* Copy datagram. */
|
||||
rb->memcpy(buffer, (struct datagram*) event.data, sizeof(struct datagram));
|
||||
|
||||
/* Free datagram buffer. */
|
||||
((struct datagram*) event.data)->used = false;
|
||||
|
||||
/* Everything went ok. */
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Destroy net infrastructure. */
|
||||
void net_destroy(void)
|
||||
{
|
||||
/* Remove message queues. */
|
||||
rb->queue_delete(&gui_to_core);
|
||||
rb->queue_delete(&core_to_gui);
|
||||
}
|
||||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2009 Wincent Balin
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#include "plugin.h"
|
||||
#include "pdbox.h"
|
||||
|
||||
/* Datagram pool will contains 16 datagrams. */
|
||||
#define MAX_DATAGRAMS 16
|
||||
|
||||
/* Datagram pool. */
|
||||
struct datagram datagrams[MAX_DATAGRAMS];
|
||||
|
||||
/* UDP message queues. */
|
||||
struct event_queue gui_to_core;
|
||||
struct event_queue core_to_gui;
|
||||
|
||||
/* Initialize net infrastructure. */
|
||||
void net_init(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
/* Initialize message pool. */
|
||||
for(i = 0; i < MAX_DATAGRAMS; i++)
|
||||
datagrams[i].used = false;
|
||||
|
||||
/* Initialize and register message queues. */
|
||||
rb->queue_init(&gui_to_core, true);
|
||||
rb->queue_init(&core_to_gui, true);
|
||||
}
|
||||
|
||||
/* Send datagram. */
|
||||
bool send_datagram(struct event_queue* route,
|
||||
int port,
|
||||
char* data,
|
||||
size_t size)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
/* If datagram too long, abort. */
|
||||
if(size > MAX_DATAGRAM_SIZE)
|
||||
return false;
|
||||
|
||||
/* Find free datagram buffer. */
|
||||
for(i = 0; i < MAX_DATAGRAMS; i++)
|
||||
if(!datagrams[i].used)
|
||||
break;
|
||||
|
||||
/* If no free buffer found, abort. */
|
||||
if(i == MAX_DATAGRAMS)
|
||||
return false;
|
||||
|
||||
/* Copy datagram to the buffer. */
|
||||
rb->memcpy(datagrams[i].data, data, size);
|
||||
datagrams[i].size = size;
|
||||
|
||||
/* Mark datagram buffer as used. */
|
||||
datagrams[i].used = true;
|
||||
|
||||
/* Send event via route. */
|
||||
rb->queue_post(route, port, (intptr_t) &datagrams[i]);
|
||||
|
||||
/* Everything went ok. */
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Receive datagram. */
|
||||
bool receive_datagram(struct event_queue* route,
|
||||
int port,
|
||||
struct datagram* buffer)
|
||||
{
|
||||
struct queue_event event;
|
||||
|
||||
/* If route queue empty, abort. */
|
||||
if(rb->queue_empty(route))
|
||||
return false;
|
||||
|
||||
/* Receive event. */
|
||||
rb->queue_wait(route, &event);
|
||||
|
||||
/* If wrong port, abort.
|
||||
NOTE: Event is removed from the queue in any case! */
|
||||
if(event.id != port)
|
||||
return false;
|
||||
|
||||
/* Copy datagram. */
|
||||
rb->memcpy(buffer, (struct datagram*) event.data, sizeof(struct datagram));
|
||||
|
||||
/* Free datagram buffer. */
|
||||
((struct datagram*) event.data)->used = false;
|
||||
|
||||
/* Everything went ok. */
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Destroy net infrastructure. */
|
||||
void net_destroy(void)
|
||||
{
|
||||
/* Remove message queues. */
|
||||
rb->queue_delete(&gui_to_core);
|
||||
rb->queue_delete(&core_to_gui);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue