int dcalibAlDone(uint8_t ev) { int res; switch (ev) { case DIS_MEASURE: return 0; case DIS_PUSH_L: //micro_initCalib(); pdisp = duserCalib; return 0; case DIS_PUSH_OK: res = microSaveAl(); if ( res == 0 ) { pdisp = dcalibDone; } else { pdisp = dmessageError1; prev = duserCalib; } return 0; } disClear(); disSetF( 0, 0, f_5x8 ); disPr( "Клаибровка Al:" ); disSet( 1, 12 ); disPr( "Сохранить" ); disSet( 2, 0 ); disPr( "калибровочные" ); disSet( 3, 18 ); disPr( "данные?" ); disSet( 5, 0 ); disPr( "L-Отм 0k-Сохр" ); return 1; }
/* * Не существующее меню */ int dnotDone(uint8_t ev) { switch (ev) { case DIS_PUSH_L: case DIS_ALARM: pwrPutEv( PWR_RESET_ALARM ); if ( prev != NULL ) { pdisp = prev; prev = NULL; } else { pdisp = dworkScreen; } return 0; case DIS_MEASURE: return 0; case DIS_REPAINT: pwrPutEv( PWR_ALARM_3000 ); //заведем будильник отображения данного сообщения break; } disClear(); disSetF( 0, 27, f_5x8 ); disPr( "Sorry" ); disSet( 1, 6 ); disPr( "Данный пункт" ); disSet( 2, 9 ); disPr( "меню еще не" ); disSet( 3, 12); disPr( "существует" ); return 1; }
/* * Рабочий - отображает измеренное значение толщины * по мере поступления новых данных */ int dworkScreen(uint8_t ev) { static uint8_t measflag = 0; switch (ev) { case DIS_PUSH_OK: pdisp = dmainM; mgPutEv( MG_OFF ); return 0; case DIS_PUSH_L: mgPutEv( MG_ON ); return 0; case DIS_PULL_L: mgPutEv( MG_OFF ); return 0; case DIS_MEASURE: measflag ^= 1; break; case DIS_PUSH_R: case DIS_LONGPUSH_OK: case DIS_LONGPUSH_L: case DIS_LONGPUSH_R: return 0; } uint16_t freq = getFreq(); uint16_t microValue; int res; disClear(); disSetF( 0, 0, f_5x8 ); if ( magGetStat() ) { disPr( "Измер." ); if ( measflag ) { disPr( "*" ); } } else { disPr( "Фикс." ); } disSetF( 0, 68, f_3x5 ); disPr( adcGetBattary() ); res = micro( freq, µValue ); if ( res == 0 ) { // Ferrum disSetF( 2, 18, f_10x16 ); disPr( u16to4str( microValue ) ); disSetF( 2, 0, f_5x8 ); disPr( "Fe" ); disSetF( 3, 72, f_5x8 ); disPr( "um" ); } else if ( res == 1 ) { // Air disSetF( 2, 18, f_10x16 ); disPr( " Air" ); } else if ( res == 2 ) { // Aluminum disSetF( 2, 18, f_10x16 ); disPr( u16to4str( microValue ) ); disSetF( 2, 0, f_5x8 ); disPr( "Al" ); disSetF( 3, 72, f_5x8 ); disPr( "um" ); } else if ( res == 3 ) { // No Fe calib data disSetF( 2, 0, f_5x8 ); disPr( "No Fe calibr."); } else if ( res == 4 ) { // No Al calib data disSetF( 2, 0, f_5x8 ); disPr( "No Al calibr." ); } else if ( res == 5 ) { // Freq is zero disSetF( 2, 18, f_10x16 ); disPr( "????" ); } disSetF( 5, 64, f_3x5 ); disPr( u32to5str( freq ) ); return 1;//надо перерисовать }
int calib(uint8_t ev, int metall) { static const uint16_t thickness[] = {0,100,200,300,500,1000,2000,3000}; static int index = 0; int res = 0; if ( metall != 0 && metall != 1 ) { mgPutEv( MG_OFF ); pdisp = dmessageError1; prev = duserCalib; return 0; } switch (ev) { case DIS_PUSH_L: mgPutEv( MG_OFF ); pdisp = duserCalib; return 0; case DIS_REPAINT: // at first entry to this menu index = 0; break; case DIS_PUSH_OK: //Eb1Click: res = addCalibPoint( getFreq(), thickness[index], index, metall ); if ( res != 0 ) { mgPutEv( MG_OFF ); pdisp = dmessageError1; prev = duserCalib; return 0; } index++; if ( index == sizeof(thickness)/(sizeof(uint16_t)) ) { index = 0; mgPutEv( MG_OFF ); if ( metall == 0 ) { // if Ferrum pdisp = dcalibFeDone; return 0; } pdisp = dcalibAlDone; // if Aluminum return 0; } break; } disClear(); if ( metall == 0 ) { disSetF( 0, 0, f_5x8 ); disPr( "Клаибровка Fe" ); } else { disSetF( 0, 0, f_5x8 ); disPr( "Клаибровка Al" ); } disSet( 1, 0 ); disPr( "Измерте зазор:" ); disSet( 2, 0 ); disPr( itostr( thickness[index] ) ); disPr( " мкм" ); disSet( 3, 0 ); disPr( "F=" ); disPr( itostr( getFreq() ) ); return 1; }
/* * играет музыку */ int dsounds(uint8_t ev) { static uint8_t cur = 0; char* name; int max; switch (ev) { case DIS_PUSH_L: pdisp = dmainM; cur = 0; sndPutEv( SND_STOP ); return 0; case DIS_PUSH_R: cur++; max = sndGetSize(); if ( cur >= max ) { cur = 0; } sndPutEv( SND_STOP ); break; case DIS_PUSH_OK: if ( isPlaying() ) { sndPutEv( SND_STOP ); } else { sndPutEv( 0x80 | cur ); } break; case DIS_REPAINT: //sndPutEv( 0x80 | cur ); break; default: return 0; } disClear(); disSetF( 0, 0, f_5x8 ); disPr( "Слушать звуки" ); int page = cur / 5; int offs = cur % 5; for ( int i = 0; i < 5; i++ ) { name = sndGetName( page * 5 + i ); if ( name == NULL ) { break; } disSet( i + 1, 6 ); disPr( name ); } disSet( offs + 1, 0 ); disPr( "→"); return 1; }
/* * Главное меню */ int dmainM(uint8_t ev) { static int8_t curs = 0; switch (ev) { case DIS_PUSH_OK: if ( curs == 0 ) { // Наверх pdisp = dworkScreen; curs = 0; } else if ( curs == 1 ) { // Выбор калибровки //prev = dmainM; //pdisp = adcTest; // dnotDone;//dflashDebug; } else if ( curs == 2 ) { // Польз. калибр. pdisp = duserCalib; } else if ( curs == 3 ) { // Просмотр таб. pdisp = dimageShtrih; } else if ( curs == 4 ) { // Звуки pdisp = dsounds; } else { prev = dmainM; pdisp = dnotDone; curs = 0; } return 0; case DIS_PUSH_L: pdisp = dworkScreen; // Наверх curs = 0; break; case DIS_PUSH_R: curs++; if ( curs == 5 ) { curs = 0; } break; case DIS_MEASURE: case DIS_LONGPUSH_L: case DIS_LONGPUSH_R: return 0; } disClear(); disSetF( 0, 0, f_5x8 ); disPr( "Главное меню" ); disSet( 1, 6 ); disPr( "Наверх" ); disSet( 2, 6 ); disPr( "ADC test" ); disSet( 3, 6 ); disPr( "Польз.калибр." ); disSet( 4, 6 ); disPr( "Просмотр карт" ); // look at table disSet( 5, 6 ); disPr( "Звуки" ); disSet( curs + 1, 0 ); disPr( "→"); return 1; }
/* * Пользовательская калибровка */ int duserCalib(uint8_t ev) { static uint8_t curs = 0; switch (ev) { case DIS_PUSH_L: pdisp = dmainM; // Наверх curs = 0; break; case DIS_PUSH_R: curs++; if ( curs > 2 ) { curs = 0; } break; case DIS_PUSH_OK: if ( curs == 0 ) { // Наверх pdisp = dmainM; curs = 0; } else if ( curs == 1 ) { // Железо pdisp = dcalibFe; mgPutEv( MG_ON ); } else if ( curs == 2 ) { // Алюминий pdisp = dcalibAl; mgPutEv( MG_ON ); } else { prev = duserCalib; pdisp = dmessageError1; curs = 0; } return 0; } disClear(); disSetF( 0, 0, f_5x8 ); disPr( "Клаибровка" ); disSet( 1, 6 ); disPr( "Наверх" ); disSet( 2, 6 ); disPr( "Железо" ); disSet( 3, 6 ); disPr( "Алюминий" ); disSet( curs + 1, 0 ); disPr( "→" ); return 1; }
/* * Функция для вывода временного сообщения 1 */ int dmessageError1(uint8_t ev) { switch (ev) { case DIS_PUSH_L: case DIS_ALARM://сработал будильник pwrPutEv( PWR_RESET_ALARM ); if ( prev != NULL ) { pdisp = prev; prev = NULL; } else { pdisp = dworkScreen; } return 0; case DIS_MEASURE: return 0; case DIS_REPAINT: pwrPutEv( PWR_ALARM_3000 );//заведем будильник отображения данного сообщения break; } disClear(); disSetF( 0, 18, f_5x8 ); disPr( "Error!" ); disSet( 3, 12 ); disPr( "Ошибка!" ); return 1; }
int dcalibDone(uint8_t ev) { switch (ev) { case DIS_REPAINT: pwrPutEv( PWR_ALARM_3000 ); //заведем будильник отображения данного сообщения break; case DIS_ALARM://сработал будильник if ( prev != NULL ) { pdisp = prev; prev = NULL; } else { pdisp = duserCalib; } return 0; case DIS_MEASURE: return 0; } disClear(); disSetF( 0, 0, f_5x8 ); disPr( "Клаибровка:" ); disSet( 1, 12 ); disPr( "Процесс" ); disSet( 2, 12 ); disPr( "завершен" ); disSet( 3, 12 ); disPr( "успешно." ); return 1; }
/* * Clear the contents of <ns> but don't free <ns> itself. */ void nsClear(NS *ns) { disClear(&ns->dis); memset(ns, 0, sizeof(NS)); }