コード例 #1
0
ファイル: nickname.c プロジェクト: sanpii/f1rmware
static void batteryLevel(void)
{
    int dy = 0;
    int dx = 0;
    int32_t voltage = 0;
    float purcentage = 0;
    uint8_t color = 0x00;

    setExtFont("normal");
    dy = RESY - getFontHeight();
    dx = DoString(dx, dy, "Bat");

    if (batteryCharging()) {
        dx = DoString(dx, dy, "(+)");
    }
    dx = DoString(dx, dy, ":");

    voltage = batteryGetVoltage();
    purcentage = (voltage - (float)BAT_MIN) / ((float)BAT_MAX - BAT_MIN) * 100.0;

    if (purcentage >= 50) {
        color = RGB(0, 7, 0);
    }
    else if (purcentage >= 10) {
        color = RGB(7, 7, 0);
    }
    else {
        color = RGB(7, 0, 0);
    }
    setTextColor(GLOBAL(nickbg), color);
    dx = DoString(dx, dy, IntToStr(purcentage, 3, F_LONG));
    DoString(dx, dy, "%");
    resetColor();
}
コード例 #2
0
ファイル: 0xb.c プロジェクト: cokesme/f1rmware
void board_menu_draw(board_t* b)
{
  setTextColor(0, 0xff);
  setIntFont(&Font_7x8);

  const int lineh = getFontHeight();

  lcdSetCrsr(0, 0);
  lcdPrintln("0xb number game");
  lcdPrintln("Push < > ^ v");
  lcdPrintln("Add same blocks");
  lcdPrint("Try to reach '");
  setTextColor(colors[N_COLORS-1].bg, colors[N_COLORS-1].fg);
  lcdPrint("b");
  setTextColor(0, 0xff);
  lcdPrintln("'!");
  lcdNl();

  for (uint i = 0; i < menu_N; i ++) {
    if (i == b->menu_item)
      lcdPrint(">> ");
    else
      lcdPrint("   ");
    lcdPrint(menu_str[i]);

    switch (i) {
      case 3:
        // width
        lcdPrint(" = ");
        lcdPrint(IntToStr(b->w, 2, 0));
        break;
      case 4:
        // height
        lcdPrint(" = ");
        lcdPrint(IntToStr(b->h, 2, 0));
      default:
        break;
    }
    lcdNl();
  }

  if (b->menu_item == 2) {
    lcdPrintln(font_list[b->font]);
    if (b->font == FONT_NONE) {
      uint w = RESX / N_COLORS;
      for (uint8_t i = 0; i < N_COLORS; i++) {
        const color_t* col = colors + i;
        setTextColor(col->bg, col->fg);
        DoRect(i*w, 120, w, 10);
      }
    }
    else {
      setExtFont(font_list[b->font]);
      lcdPrint("789ab");
    }
  }
}
コード例 #3
0
ファイル: nickname.c プロジェクト: fpletz/f1rmware
//# MENU nick changeFont
void doFont(void){
    getInputWaitRelease();
    if( selectFile(GLOBAL(nickfont),"F0N") != 0){
        lcdPrintln("No file selected.");
        return;
    };
	writeFile("font.cfg",GLOBAL(nickfont),strlen(GLOBAL(nickfont)));

    lcdClear();
    setIntFont(&Font_7x8);
    lcdPrintln("Test:");
    setExtFont(GLOBAL(nickfont));
    lcdPrintln(GLOBAL(nickname));
    lcdDisplay();
    setIntFont(&Font_7x8);
    while(!getInputRaw())delayms(10);
}
コード例 #4
0
ファイル: nickname.c プロジェクト: fpletz/f1rmware
void simpleNickname(void) {
    int dx=0;
	int dy=0;
    static uint32_t ctr=0;
	ctr++;

	setExtFont(GLOBAL(nickfont));
	dx=DoString(0,0,GLOBAL(nickname));
    dx=(RESX-dx)/2;
    if(dx<0)
        dx=0;
    dy=(RESY-getFontHeight())/2;

	lcdClear();
	DoString(dx,dy,GLOBAL(nickname));
	lcdDisplay();

    getInputWait();
    return;
}
コード例 #5
0
ファイル: nickname.c プロジェクト: sanpii/f1rmware
static void dataLove(void)
{
    int dx = 50;
    int dy = 0;
    static int blue = 0;
    static int inc = 1;

    setTextColor(GLOBAL(nickbg), RGB(7, blue, 3));
    if (blue >= 7) {
        inc = -1;
    }
    else if (blue <= 0) {
        inc = 1;
    }
    blue += inc;
    setExtFont(GLOBAL(nickfont));
    dy= (RESY - getFontHeight()) / 3 * 2;
    DoString(dx, dy, "<3");
    resetColor();
}
コード例 #6
0
ファイル: nick_plain.c プロジェクト: Bediko/r0ket
void ram(void) {
    int dx=0;
	int dy=0;
    static uint32_t ctr=0;
	ctr++;

	setExtFont(GLOBAL(nickfont));
	dx=DoString(0,0,GLOBAL(nickname));
    dx=(RESX-dx)/2;
    if(dx<0)
        dx=0;
    dy=(RESY-getFontHeight())/2;

	lcdClear();
	DoString(dx,dy,GLOBAL(nickname));
	lcdRefresh();

    while(getInputRaw()==BTN_NONE){
        delayms_queue_plus(10,0);
    };
    return;
}
コード例 #7
0
ファイル: nickname.c プロジェクト: sanpii/f1rmware
void simpleNickname(void) {
    int dx=0;
	int dy=0;
    static uint32_t ctr=0;
	ctr++;

	setExtFont(GLOBAL(nickfont));
	dx=DoString(0,0,GLOBAL(nickname));
    dx=(RESX-dx)/2;
    if(dx<0)
        dx=0;
    dy=(RESY-getFontHeight())/3;

    lcdFill(GLOBAL(nickbg));
    setTextColor(GLOBAL(nickbg),GLOBAL(nickfg));
	DoString(dx,dy,GLOBAL(nickname));
    dataLove();
    batteryLevel();
	lcdDisplay();

    getInputWaitTimeout(300);
    return;
}
コード例 #8
0
ファイル: nick_work.c プロジェクト: blubkatze/r0ket
static void mainloop(void)
{
    int dx=0;
	int dy=0;
    
	setExtFont(GLOBAL(nickfont));
	dx=DoString(0,0,GLOBAL(nickname));
    dx=(RESX-dx)/2;
    if(dx<0)
        dx=0;
    dy=(RESY-getFontHeight())/2;

	lcdClear();
    lcdSetPixel(1,1,1);
	DoString(dx,dy,GLOBAL(nickname));
    lcdRefresh();

    lk_ticks = 0;
    lk_button_mode = 0x00;
    lk_ls0 = 0x00;
    lk_ls1 = 0x00;
    lk_ls2 = 0x00;
    lk_ls3 = 0x00;
    lk_in0 = 0x00;
    lk_in1 = 0x00;
    lk_ticks = 0x0000;
    lk_piezo_toggle = 0x00;

    while(getInputRaw()==BTN_NONE){
        tick_lilakit();
        melody_play();
        //delayms_queue(10);    //XXX: this hangs the badge.
        delayms(10);
    }
    return;
}
コード例 #9
0
void ram(void)
{
	short centerx = RESX >> 1;
	short centery = RESY >> 1;
	short i;
	uint8_t key = 0;

	for (i = 0; i < NUM_STARS; i++) {
		init_star(stars + i, i + 1);
	}

	static uint8_t count = 0;
	while(1) {
		count++;
		count%=256;
		key = getInputRaw();
		if (key == BTN_ENTER) {
			break;
		} else if ( count%4 == 0 ) {
			if (key == BTN_UP && ship.speed < SPEED_MAX) {
				ship.speed++;
			} else if (key == BTN_DOWN && ship.speed > SPEED_STOP) {
				ship.speed--;
			} else if (key == BTN_NONE && count % 12 == 0) {
				/* converge towards default speed */
				if (ship.speed < SPEED_DEFAULT)
					ship.speed++;
				else if (ship.speed > SPEED_DEFAULT)
					ship.speed--;	
			}
		}

		if (ship.speed > SPEED_WARP) {
			set_warp_lights(1);
		} else {
			set_warp_lights(0);
		}

        if (count % 3 == 0) OFF(LED4);
		if (ship.speed == 0 && count%6==0) 
            drift_ship();
 

		int dx=0;
		int dy=0;
		setExtFont(GLOBAL(nickfont));
		setTextColor(0x00,0xFF);
		dx=DoString(0,0,GLOBAL(nickname));
		dx=(RESX-dx)/2;
		if(dx<0) dx=0;
		dy=(RESY-getFontHeight())/2;

		lcdFill(0x00);
		DoString(dx,dy,GLOBAL(nickname));

		for (i = 0; i < NUM_STARS; i++) {
			stars[i].z -= ship.speed;

			if (ship.speed > 0 && stars[i].z <= 0)
				init_star(stars + i, i + 1);

			short tempx = ((stars[i].x * 30) / stars[i].z) + centerx;
			short tempy = ((stars[i].y * 30) / stars[i].z) + centery;

			if (tempx < 0 || tempx > RESX - 1 || tempy < 0 || tempy > RESY - 1) {
				if (ship.speed > 0) { /* if we are flying, generate new stars in front */
					init_star(stars + i, i + 1);
				} else { /* if we are drifting, simply move those stars to the other end */
					stars[i].x = (((tempx%RESX)-centerx)*stars[i].z)/30;
					stars[i].y = (((tempy%RESY)-centery)*stars[i].z)/30;
				}
				continue;
			}

			lcdSetPixel(tempx, tempy, 0xFF);
			if (stars[i].z < 50) {
				lcdSetPixel(tempx + 1, tempy, 0xFF);
			}
			if (stars[i].z < 20) {
				lcdSetPixel(tempx, tempy + 1, 0xFF);
				lcdSetPixel(tempx + 1, tempy + 1, 0xFF);
			}
		}

		lcdDisplay();

		delayms_queue_plus(50,0);
	}
	set_warp_lights(0);
}
コード例 #10
0
ファイル: nick_life.c プロジェクト: cokesme/f1rmware
void ram(void) {
    getInputWaitRelease();
    reset_area();
    random_area(life,1,1,RESX,RESY,40);

    static int nickx=2,nicky=10;
    signed char movy=1;
    static int nickwidth,nickheight;
    static int nickoff=10;
    static char delaytime=10;
    static char speedmode=0;
    static char LCDSHIFTX_EVERY_N=2;
    static char LCDSHIFTY_EVERY_N=2;
    static char ITER_EVERY_N=1;

    lcdClear();
    setExtFont(GLOBAL(nickfont));
    
    nickwidth=DoString(nickx,nicky,GLOBAL(nickname));
    if(nickwidth<50)nickoff=30;
    nickheight=getFontHeight();

    char stepmode=0;
    while (1) {
        draw_area(); // xor life pattern over display content
        lcdDisplay();
        lcdClear();
        // draw_area(); // xor life pattern again to restore original display content
        // Old shift code. Can't handle longer Nicks...
        // if(iter%LCDSHIFT_EVERY_N==0) lcdShift(1,-2,1);
        // if(iter%LCDSHIFT_EVERY_N==0) { nickx=(nickx+1)%100-nickwidth; nicky=(nicky+1)%50;}
        if(iter%LCDSHIFTX_EVERY_N==0) { nickx--; 
        if(nickx<(-1*nickwidth-nickoff))nickx=0; }
        if(iter%LCDSHIFTY_EVERY_N==0) { nicky+=movy;
        if(nicky<1 || nicky>RESY-nickheight) movy*=-1; }
        DoString(nickx,nicky,GLOBAL(nickname));
        DoString(nickx+nickwidth+nickoff,nicky,GLOBAL(nickname));
        if(nickwidth<RESX) DoString(nickx+2*(nickwidth+nickoff),nicky,GLOBAL(nickname));
	char key=stepmode?getInputWait():getInputRaw();
	stepmode=0;
	switch(key) {
	case BTN_ENTER:
	  return;
	case BTN_RIGHT:
	  getInputWaitRelease();
          speedmode=(speedmode+1)%7;
          delaytime=15;
          switch(speedmode) {
            case 0:
              ITER_EVERY_N=1; LCDSHIFTX_EVERY_N=1; LCDSHIFTY_EVERY_N=1; break;
            case 1:
              ITER_EVERY_N=1; LCDSHIFTX_EVERY_N=2; LCDSHIFTY_EVERY_N=2; break;
            case 2:
              ITER_EVERY_N=1; LCDSHIFTX_EVERY_N=4; LCDSHIFTY_EVERY_N=4; break;
            case 3:
              ITER_EVERY_N=2; LCDSHIFTX_EVERY_N=1; LCDSHIFTY_EVERY_N=1; break;
            case 4:
              ITER_EVERY_N=4; LCDSHIFTX_EVERY_N=1; LCDSHIFTY_EVERY_N=1; break;
            case 5:
              ITER_EVERY_N=8; LCDSHIFTX_EVERY_N=1; LCDSHIFTY_EVERY_N=1; break;
            case 6:
              delaytime=5; ITER_EVERY_N=8; LCDSHIFTX_EVERY_N=1; LCDSHIFTY_EVERY_N=1; break;
          }
	  break; 
	case BTN_DOWN:
	  stepmode=1;
	  getInputWaitRelease();
	  break;
	case BTN_LEFT:
	  pattern=(pattern+1)%PATTERNCOUNT;
	case BTN_UP:
	  stepmode=1;
	  reset_area();
	  getInputWaitRelease();
	  break;
	}
        delayms_queue_plus(delaytime,0);
#ifdef SIMULATOR
  fprintf(stderr,"Iteration %d - x %d, y %d \n",iter,nickx,nicky);
#endif
        if(iter%ITER_EVERY_N==0) calc_area(); else ++iter;
    }
    return;
}
コード例 #11
0
ファイル: 0xb.c プロジェクト: cokesme/f1rmware
void board_draw(board_t* b, int anim_i, int anim_N)
{
  setTextColor(0, 0xff);
  setIntFont(&Font_7x8);
  if (b->n_moves < 3)
    DoString(0, 0, "try to get to 'b'!");
  else
    DoString(0, 0, IntToStr(b->n_moves, 6, 0));

  bool blocks = (b->font == FONT_NONE);
  if (blocks) {
    b->cell_w = RESX / b->w;
    b->cell_h = (RESY - 8) / b->h;
  }
  else {
    setExtFont(font_list[b->font]);
    b->cell_w = b->cell_h = getFontHeight();
  }

  uint centeringx = (RESX - (b->cell_w * b->w)) / 2;
  if (centeringx >= RESX)
    centeringx = 0;

  uint centeringy = (RESY - (b->cell_h * b->h)) / 2;
  if (centeringy >= RESY)
    centeringy = 0;
  if (centeringy < 8)
    centeringy = 8;

  int x, y;
  int xx, yy;

  for (x = 0; x < b->w; x ++) {
    for (y = 0; y < b->h; y ++) {
      cell_t* c = board_cell(b, x, y);

      xx = x * b->cell_w;
      yy = y * b->cell_h;
      if (anim_i >= anim_N) {
        // animation ended.
        c->val = c->anim_newval;
        c->anim_to = -1;
      }
      else
      if (c->anim_to >= 0) {
        int from_x = xx;
        int from_y = yy;
        int to_x = (c->anim_to % b->w) * b->cell_w;
        int to_y = (c->anim_to / b->w) * b->cell_h;
        xx = from_x + anim_i * (to_x - from_x) / anim_N;
        yy = from_y + anim_i * (to_y - from_y) / anim_N;
      }

      {
        const color_t* col = cell_col(c);
        setTextColor(col->bg, col->fg);
      }

      xx += centeringx;
      yy += centeringy;
      if ((xx >= 0) && (xx < RESX) && (yy >= 0) && (yy < RESY)) {
        if (blocks) {
          if (c->val) // don't draw empty blocks
            DoRect(xx, yy, b->cell_w, b->cell_h);
        }
        else
          DoChar(xx, yy, cell_chr(c));
      }
    }
  }

}
コード例 #12
0
ファイル: snake.c プロジェクト: NiciDieNase/r0ket
void ram(void)
{
    int inpt,dirc,c,grows = 0,dx,dy,points,point_s=1;
    size_t n = 0, snake_size = 5, speed=MIN_SPEED;
    struct elem snake[MAX_SNAKE_LEN], food;
	char test[512]; /* scratch space */
  o_init (test, sizeof(test));

  reset(snake,&snake_size,&dirc,&speed,&points,&point_s);

  food = rnd();

    while (1)
    {
        head:
        if(!(++c % speed))
           {


inpt = getInputRaw();

dx=DoString(0,0,IntToStrX(points,2));
    dx=(SIZE_X-dx)/2;
    if(dx<0)
        dx=0;
    dy=(SIZE_Y-getFontHeight())/2;

         lcdFill(255);
      o_rectangle(1,0,SIZE_X-2,SIZE_Y-2);
      o_set_gray (0);
         o_fill ();

        //o_identity (); /* reset tranforms */

      o_set_gray (50);

      setExtFont("UBUNTU29");

    lcdSetPixel(1,1,1);
    DoString(dx,dy,IntToStrX(points,2));

      o_set_gray (255);


    for(n=0;n<snake_size;++n)
    {
        o_rectangle
(snake[n].x*SNAKE_DEM,snake[n].y*SNAKE_DEM,SNAKE_DEM,SNAKE_DEM); /*
fill background with black */
      o_fill ();     /* fill with 50% {
                       reset(snake,&snake_size);
                       goto head;
                   }gray */
    }
    o_rectangle
(food.x*SNAKE_DEM,food.y*SNAKE_DEM,SNAKE_DEM,SNAKE_DEM); /* fill
background with black */
      o_fill ();


      lcdDisplay();

        if (inpt == BTN_UP && dirc != 1)
            {
              dirc = 3;
            }
          else if (inpt == BTN_DOWN && dirc != 3)
            {
              dirc = 1;
            }
          else if (inpt == BTN_LEFT && dirc != 0)
            {
              dirc = 2;
            }
          else if (inpt == BTN_RIGHT && dirc !=2)
            {
              dirc = 0;
            }
//

               struct elem t = snake[snake_size-1];

               if(dirc == 0)
                ++t.x;
               else if(dirc == 1)
                ++t.y;
                else if(dirc == 2)
                --t.x;
               else if(dirc == 3)
                --t.y;

               if(t.x < 0 || t.y < 0 || t.y > SIZE_Y/SNAKE_DEM-1 ||
t.x > SIZE_X/SNAKE_DEM)
               {
                       reset(snake,&snake_size,&dirc,&speed,&points,&point_s);
                       goto head;
                   }

               for(n=0;n<snake_size-1;++n)
               {
                   if(snake[n].x == t.x && snake[n].y == t.y)
                   {
                       reset(snake,&snake_size,&dirc,&speed,&points,&point_s);
                       goto head;
                   }
                   else if(snake[n].x == food.x && snake[n].y == food.y)
                   {
                       grows = 1;
                       ++snake_size;
                       ++points;
                       if(speed > MAX_SPEED) --speed;
                        food = rnd();
                   }
               }

                if(!grows)
                {
               for(n=0;n<snake_size-1;++n)
               {
                   snake[n] = snake[n+1];
               }
                }
                else
                    grows = 0;

               snake[snake_size-1] = t;
           }
           else
               delayms(3);


           }



    }