Dependencies:   EthernetNetIf NTPClient_NetServices mbed

display.c

Committer:
suupen
Date:
2011-12-11
Revision:
0:f49394bec833

File content as of revision 0:f49394bec833:

/***********************************************************************/
/*                                                                     */
/*    display.c                                                          */
/*                                                                     */
/***********************************************************************/
#define _DISPLAY_C

#include "display.h"

/*****************************Macro definition********************************/

/*****************************Global variable*********************************/

/******************************Function declaration***************************/
static bool_t display_positionCheck(_DISPLAYPOSITION *c);
static bool_t display_colorCheck(_DISPLAYCOLOR *c);

/******************************************************************************
Name       : hyoji zahyo no hani check
Parameters : none
Returns    : nothing
Description: D_display[][][] = 0x00
******************************************************************************/
static bool_t display_positionCheck(_DISPLAYPOSITION *p)
{
    bool_t ans = TRUE;

    if((*p).x < Z_displayXMin){ans = FALSE;}
    if((*p).x > Z_displayXMax){ans = FALSE;}
    
    if((*p).y < Z_displayXMin){ans = FALSE;}
    if((*p).y > Z_displayXMax){ans = FALSE;}

    return ans;
}
/******************************************************************************
Name       : hyoji color no hani check
Parameters : none
Returns    : nothing
Description: D_display[][][] = 0x00
******************************************************************************/
static bool_t display_colorCheck(_DISPLAYCOLOR *c)
{
    bool_t ans = TRUE;

    if((*c).g < Z_colorMin){ans = FALSE;}
    if((*c).g > Z_colorNull){ans = FALSE;}
    
    if((*c).r < Z_colorMin){ans = FALSE;}
    if((*c).r > Z_colorNull){ans = FALSE;}

    return ans;
}

/******************************************************************************
Name       : display_clr()
Parameters : none
Returns    : nothing
Description: D_display[][][] = 0x00
******************************************************************************/
void display_clr(void)
{
    uint8_t x,y;

    for(x = 0; x <= Z_displayXMax; x++){
        for(y = 0; y <= Z_displayYMax; y++){
            D_display[Z_red][x][y] = 0;
            D_display[Z_green][x][y] = 0;
        }
    }
}

/******************************************************************************
Name       : display_pset(redGradiation,greenGradiation,x,y)
Parameters : color   x    y
Returns    : nothing
Description: 
******************************************************************************/
void display_pset(_DISPLAYCOLOR c, _DISPLAYPOSITION p)
{
    if(( display_positionCheck(&p) == TRUE) 
    && ( display_colorCheck(&c) == TRUE)
    ){
        if(c.r < Z_colorNull){
            D_display[Z_red][p.x][p.y] = c.r;
        }
        if(c.g < Z_colorNull){
            D_display[Z_green][p.x][p.y] = c.g;
        }
    }
}

/******************************************************************************
Name       : display_pset(redGradiation,greenGradiation,x,y)
Parameters : color   x    y
Returns    : nothing
Description: 
******************************************************************************/
void display_line(_DISPLAYCOLOR c, _DISPLAYPOSITION p0, _DISPLAYPOSITION p1)
{
    _DISPLAYPOSITION d;    // henka ryo
    _DISPLAYPOSITION s; // hoko

    uint8_t i;
    int16_t E;

    d.x = (p1.x > p0.x) ? p1.x - p0.x : p0.x - p1.x;
    d.y = (p1.y > p0.y) ? p1.y - p0.y : p0.y - p1.y;

    s.x = (p1.x > p0.x) ? 1 : -1;
    s.y = (p1.y > p0.y) ? 1 : -1;

    /* katamuki ga 1 yori chiisai baai */
  if ( d.x > d.y ) {
    E = -d.x;
    for ( i = 0 ; i <= d.x ; i++ ) {
      display_pset( c, p0 );
      p0.x += s.x;
      E += 2 * d.y;
      if ( E >= 0 ) {
        p0.y += s.y;
        E -= 2 * d.x;
      }
    }
  /* katamuki ga 1 ijo no baai */
      } else {
        E = -d.y;
        for ( i = 0 ; i <= d.y ; i++ ) {
            display_pset( c, p0 );
            p0.y += s.y;
            E += 2 * d.x;
              if ( E >= 0 ) {
                p0.x += s.x;
                E -= 2 * d.y;
              }
        }
    }

}


