#include "linux.h"
#include "net_stat.h"
#include "diskio.h"
+#include "bme.c"
#include "temphelper.h"
#include <dirent.h>
#include <ctype.h>
//eg 4100
static int last_battery_volts[MAX_BATTERY_COUNT];
-//eg 78
-static unsigned char last_cell_radio_dbm;
+//eg -78
+static dbus_int32_t last_cell_radio_dbm;
//eg 100
-static unsigned char last_cell_radio_percent;
+static dbus_int32_t last_cell_radio_percent;
//eg 'full' 'on' 'off'
static char last_batt_charge_status[16];
-//eg 35
-static int last_battery_temp[MAX_BATTERY_COUNT];
+//eg 100 or -100
+static int last_battery_rate[MAX_BATTERY_COUNT];
+
+//eg 35.5
+static float last_battery_temp[MAX_BATTERY_COUNT];
/* e.g. "charging 75%" */
static char last_battery_str[MAX_BATTERY_COUNT][64];
void dbus_exit_app_view()
{
+ //not needed in harmattan - swipe down or away and close (although it doesn't seem to be reliable to swipe)
+
+
//dbus-send --type=signal --session /com/nokia/hildon_desktop .
- type = DBUS_BUS_SESSION;
- //message_type = DBUS_MESSAGE_TYPE_SIGNAL;
- dbus_error_init (&error);
- connection = dbus_bus_get (type, &error);
- message = dbus_message_new_signal ("/com/nokia/hildon_desktop", "com.nokia.hildon_desktop", "exit_app_view");
- // send the message and flush the connection
- if (!dbus_connection_send(connection, message, NULL)) {
- fprintf(stderr, "Out Of Memory!\n");
- exit(1);
- }
- dbus_connection_flush(connection);
-
- // free the message
- dbus_message_unref(message);
+// type = DBUS_BUS_SESSION;
+// //message_type = DBUS_MESSAGE_TYPE_SIGNAL;
+// dbus_error_init (&error);
+// connection = dbus_bus_get (type, &error);
+// message = dbus_message_new_signal ("/com/nokia/hildon_desktop", "com.nokia.hildon_desktop", "exit_app_view");
+// // send the message and flush the connection
+// if (!dbus_connection_send(connection, message, NULL)) {
+// fprintf(stderr, "Out Of Memory!\n");
+// exit(1);
+// }
+// dbus_connection_flush(connection);
+//
+// // free the message
+// dbus_message_unref(message);
}
char path[128];
char dest[128];
char *args = "";
+ char *args2 = "";
if (dbus_queue > 10)
{
fprintf (stderr, "too much dbus queuing\n");
exit (1);
}
switch(item){
- case DBUS_CELL_DBM:
- snprintf(method,127,"get_signal_strength");
- snprintf(path,127,"/com/nokia/phone/net");
- snprintf(dest,127,"com.nokia.phone.net");
- message = dbus_message_new_method_call (dest,path,"Phone.Net",method);
+ case DBUS_CELL_DBM:
+ snprintf(method,127,"Get");
+ args = "com.nokia.csd.CSNet.SignalStrength";
+ args2 = "SignalDecibels";
+ snprintf(path,127,"/com/nokia/csd/csnet");
+ snprintf(dest,127,"com.nokia.csd.CSNet"); //service name
+ message = dbus_message_new_method_call (dest,path,"org.freedesktop.DBus.Properties",method);//dest,path,interface,method
dbus_message_set_auto_start (message, TRUE);
+ if (!dbus_message_append_args(message,
+ DBUS_TYPE_STRING, &args,
+ DBUS_TYPE_STRING, &args2,
+ DBUS_TYPE_INVALID))
+ fprintf (stderr, "OOM appending args\n");
+ //dbus_message_iter_init_append(message, &iter);
+ //if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &args))
+ // fprintf (stderr, "OOM appending args\n");
break;
case DBUS_CELL_PERCENT:
- snprintf(method,127,"get_signal_strength");
- snprintf(path,127,"/com/nokia/phone/net");
- snprintf(dest,127,"com.nokia.phone.net");
- message = dbus_message_new_method_call (dest,path,"Phone.Net",method);
+ snprintf(method,127,"Get");
+ args = "com.nokia.csd.CSNet.SignalStrength";
+ args2 = "SignalPercent";
+ snprintf(path,127,"/com/nokia/csd/csnet");
+ snprintf(dest,127,"com.nokia.csd.CSNet"); //service name
+ message = dbus_message_new_method_call (dest,path,"org.freedesktop.DBus.Properties",method);//dest,path,interface,method
dbus_message_set_auto_start (message, TRUE);
+ if (!dbus_message_append_args(message,
+ DBUS_TYPE_STRING, &args,
+ DBUS_TYPE_STRING, &args2,
+ DBUS_TYPE_INVALID))
+ fprintf (stderr, "OOM appending args\n");
+ //dbus_message_iter_init_append(message, &iter);
+ //if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_STRING, &args))
+ // fprintf (stderr, "OOM appending args\n");
break;
case DBUS_HAL_BATTERY_CHRG_STATUS:
// 'full' 'on' 'off'
case DBUS_HAL_BATTERY_VOLTS_CURRENT:
// '3600' - '4200'
snprintf(method,127,"GetProperty");
- args = "battery.voltage.current";
+ args = "battery.voltage.current"; //battery.reporting.current gets battery mA, not charge/discharge rate
snprintf(path,127,"/org/freedesktop/Hal/devices/bme");
snprintf(dest,127,"org.freedesktop.Hal");
message = dbus_message_new_method_call (dest,path,"org.freedesktop.Hal.Device",method);
if (reply)
{
DBusMessageIter iter;
+ DBusMessageIter subiter;
dbus_message_iter_init (reply, &iter);
- //int type = dbus_message_iter_get_arg_type(&iter);
int current_fieldnumber = 0;
while (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_INVALID)
{
- //fprintf (stderr,"dbus-monitor too dumb to decipher arg type '%c'\n", type);
+
current_fieldnumber++;
switch(item){
case DBUS_CELL_DBM:
- if (current_fieldnumber == 2)
- {
- unsigned char val;
- dbus_message_iter_get_basic(&iter, &val);
+ if (current_fieldnumber == 1)
+ {//this is a variant
+ if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT){
+ fprintf (stderr,"DBUS_CELL_DBM got type '%c'; expected variant!\n", dbus_message_iter_get_arg_type(&iter));
+ break;
+ }
+ dbus_message_iter_recurse (&iter, &subiter);
+ dbus_int32_t val = 0;
+ if (dbus_message_iter_get_arg_type(&subiter) != DBUS_TYPE_INT32){
+ fprintf (stderr,"DBUS_CELL_DBM subiter got type '%c'; expected INT32!\n", dbus_message_iter_get_arg_type(&subiter));
+ break;
+ }
+ dbus_message_iter_get_basic(&subiter, &val);
last_cell_radio_dbm = val;
}
break;
case DBUS_CELL_PERCENT:
if (current_fieldnumber == 1)
- {
- unsigned char val;
- dbus_message_iter_get_basic(&iter, &val);
+ {//this is a variant
+ dbus_message_iter_recurse (&iter, &subiter);
+ dbus_int32_t val = 0;
+ dbus_message_iter_get_basic(&subiter, &val);
last_cell_radio_percent = val;
}
break;
idx = get_battery_idx(bat);
/* don't update battery too often */
- if (current_update_time - last_battery_time[idx] < 29.5) {
+ if (current_update_time - last_battery_time[idx] < 2) {
set_return_value(buffer, n, item, idx);
return;
}
}
fclose(sysfs_bat_fp[idx]);
sysfs_bat_fp[idx] = NULL;
-
- last_battery_volts[idx] = voltage;
- last_battery_temp[idx] = temp;
-
+ if (voltage > 10000) voltage = voltage / 1000; //fix for n900 power kernel 47
+ last_battery_volts[idx] = voltage;
+ if (temp < 100)
+ last_battery_temp[idx] = temp;
+ else //fix for n900 power kernel 47
+ last_battery_temp[idx] = (float) temp / 10;
/* charging */
if (present_rate <= 0) {
/* e.g. charging 75% */
else if (strncmp(buffer, "full", 4) == 0) {//no, it won't always be 100%. stupid dbus.
snprintf(last_battery_str[idx], sizeof(last_battery_str[idx])-1, "charged %i%%", remaining_capacity);
}
- last_battery_temp[idx] = temp;
+
+ struct bme_reply bmeInfo = getBattInfoFromBME();
+ last_battery_temp[idx] = ((float)bmeInfo.battery_temperature) - 273.15f;
+ last_battery_rate[idx] = bmeInfo.battery_current;
+ //last_battery_temp[idx] = temp;
}
set_return_value(buffer, n, item, idx);
}
snprintf(buffer, n, "%i", last_battery_volts[idx]); // voltage
break;
case BATTERY_TEMP:
- snprintf(buffer, n, "%i", last_battery_temp[idx]); // temperature
+ snprintf(buffer, n, "%3.1f", last_battery_temp[idx]); // temperature
break;
+ case BATTERY_RATE:
+ snprintf(buffer, n, "%i", last_battery_rate[idx]); // charge/discharge rate
+ break;
default:
fprintf (stderr, "invalid item type in set_return_value");
break;