Пример #1
0
static void brew_run_step()
{
	g_state.step_start_tick = xTaskGetTickCount();
	g_state.step_runtime = 0; // iterate will update this

	lcd_lock();
    lcd_fill(0, 0, LCD_W, CRUMB_H, 0x0);
	lcd_background(0x0);
    lcd_text(0, 0, "Brewbot:Brewing");
	lcd_fill(0, CRUMB_H - 2, LCD_W, 2, 0xFFFF);
	lcd_fill(0, CRUMB_H, LCD_W, LCD_H - CRUMB_H, COL_BG_NORM);
	lcd_fill(0, LCD_H - 1 * HH - 1, LCD_W / 2, 1, 0xFFFF);
	lcd_fill(LCD_W / 2, LCD_H - 1 * HH - 1, 1, HH, 0xFFFF);
	
	button_paint(brew_buttons);		
	if (g_steps[g_state.step].buttons)
		button_paint(g_steps[g_state.step].buttons);
	lcd_background(COL_BG_NORM);
	lcd_printf(17, 0, 20, "%d.%s", g_state.step, g_steps[g_state.step].name);
	lcd_release();
	log_brew(&g_state.log_file, "%.2d:%.2d Run step %d.%s\n",
			g_state.total_runtime / 60, g_state.total_runtime % 60,
			g_state.step, g_steps[g_state.step].name);

	g_steps[g_state.step].method(1);
}
Пример #2
0
void brew_resume(int init)
{
	if (init)
	{
		g_state.in_alarm = 0;
		lcd_lock();
	    lcd_fill(0, 0, LCD_W, CRUMB_H, 0x0);
	    lcd_text(0, 0, "Brewbot:Resume at step");
		lcd_fill(0, CRUMB_H - 2, LCD_W, 2, 0xFFFF);
		lcd_fill(0, CRUMB_H, LCD_W, LCD_H - CRUMB_H - 2 * HH, COL_BG_NORM);
		lcd_fill(0, LCD_H - 2 * HH - 2, LCD_W, 1, 0xFFFF);
		lcd_fill(0, LCD_H - 1 * HH - 1, LCD_W, 1, 0xFFFF);
		lcd_fill(LCD_W / 2, LCD_H - 2 * HH - 1, 1, 2 * HH, 0xFFFF);
		
		button_paint(resume_buttons);		
		lcd_background(COL_BG_NORM);
		lcd_printf(10, 4, 30, "%d. %s", g_state.step + 1, brew_step_name(g_state.step));
		lcd_release();
	}
	else
	{
		log_brew(&g_state.log_file, "%.2d:%.2d Brew stopped\n", g_state.total_runtime / 60, g_state.total_runtime % 60);
		brewTaskStop(&brew_task);
	}
}
Пример #3
0
void brew_resume_next(char button_down)
{
	if (button_down) return;
	
    if (g_state.step < brew_get_steps_count() - 1)
        g_state.step++;

	lcd_background(COL_BG_NORM);
	lcd_printf(10, 4, 30, "%d. %s", g_state.step + 1, brew_step_name(g_state.step));
}
Пример #4
0
//----------------------------------------------------------------------------------------
void brew_resume_prev(char button_down)
{
	printf("PREV %d", button_down);
	
	if (button_down) return;

	if (g_state.step != 0)
		g_state.step--;

	lcd_background(COL_BG_NORM);
	lcd_printf(10, 4, 30, "%d. %s", g_state.step + 1, brew_step_name(g_state.step));
}
Пример #5
0
static void menu_update(void)
{
	start_time = xTaskGetTickCount();
	
    unsigned char ii;
    uint16_t bgCol = COL_BG_NORM;    	

	lcd_lock();
	lcd_background(0);

    // clear menu bg
    lcd_fill(0, CRUMB_H, LCD_W, LCD_H - CRUMB_H, bgCol);

    // draw the crumbs
    char crumbs[90] = "Brewbot";
    for (ii = 1; ii <= g_index; ii++)
    {
        strcat(crumbs, ":");
        strcat(crumbs, g_menu[ii-1][g_crumbs[ii-1]].text);
    }
    lcd_fill(0, 0, LCD_W, CRUMB_H, 0x0);
    lcd_text(0, 0, crumbs);
	lcd_fill(0, CRUMB_H - 2, LCD_W, 2, 0xFFFF);

    // how big is the menu?
    g_entries = 0;
    for (ii = 0; g_menu[g_index][ii].text; ii++)
    {
    	g_entries++;
    }

    // if above a certain size draw in two columns
    if (g_entries > 4)
    {
    	menu_two_column();
    }
    else
    {
    	g_rows = g_entries;
    	g_rowh = (240 - CRUMB_H) / g_entries;

    	for (ii = 0; g_menu[g_index][ii].text; ii++)
    	{
    		menu_paint_cell(ii);
    		if (ii != g_entries - 1)
    			lcd_fill(0,  CRUMB_H + (ii +1) * (g_rowh) - 1, LCD_W, 1,    0xFFFF);
    	}
    }

    lcd_printf(30, 0, 10, "%dms", (xTaskGetTickCount() - start_time));
    lcd_release();
}
Пример #6
0
void kernel_err_report(const char* err_report_title,const char* err_report_detail,const char* error_fix_advise) {
/*
     _______________________________
    |                               |
    | REPORT TITLE(Line3-4)         |
    |                               |
    | REPORT DETAIL(Line6-8)        |
    |                               |
    | ERROR  FIX  ADVISE(Line10-12) |
    |                               |
    |_______________________________|
    
*/
#define REPORT_TITLE_LINE      3
#define REPORT_DETAIL_LINE     6
#define ERROR_FIX_ADVISE_LINE 10
    
    long err_report_data_length=strlen(err_report_title);
    char err_report_data_line[MAX_COLUMN_LONGITUDINAL];
    int  error_report_print_control=0;
    int  print_crlf_index=1;
    
    lcd_background(blue);
    lcd_print_clean();
    
    for (;print_crlf_index<REPORT_TITLE_LINE;++print_crlf_index)
        lcd_print_crlf();
    for (;err_report_data_length>0;err_report_data_length-=(MAX_COLUMN_LONGITUDINAL-1),++print_crlf_index,++error_report_print_control) {
        memcpy(err_report_data_line,(const void*)((long)err_report_title+error_report_print_control*(MAX_COLUMN_LONGITUDINAL-1)),MAX_COLUMN_LONGITUDINAL-1);
        lcd_print_line(err_report_data_line);
        memset(err_report_data_line,0,MAX_COLUMN_LONGITUDINAL);
    }
    
    for (;print_crlf_index<REPORT_DETAIL_LINE;++print_crlf_index)
        lcd_print_crlf();
    for (err_report_data_length=strlen(err_report_detail),error_report_print_control=0;err_report_data_length>0;err_report_data_length-=(MAX_COLUMN_LONGITUDINAL-1),++print_crlf_index,++error_report_print_control) {
        memcpy(err_report_data_line,(const void*)((long)err_report_detail+error_report_print_control*(MAX_COLUMN_LONGITUDINAL-1)),MAX_COLUMN_LONGITUDINAL-1);
        lcd_print_line(err_report_data_line);
        memset(err_report_data_line,0,MAX_COLUMN_LONGITUDINAL);
    }
    
    for (;print_crlf_index<ERROR_FIX_ADVISE_LINE;++print_crlf_index)
        lcd_print_crlf();
    for (err_report_data_length=strlen(error_fix_advise),error_report_print_control=0;err_report_data_length>0;err_report_data_length-=(MAX_COLUMN_LONGITUDINAL-1),++print_crlf_index,++error_report_print_control) {
        memcpy(err_report_data_line,(const void*)((long)error_fix_advise+error_report_print_control*(MAX_COLUMN_LONGITUDINAL-1)),MAX_COLUMN_LONGITUDINAL-1);
        lcd_print_line(err_report_data_line);
        memset(err_report_data_line,0,MAX_COLUMN_LONGITUDINAL);
    }
}
Пример #7
0
void brew_iterate_cb(brew_task_t *bt)
{
	// caclulate the runtimes
	g_state.total_runtime = (xTaskGetTickCount() - g_state.brew_start_tick) / configTICK_RATE_HZ;
	g_state.step_runtime  = (xTaskGetTickCount() - g_state.step_start_tick) / configTICK_RATE_HZ;

	// run the current step
	g_steps[g_state.step].method(0);
	vTaskDelay(100);

	// display the total run time
	lcd_background(COL_BG_NORM);
	if (g_state.step != brew_get_steps_count() - 1)
		lcd_printf(20, 2, 5, "%.2d:%.2d", g_state.total_runtime / 60, g_state.total_runtime % 60);
}