/******************************************************************************
Name       : display_pset(redGradiation,greenGradiation,x,y)
Parameters : color   x    y        l:genten kara no dot suu
Returns    : nothing
Description: 
******************************************************************************/
void display_lineLimit(_DISPLAYCOLOR c, _DISPLAYPOSITION p0, _DISPLAYPOSITION p1, uint8_t l)
{
    _DISPLAYPOSITION d;    // henka ryo
    _DISPLAYPOSITION s; // hoko

    uint8_t i;
    int16_t E;

    d.x = (p1.x > p0.x) ? p1.x - p0.x : p0.x - p1.x;
    d.y = (p1.y > p0.y) ? p1.y - p0.y : p0.y - p1.y;

    s.x = (p1.x > p0.x) ? 1 : -1;
    s.y = (p1.y > p0.y) ? 1 : -1;

    /* katamuki ga 1 yori tiisai baai */
  if ( d.x > d.y ) {
    E = -d.x;
    if(d.x > (l - 1)){d.x = (l - 1);}
    for ( i = 0 ; i <= d.x ; i++ ) {
      display_pset( c, p0 );
      p0.x += s.x;
      E += 2 * d.y;
      if ( E >= 0 ) {
        p0.y += s.y;
        E -= 2 * d.x;
      }
    }
  /* katamuki ga 1 ijo no baai */
      } else {
        E = -d.y;
        if(d.y > (l - 1)){d.y = (l - 1);}
        for ( i = 0 ; i <= d.y ; i++ ) {
            display_pset( c, p0 );
            p0.y += s.y;
            E += 2 * d.x;
              if ( E >= 0 ) {
                p0.x += s.x;
                E -= 2 * d.y;
              }
        }
    }

}



















/******************************************************************************
Name       : display_test()
Parameters : none
Returns    : nothing
Description: 
******************************************************************************/
void display_test0(void)
{
    _DISPLAYCOLOR c = {15, 15};
    _DISPLAYPOSITION p0 ={1, 1};
    static _DISPLAYPOSITION p1 ={0, 15};
    display_line(c, p0, p1);

    if(++p1.x > Z_displayXMax){p1.x = Z_displayXMin;}

}


/******************************************************************************
Name       : display_test()
Parameters : none
Returns    : nothing
Description: 
******************************************************************************/
void display_test(void)
{
    uint8_t x,y;
    
    


    for(x = 0; x < 16; x++){
        for(y = 0; y < 16; y++){
            D_display[Z_red][x][y] = y;
        }
    }
    for(y = 0; y < 16; y++){
        for(x = 0; x < 16; x++){
            D_display[Z_green][x][y] = x;
        }
    }
}
/******************************************************************************
Name       : display_test2()
Parameters : none
Returns    : nothing
Description: 
******************************************************************************/
void display_test2(void)
{
    uint8_t x,y;
    static uint8_t c = 0;
    static int8_t s= 1;
    
    c += s;
    if(c > 15){
        c = 15;
        s = -1;
    }
    else if (c == 0){
        s = 1;
    }
    
    for(x = 0; x < 16; x++){
        for(y = 0; y < 16; y++){
//            if(++D_display[Z_red][x][y] > 15){D_display[Z_red][x][y] = 0;}
            D_display[Z_green][x][y] = c;
//            if(++D_display[Z_green][x][y] > 15){D_display[Z_green][x][y] = 0;}
        }
    }

}