18 changed files with 1449 additions and 496 deletions
@ -0,0 +1,105 @@ |
|||
/**
|
|||
* This file has a different license to the rest of the GFX system. |
|||
* You can copy, modify and distribute this file as you see fit. |
|||
* You do not need to publish your source modifications to this file. |
|||
* The only thing you are not permitted to do is to relicense it |
|||
* under a different license. |
|||
*/ |
|||
|
|||
/**
|
|||
* Copy this file into your project directory and rename it as gfxconf.h |
|||
* Edit your copy to turn on the GFX features you want to use. |
|||
*/ |
|||
|
|||
#ifndef _GFXCONF_H |
|||
#define _GFXCONF_H |
|||
|
|||
/* GFX sub-systems to turn on */ |
|||
#define GFX_USE_GDISP TRUE |
|||
#define GFX_USE_TDISP FALSE |
|||
#define GFX_USE_GWIN TRUE |
|||
#define GFX_USE_GEVENT FALSE |
|||
#define GFX_USE_GTIMER TRUE |
|||
#define GFX_USE_GINPUT FALSE |
|||
#define GFX_USE_GADC TRUE |
|||
#define GFX_USE_GAUDIN TRUE |
|||
#define GFX_USE_GAUDOUT FALSE |
|||
#define GFX_USE_GMISC FALSE |
|||
|
|||
/* Features for the GDISP sub-system. */ |
|||
#define GDISP_NEED_VALIDATION TRUE |
|||
#define GDISP_NEED_CLIP TRUE |
|||
#define GDISP_NEED_TEXT FALSE |
|||
#define GDISP_NEED_CIRCLE FALSE |
|||
#define GDISP_NEED_ELLIPSE FALSE |
|||
#define GDISP_NEED_ARC FALSE |
|||
#define GDISP_NEED_SCROLL FALSE |
|||
#define GDISP_NEED_PIXELREAD FALSE |
|||
#define GDISP_NEED_CONTROL FALSE |
|||
#define GDISP_NEED_MULTITHREAD TRUE |
|||
#define GDISP_NEED_ASYNC FALSE |
|||
#define GDISP_NEED_MSGAPI FALSE |
|||
|
|||
/* GDISP - builtin fonts */ |
|||
#define GDISP_OLD_FONT_DEFINITIONS FALSE |
|||
#define GDISP_INCLUDE_FONT_SMALL FALSE |
|||
#define GDISP_INCLUDE_FONT_LARGER FALSE |
|||
#define GDISP_INCLUDE_FONT_UI1 FALSE |
|||
#define GDISP_INCLUDE_FONT_UI2 FALSE |
|||
#define GDISP_INCLUDE_FONT_LARGENUMBERS FALSE |
|||
|
|||
/* Features for the TDISP subsystem. */ |
|||
#define TDISP_NEED_MULTITHREAD FALSE |
|||
|
|||
/* Features for the GWIN sub-system. */ |
|||
#define GWIN_NEED_BUTTON FALSE |
|||
#define GWIN_NEED_CONSOLE FALSE |
|||
#define GWIN_NEED_GRAPH FALSE |
|||
|
|||
/* Features for the GEVENT sub-system. */ |
|||
#define GEVENT_ASSERT_NO_RESOURCE FALSE |
|||
|
|||
/* Features for the GTIMER sub-system. */ |
|||
/* NONE */ |
|||
|
|||
/* Features for the GINPUT sub-system. */ |
|||
#define GINPUT_NEED_MOUSE FALSE |
|||
#define GINPUT_NEED_KEYBOARD FALSE |
|||
#define GINPUT_NEED_TOGGLE FALSE |
|||
#define GINPUT_NEED_DIAL FALSE |
|||
|
|||
/* Features for the GADC sub-system. */ |
|||
/* NONE */ |
|||
|
|||
/* Features for the GAUDIN sub-system. */ |
|||
/* NONE */ |
|||
|
|||
/* Features for the GAUDOUT sub-system. */ |
|||
/* NONE */ |
|||
|
|||
/* Features for the GMISC sub-system. */ |
|||
#define GMISC_NEED_ARRAYOPS FALSE |
|||
|
|||
/* Optional Parameters for various sub-systems */ |
|||
/*
|
|||
#define GDISP_MAX_FONT_HEIGHT 16 |
|||
#define GEVENT_MAXIMUM_SIZE 32 |
|||
#define GEVENT_MAX_SOURCE_LISTENERS 32 |
|||
#define GTIMER_THREAD_WORKAREA_SIZE 512 |
|||
#define GADC_MAX_LOWSPEED_DEVICES 4 |
|||
*/ |
|||
|
|||
/* Optional Low Level Driver Definitions */ |
|||
/*
|
|||
#define GDISP_USE_CUSTOM_BOARD FALSE |
|||
#define GDISP_SCREEN_WIDTH 320 |
|||
#define GDISP_SCREEN_HEIGHT 240 |
|||
#define GDISP_USE_FSMC |
|||
#define GDISP_USE_GPIO |
|||
#define GDISP_VMT_NAME1(x) x##YourDriver1 |
|||
#define GDISP_VMT_NAME2(x) x##YourDriver2 |
|||
#define TDISP_COLUMNS 16 |
|||
#define TDISP_ROWS 2 |
|||
*/ |
|||
|
|||
#endif /* _GFXCONF_H */ |
@ -0,0 +1,190 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012, 2013 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX 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 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
/**
|
|||
* --------------------------- Our Custom GWIN Oscilloscope --------------- |
|||
* |
|||
* This GWIN superset implements a simple audio oscilloscope using the GAUDIN module. |
|||
* |
|||
* It makes many assumptions, the most fundamental of which is that the audio device |
|||
* produces unsigned integer samples. |
|||
* |
|||
* The GMISC module with GMISC_NEED_ARRAYOPS could be used to process the samples more |
|||
* correctly if we were really building something generic. |
|||
*/ |
|||
|
|||
#include "ch.h" |
|||
#include "hal.h" |
|||
#include "gfx.h" |
|||
|
|||
#include "gwinosc.h" |
|||
|
|||
/* Include internal GWIN routines so we can build our own superset class */ |
|||
#include "gwin/internal.h" |
|||
|
|||
/* Our GWIN identifier */ |
|||
#define GW_SCOPE (GW_FIRST_USER_WINDOW+0) |
|||
|
|||
/* The size of our dynamically allocated audio buffer */ |
|||
#define AUDIOBUFSZ 64*2 |
|||
|
|||
/* How many flat-line sample before we trigger */ |
|||
#define FLATLINE_SAMPLES 8 |
|||
|
|||
GHandle gwinCreateScope(GScopeObject *gs, coord_t x, coord_t y, coord_t cx, coord_t cy, uint16_t channel, uint32_t frequency) { |
|||
/* Initialise the base class GWIN */ |
|||
if (!(gs = (GScopeObject *)_gwinInit((GWindowObject *)gs, x, y, cx, cy, sizeof(GScopeObject)))) |
|||
return 0; |
|||
|
|||
/* Initialise the scope object members and allocate memory for buffers */ |
|||
gs->gwin.type = GW_SCOPE; |
|||
chBSemInit(&gs->bsem, TRUE); |
|||
gs->nextx = 0; |
|||
if (!(gs->lastscopetrace = (coord_t *)chHeapAlloc(NULL, gs->gwin.width * sizeof(coord_t)))) |
|||
return 0; |
|||
if (!(gs->audiobuf = (adcsample_t *)chHeapAlloc(NULL, AUDIOBUFSZ * sizeof(adcsample_t)))) |
|||
return 0; |
|||
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP |
|||
gs->lasty = gs->gwin.height/2; |
|||
#elif TRIGGER_METHOD == TRIGGER_MINVALUE |
|||
gs->lasty = gs->gwin.height/2; |
|||
gs->scopemin = 0; |
|||
#endif |
|||
|
|||
/* Start the GADC high speed converter */ |
|||
gaudinInit(channel, frequency, gs->audiobuf, AUDIOBUFSZ, AUDIOBUFSZ/2); |
|||
gaudinSetBSem(&gs->bsem, &gs->myEvent); |
|||
gaudinStart(); |
|||
|
|||
return (GHandle)gs; |
|||
} |
|||
|
|||
void gwinWaitForScopeTrace(GHandle gh) { |
|||
#define gs ((GScopeObject *)(gh)) |
|||
int i; |
|||
coord_t x, y; |
|||
coord_t yoffset; |
|||
audin_sample_t *pa; |
|||
coord_t *pc; |
|||
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP |
|||
bool_t rdytrigger; |
|||
int flsamples; |
|||
#elif TRIGGER_METHOD == TRIGGER_MINVALUE |
|||
bool_t rdytrigger; |
|||
int flsamples; |
|||
coord_t scopemin; |
|||
#endif |
|||
|
|||
/* Wait for a set of audio conversions */ |
|||
chBSemWait(&gs->bsem); |
|||
|
|||
/* Ensure we are drawing in the right area */ |
|||
#if GDISP_NEED_CLIP |
|||
gdispSetClip(gh->x, gh->y, gh->width, gh->height); |
|||
#endif |
|||
|
|||
yoffset = gh->height/2 + (1<<SCOPE_Y_BITS)/2; |
|||
x = gs->nextx; |
|||
pc = gs->lastscopetrace+x; |
|||
pa = gs->myEvent.buffer; |
|||
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP |
|||
rdytrigger = FALSE; |
|||
flsamples = 0; |
|||
#elif TRIGGER_METHOD == TRIGGER_MINVALUE |
|||
rdytrigger = FALSE; |
|||
flsamples = 0; |
|||
scopemin = 0; |
|||
#endif |
|||
|
|||
for(i = gs->myEvent.count; i; i--) { |
|||
|
|||
/* Calculate the new scope value - re-scale using simple shifts for efficiency, re-center and y-invert */ |
|||
#if GAUDIN_BITS_PER_SAMPLE > SCOPE_Y_BITS |
|||
y = yoffset - (*pa++ >> (GAUDIN_BITS_PER_SAMPLE - SCOPE_Y_BITS)); |
|||
#else |
|||
y = yoffset - (*pa++ << (SCOPE_Y_BITS - GAUDIN_BITS_PER_SAMPLE)); |
|||
#endif |
|||
|
|||
#if TRIGGER_METHOD == TRIGGER_MINVALUE |
|||
/* Calculate the scopemin ready for the next trace */ |
|||
if (y > scopemin) |
|||
scopemin = y; |
|||
#endif |
|||
|
|||
/* Have we reached the end of a scope trace? */ |
|||
if (x >= gh->width) { |
|||
|
|||
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP || TRIGGER_METHOD == TRIGGER_MINVALUE |
|||
/* Handle triggering - we trigger on the next sample minimum (y value maximum) or a flat-line */ |
|||
|
|||
#if TRIGGER_METHOD == TRIGGER_MINVALUE |
|||
/* Arm when we reach the sample minimum (y value maximum) of the previous trace */ |
|||
if (!rdytrigger && y >= gs->scopemin) |
|||
rdytrigger = TRUE; |
|||
#endif |
|||
|
|||
if (y == gs->lasty) { |
|||
/* Trigger if we get too many flat-line samples regardless of the armed state */ |
|||
if (++flsamples < FLATLINE_SAMPLES) |
|||
continue; |
|||
flsamples = 0; |
|||
} else if (y > gs->lasty) { |
|||
gs->lasty = y; |
|||
flsamples = 0; |
|||
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP |
|||
/* Arm the trigger when samples fall (y increases) ie. negative slope */ |
|||
rdytrigger = TRUE; |
|||
#endif |
|||
continue; |
|||
} else { |
|||
/* If the trigger is armed, Trigger when samples increases (y decreases) ie. positive slope */ |
|||
gs->lasty = y; |
|||
flsamples = 0; |
|||
if (!rdytrigger) |
|||
continue; |
|||
} |
|||
|
|||
/* Ready for a the next trigger cycle */ |
|||
rdytrigger = FALSE; |
|||
#endif |
|||
|
|||
/* Prepare for a scope trace */ |
|||
x = 0; |
|||
pc = gs->lastscopetrace; |
|||
} |
|||
|
|||
/* Clear the old scope pixel and then draw the new scope value */ |
|||
gdispDrawPixel(gh->x+x, gh->y+pc[0], gh->bgcolor); |
|||
gdispDrawPixel(gh->x+x, gh->y+y, gh->color); |
|||
|
|||
/* Save the value */ |
|||
*pc++ = y; |
|||
x++; |
|||
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP || TRIGGER_METHOD == TRIGGER_MINVALUE |
|||
gs->lasty = y; |
|||
#endif |
|||
} |
|||
gs->nextx = x; |
|||
#if TRIGGER_METHOD == TRIGGER_MINVALUE |
|||
gs->scopemin = scopemin; |
|||
#endif |
|||
|
|||
#undef gs |
|||
} |
@ -0,0 +1,95 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012, 2013 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX 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 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
#ifndef _GWINOSC_H |
|||
#define _GWINOSC_H |
|||
|
|||
/**
|
|||
* --------------------------- Our Custom GWIN Oscilloscope --------------- |
|||
* |
|||
* This GWIN superset implements a simple audio oscilloscope using the GADC high speed device. |
|||
* |
|||
* It makes many assumptions, the most fundamental of which is that the audio device |
|||
* produces unsigned integer samples. |
|||
* |
|||
* The GMISC module with GMISC_NEED_ARRAYOPS could be used to process the samples more |
|||
* correctly if we were really building something generic. |
|||
*/ |
|||
|
|||
/* The extent of scaling for our audio data - fixed scale at the moment */ |
|||
#ifndef SCOPE_Y_BITS |
|||
#define SCOPE_Y_BITS 8 // 8 bits = 0..255
|
|||
#endif |
|||
|
|||
/* Trigger methods */ |
|||
#define TRIGGER_NONE 0 /* No triggering */ |
|||
#define TRIGGER_POSITIVERAMP 1 /* Trigger on a positive going signal */ |
|||
#define TRIGGER_MINVALUE 2 /* Trigger on reaching the minimum value from the last scope */ |
|||
|
|||
/**
|
|||
* Which trigger we want to use. |
|||
* Experiments suggests that TRIGGER_MINVALUE gives the best result |
|||
*/ |
|||
#ifndef TRIGGER_METHOD |
|||
#define TRIGGER_METHOD TRIGGER_MINVALUE |
|||
#endif |
|||
|
|||
/* A scope window object. Treat it as a black box */ |
|||
typedef struct GScopeObject_t { |
|||
GWindowObject gwin; // Base Class
|
|||
|
|||
coord_t *lastscopetrace; // To store last scope trace
|
|||
BinarySemaphore bsem; // We get signalled on this
|
|||
audin_sample_t *audiobuf; // To store audio samples
|
|||
GEventAudioIn myEvent; // Information on received samples
|
|||
coord_t nextx; // Where we are up to
|
|||
#if TRIGGER_METHOD == TRIGGER_POSITIVERAMP |
|||
coord_t lasty; // The last y value - used for trigger slope detection
|
|||
#elif TRIGGER_METHOD == TRIGGER_MINVALUE |
|||
coord_t lasty; // The last y value - used for trigger slope detection
|
|||
coord_t scopemin; // The last scopes minimum value
|
|||
#endif |
|||
} GScopeObject; |
|||
|
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
/**
|
|||
* Create a scope window. |
|||
*/ |
|||
GHandle gwinCreateScope(GScopeObject *gs, coord_t x, coord_t y, coord_t cx, coord_t cy, uint16_t channel, uint32_t frequency); |
|||
|
|||
/**
|
|||
* Wait for a scope trace to be ready and then draw it. |
|||
*/ |
|||
void gwinWaitForScopeTrace(GHandle gh); |
|||
|
|||
/**
|
|||
* We should also have a special destroy routine here as we have dynamically |
|||
* allocated some memory. There is no point implementing this however as, for |
|||
* this demo, we never destroy the window. |
|||
*/ |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
|
|||
#endif /* _GWINOSC_H */ |
@ -0,0 +1,67 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012, 2013 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX 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 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
/**
|
|||
* This demo demonstrates the use of the GAUDIN module to read audio channel 0. |
|||
* The audio channel gets read to display a very simple oscilloscope. |
|||
* |
|||
* It also demonstrates how to write your own custom GWIN window type. |
|||
*/ |
|||
#include "ch.h" |
|||
#include "hal.h" |
|||
#include "gfx.h" |
|||
|
|||
/* Include our custom gwin audio oscilloscope */ |
|||
#include "gwinosc.h" |
|||
|
|||
/* Specify our timing parameters */ |
|||
#define MY_AUDIO_FREQUENCY 4000 /* 4khz */ |
|||
#define MY_AUDIO_CHANNEL 0 /* Use channel 0 */ |
|||
|
|||
/* Data */ |
|||
static GScopeObject gScopeWindow; |
|||
|
|||
/*
|
|||
* Application entry point. |
|||
*/ |
|||
int main(void) { |
|||
GHandle ghScope; |
|||
coord_t swidth, sheight; |
|||
|
|||
halInit(); |
|||
chSysInit(); |
|||
gdispInit(); |
|||
gdispClear(Black); |
|||
|
|||
/* Get the screen dimensions */ |
|||
swidth = gdispGetWidth(); |
|||
sheight = gdispGetHeight(); |
|||
|
|||
/* Set up the scope window to fill the screen */ |
|||
ghScope = gwinCreateScope(&gScopeWindow, 0, 0, swidth, sheight, MY_AUDIO_CHANNEL, MY_AUDIO_FREQUENCY); |
|||
gwinSetBgColor(ghScope, White); |
|||
gwinSetColor(ghScope, Red); |
|||
gwinClear(ghScope); |
|||
|
|||
/* Just keep displaying the scope traces */ |
|||
while (TRUE) { |
|||
gwinWaitForScopeTrace(ghScope); |
|||
} |
|||
} |
After Width: | Height: | Size: 19 KiB |
@ -0,0 +1,76 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012, 2013 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX 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 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
/**
|
|||
* @file drivers/gaudin/gadc/gaudin.c |
|||
* @brief GAUDIN - Driver file for using the cpu ADC (via GADC). |
|||
* |
|||
* @addtogroup GAUDIN |
|||
* |
|||
* @{ |
|||
*/ |
|||
#include "ch.h" |
|||
#include "hal.h" |
|||
|
|||
/**
|
|||
* We are now implementing the driver - pull in our channel table |
|||
* from the board definitions. |
|||
*/ |
|||
#define GAUDIN_LLD_IMPLEMENTATION |
|||
|
|||
|
|||
#include "gfx.h" |
|||
|
|||
#if GFX_USE_GAUDIN |
|||
|
|||
/* Double check the GADC system is turned on */ |
|||
#if !GFX_USE_GADC |
|||
#error "GAUDIN - The GADC driver for GAUDIN requires GFX_USE_GADC to be TRUE" |
|||
#endif |
|||
|
|||
/* Include the driver defines */ |
|||
#include "gaudin/lld/gaudin_lld.h" |
|||
|
|||
/*===========================================================================*/ |
|||
/* External declarations. */ |
|||
/*===========================================================================*/ |
|||
|
|||
void gaudin_lld_init(const gaudin_params *paud) { |
|||
/* Setup the high speed GADC */ |
|||
gadcHighSpeedInit(gaudin_lld_physdevs[paud->channel], paud->frequency, paud->buffer, paud->bufcount, paud->samplesPerEvent); |
|||
|
|||
/* Register ourselves for ISR callbacks */ |
|||
gadcHighSpeedSetISRCallback(GAUDIN_ISR_CompleteI); |
|||
|
|||
/**
|
|||
* The gadc driver handles any errors for us by restarting the transaction so there is |
|||
* no need for us to setup anything for GAUDIN_ISR_ErrorI() |
|||
*/ |
|||
} |
|||
|
|||
void gadc_lld_start(void) { |
|||
gadcHighSpeedStart(); |
|||
} |
|||
|
|||
void gadc_lld_stop(void) { |
|||
gadcHighSpeedStop(); |
|||
} |
|||
|
|||
#endif /* GFX_USE_GAUDIN */ |
|||
/** @} */ |
@ -0,0 +1,5 @@ |
|||
# List the required driver.
|
|||
GFXSRC += $(GFXLIB)/drivers/gaudin/gadc/gaudin_lld.c |
|||
|
|||
# Required include directories
|
|||
GFXINC += $(GFXLIB)/drivers/gaudin/gadc |
@ -0,0 +1,60 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012, 2013 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX 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 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
/**
|
|||
* @file drivers/gaudin/gadc/gaudin_lld_board_olimexsam7ex256.h |
|||
* @brief GAUDIN Driver board config file for the Olimex SAM7EX256 board |
|||
* |
|||
* @addtogroup GAUDIN |
|||
* @{ |
|||
*/ |
|||
|
|||
#ifndef _GAUDIN_LLD_BOARD_OLIMEXSAM7EX256_H |
|||
#define _GAUDIN_LLD_BOARD_OLIMEXSAM7EX256_H |
|||
|
|||
/*===========================================================================*/ |
|||
/* Audio inputs on this board */ |
|||
/*===========================================================================*/ |
|||
|
|||
/**
|
|||
* @brief The number of audio channels supported by this driver |
|||
*/ |
|||
#define GAUDIN_NUM_CHANNELS 1 |
|||
|
|||
/**
|
|||
* @brief The list of audio channels and their uses |
|||
* @{ |
|||
*/ |
|||
#define GAUDIN_MICROPHONE 0 |
|||
/** @} */ |
|||
|
|||
/**
|
|||
* @brief The following defines are for the low level driver use only |
|||
* @{ |
|||
*/ |
|||
#ifdef GAUDIN_LLD_IMPLEMENTATION |
|||
static uint32_t gaudin_lld_physdevs[GAUDIN_NUM_CHANNELS] = { |
|||
GADC_PHYSDEV_MICROPHONE, |
|||
}; |
|||
#endif |
|||
/** @} */ |
|||
|
|||
#endif /* _GAUDIN_LLD_BOARD_OLIMEXSAM7EX256_H */ |
|||
/** @} */ |
@ -0,0 +1,79 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012, 2013 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX 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 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
/**
|
|||
* @file drivers/gaudin/gadc/gaudin_lld_config.h |
|||
* @brief GAUDIN Driver config file. |
|||
* |
|||
* @addtogroup GAUDIN |
|||
* @{ |
|||
*/ |
|||
|
|||
#ifndef GAUDIN_LLD_CONFIG_H |
|||
#define GAUDIN_LLD_CONFIG_H |
|||
|
|||
#if GFX_USE_GAUDIN |
|||
|
|||
/*===========================================================================*/ |
|||
/* Driver hardware support. */ |
|||
/*===========================================================================*/ |
|||
|
|||
/**
|
|||
* @brief The audio input sample type |
|||
* @details For this driver it matches the cpu sample type |
|||
*/ |
|||
typedef adcsample_t audin_sample_t; |
|||
|
|||
/**
|
|||
* @brief The maximum sample frequency supported by this audio device |
|||
* @details For this driver it matches the GADC maximum high speed sample rate |
|||
*/ |
|||
#define GAUDIN_MAX_SAMPLE_FREQUENCY GADC_MAX_HIGH_SPEED_SAMPLERATE |
|||
|
|||
/**
|
|||
* @brief The number of bits in a sample |
|||
* @details For this driver it matches the cpu sample bits |
|||
*/ |
|||
#define GAUDIN_BITS_PER_SAMPLE GADC_BITS_PER_SAMPLE |
|||
|
|||
/**
|
|||
* @brief The format of an audio sample |
|||
* @details For this driver it matches the cpu sample format |
|||
*/ |
|||
#define GAUDIN_SAMPLE_FORMAT GADC_SAMPLE_FORMAT |
|||
|
|||
/**
|
|||
* For the GAUDIN driver that uses GADC - all the remaining config definitions are specific |
|||
* to the board. |
|||
*/ |
|||
#if defined(GADC_USE_CUSTOM_BOARD) && GADC_USE_CUSTOM_BOARD |
|||
/* Include the user supplied board definitions */ |
|||
#include "gaudin_lld_board.h" |
|||
#elif defined(BOARD_OLIMEX_SAM7_EX256) |
|||
#include "gaudin_lld_board_olimexsam7ex256.h" |
|||
#else |
|||
/* Include the user supplied board definitions */ |
|||
#include "gaudin_lld_board.h" |
|||
#endif |
|||
|
|||
#endif /* GFX_USE_GAUDIN */ |
|||
|
|||
#endif /* GAUDIN_LLD_CONFIG_H */ |
|||
/** @} */ |
@ -1,170 +1,180 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX 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 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
/**
|
|||
* @file include/gaudin/gaudin.h |
|||
* @brief GAUDIN - Audio Input subsystem header file. |
|||
* |
|||
* @addtogroup GAUDIN |
|||
* |
|||
* @{ |
|||
*/ |
|||
|
|||
#ifndef _GAUDIN_H |
|||
#define _GAUDIN_H |
|||
|
|||
#include "gfx.h" |
|||
|
|||
#if GFX_USE_GAUDIN || defined(__DOXYGEN__) |
|||
|
|||
/* Include the driver defines */ |
|||
#include "gaudin_lld_config.h" |
|||
//audio_in_sample_t
|
|||
//GAUDIN_SAMPLE_FORMAT ARRAY_DATA_10BITUNSIGNED
|
|||
//GAUDIN_STEREO_DEVICE FALSE
|
|||
|
|||
/*===========================================================================*/ |
|||
/* Type definitions */ |
|||
/*===========================================================================*/ |
|||
|
|||
// Event types for GAUDIN
|
|||
#define GEVENT_AUDIO_IN (GEVENT_GAUDIN_FIRST+0) |
|||
|
|||
/**
|
|||
* @brief The Audio Input event structure. |
|||
* @{ |
|||
*/ |
|||
typedef struct GEventAudioIn_t { |
|||
/**
|
|||
* @brief The type of this event (GEVENT_AUDIO_IN) |
|||
*/ |
|||
GEventType type; |
|||
/**
|
|||
* @brief The event flags |
|||
*/ |
|||
uint16_t flags; |
|||
/**
|
|||
* @brief The event flag values. |
|||
* @{ |
|||
*/ |
|||
#define GADC_AUDIO_IN_LOSTEVENT 0x0001 /**< @brief The last GEVENT_AUDIO_IN event was lost */ |
|||
/** @} */ |
|||
/**
|
|||
* @brief The number of audio samples in the buffer |
|||
*/ |
|||
size_t count; |
|||
/**
|
|||
* @brief The buffer containing the audio samples |
|||
*/ |
|||
audio_in_sample_t *buffer; |
|||
} GEventAudioIn; |
|||
|
|||
/*===========================================================================*/ |
|||
/* External declarations. */ |
|||
/*===========================================================================*/ |
|||
|
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
/**
|
|||
* @brief Initialise the Audio Input Subsystem. |
|||
* @details Initialises but does not start the audio in. |
|||
* |
|||
* @param[in] frequency The sample frequency |
|||
* @param[in] buffer The static buffer to put the samples into. |
|||
* @param[in] bufcount The total number of conversions that will fit in the buffer. |
|||
* @param[in] countPerEvent The number of conversions to do before returning an event. |
|||
* |
|||
* @note If the audio input is running it will be stopped. |
|||
* @note Due to a bug in Chibi-OS countPerEvent must be even for the GADC audio driver. |
|||
* If bufcount is not evenly divisable by countPerEvent, the remainder must also be even. |
|||
* This requirement may not apply to other GAUDIN drivers. |
|||
* @note The number of samples for stereo devices will be double the number of conversions. |
|||
* Make sure you allocate your buffers large enough. Each channel is then interleaved |
|||
* into the provided buffer. Note 'bufcount' and 'countPerEvent' parameters describe the |
|||
* number of conversions not the number of samples. |
|||
* @note The buffer is circular. When the end of the buffer is reached it will start |
|||
* putting data into the beginning of the buffer again. |
|||
* @note The event listener must process the event (and the data in it) before the |
|||
* next event occurs. If not, the following event will be lost. |
|||
* @note If bufcount is evenly divisable by countPerEvent, then every event will return |
|||
* countPerEvent conversions. If bufcount is not evenly divisable, it will return |
|||
* a block of samples containing less than countPerEvent samples when it reaches the |
|||
* end of the buffer. |
|||
* |
|||
* @api |
|||
*/ |
|||
void gaudinInit(uint32_t frequency, adcsample_t *buffer, size_t bufcount, size_t samplesPerEvent); |
|||
|
|||
#if GFX_USE_GEVENT || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Turn on sending results to the GEVENT sub-system. |
|||
* @details Returns a GSourceHandle to listen for GEVENT_AUDIO_IN events. |
|||
* |
|||
* @note The audio input will not use the GEVENT system unless this is |
|||
* called first. This saves processing time if the application does |
|||
* not want to use the GEVENT sub-system for audio input. |
|||
* Once turned on it cannot be turned off. |
|||
* @note The audio input is capable of signalling via this method and a binary semaphore |
|||
* at the same time. |
|||
* |
|||
* @api |
|||
*/ |
|||
GSourceHandle gaudinGetSource(void); |
|||
#endif |
|||
|
|||
/**
|
|||
* @brief Allow retrieving of results from the audio input using a Binary Semaphore and a static event buffer. |
|||
* |
|||
* @param[in] pbsem The binary semaphore is signaled when data is available. |
|||
* @param[in] pEvent The static event buffer to place the result information. |
|||
* |
|||
* @note Passing a NULL for pbsem or pEvent will turn off signalling via this method. |
|||
* @note The audio input is capable of signalling via this method and the GEVENT |
|||
* sub-system at the same time. |
|||
* |
|||
* @api |
|||
*/ |
|||
void gaudinSetBSem(BinarySemaphore *pbsem, GEventAudioIn *pEvent); |
|||
|
|||
/**
|
|||
* @brief Start the audio input conversions. |
|||
* @pre It must have been initialised first with @p gaudinInit() |
|||
* |
|||
* @api |
|||
*/ |
|||
GSourceHandle gaudinStart(void); |
|||
|
|||
/**
|
|||
* @brief Stop the audio input conversions. |
|||
* |
|||
* @api |
|||
*/ |
|||
void gaudinStop(void); |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
|
|||
#endif /* GFX_USE_GAUDIN */ |
|||
|
|||
#endif /* _GAUDIN_H */ |
|||
/** @} */ |
|||
|
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX 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 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
/**
|
|||
* @file include/gaudin/gaudin.h |
|||
* @brief GAUDIN - Audio Input subsystem header file. |
|||
* |
|||
* @addtogroup GAUDIN |
|||
* |
|||
* @{ |
|||
*/ |
|||
|
|||
#ifndef _GAUDIN_H |
|||
#define _GAUDIN_H |
|||
|
|||
#include "gfx.h" |
|||
|
|||
#if GFX_USE_GAUDIN || defined(__DOXYGEN__) |
|||
|
|||
/* Include the driver defines */ |
|||
#include "gaudin_lld_config.h" |
|||
|
|||
/*===========================================================================*/ |
|||
/* Type definitions */ |
|||
/*===========================================================================*/ |
|||
|
|||
// Event types for GAUDIN
|
|||
#define GEVENT_AUDIO_IN (GEVENT_GAUDIN_FIRST+0) |
|||
|
|||
/**
|
|||
* @brief The Audio Input event structure. |
|||
* @{ |
|||
*/ |
|||
typedef struct GEventAudioIn_t { |
|||
#if GFX_USE_GEVENT || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief The type of this event (GEVENT_AUDIO_IN) |
|||
*/ |
|||
GEventType type; |
|||
#endif |
|||
/**
|
|||
* @brief The current channel |
|||
*/ |
|||
uint16_t channel; |
|||
/**
|
|||
* @brief The event flags |
|||
*/ |
|||
uint16_t flags; |
|||
/**
|
|||
* @brief The event flag values. |
|||
* @{ |
|||
*/ |
|||
#define GADC_AUDIO_IN_LOSTEVENT 0x0001 /**< @brief The last GEVENT_AUDIO_IN event was lost */ |
|||
/** @} */ |
|||
/**
|
|||
* @brief The number of audio samples in the buffer |
|||
*/ |
|||
size_t count; |
|||
/**
|
|||
* @brief The buffer containing the audio samples |
|||
*/ |
|||
audin_sample_t *buffer; |
|||
} GEventAudioIn; |
|||
|
|||
/*===========================================================================*/ |
|||
/* External declarations. */ |
|||
/*===========================================================================*/ |
|||
|
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
/**
|
|||
* @brief Initialise (but not start) the Audio Input Subsystem. |
|||
* @details Returns FALSE for an invalid channel or other invalid parameter. |
|||
* |
|||
* @param[in] channel The channel to convert. Can be set from 0 to GAUDIN_NUM_CHANNELS - 1. |
|||
* @param[in] frequency The sample frequency |
|||
* @param[in] buffer The static buffer to put the samples into. |
|||
* @param[in] bufcount The total number of conversions that will fit in the buffer. |
|||
* @param[in] countPerEvent The number of conversions to do before returning an event. |
|||
* |
|||
* @note Only one channel is active at a time. If an audio input is running it will be stopped. |
|||
* The Event subsystem is disconnected from the audio subsystem and any binary semaphore |
|||
* event is forgotten. |
|||
* @note Some channels may be stereo channels which return twice as much sample data with |
|||
* the left and right channel data interleaved. Other channels may be mono channels. |
|||
* Where stereo channels exist it would be common for the low level driver to also |
|||
* offer the left and right channels separately. |
|||
* @note Due to a bug in Chibi-OS countPerEvent must be even if using the GADC low level audio driver. |
|||
* If bufcount is not evenly divisable by countPerEvent, the remainder must also be even. |
|||
* This requirement may not apply to other GAUDIN drivers. |
|||
* @note The number of samples for stereo devices will be double the number of conversions. |
|||
* Make sure you allocate your buffers large enough. Each channel is then interleaved |
|||
* into the provided buffer. Note 'bufcount' and 'countPerEvent' parameters describe the |
|||
* number of conversions not the number of samples. |
|||
* @note The buffer is circular. When the end of the buffer is reached it will start |
|||
* putting data into the beginning of the buffer again. |
|||
* @note The event listener must process the event (and the data in it) before the |
|||
* next event occurs. If not, the following event will be lost. |
|||
* @note If bufcount is evenly divisable by countPerEvent, then every event will return |
|||
* countPerEvent conversions. If bufcount is not evenly divisable, it will return |
|||
* a block of samples containing less than countPerEvent samples when it reaches the |
|||
* end of the buffer. |
|||
* |
|||
* @api |
|||
*/ |
|||
bool_t gaudinInit(uint16_t channel, uint32_t frequency, audin_sample_t *buffer, size_t bufcount, size_t samplesPerEvent); |
|||
|
|||
#if GFX_USE_GEVENT || defined(__DOXYGEN__) |
|||
/**
|
|||
* @brief Turn on sending results to the GEVENT sub-system. |
|||
* @details Returns a GSourceHandle to listen for GEVENT_AUDIO_IN events. |
|||
* |
|||
* @note The audio input will not use the GEVENT system unless this is |
|||
* called first. This saves processing time if the application does |
|||
* not want to use the GEVENT sub-system for audio input. |
|||
* Once turned on it can only be turned off by calling @p gadcHighSpeedInit() again. |
|||
* @note The audio input is capable of signalling via this method and a binary semaphore |
|||
* at the same time. |
|||
* |
|||
* @api |
|||
*/ |
|||
GSourceHandle gaudinGetSource(void); |
|||
#endif |
|||
|
|||
/**
|
|||
* @brief Allow retrieving of results from the audio input using a Binary Semaphore and a static event buffer. |
|||
* |
|||
* @param[in] pbsem The binary semaphore is signaled when data is available. |
|||
* @param[in] pEvent The static event buffer to place the result information. |
|||
* |
|||
* @note Passing a NULL for pbsem or pEvent will turn off signalling via this method. |
|||
* @note The audio input is capable of signalling via this method and the GEVENT |
|||
* sub-system at the same time. |
|||
* |
|||
* @api |
|||
*/ |
|||
void gaudinSetBSem(BinarySemaphore *pbsem, GEventAudioIn *pEvent); |
|||
|
|||
/**
|
|||
* @brief Start the audio input conversions. |
|||
* @pre It must have been initialised first with @p gaudinInit() |
|||
* |
|||
* @api |
|||
*/ |
|||
void gaudinStart(void); |
|||
|
|||
/**
|
|||
* @brief Stop the audio input conversions. |
|||
* |
|||
* @api |
|||
*/ |
|||
void gaudinStop(void); |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
|
|||
#endif /* GFX_USE_GAUDIN */ |
|||
|
|||
#endif /* _GAUDIN_H */ |
|||
/** @} */ |
|||
|
|||
|
@ -0,0 +1,105 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012, 2013 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX 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 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
/**
|
|||
* @file include/gaudin/lld/gaudin_lld.h |
|||
* @brief GAUDIN - Audio Input driver header file. |
|||
* |
|||
* @defgroup Driver Driver |
|||
* @ingroup GAUDIN |
|||
* @{ |
|||
*/ |
|||
|
|||
#ifndef _GAUDIN_LLD_H |
|||
#define _GAUDIN_LLD_H |
|||
|
|||
#include "gfx.h" |
|||
|
|||
#if GFX_USE_GADC || defined(__DOXYGEN__) |
|||
|
|||
/*===========================================================================*/ |
|||
/* Type definitions */ |
|||
/*===========================================================================*/ |
|||
|
|||
/**
|
|||
* @brief The structure passed to start a audio conversion |
|||
* @note We use the structure instead of parameters purely to save |
|||
* interrupt stack space which is very limited in some platforms. |
|||
* @{ |
|||
*/ |
|||
typedef struct gaudin_params_t { |
|||
uint16_t channel; |
|||
uint32_t frequency; |
|||
audin_sample_t *buffer; |
|||
size_t bufcount; |
|||
size_t samplesPerEvent; |
|||
} gaudin_params; |
|||
/* @} */ |
|||
|
|||
/**
|
|||
* @brief These routines are the callbacks that the driver uses. |
|||
* @details Defined in the high level GAUDIN code. |
|||
* |
|||
* @icode |
|||
* @notapi |
|||
* @{ |
|||
*/ |
|||
extern void GAUDIN_ISR_CompleteI(audin_sample_t *buffer, size_t n); |
|||
extern void GAUDIN_ISR_ErrorI(void); |
|||
/**
|
|||
* @} |
|||
*/ |
|||
|
|||
/*===========================================================================*/ |
|||
/* External declarations. */ |
|||
/*===========================================================================*/ |
|||
|
|||
#ifdef __cplusplus |
|||
extern "C" { |
|||
#endif |
|||
|
|||
/**
|
|||
* @brief Initialise the driver |
|||
* |
|||
* @api |
|||
*/ |
|||
void gaudin_lld_init(const gaudin_params *paud); |
|||
|
|||
/**
|
|||
* @brief Start the audio input sampling |
|||
* |
|||
* @api |
|||
*/ |
|||
void gadc_lld_start(void); |
|||
|
|||
/**
|
|||
* @brief Stop the audio input sampling |
|||
* |
|||
* @api |
|||
*/ |
|||
void gadc_lld_stop(void); |
|||
|
|||
#ifdef __cplusplus |
|||
} |
|||
#endif |
|||
|
|||
#endif /* GFX_USE_GADC */ |
|||
|
|||
#endif /* _GADC_LLD_H */ |
|||
/** @} */ |
@ -1,170 +1,170 @@ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX 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 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
/**
|
|||
* @file include/gfx.h |
|||
* @brief GFX system header file. |
|||
* |
|||
* @addtogroup GFX |
|||
* @{ |
|||
*/ |
|||
|
|||
#ifndef _GFX_H |
|||
#define _GFX_H |
|||
|
|||
/* gfxconf.h is the user's project configuration for the GFX system. */ |
|||
#include "gfxconf.h" |
|||
|
|||
/**
|
|||
* @name GFX sub-systems that can be turned on |
|||
* @{ |
|||
*/ |
|||
/**
|
|||
* @brief GFX Graphics Display Basic API |
|||
* @details Defaults to FALSE |
|||
* @note Also add the specific hardware driver to your makefile. |
|||
* Eg. include $(GFXLIB)/drivers/gdisp/Nokia6610/gdisp_lld.mk |
|||
*/ |
|||
#ifndef GFX_USE_GDISP |
|||
#define GFX_USE_GDISP FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Text Display Basic API |
|||
* @details Defaults to FALSE |
|||
* @note Also add the specific hardware driver to your makefile. |
|||
* Eg. include $(GFXLIB)/drivers/tdisp/HD44780/tdisp_lld.mk |
|||
*/ |
|||
#ifndef GFX_USE_TDISP |
|||
#define GFX_USE_TDISP FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Graphics Windowing API |
|||
* @details Defaults to FALSE |
|||
* @details Extends the GDISP API to add the concept of graphic windows. |
|||
* @note Also supports high-level "window" objects such as console windows, |
|||
* buttons, graphing etc |
|||
*/ |
|||
#ifndef GFX_USE_GWIN |
|||
#define GFX_USE_GWIN FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Event API |
|||
* @details Defaults to FALSE |
|||
* @details Defines the concept of a "Source" that can send "Events" to "Listeners". |
|||
*/ |
|||
#ifndef GFX_USE_GEVENT |
|||
#define GFX_USE_GEVENT FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Timer API |
|||
* @details Defaults to FALSE |
|||
* @details Provides thread context timers - both one-shot and periodic. |
|||
*/ |
|||
#ifndef GFX_USE_GTIMER |
|||
#define GFX_USE_GTIMER FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Input Device API |
|||
* @details Defaults to FALSE |
|||
* @note Also add the specific hardware drivers to your makefile. |
|||
* Eg. |
|||
* include $(GFXLIB)/drivers/ginput/toggle/Pal/ginput_lld.mk |
|||
* and... |
|||
* include $(GFXLIB)/drivers/ginput/touch/MCU/ginput_lld.mk |
|||
*/ |
|||
#ifndef GFX_USE_GINPUT |
|||
#define GFX_USE_GINPUT FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Generic Periodic ADC API |
|||
* @details Defaults to FALSE |
|||
*/ |
|||
#ifndef GFX_USE_GADC |
|||
#define GFX_USE_GADC FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Audio Input Device API |
|||
* @details Defaults to FALSE |
|||
* @note Also add the specific hardware drivers to your makefile. |
|||
* Eg. |
|||
* include $(GFXLIB)/drivers/gaudin/GADC/gaudin_lld.mk |
|||
*/ |
|||
#ifndef GFX_USE_GAUDIN |
|||
#define GFX_USE_GAUDIN FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Audio Output Device API |
|||
* @details Defaults to FALSE |
|||
* @note Also add the specific hardware drivers to your makefile. |
|||
* Eg. |
|||
* include $(GFXLIB)/drivers/gaudout/PWM/gaudout_lld.mk |
|||
*/ |
|||
#ifndef GFX_USE_GAUDOUT |
|||
#define GFX_USE_GAUDOUT FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Miscellaneous Routines API |
|||
* @details Defaults to FALSE |
|||
* @note Turning this on without turning on any GMISC_NEED_xxx macros will result |
|||
* in no extra code being compiled in. GMISC is made up from the sum of its |
|||
* parts. |
|||
*/ |
|||
#ifndef GFX_USE_GMISC |
|||
#define GFX_USE_GMISC FALSE |
|||
#endif |
|||
/** @} */ |
|||
|
|||
/**
|
|||
* Get all the options for each sub-system. |
|||
* |
|||
*/ |
|||
#include "gmisc/options.h" |
|||
#include "gevent/options.h" |
|||
#include "gtimer/options.h" |
|||
#include "gdisp/options.h" |
|||
#include "gwin/options.h" |
|||
#include "ginput/options.h" |
|||
#include "tdisp/options.h" |
|||
#include "gadc/options.h" |
|||
#include "gaudin/options.h" |
|||
#include "gaudout/options.h" |
|||
|
|||
/**
|
|||
* Inter-dependancy safety checks on the sub-systems. |
|||
* |
|||
*/ |
|||
#include "gfx_rules.h" |
|||
|
|||
/**
|
|||
* Include the sub-system header files |
|||
*/ |
|||
#include "gevent/gevent.h" |
|||
#include "gtimer/gtimer.h" |
|||
#include "gdisp/gdisp.h" |
|||
#include "gwin/gwin.h" |
|||
#include "ginput/ginput.h" |
|||
#include "tdisp/tdisp.h" |
|||
#include "gadc/gadc.h" |
|||
#include "gaudin/gaudin.h" |
|||
#include "gaudout/gaudout.h" |
|||
#include "gmisc/gmisc.h" |
|||
|
|||
#endif /* _GFX_H */ |
|||
/** @} */ |
|||
/*
|
|||
ChibiOS/GFX - Copyright (C) 2012 |
|||
Joel Bodenmann aka Tectu <joel@unormal.org> |
|||
|
|||
This file is part of ChibiOS/GFX. |
|||
|
|||
ChibiOS/GFX 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 3 of the License, or |
|||
(at your option) any later version. |
|||
|
|||
ChibiOS/GFX is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
*/ |
|||
|
|||
/**
|
|||
* @file include/gfx.h |
|||
* @brief GFX system header file. |
|||
* |
|||
* @addtogroup GFX |
|||
* @{ |
|||
*/ |
|||
|
|||
#ifndef _GFX_H |
|||
#define _GFX_H |
|||
|
|||
/* gfxconf.h is the user's project configuration for the GFX system. */ |
|||
#include "gfxconf.h" |
|||
|
|||
/**
|
|||
* @name GFX sub-systems that can be turned on |
|||
* @{ |
|||
*/ |
|||
/**
|
|||
* @brief GFX Graphics Display Basic API |
|||
* @details Defaults to FALSE |
|||
* @note Also add the specific hardware driver to your makefile. |
|||
* Eg. include $(GFXLIB)/drivers/gdisp/Nokia6610/gdisp_lld.mk |
|||
*/ |
|||
#ifndef GFX_USE_GDISP |
|||
#define GFX_USE_GDISP FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Text Display Basic API |
|||
* @details Defaults to FALSE |
|||
* @note Also add the specific hardware driver to your makefile. |
|||
* Eg. include $(GFXLIB)/drivers/tdisp/HD44780/tdisp_lld.mk |
|||
*/ |
|||
#ifndef GFX_USE_TDISP |
|||
#define GFX_USE_TDISP FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Graphics Windowing API |
|||
* @details Defaults to FALSE |
|||
* @details Extends the GDISP API to add the concept of graphic windows. |
|||
* @note Also supports high-level "window" objects such as console windows, |
|||
* buttons, graphing etc |
|||
*/ |
|||
#ifndef GFX_USE_GWIN |
|||
#define GFX_USE_GWIN FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Event API |
|||
* @details Defaults to FALSE |
|||
* @details Defines the concept of a "Source" that can send "Events" to "Listeners". |
|||
*/ |
|||
#ifndef GFX_USE_GEVENT |
|||
#define GFX_USE_GEVENT FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Timer API |
|||
* @details Defaults to FALSE |
|||
* @details Provides thread context timers - both one-shot and periodic. |
|||
*/ |
|||
#ifndef GFX_USE_GTIMER |
|||
#define GFX_USE_GTIMER FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Input Device API |
|||
* @details Defaults to FALSE |
|||
* @note Also add the specific hardware drivers to your makefile. |
|||
* Eg. |
|||
* include $(GFXLIB)/drivers/ginput/toggle/Pal/ginput_lld.mk |
|||
* and... |
|||
* include $(GFXLIB)/drivers/ginput/touch/MCU/ginput_lld.mk |
|||
*/ |
|||
#ifndef GFX_USE_GINPUT |
|||
#define GFX_USE_GINPUT FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Generic Periodic ADC API |
|||
* @details Defaults to FALSE |
|||
*/ |
|||
#ifndef GFX_USE_GADC |
|||
#define GFX_USE_GADC FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Audio Input Device API |
|||
* @details Defaults to FALSE |
|||
* @note Also add the specific hardware drivers to your makefile. |
|||
* Eg. |
|||
* include $(GFXLIB)/drivers/gaudin/GADC/gaudin_lld.mk |
|||
*/ |
|||
#ifndef GFX_USE_GAUDIN |
|||
#define GFX_USE_GAUDIN FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Audio Output Device API |
|||
* @details Defaults to FALSE |
|||
* @note Also add the specific hardware drivers to your makefile. |
|||
* Eg. |
|||
* include $(GFXLIB)/drivers/gaudout/PWM/gaudout_lld.mk |
|||
*/ |
|||
#ifndef GFX_USE_GAUDOUT |
|||
#define GFX_USE_GAUDOUT FALSE |
|||
#endif |
|||
/**
|
|||
* @brief GFX Miscellaneous Routines API |
|||
* @details Defaults to FALSE |
|||
* @note Turning this on without turning on any GMISC_NEED_xxx macros will result |
|||
* in no extra code being compiled in. GMISC is made up from the sum of its |
|||
* parts. |
|||
*/ |
|||
#ifndef GFX_USE_GMISC |
|||
#define GFX_USE_GMISC FALSE |
|||
#endif |
|||
/** @} */ |
|||
|
|||
/**
|
|||
* Get all the options for each sub-system. |
|||
* |
|||
*/ |
|||
#include "gmisc/options.h" |
|||
#include "gevent/options.h" |
|||
#include "gtimer/options.h" |
|||
#include "gdisp/options.h" |
|||
#include "gwin/options.h" |
|||
#include "ginput/options.h" |
|||
#include "tdisp/options.h" |
|||
#include "gadc/options.h" |
|||
#include "gaudin/options.h" |
|||
#include "gaudout/options.h" |
|||
|
|||
/**
|
|||
* Inter-dependancy safety checks on the sub-systems. |
|||
* |
|||
*/ |
|||
#include "gfx_rules.h" |
|||
|
|||
/**
|
|||
* Include the sub-system header files |
|||