int ACPI_read(hwd_context_t *ctx, hwd_control_state_t *ctrl, long long **events, int flags)
{
	static int failed = 0;

	if (failed ||
		(((ACPI_control_state_t *)ctrl)->counts[0] = (long long)get_load_value()) < 0 ||
		(((ACPI_control_state_t *)ctrl)->counts[1] = (long long)get_temperature_value()) < 0)
		goto fail;
	
	*events=((ACPI_control_state_t *)ctrl)->counts;
	return 0;

fail:
	failed = 1;
	return -1;
}
Пример #2
0
int
ACPI_read( hwd_context_t * ctx, hwd_control_state_t * ctrl, long long **events,
           int flags )
{
    ( void ) ctx;			 /*unused */
    ( void ) flags;			 /*unused */
    static int failed = 0;

    if ( failed ||
            ( ( ( ACPI_control_state_t * ) ctrl )->counts[0] =
                  ( long long ) get_load_value(  ) ) == INVALID_VALUE ||
            ( ( ( ACPI_control_state_t * ) ctrl )->counts[1] =
                  ( long long ) get_temperature_value(  ) ) == INVALID_VALUE )
        goto fail;

    *events = ( ( ACPI_control_state_t * ) ctrl )->counts;
    return 0;

fail:
    failed = 1;
    return PAPI_ESBSTR;
}
Пример #3
0
//не отлажено на железе!!!
void get_temperature_2wire(int *hb, int *lb){
	//команда всем сенсорам - измерять
    if(OW_Send(OW_SEND_RESET, (u8 *)"\xcc\x44", 2, 0, 0, OW_NO_READ)==OW_NO_DEVICE)
    	{return;}

	//PIN_ON(LED_GREEN);
    // назначаем функцию двухтактного выхода - подаем "питание" на шину
    OW_out_set_as_Power_pin();

    // выдерживаем время измерения (например 750 мс для 12-битного измерения)
#if DS18B20_RESOLUTION == DS18B20_9BIT
    delay_for(100);
#endif
#if DS18B20_RESOLUTION == DS18B20_10BIT
    delay_for(200);
#endif
#if DS18B20_RESOLUTION == DS18B20_11BIT
    delay_for(400);
#endif
#if DS18B20_RESOLUTION == DS18B20_12BIT
    delay_for(750);
#endif

    // восстанавливаем функцию передатчика UART
    OW_out_set_as_TX_pin();

	u8 buf[2];
    OW_Send(OW_SEND_RESET, (u8 *)"\xcc\xbe\xff\xff", 4, (u8 *)buf, 2, 2);

#if 0
	buf[0] >>= 4; // убираем дробную часть
	buf[1] <<= 4; // убираем лишние знаки

	return(buf[1] | buf[0]); // объединяем 2 байта -> возврат
#endif

	get_temperature_value(buf, *hb, *lb);
}