goto err;
}
- p = fres_contract_get_power_management(*contract);
- if (p && !fosa_rel_time_is_null(p->min_expiration)) {
- frsh_abs_time_t req_time, exp_time;
-
- fosa_clock_get_time(FOSA_CLOCK_REALTIME, &req_time);
- req_time = fosa_abs_time_incr(req_time, p->min_expiration);
- frsh_battery_get_expiration(&exp_time);
-
- if (fosa_abs_time_smaller(req_time, exp_time)) {
- ret = FRSH_ERR_CONTRACT_REJECTED;
- goto err;
- }
- }
+ /* TODO: Battery time check should be moved to
+ * FCB. Implementation of FRSH API is meant only as a thin
+ * wrapper of FRES framework and the FRES framework could
+ * theoretically be used without FRSH API. Moreover, if there
+ * is some logging mechanism in FCB, this contract rejection
+ * will not be logged. */
+ ret = __contract_check_min_expiration(contract);
+ if (ret) goto err;
/* Activate allocator */
r = fres_contract_get_resource(*contract);
#include <fcb.h>
#include <fra_generic.h>
#include <frsh_forb.h>
-
-#include "fra_acpi_cpu.h"
+#include "frsh_resources.h"
+#ifdef CONFIG_ACPI_CPU
+# include <fra_acpi_cpu.h>
+#endif
+ #include "fra_acpi_battery.h"
-#include "fra_acpi_lcd.h"
-
+#ifdef CONFIG_ACPI_LCD
+# include <fra_acpi_lcd.h>
+#endif
#include <frsh.h>
- static inline int __is_a_valid_power(level)
+ static inline int __is_a_valid_power(int level)
{
- if (level >=0 && level < 3 )
+ if (level >= 0 && level < 3 )
return 1;
return 0;
frsh_resource_id_t resource_id,
frsh_power_level_t power_level)
{
- int ret;
+ if (!__is_a_valid_power(power_level))
+ return FRSH_ERR_BAD_ARGUMENT;
+
switch(resource_type)
{
+#ifdef CONFIG_ACPI_CPU
case FRSH_RT_PROCESSOR:
{
- ret = fra_CPU_frequency_init(resource_id);
+ int ret;
- if (ret) goto err;
+ ret = fra_CPU_power_init(resource_id);
-
- ret = fra_CPU_set_frequency(resource_id, power_level);
+ if (ret) return FRSH_ERR_INTERNAL_ERROR;
- if (ret) goto err;
+ ret = fra_CPU_set_power(resource_id, power_level);
+ if (ret) return FRSH_ERR_INTERNAL_ERROR;
/**
* @TODO:
* if (i budget sono effettivamente diversi)
* rinegozia i contratti coi nuovi valori
**/
-
break;
}
+#endif
+#ifdef CONFIG_ACPI_LCD
case FRSH_RT_LCD:
{
- ret = fra_LCD_brightness_init(resource_id);
+ int ret;
- if (ret) goto err;
+ ret = fra_LCD_power_init(resource_id);
-
- ret = fra_LCD_set_brightness(resource_id, power_level);
+ if (ret) return FRSH_ERR_INTERNAL_ERROR;
- if (ret) goto err;
-
+ ret = fra_LCD_set_power(resource_id, power_level);
+ if (ret) return FRSH_ERR_INTERNAL_ERROR;
break;
}
+#endif
default:
- goto err;
+ return FRSH_ERR_NOT_IMPLEMENTED;
}
return FRSH_NO_ERROR;
frsh_resource_id_t resource_id,
frsh_power_level_t *power_level)
{
- int ret;
-
switch(resource_type)
{
+#ifdef CONFIG_ACPI_CPU
case FRSH_RT_PROCESSOR:
{
- ret = fra_CPU_get_level(resource_id,
+ int ret;
+ ret = fra_CPU_get_power(resource_id,
(int*) power_level);
- if (ret) goto err;
+ if (ret) return FRSH_ERR_INTERNAL_ERROR;
break;
}
+#endif
+#ifdef CONFIG_ACPI_LCD
case FRSH_RT_LCD:
{
- ret = fra_LCD_get_level(resource_id,
+ int ret;
+ ret = fra_LCD_get_power(resource_id,
(int*) power_level);
- if (ret) goto err;
+ if (ret) return FRSH_ERR_INTERNAL_ERROR;
break;
}
fosa_clock_get_time(FOSA_CLOCK_REALTIME, expiration);
*expiration = fosa_abs_time_incr(*expiration, interval);
+ out:
return FRSH_NO_ERROR;
+#else
+ return FRSH_ERR_NOT_IMPLEMENTED;
+#endif
}
-#ifndef ACPI_CPU
-#define ACPI_CPU
+#ifndef ACPI_LCD
+#define ACPI_LCD
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>
#include <string.h>
#include <math.h>
- #include <libacpi.h>
- #include <fosa_clocks_and_timers.h>
#include <fosa.h>
- int fra_LCD_brightness_init(int lcd);
+ #define PROC_LCD_PATH_1 "/proc/acpi/video/VID/LCD/"
+ #define PROC_LCD_PATH_2 "/proc/acpi/video/VID1/LCD/"
+ #define SYS_LCD_PATH_1 "/sys/class/backlight/acpi_video0/"
- int fra_LCD_get_brightness(int lcd, int level, unsigned long *bight);
+ typedef enum lcd_type {
+ NONE = 0,
+ PROC_1 = 1,
+ PROC_2 = 2,
+ SYS_1 = 3,
+ NV = 4
+ } lcd_type_t;
- int fra_LCD_set_brightness(int lcd, int level);
+ int fra_LCD_power_init(int lcd);
- int fra_LCD_get_level(int lcd, int *level);
+ int fra_LCD_get_power(int lcd, int *level);
+
+ int fra_LCD_set_power(int lcd, int level);
#endif
+