Exemple #1
0
neosplash(){
    disp_off();
    cls();
    load_palette(16,neosprpal,1);
    load_vram(0x5000,neospr,0x400);
    load_palette(0,badge1pal,1);
    set_tile_data(neotiles);
    load_tile(0x1000);
    for(j=0;j<14;j++){
        for(i=0;i<14;i++){
            put_tile(j*14+i,i+1,j);
        }
    }

    for(i=0;i<8;i++){
        spr_set(i);
        spr_pal(0);
        spr_pri(1);
        spr_ctrl(SIZE_MAS,SZ_32x16);
        spr_pattern(0x5000+0x80*i);
        spr_y(224-24);
        spr_x(i*32);
    }
    disp_on();
    t=0;
    for(;;){
        t++;

        vsync();
        joy0=joy(0);
        satb_update();
        if(joy0&JOY_STRT){
            break;
        }
        if(t>144)break;
    }
    psgPlay(0);
    disp_off();
    for(i=0;i<8;i++){
        spr_set(i);
        spr_hide();
    }
    satb_update();
    cls();
    set_color(0,0);
    set_color(256,0);
    disp_on();

    while(joy0&JOY_STRT){
        vsync();
        joy0=joy(0);
    }


}
Exemple #2
0
void startup_blink() {
	disp_on();

	for (uint8_t i = 0; i < 2; ++i) {
		my_time.secs = 0xFF;
		my_time.mins = 0xFF;
		my_time.hours = 0xFF;
		disp_time(ENABLE);

		_delay_ms(500);

		my_time.secs = 0x00;
		my_time.mins = 0x00;
		my_time.hours = 0x00;
		disp_time(ENABLE);

		_delay_ms(500);
	}

	return;
}
Exemple #3
0
void main(void) {
  /* put your own code here */
  	EnableInterrupts;
    
  	DDR1AD0 =	DDRT	= 0xFF;	
	PT1AD0	= 	PTT		= 0x00;
	
	set_baud_rate(9600);
		 
	send();	
	fct_set(8,2,58);
	disp_on(1,1,1);
	entry_mode(1,0);	
	clear_disp();

	char  val,buf[16] ;
	
#define go 5000
	while(1)
	{
		memset(buf,0,16);
		for(int v=0,i =0; i<16 ; i++)
		{   v=0;
			while(	chk_rx() >= 0	? 0:
					i==0 			? 1:
					v++ < go		? 1:
					0);
			if (v >= go){	break;	}
			buf[i]=fetch_char();				
		}
		return_home();
		clear_disp();
		prt_str(buf);	
	}
	 
  for(;;) {
    _FEED_COP(); /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */
}
void DrawN()
{
	unsigned char end = 1;

	redraw = 1;
    do
    {   
		vsync();
		
		end = 1;
        if(redraw)
        {
			ResetVideo();
			set_xres(256, xres_flags);
			scroll(0, 0, -32, 0, 240, 0xC0);
#ifndef CDROM1
			load_background(n_bg, n_pal, n_map, 32, 20);
#else
			set_screen_size(SCR_SIZE_32x32); 
			cd_loaddata(GPHX_OVERLAY, OFS_N_PAL_bin, palCD, SIZE_N_PAL_bin); 
			load_palette(0, palCD, 16); 
			cd_loadvram(GPHX_OVERLAY, OFS_N_DATA_bin, 0x1000, SIZE_N_DATA_bin);
			cd_loadvram(GPHX_OVERLAY, OFS_N_BAT_bin, 0, SIZE_N_BAT_bin);
			// Why these get zapped to 0 when in CDROM1...
			RestoreGlobals();
#endif
            redraw = 0;
			disp_on();
        }

        controller = joy(0);
        
		if(controller & JOY_SEL)
			end = 0;
    }while(!end);
}
Exemple #5
0
squirrelsplash(){
    disp_off();
    cls();
    foo=6;

    put_string("           PC  Engine           ",0,foo);
    put_string("        MML Sound Library       ",0,2+foo);
    put_string("           'SQUIRREL'           ",0,4+foo);
    put_string("         By: Aetherbyte         ",0,6+foo);
    put_string("   http://www.aetherbyte.com/   ",0,8+foo);

    foo++;

    put_string("  Game concept and graphics by  ",0,12+foo);
    put_string("   http://lazybraingames.com/   ",0,14+foo);

    disp_on();

    bar=0;
    while(1){
        lastjoy0=joy0;
        vsync();
        bar++;
        joy0=joy(0);
        if(joy0&JOY_STRT)break;
        if(bar>90)break;
    }
    cls();
    while(joy0&JOY_STRT){
        vsync();
        joy0=joy(0);
    }



}
Exemple #6
0
main()
{
	
	char i,j,k,l,m,n;
	
	
		
	disp_off();		/* <- I don't think this works.... */
	spr_set();
	spr_hide();
	load_default_font();
	set_screen_size(SCR_SIZE_32x32);
	disp_on();

	if(!sgx_detect())
	{  put_string("Halt: SGX not hardware found", 2, 13); for(;;){} }


	/* These NEED to be set, else you won't see the SGX 2nd layer BG or sprites. */
	vpc_win_size( VPC_WIN_A, 0x01ff);
	vpc_win_size( VPC_WIN_B, 0x01ff);
	vpc_win_reg( VPC_WIN_A, VDC_ON+VPC_NORM);
	vpc_win_reg( VPC_WIN_B, VDC_ON+VPC_NORM);
	vpc_win_reg( VPC_WIN_AB, VDC_ON+VPC_NORM);
	vpc_win_reg( VPC_WIN_NONE, VDC_ON+VPC_NORM);
	
	set_font_pal(4);
	set_font_color(14,0);
	load_default_font();
	put_string("SGX hardware found", 2, 3);
	
	sgx_set_screen_size(SCR_SIZE_32x32);
	sgx_load_vram(0x0000,map, 0x400);
	sgx_load_vram(0x1000,tile, 0x4000);
	load_palette(0, pal,16);
	
	sgx_spr_hide();
	sgx_spr_set(1);

	sgx_disp_on();
	
	
	put_string("Arcade Card: ", 2, 4);


	if ( ac_init() )
		{
			put_string("detected.", 15, 4);

			/* initialize AC register 0 to address 0x000000 and +1 auto-increment */
			ac_full_reg0(0x00,0x0000,0x0000,0x0001,0x11);
							
			put_string("CD->AC xfer... ", 2, 5);

			/* transfer 8k at a time from CD to AC memory via AC reg #0 */
			ac_cd_xfer(AC_REG0,0,0x1c2,4);
			ac_cd_xfer(AC_REG0,0,0x1c6,4);
			ac_cd_xfer(AC_REG0,0,0x1ca,4);
			ac_cd_xfer(AC_REG0,0,0x1ce,4);
			ac_cd_xfer(AC_REG0,0,0x1d2,4);
			ac_cd_xfer(AC_REG0,0,0x1d6,4);
			ac_cd_xfer(AC_REG0,0,0x1da,4);
			ac_cd_xfer(AC_REG0,0,0x1de,4);

			put_string("finished.", 17, 5);
						
			sgx_bg_on();
			
			/* reset AC reg #0 address to 0x000000 */		
			ac_addr_reg0(0x00,0x0000);
			ac_vram_dma(AC_REG0 ,0x1000,0x3c00, SGX);

			ac_addr_reg0(0x00,0x8000);
			ac_vram_dma(AC_REG0 ,0x0000,0x800, SGX);

			ac_addr_reg0(0x00,0x8800);
			ac_vce_copy( AC_REG0, 0x00, 0x100 );
			

			vsync(60);
			vsync(60);


		}
	else
		{ put_string("not detected.", 15, 4); for(;;){} }
			
	put_string("Scrolling SGX layer ", 2, 6);
	for(;;)
	{
		for( j=0; j<0xff; j++)
		{
			vsync();
			sgx_scroll( j , j);
		}
	}		
	
	
}
Exemple #7
0
int main(int argc, char* argv[])
{
	int i;
    int key_fd = -1;
	struct input_event data;
	struct sigaction sigact;

	memset(&sigact, 0, sizeof(sigact)); 

	sigact.sa_handler = handle_int;
	
	//format=V4L2_PIX_FMT_NV12; //V4L2_PIX_FMT_NV16
	format = V4L2_PIX_FMT_NV12;
	disp_format=DISP_FORMAT_YUV420; //DISP_FORMAT_YUV422
	disp_seq=DISP_SEQ_UVUV;
	struct v4l2_format fmt;
	struct v4l2_format fmt_priv;
	
    printf("*********************\n");
    printf("TVD demo start!\n");
    printf("Press KEY_ESC for exit\n");
    printf("*********************\n");


	/*if((key_fd = open("/dev/input/event0", O_RDONLY | O_NONBLOCK)) < 0){//key: linux=event0, android=event2
    	printf("open event fail!\n");
		return -1;
	}*/
		
	fd = open ("/dev/video1", O_RDWR /* required */ | O_NONBLOCK, 0);
	
	
	int ret = -1;

	CLEAR (fmt_priv);
	fmt_priv.type                = V4L2_BUF_TYPE_PRIVATE;
	fmt_priv.fmt.raw_data[0] =0;//interface
	fmt_priv.fmt.raw_data[1] =0;//system
	fmt_priv.fmt.raw_data[2] =0;//format 1=mb, for test only
		
	fmt_priv.fmt.raw_data[8] =2;//row
	fmt_priv.fmt.raw_data[9] =2;//column
	
	fmt_priv.fmt.raw_data[10] =1;//channel_index
	fmt_priv.fmt.raw_data[11] =2;//channel_index
	fmt_priv.fmt.raw_data[12] =3;//channel_index
	fmt_priv.fmt.raw_data[13] =4;//channel_index
	if (-1 == ioctl (fd, VIDIOC_S_FMT, &fmt_priv)) //设置自定义
	{
		printf("VIDIOC_S_FMT error!  a\n");
		ret = -1;
		return ret; 
	}
	
//	CLEAR (fmt);
//	fmt.type                = V4L2_BUF_TYPE_VIDEO_CAPTURE;
//	fmt.fmt.pix.width       = 720*fmt_priv.fmt.raw_data[8];//720; 
//	fmt.fmt.pix.height      = 480*fmt_priv.fmt.raw_data[9];//576;//480;
//	fmt.fmt.pix.pixelformat = format;//V4L2_PIX_FMT_YUV422P;//V4L2_PIX_FMT_NV12;//V4L2_PIX_FMT_YUYV;
//	fmt.fmt.pix.field       = V4L2_FIELD_NONE;
//	if (-1 == ioctl (fd, VIDIOC_S_FMT, &fmt)) //设置图像格式
//	{
//		printf("VIDIOC_S_FMT error! b\n");
//		ret = -1;
//		return ret;
//	}
	
	disp_mode=fmt_priv.fmt.raw_data[2]?DISP_MOD_MB_UV_COMBINED:DISP_MOD_NON_MB_UV_COMBINED;//DISP_MOD_NON_MB_UV_COMBINED DISP_MOD_MB_UV_COMBINED
	disp_size.width = fmt_priv.fmt.raw_data[8]*(fmt_priv.fmt.raw_data[2]?704:720);//width
	disp_size.height = fmt_priv.fmt.raw_data[9]*(fmt_priv.fmt.raw_data[1]?576:480);//height
	printf("disp_size.width=%d\n", disp_size.width);
	printf("disp_size.height=%d\n", disp_size.height);
	
	usleep(100000);//delay 100ms if you want to check the status after set fmt
	
	CLEAR (fmt_priv);
	fmt_priv.type                = V4L2_BUF_TYPE_PRIVATE;
	if (-1 == ioctl (fd, VIDIOC_G_FMT, &fmt_priv)) //设置自定义
	{
		printf("VIDIOC_G_FMT error!  a\n");
		ret = -1;
		return ret; 
	}
	printf("interface=%d\n", fmt_priv.fmt.raw_data[0]);
	printf("system=%d\n", fmt_priv.fmt.raw_data[1]);
	printf("format=%d\n", fmt_priv.fmt.raw_data[2]);
	printf("row=%d\n", fmt_priv.fmt.raw_data[8]);
	printf("column=%d\n", fmt_priv.fmt.raw_data[9]);
	printf("channel_index[0]=%d\n", fmt_priv.fmt.raw_data[10]);
	printf("channel_index[1]=%d\n", fmt_priv.fmt.raw_data[11]);
	printf("channel_index[2]=%d\n", fmt_priv.fmt.raw_data[12]);
	printf("channel_index[3]=%d\n", fmt_priv.fmt.raw_data[13]);
	printf("status[0]=%d\n", fmt_priv.fmt.raw_data[16]);
	printf("status[1]=%d\n", fmt_priv.fmt.raw_data[17]);
	printf("status[2]=%d\n", fmt_priv.fmt.raw_data[18]);
	printf("status[3]=%d\n", fmt_priv.fmt.raw_data[19]);

	struct v4l2_requestbuffers req;
	CLEAR (req);
	req.count               = 5;
	req.type                = V4L2_BUF_TYPE_VIDEO_CAPTURE;
	req.memory              = V4L2_MEMORY_MMAP;
		
	ioctl (fd, VIDIOC_REQBUFS, &req); //申请缓冲,count是申请的数量,注意,释放缓冲实际在VIDIOC_STREAMOFF内完成了。

	buffers = calloc (req.count, sizeof (*buffers));//内存中建立对应空间

	for (n_buffers = 0; n_buffers < req.count; ++n_buffers) 
	{
	   struct v4l2_buffer buf;   //驱动中的一帧
	   CLEAR (buf);
	   buf.type        = V4L2_BUF_TYPE_VIDEO_CAPTURE;
	   buf.memory      = V4L2_MEMORY_MMAP;
	   buf.index       = n_buffers;

	   if (-1 == ioctl (fd, VIDIOC_QUERYBUF, &buf)) //映射用户空间
			printf ("VIDIOC_QUERYBUF error\n");

	   buffers[n_buffers].length = buf.length;
	   buffers[n_buffers].start  = mmap (NULL /* start anywhere */,    //通过mmap建立映射关系
								         buf.length,
								         PROT_READ | PROT_WRITE /* required */,
								         MAP_SHARED /* recommended */,
								         fd, buf.m.offset);
	   printf("MMAP: %p OFF: %p\n", buffers[n_buffers].start, buf.m.offset);

	   if (MAP_FAILED == buffers[n_buffers].start)
			printf ("mmap failed\n");
	}
	
	for (i = 0; i < n_buffers; ++i) 
	{
		struct v4l2_buffer buf;
		
		CLEAR (buf);		
		buf.type        = V4L2_BUF_TYPE_VIDEO_CAPTURE;
		buf.memory      = V4L2_MEMORY_MMAP;
		buf.index       = i;

		if (-1 == ioctl (fd, VIDIOC_QBUF, &buf))//申请到的缓冲进入列队
			printf ("VIDIOC_QBUF failed\n");
	}
					
#ifdef DISPLAY				
	disp_init(disp_size.width,disp_size.height);
	disp_start();
	disp_on();                  
#endif	
	
	enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
	
	if (-1 == ioctl (fd, VIDIOC_STREAMON, &type)) //开始捕捉图像数据
		printf ("VIDIOC_STREAMON failed\n");

	sigaction(SIGINT, &sigact, NULL);

	while(!quit)
	{	    
		read(key_fd, &data, sizeof(data));
		if( (data.type == EV_KEY)&&
			(data.code == KEY_ESC)&&
			(data.value == 1) ){
			quit = 1;
		}


		CLEAR (fmt_priv);
		fmt_priv.type                = V4L2_BUF_TYPE_PRIVATE;
		if (-1 == ioctl (fd, VIDIOC_G_FMT, &fmt_priv)) //监视状态
		{
			printf("VIDIOC_G_FMT error!  a\n");
			ret = -1;
			return ret;
		}
		//printf("status=0x%02x\n", fmt_priv.fmt.raw_data[16]);
	
		for (;;) //这一段涉及到异步IO
		{
			fd_set fds;
			struct timeval tv;
			int r;
			
			FD_ZERO (&fds);//将指定的文件描述符集清空
			FD_SET (fd, &fds);//在文件描述符集合中增加一个新的文件描述符
			
			/* Timeout. */
			tv.tv_sec = 2;
			tv.tv_usec = 0;

			r = select (fd + 1, &fds, NULL, NULL, &tv);//判断是否可读(即摄像头是否准备好),tv是定时
			
			if (-1 == r) {
				if (EINTR == errno)
					continue;
				printf ("select err\n");
			}
			if (0 == r) {
				fprintf (stderr, "select timeout\n");
				//exit (EXIT_FAILURE);
				//goto close;
			}
								
			if (read_frame ())//如果可读,执行read_frame ()函数,并跳出循环
				break;
		} 
	}

close:	
	if (-1 == ioctl (fd, VIDIOC_STREAMOFF, &type)) //停止捕捉图像数据,注意,此动作同时会释放VIDIOC_REQBUFS申请的缓冲
		printf ("VIDIOC_STREAMOFF failed\n");
unmap:
	for (i = 0; i < n_buffers; ++i) {
		if (-1 == munmap (buffers[i].start, buffers[i].length)) {
			printf ("munmap error");
		}
	}
	
	disp_stop();
	disp_exit();	
	close (fd);
	
	printf("TVD demo bye!\n");
	return 0;						
}
void main()
{
    int sel = 0;

	redraw = 1;
	refresh = 1;
	

#ifndef CDROM
	xres_flags = XRES_SOFT;
	Enabled240p = 1;
	UseDefault = 0;
	EnabledSoft = 1;
	Enabled_C_BW = 0;
#endif

#ifdef CDROM
	RestoreGlobals();
#endif

#ifdef CDROM1	
	if(prev_select)
	{
		sel = prev_select;
		prev_select = 0;
	}
#endif

	disp_off();
	set_xres(320, xres_flags);
	if(Enabled240p)
		Set240p();

#ifndef CDROM
	disp_on();
	DrawIntro();
	disp_off();
#endif

    while(1)
    {   	
		vsync();
	
#ifdef CDROM1
		if(!HelpItem)
		{
#endif

        if(redraw)
        {
			RedrawMain();
            redraw = 0;
			refresh = 1;
			disp_on();
        }
		
		set_font_pal(15);
		
		if(refresh)
        {
            RefreshMain(sel);

            refresh = 0;
        }

        controller = joytrg(0);
		
		if (controller & JOY_SEL)
		{
#ifdef CDROM1
			x_g = 0;
#endif
			Options();
			redraw = 1;
		}
        
        if (controller & JOY_DOWN) 
        {
            sel++;
            if(sel > 14)
                sel = 0;
            refresh = 1;
        }

        if (controller & JOY_UP) 
        {
            sel--;
            if(sel < 0)
                sel = 14;
            refresh = 1;
        }
		
		if (controller & JOY_RUN)
		{
			showHelp(GENERAL_HELP);
			redraw = 1;
		}
#ifdef CDROM1
		}
		else
		{
			if(HelpItem <= OPTIONS_HELP)
			{
				sel = HelpItem;
				controller = JOY_I;
			}
				
			HelpItem = 0;
		}
#endif
		
		if (controller & JOY_I)
		{
			disp_off();
			ResetVideo();
			switch(sel)
			{
				case 0:
#ifndef CDROM1
					TestPatterns();
#else
					xres_flags_g = xres_flags;
					Enabled240p_g = Enabled240p;
					UseDefault_g = UseDefault;
					EnabledSoft_g = EnabledSoft;
					Enabled_C_BW_g = Enabled_C_BW;
					
					set_font_pal(14);
					put_string("Loading...", 27, 26);
					cd_execoverlay(PATTERNS_OVERLAY);
#endif
					break;
				case 1:
					DropShadow();
					break;
				case 2:
					StripedSprite();
					break;
				case 3:
					LagTest();
					break;
				case 4:
					ManualLagTest();
					break;
				case 5:
					ScrollTest();
					break;
				case 6:
					VScrollTest();
					break;
				case 7:
					DrawStripes();
					break;
				case 8:
					DrawCheck();
					break;
				case 9:
					LEDZoneTest();
					break;
				case 10:
					SoundTest();
					break;
				case 11:
					AudioSyncTest();
					break;
				case 12:
#ifdef CDROM1
					prev_select = sel;
#endif
					Options();
					break;
				case 13:
#ifdef CDROM1
					prev_select = sel;
#endif
					showHelp(GENERAL_HELP);
					break;
				case 14:
					DrawCredits();
					break;
			}
			redraw = 1;			
			disp_off();
		}
    }
}
void DrawCredits()
{
	unsigned char end = 0;
	int counter = 0;

	redraw = 1;
	refresh = 1;
    while(!end)
    {   
		vsync();
		
        if(redraw)
        {
			ResetVideo();
			setupFont();
			
			SetFontColors(15, RGB(3, 3, 3), RGB(0, 6, 0), 0);
			SetFontColors(13, RGB(3, 3, 3), RGB(1, 6, 6), 0);

			set_xres(512, xres_flags);
			
#ifndef CDROM1			
			set_map_data(MB512_map, 64, 30);
			set_tile_data(MB512_bg);
			load_tile(0x1000);
			load_map(0, 0, 0, 0, 64, 30);
			load_palette(0, MB512_pal, 1);  
#else		
			set_screen_size(SCR_SIZE_64x32); 
			cd_loaddata(GPHX_OVERLAY, OFS_back512_PAL_bin, palCD, SIZE_back512_PAL_bin); 
			load_palette(0, palCD, 1);
			cd_loadvram(GPHX_OVERLAY, OFS_back512_DATA_bin, 0x1000, SIZE_back512_DATA_bin);			
			cd_loadvram(GPHX_OVERLAY, OFS_back512_BAT_bin, 0, SIZE_back512_BAT_bin);
#endif
			
			Center224in240();
			
            redraw = 0;
			refresh = 1;
			disp_on();
        }
		
		if(refresh)
		{
			RefreshCredits();

			refresh = 0;
		}
		
		set_font_pal(14);
		if(counter == 1)
			put_string("Artemio Urbina      ", HPOS+2, 8);
		if(counter == 60*4)
			put_string("@Artemio (twitter)  ", HPOS+2, 8);
		if(counter == 60*8)
			put_string("*****@*****.**", HPOS+2, 8);
		if(counter == 60*16)
			counter = 0;
			
		counter++;

        controller = joytrg(0);
        
		if (controller & JOY_II)
			end = 1;
			
		if (controller & JOY_SEL)
		{
			DrawN();
			redraw = 1;
		}
    }	
}
Exemple #10
0
clear_display() {
    disp_off();
    cls();
    disp_on();
}
Exemple #11
0
void state_machine() {
	// Spend most of the time in sleep
	switch (current_state) {
		// LEDs off, waiting for button presses
		case SLEEPING:
			next_state = SLEEPING;
			disp_time(DISABLE);

			//TODO: Go back to sleep
			sleep_proc();
			break;

		case IDLE:
			next_state = IDLE;

			if (timeout_ticks > _LED_TIMEOUT_TICKS) {
				next_state = SLEEPING;
			}

			if (SET || MODE) next_state = WAKE;

			break;

		// LEDs on, waiting for timeout
		case WAKE:
			next_state = WAKE;
			enable_pwm();
			disp_on();

			if (!SET && !MODE) {
				next_state = IDLE;
			}

			if ((debouncer_test(SET_BTN) == LONG_PRESSED) &&
			    (debouncer_test(MODE_BTN) == LONG_PRESSED)) {
				next_state = READY_TO_SET_HOURS;
			}
			break;

		case READY_TO_SET_HOURS:
			next_state = READY_TO_SET_HOURS;
			last_set_state = FALSE;

			flash_mins();
			flash_hours();

			if (!MODE && !SET) next_state = SET_HOURS;

			break;

		// Time set mode, pressing set will increment hours up to 24, then
		// roll over, pressing mode will switch to minute set mode
		case SET_HOURS:
			next_state = SET_HOURS;

			flash_mins();

			if (debouncer_test(MODE_BTN) == DEBOUNCED) {
				next_state = READY_TO_SET_MINS;
			}

			if (debouncer_test(SET_BTN) == DEBOUNCED) {
				last_set_state = TRUE;
			}
			else if (debouncer_test(SET_BTN) == LONG_PRESSED) {
				next_state = QUICK_HOURS_INC;
			}

			if ((last_set_state == TRUE) && !SET) {
				last_set_state = FALSE;
				++my_time.hours;
			}
			break;

		case QUICK_HOURS_INC:
			next_state = QUICK_HOURS_INC;

			flash_mins();

			if (!SET) next_state = SET_HOURS;

			if (quick_inc) {
				quick_inc = FALSE;
				++my_time.hours;
			}

			break;

		case READY_TO_SET_MINS:
			next_state = READY_TO_SET_MINS;
			last_set_state = FALSE;

			flash_mins();
			flash_hours();

			if (!MODE) next_state = SET_MINS;

			break;

		// Time set mode, pressing set will increment minutes up to 59, then
		// roll over, pressing mode will exit time set mode
		case SET_MINS:
			next_state = SET_MINS;

			flash_hours();

			if (debouncer_test(MODE_BTN) == DEBOUNCED) {
				next_state = WAKE;
			}

			if (debouncer_test(SET_BTN) == DEBOUNCED) {
				last_set_state = TRUE;
			}
			else if (debouncer_test(SET_BTN) == LONG_PRESSED) {
				next_state = QUICK_MINS_INC;
			}

			if ((last_set_state == TRUE) && !SET) {
				last_set_state = FALSE;
				++my_time.mins;
			}
			break;

		case QUICK_MINS_INC:
			next_state = QUICK_MINS_INC;

			flash_hours();

			if (!SET) next_state = SET_MINS;

			if (quick_inc) {
				quick_inc = FALSE;
				++my_time.mins;
			}

			break;
		default:
			next_state = IDLE;
			break;
	}

	if (current_state != SLEEPING) {
		test_buttons();
	}

	if (next_state != current_state) {
		current_state = next_state;
	}
}
Exemple #12
0
void flash_hours() {
	if (flash_counter > _BLINK_ON_TIME) disp_on();
	else hours_off();

	return;
}
Exemple #13
0
void flash_mins() {
	if (flash_counter > _BLINK_ON_TIME) disp_on();
	else mins_off();

	return;
}