/*************************************************************************** * __________ __ ___. * 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. * ****************************************************************************/ #ifndef PDBOX_H #define PDBOX_H /* Use dbestfit. */ #include "bmalloc.h" #include "dmalloc.h" /* Pure Data */ #include "m_pd.h" /* dbestfit declarations. */ /* Minimal memory size. */ #define MIN_MEM_SIZE (4 * 1024 * 1024) /* Audio declarations. */ #define PD_SAMPLERATE 22050 #define PD_SAMPLES_PER_HZ ((PD_SAMPLERATE / HZ) + \ (PD_SAMPLERATE % HZ > 0 ? 1 : 0)) #define PD_OUT_CHANNELS 2 /* Audio buffer part. Contains data for one HZ period. */ #ifdef SIMULATOR #define AUDIOBUFSIZE (PD_SAMPLES_PER_HZ * PD_OUT_CHANNELS * 4) #else #define AUDIOBUFSIZE (PD_SAMPLES_PER_HZ * PD_OUT_CHANNELS) #endif struct audio_buffer { int16_t data[AUDIOBUFSIZE]; unsigned int fill; }; /* Additional functions. */ char *rb_strncat(char *s, const char *t, size_t n); double rb_strtod(const char*, char**); double rb_atof(const char*); void rb_ftoan(float, char*, int); float rb_floor(float); long rb_atol(const char* s); float rb_sin(float rad); float rb_cos(float rad); int rb_fscanf_f(int fd, float* f); int rb_fprintf_f(int fd, float f); float rb_log10(float); float rb_log(float); float rb_exp(float); float rb_pow(float, float); float rb_sqrt(float); float rb_fabs(float); float rb_atan(float); float rb_atan2(float, float); float rb_sinh(float); float rb_tan(float); typedef struct { int quot; int rem; } div_t; div_t div(int x, int y); union f2i { float f; int32_t i; }; void sys_findlibdir(const char* filename); int sys_startgui(const char *guidir); /* Network declarations. */ /* Maximal size of the datagram. */ #define MAX_DATAGRAM_SIZE 255 /* This structure replaces a UDP datagram. */ struct datagram { bool used; uint8_t size; char data[MAX_DATAGRAM_SIZE]; }; /* Prototypes of network functions. */ void net_init(void); void net_destroy(void); bool send_datagram(struct event_queue* route, int port, char* data, size_t size); bool receive_datagram(struct event_queue* route, int port, struct datagram* buffer); /* Network message queues. */ extern struct event_queue gui_to_core; extern struct event_queue core_to_gui; /* UDP ports of the original software. */ #define PD_CORE_PORT 3333 #define PD_GUI_PORT 3334 /* Convinience macros. */ #define SEND_TO_CORE(data) \ send_datagram(&gui_to_core, PD_CORE_PORT, data, strlen(data)) #define RECEIVE_TO_CORE(buffer) \ receive_datagram(&gui_to_core, PD_CORE_PORT, buffer) #define SEND_FROM_CORE(data) \ send_datagram(&core_to_gui, PD_GUI_PORT, data, strlen(data)) #define RECEIVE_FROM_CORE(buffer) \ receive_datagram(&core_to_gui, PD_GUI_PORT, buffer) /* PD core message callback. */ void rockbox_receive_callback(struct datagram* dg); /* Pure Data declarations. */ /* Pure Data function prototypes. */ void pd_init(void); /* Redefinitons of ANSI C functions. */ #include "lib/wrappers.h" #define strncmp rb->strncmp #define atoi rb->atoi #define write rb->write #define strncat rb_strncat #define floor rb_floor #define atof rb_atof #define atol rb_atol #define ftoan rb_ftoan #define sin rb_sin #define cos rb_cos #define log10 rb_log10 #define log rb_log #define exp rb_exp #define pow rb_pow #define sqrt rb_sqrt #define fabs rb_fabs #define atan rb_atan #define atan2 rb_atan2 #define sinh rb_sinh #define tan rb_tan #endif