/* * This source code form is a part of the ChibiOS/GFX project and stands * under the terms of the GFX License v1.0. If a copy of the license * was not distributed with this file, You can obtain one at: * * http://chibios-gfx.com/license.html * */ /* * Copyright (c) 2012, 2013, Joel Bodenmann aka Tectu * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _GWINOSC_H #define _GWINOSC_H /** * --------------------------- Our Custom GWIN Oscilloscope --------------- * * This GWIN superset implements a simple audio oscilloscope using the GADC high speed device. */ /* The extent of scaling for our audio data - fixed scale at the moment */ #ifndef SCOPE_Y_BITS #define SCOPE_Y_BITS 7 // 7 bits = 0..128 #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 adcsample_t *audiobuf; // To store audio samples GEventADC 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, uint32_t physdev, 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 */