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; }
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; }
//не отлажено на железе!!! 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); }