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); } }
void main(void) { unsigned char keys; static bit disp_choice; unsigned char t_hour = 15,t_min=45; /*TODO criar struct em RTC.h*/ #ifdef _18F2620 /* Configure the oscillator for the device */ ConfigureOscillator(); #endif /* Initialize I/O and Peripherals for application */ InitApp(); CLRWDT(); power_heat1 = 0; power_heat2 = 0; // No heatelement activated menu_item = 0; sprintf(str_buf, mensagens_main[Forno]); printstr_rs232(str_buf);//"Forno SMD v1.0\n\r"); sprintf(str_buf, mensagens_main[Forno1]); lcd_print_line(str_buf, 0);//"Forno SMD v1.0", 0); sprintf(str_buf, mensagens_main[Inicializando]); lcd_print_line(str_buf, 1);//" Inicializando", 1); Buzzer_stat = 1; for (keys = 50; keys != 0; keys--) wait_1ms(); Buzzer_stat = 0; sprintf(str_buf, mensagens_main[Forno_SMD]); printstr_rs232(str_buf);//"\n\r\n\rForno SMD\n\r"); if (is_24c1024_present() == 0) { sprintf(str_buf, mensagens_main[FALHA]); lcd_print_line(str_buf, 0);//"FALHA DA EEPROM!", 0); sprintf(str_buf, mensagens_main[troque]); lcd_print_line(str_buf, 1);//"troque o 24c1024", 1); while ((keys_get() & KEY_ENTER) == 0) { } }; tmp_log = 0; // Switch off the log-function to preserve EEPROM oven_overshoot = read_byte_24c1024(0x00); // Read the calibration-value keys = ~read_byte_24c1024(0x01); if ( oven_overshoot != keys){ // Check if it is ok. sprintf(str_buf, mensagens_main[Calibracao]); lcd_print_line(str_buf, 0);//"Calibracao", 0); //Else start the calibration-procedure sprintf(str_buf, mensagens_main[ENT]); lcd_print_line(str_buf, 1);//"[ENT] inicia", 1); while ((keys_get() & KEY_ENTER) == 0) { } calibrate(); } read_buffer_24c1024(PROFILES_START_ADR, (unsigned char*) &perfil.profile, sizeof (perfil.profile)); disp_choice = 1; sprintf(str_buf, mensagens_main[DINST]); lcd_print_line(str_buf, 0);//"DINST SMD-OVEN", 0); menu_item = MENU_MIN; while (true) { keys = keys_get(); // get key-status if (keys & KEY_RIGHT) ++menu_item; if (keys & KEY_LEFT) --menu_item; if (menu_item > MENU_MAX) menu_item = MENU_MIN; if (menu_item < MENU_MIN) menu_item = MENU_MAX; if (keys != 0) disp_choice = 1; if (disp_choice != 0) switch (menu_item) { case MENU_START: sprintf(str_buf, mensagens_main[Iniciar]); lcd_print_line(str_buf, 1);//"->Iniciar Solda", 1); break; case MENU_EDIT: sprintf(str_buf, mensagens_main[Editar]); lcd_print_line(str_buf, 1);//"->Editar Perfil", 1); break; case MENU_LOG: sprintf(str_buf, mensagens_main[Registrar]); lcd_print_line(str_buf, 1);//"->Registrar", 1); break; case MENU_CAL: sprintf(str_buf, mensagens_main[Calibrar]); lcd_print_line(str_buf, 1);//"->Calibrar", 1); break; default: menu_item = MENU_MIN; } if (keys & KEY_ENTER) { switch (menu_item) { case MENU_START: controle(); break; case MENU_CAL: calibrate(); break; case MENU_EDIT: edit(); break; case MENU_LOG: logging(); break; default: break; } sprintf(str_buf, mensagens_main[Terminado]); lcd_print_line(str_buf, 0);//"Terminado", 0); sprintf(str_buf, mensagens_main[press]); lcd_print_line(str_buf, 1); //"press [ENT]", 1); while ((keys_get() & KEY_ENTER) == 0) { power_heat1 = 0; power_heat2 = 0; // No heatelement activated }; // lcd_print_line("DINST SMD-OVEN", 0); disp_choice = 1; } // read_time; /*TODO criar rotina de leitura RTC if (secflag) { sprintf(str_buf, mensagens_main[DINST1], t_hour, t_min);//"DINST %2uh%2um", t_hour, t_min); lcd_print_line(str_buf, 0); secflag = 0; } wait_1ms(); power_heat1 = 0; power_heat2 = 0; // No heatelement activated } }