/*
Copyright (C) 1998,1999,2000 T. Scott Dattalo
This file is part of gpsim.
gpsim 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, or (at your option)
any later version.
gpsim 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 gpsim; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifndef __LED_H__
#define __LED_H__
/* IN_MODULE should be defined for modules */
#define IN_MODULE
#include "../src/stimuli.h"
#include "../src/ioports.h"
#include "../src/symbol.h"
#include "../src/trace.h"
#include "../src/interface.h"
#include <gtk/gtk.h>
namespace Leds {
class LED_Interface; // Defined in led.cc
class Led_Input;
//------------------------------------------------------------------------
// LED base class
class Led_base : public Module
{
public:
virtual void build_window() = 0;
virtual void update() = 0;
virtual void update( GtkWidget *drawable,
guint max_width,
guint max_height) = 0;
LED_Interface *interface;
};
//------------------------------------------------------------------------
// 7-segment leds
// define a point
typedef struct {
float x;
float y;
} XfPoint;
#define MAX_PTS 6 /* max # of pts per segment polygon */
#define NUM_SEGS 7 /* number of segments in a digit */
/*
* These constants give the bit positions for the segmask[]
* digit masks.
*/
#define TOP 0
#define TOP_RIGHT 1
#define BOT_RIGHT 2
#define BOTTOM 3
#define BOT_LEFT 4
#define TOP_LEFT 5
#define MIDDLE 6
//#define DECIMAL_POINT 7
typedef XfPoint segment_pts[NUM_SEGS][MAX_PTS];
class Led_7Segments : public Led_base, public TriggerObject
{
public:
struct {
GdkPoint p[7]; // Segments
} segments[7];
GdkPoint offset;
int height,
slant,
segment_thickness;
float sxw;
float angle; // rise over run
float width_factor; // ratio of digit to segment width
float small_ratio; // ratio of small to large digits
float sec_gap; // gap between normal digits and
// seconds, as ratio to digit width
float space_factor; /* ratio of digit width to border sp.*/
guint w_width;
guint w_height;
segment_pts seg_pts;
GtkWidget *darea;
GdkGC *segment_gc;
GdkColor led_segment_on_color;
GdkColor led_segment_off_color;
GdkColor led_background_color;
Led_7Segments();
~Led_7Segments();
void build_segments( int w, int h);
virtual void callback();
virtual void build_window();
virtual void update();
virtual void update( GtkWidget *drawable,
guint max_width,
guint max_height);
unsigned int getPinState();
// Inheritances from the Package class
virtual void create_iopin_map();
// Inheritance from Module class
const virtual char *type() { return ("led_7segments"); };
static Module *construct(const char *new_name);
private:
//unsigned int m_segmentStates;
Led_Input **m_pins;
int m_nPins;
};
//------------------------------------------------------------------------
// Simple LED
//
class Led: public Led_base, public TriggerObject
{
public:
GtkWidget *darea;
GdkGC *gc;
GdkColor led_segment_on_color;
GdkColor led_segment_off_color;
int w_width, w_height;
gpointer cbp; // cycle break point pointer (need to delete in destructor)
Led();
~Led();
virtual void callback();
virtual void build_window();
virtual void update();
virtual void update( GtkWidget *drawable,
guint max_width,
guint max_height);
// Inheritances from the Package class
virtual void create_iopin_map();
// Inheritance from Module class
const virtual char *type() { return ("led"); };
static Module *construct(const char *new_name);
private:
Led_Input *m_pin;
};
} // end of namespace Led
#endif // __LED_H__
syntax highlighted by Code2HTML, v. 0.9.1