Beispiel #1
0
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;
}
Beispiel #2
0
/*
 * Не существующее меню
 */
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;
}
Beispiel #3
0
/*
 * Рабочий - отображает измеренное значение толщины
 * по мере поступления новых данных
 */
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, &microValue );
	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;//надо перерисовать
}
Beispiel #4
0
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;
}
Beispiel #5
0
/*
 * играет музыку
 */
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;
}
Beispiel #6
0
/*
 * Главное меню
 */
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;
}
Beispiel #7
0
/*
 * Пользовательская калибровка
 */
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;
}
Beispiel #8
0
/*
 * Функция для вывода временного сообщения 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;
}
Beispiel #9
0
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;
}
Beispiel #10
0
/*
 * Clear the contents of <ns> but don't free <ns> itself.
 */
void nsClear(NS *ns)
{
    disClear(&ns->dis);

    memset(ns, 0, sizeof(NS));
}