示例#1
0
文件: lome6.c 项目: videopix/ethersex
/*
* lome6 startup function
* get the sensor id's from the config and convert them to struct ow_rom_code_t and read the scratchpads
* start a first one wire temperature convert
*/
void lome6_startup(void) {

	iLCDPage = 0;
	iTemperatureCPU = 0;
	iTemperatureSB = 0;
	iCountdownTimer = 0;
	iUptime = 0;
	iPOD = 0;

	#ifdef LOME6_ONEWIRE_SUPPORT
	iTemperatureAIR = 0;
	iTemperaturePSU = 0;
	iTemperatureRAM = 0;
	#endif

	#ifdef LOME6_LCD_SUPPORT
	WINDOW *ttyWindow = NULL;
	#endif


#ifdef LOME6_ONEWIRE_SUPPORT
	if (parse_ow_rom(CONF_SENSOR_PSU, &romcodePSU) == -1) {
		LOME6DEBUG("cannot parse ow rom code for psu sensor\n");
	}
	
	if (parse_ow_rom(CONF_SENSOR_AIR, &romcodeAIR) == -1) {
		LOME6DEBUG("cannot parse ow rom code for air sensor\n");
	}
	
	if (parse_ow_rom(CONF_SENSOR_RAM, &romcodeRAM) == -1) {
		LOME6DEBUG("cannot parse ow rom code for ram sensor\n");
	}

	ow_temp_start_convert_nowait(NULL);
#endif

#ifdef LOME6_LCD_SUPPORT
	ttyWindow = subwin(NULL, CONF_LOME6_LCD_HEIGHT, CONF_LOME6_LCD_WIDTH, 0, 0);
#endif
	
	// only set iPOD if server not running
	// (disable power on delay if server is running already)
	if (PIN_HIGH(POWER_STATE))
		iPOD = CONF_LOME6_POD;
	
}
示例#2
0
文件: lome6.c 项目: videopix/ethersex
/*
* lome6 periodical timer function for display and one wire convert command
*
* if onewire is supported start onewire temperature convert
* if lcd is supported display various information
*/
void lome6_timer(void) {

#ifdef LOME6_ONEWIRE_SUPPORT
	// read 1w temperatures
	iTemperaturePSU = lome6_get_temperature(&romcodePSU);
	iTemperatureAIR = lome6_get_temperature(&romcodeAIR);
	iTemperatureRAM = lome6_get_temperature(&romcodeRAM);
#endif // LOME6_ONEWIRE_SUPPORT

#ifdef LOME6_LCD_SUPPORT
	wclear(ttyWindow);
	
	if (iLCDPage == 0) {

		// display uptime and date+time
		uint32_t working_hours = (clock_get_time() - clock_get_startup()) / 60;

		struct clock_datetime_t datetime;
		clock_current_localtime(&datetime);

		wprintw_P(ttyWindow, PSTR("%02d:%02d %02d.%02d.%04d"), datetime.hour, datetime.min, datetime.day, datetime.month, (datetime.year + 1900));
		wclrtoeol(ttyWindow);
		wmove(ttyWindow, 1, 0);
		wprintw_P(ttyWindow, PSTR("Uptime: %02lu:%02d"), working_hours / 60, working_hours % 60);
		wclrtoeol(ttyWindow);
		
#ifndef LOME6_ONEWIRE_SUPPORT
		if (!PIN_HIGH(POWER_STATE))
			iLCDPage = 4;
		else
			iLCDPage = 0;
#else
		iLCDPage++;
#endif

#ifdef LOME6_ONEWIRE_SUPPORT
	} else if (iLCDPage == 1) {

		// display onewire temperature sensor data
		wprintw_P(ttyWindow, PSTR("Temperature"));
		wclrtoeol(ttyWindow);
		wmove(ttyWindow, 1, 0);
		wprintw_P(ttyWindow, PSTR("AIR: %02d.%d"), iTemperatureAIR / 10, iTemperatureAIR % 10);
		wclrtoeol(ttyWindow);

		iLCDPage++;

	} else if (iLCDPage == 2) {

		// display onewire temperature sensor data
		wprintw_P(ttyWindow, PSTR("Temperature:"));
		wclrtoeol(ttyWindow);
		wmove(ttyWindow, 1, 0);
		wprintw_P(ttyWindow, PSTR("RAM: %02d.%d"), iTemperatureRAM / 10, iTemperatureRAM % 10);
		wclrtoeol(ttyWindow);

		iLCDPage++;

	} else if (iLCDPage == 3) {

		// display onewire temperature sensor data
		wprintw_P(ttyWindow, PSTR("Temperature"));
		wclrtoeol(ttyWindow);
		wmove(ttyWindow, 1, 0);
		wprintw_P(ttyWindow, PSTR("PSU: %02d.%d"), iTemperaturePSU / 10, iTemperaturePSU % 10);
		wclrtoeol(ttyWindow);

		iLCDPage++;

#endif //LOME6_ONEWIRE_SUPPORT
	} else if (iLCDPage == 4) {
	
		// display temperature data
		wprintw_P(ttyWindow, PSTR("Temperature"));
		wclrtoeol(ttyWindow);
		wmove(ttyWindow, 1, 0);
		wprintw_P(ttyWindow, PSTR("CPU: %02d.%d"), iTemperatureCPU / 10, iTemperatureCPU % 10);
		wclrtoeol(ttyWindow);
		iLCDPage++;

	} else if (iLCDPage == 5) {

		// display temperature data
		wprintw_P(ttyWindow, PSTR("Temperature"));
		wclrtoeol(ttyWindow);
		wmove(ttyWindow, 1, 0);
		wprintw_P(ttyWindow, PSTR("SB: %02d.%d"), iTemperatureSB / 10, iTemperatureSB % 10);
		wclrtoeol(ttyWindow);
		iLCDPage = 0;

	}

	// start a new convert in next round
	ow_temp_start_convert_nowait(NULL);
#endif // LOME6_LCD_SUPPORT

}
示例#3
0
/*This function will be called every 800 ms*/
void ow_periodic(void) {
	/*At startup we want an immediate discovery*/
	static uint16_t discover_delay = 3;
	if (--discover_delay == 0) {
		discover_delay = OW_DISCOVER_DELAY;
		ow_discover_sensor();
#ifdef DEBUG_OW_POLLING
		for (uint8_t i = 0, k = 0; i < OW_SENSORS_COUNT; i++) {
			if (ow_sensors[i].ow_rom_code.raw != 0) {
				debug_printf("sensor #%d in list is: %02x %02x %02x %02x %02x %02x %02x %02x\n",
						++k,
						ow_sensors[i].ow_rom_code.bytewise[0],
						ow_sensors[i].ow_rom_code.bytewise[1],
						ow_sensors[i].ow_rom_code.bytewise[2],
						ow_sensors[i].ow_rom_code.bytewise[3],
						ow_sensors[i].ow_rom_code.bytewise[4],
						ow_sensors[i].ow_rom_code.bytewise[5],
						ow_sensors[i].ow_rom_code.bytewise[6],
						ow_sensors[i].ow_rom_code.bytewise[7]);
			}
		}
#endif /* DEBUG_OW_POLLING */
	}
	for (uint8_t i = 0; i < OW_SENSORS_COUNT; i++) {
		if (ow_temp_sensor(&ow_sensors[i].ow_rom_code)) {
			if (ow_sensors[i].converted == 1) {
				if (ow_sensors[i].convert_delay == 1)
					ow_sensors[i].convert_delay = 0;
				else {
#ifdef DEBUG_OW_POLLING
					debug_printf("reading temperature\n");
#endif /* DEBUG_OW_POLLING */
					int8_t ret;
					ow_temp_scratchpad_t sp;
					ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
						ret = ow_temp_read_scratchpad(&ow_sensors[i].ow_rom_code, &sp);
					}
					if (ret != 1) {
#ifdef DEBUG_OW_POLLING
						debug_printf("scratchpad read failed: %d\n", ret);
#endif /* DEBUG_OW_POLLING */
						return;
					}
#ifdef DEBUG_OW_POLLING
					debug_printf("scratchpad read succeeded\n");
#endif /* DEBUG_OW_POLLING */
					int16_t temp = ow_temp_normalize(&ow_sensors[i].ow_rom_code, &sp);
#ifdef DEBUG_OW_POLLING
					debug_printf("temperature: %d.%d\n", HI8(temp), LO8(temp) > 0 ? 5 : 0);
#endif /* DEBUG_OW_POLLING */
					ow_sensors[i].temp = ((int8_t) HI8(temp)) * 10 + HI8(((temp & 0x00ff) * 10) + 0x80);
					ow_sensors[i].converted = 0;
				}
			}
			if (--ow_sensors[i].read_delay == 0 && ow_sensors[i].converted == 0) {
				ow_sensors[i].read_delay = OW_READ_DELAY;
				ow_temp_start_convert_nowait(&ow_sensors[i].ow_rom_code);
				ow_sensors[i].convert_delay = 1;
				ow_sensors[i].converted = 1;
			}
		}
	}
}