aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJanos Kovacs <janos.f.kovacs@nokia.com>2010-06-28 13:06:53 +0300
committerJanos Kovacs <janos.f.kovacs@nokia.com>2010-06-28 13:06:53 +0300
commit466532bb2258ea22e7ac96e73aa8d88f4dd155d6 (patch)
tree54fd5533fad7a2a6fcd99c28fdb85791ab24b340
parent646638a1d8d5e7eccbb4b8488d8857231d34cbaf (diff)
merged with the 'harmattan-fmradio-test' branch
-rw-r--r--client/client.c52
-rw-r--r--src/res-msg.c1
-rw-r--r--src/res-msg.h1
-rw-r--r--src/res-proto.c7
-rw-r--r--src/res-set-private.h2
-rw-r--r--src/res-set.c15
-rw-r--r--src/res-types.h2
7 files changed, 59 insertions, 21 deletions
diff --git a/client/client.c b/client/client.c
index fb93e1d..251f8db 100644
--- a/client/client.c
+++ b/client/client.c
@@ -30,6 +30,7 @@ typedef struct {
resmsg_rset_t rset;
int verbose;
DBusBusType bustype;
+ int allow_unknown;
} conf_t;
typedef struct {
@@ -665,7 +666,7 @@ static void print_message(char *fmt, ...)
static void usage(int exit_code)
{
- printf("usage: %s [-h] [-t] [-v] [-d bus-type] [-f mode-values]"
+ printf("usage: %s [-h] [-t] [-v] [-u] [-d bus-type] [-f mode-values]"
"[-o optional-resources] [-s shared-resources -m shared-mask] "
"class all-resources\n",
exe_name);
@@ -673,6 +674,7 @@ static void usage(int exit_code)
printf("\t h\tprint this help message and exit\n");
printf("\t t\ttrace messages\n");
printf("\t v\tverbose printouts\n");
+ printf("\t u\tallow 'unknown' (ie. other than listed below) classes");
printf("\t d\tbus-type. Either 'system' or 'session'\n");
printf("\t f\tmode values. See 'modes' below for the "
"\n\t\tsyntax of <mode-values>\n");
@@ -684,6 +686,7 @@ static void usage(int exit_code)
"syntax of\n\t\t<shared-mask>\n");
printf("\tclass:\n");
printf("\t\tcall\t - for native or 3rd party telephony\n");
+ printf("\t\tvideoeditor\t - for video editing/MMS\n");
printf("\t\tcamera\t - for photo applications\n");
printf("\t\tringtone - for ringtones\n");
printf("\t\talarm\t - for alarm clock\n");
@@ -706,10 +709,12 @@ static void usage(int exit_code)
printf("\t\tScaleButton\n");
printf("\t\tSnapButton\n");
printf("\t\tLensCover\n");
+ printf("\t\tHeadsetButtons\n");
printf("\t no whitespace allowed in the resource list.\n");
printf("\tmodes:\n");
- printf("\t comma separated lis of the following modes\n");
+ printf("\t comma separated list of the following modes\n");
printf("\t\tAutoRelease\n");
+ printf("\t\tAlwaysReply\n");
exit(exit_code);
}
@@ -723,19 +728,20 @@ static void parse_options(int argc, char **argv)
config.trace = FALSE;
config.id = 1;
- while ((option = getopt(argc, argv, "htvd:f:s:o:m:")) != -1) {
+ while ((option = getopt(argc, argv, "htvud:f:s:o:m:")) != -1) {
switch (option) {
- case 'h': usage(0); break;
- case 't': config.trace = TRUE; break;
- case 'v': config.verbose = TRUE; break;
- case 'd': config.bustype = parse_bustype(optarg, 1); break;
- case 'f': config.mode = parse_mode_values(optarg, 1); break;
- case 'o': config.rset.opt = parse_resource_list(optarg, 1); break;
- case 's': config.rset.share = parse_resource_list(optarg, 1); break;
- case 'm': config.rset.mask = parse_resource_list(optarg, 1); break;
- default: usage(EINVAL); break;
+ case 'h': usage(0); break;
+ case 't': config.trace = TRUE; break;
+ case 'v': config.verbose = TRUE; break;
+ case 'd': config.bustype = parse_bustype(optarg, 1); break;
+ case 'f': config.mode = parse_mode_values(optarg, 1); break;
+ case 'o': config.rset.opt = parse_resource_list(optarg, 1); break;
+ case 's': config.rset.share = parse_resource_list(optarg, 1); break;
+ case 'm': config.rset.mask = parse_resource_list(optarg, 1); break;
+ case 'u': config.allow_unknown = TRUE; break;
+ default: usage(EINVAL); break;
}
}
@@ -762,15 +768,17 @@ static void parse_options(int argc, char **argv)
static char *parse_class_string(char *str)
{
- if (strcmp(str, "call" ) &&
- strcmp(str, "camera" ) &&
- strcmp(str, "ringtone" ) &&
- strcmp(str, "alarm" ) &&
- strcmp(str, "navigator" ) &&
- strcmp(str, "game" ) &&
- strcmp(str, "player" ) &&
- strcmp(str, "event" ) &&
- strcmp(str, "background") )
+ if (strcmp(str, "call" ) &&
+ strcmp(str, "camera" ) &&
+ strcmp(str, "ringtone" ) &&
+ strcmp(str, "alarm" ) &&
+ strcmp(str, "navigator" ) &&
+ strcmp(str, "game" ) &&
+ strcmp(str, "player" ) &&
+ strcmp(str, "event" ) &&
+ strcmp(str, "background" ) &&
+ strcmp(str, "videoeditor") &&
+ !config.allow_unknown )
{
print_error("invalid class '%s'", str);
}
@@ -793,6 +801,7 @@ static uint32_t parse_resource_list(char *rlist_str, int exit_if_error)
{ RESMSG_SCALE_BUTTON , "ScaleButton" },
{ RESMSG_SNAP_BUTTON , "SnapButton" },
{ RESMSG_LENS_COVER , "LensCover" },
+ { RESMSG_HEADSET_BUTTONS, "HeadsetButtons" },
{ 0 , NULL }
};
@@ -840,6 +849,7 @@ static uint32_t parse_mode_values(char *mval_str, int exit_if_error)
{
static rdef_t mdef[] = {
{ RESMSG_MODE_AUTO_RELEASE , "AutoRelease" },
+ { RESMSG_MODE_ALWAYS_REPLY , "AlwaysReply" },
{ 0 , NULL }
};
diff --git a/src/res-msg.c b/src/res-msg.c
index 76a8dfb..87be0da 100644
--- a/src/res-msg.c
+++ b/src/res-msg.c
@@ -240,6 +240,7 @@ static char *flag_str(uint32_t flag)
case RESMSG_SCALE_BUTTON: str = "scale_button"; break;
case RESMSG_SNAP_BUTTON: str = "snap_button"; break;
case RESMSG_LENS_COVER: str = "lens_cover"; break;
+ case RESMSG_HEADSET_BUTTONS: str = "lens_cover"; break;
default: str = NULL; break;
}
diff --git a/src/res-msg.h b/src/res-msg.h
index 16e3d56..b654505 100644
--- a/src/res-msg.h
+++ b/src/res-msg.h
@@ -23,6 +23,7 @@ extern "C" {
#define RESMSG_SCALE_BUTTON RESOURCE_SCALE_BUTTON
#define RESMSG_SNAP_BUTTON RESOURCE_SNAP_BUTTON
#define RESMSG_LENS_COVER RESOURCE_LENS_COVER
+#define RESMSG_HEADSET_BUTTONS RESOURCE_HEADSET_BUTTONS
#define RESMSG_MODE_AUTO_RELEASE RESOURCE_AUTO_RELEASE
#define RESMSG_MODE_ALWAYS_REPLY RESOURCE_ALWAYS_REPLY
diff --git a/src/res-proto.c b/src/res-proto.c
index 8d6585f..095767f 100644
--- a/src/res-proto.c
+++ b/src/res-proto.c
@@ -53,6 +53,7 @@ EXPORT int resproto_send_message(resset_t *rset,
{
resconn_t *rcon = rset->resconn;
resmsg_type_t type = resmsg->type;
+ resmsg_rset_t *flags;
int success;
if (rset->state != RESPROTO_RSET_STATE_CONNECTED ||
@@ -61,6 +62,12 @@ EXPORT int resproto_send_message(resset_t *rset,
else {
resmsg->any.id = rset->id;
success = rcon->any.send(rset, resmsg, status);
+
+ if (success && type == RESMSG_UPDATE) {
+ flags = &resmsg->record.rset;
+ resset_update_flags(rset, flags->all, flags->opt,
+ flags->share, flags->mask);
+ }
}
return success;
diff --git a/src/res-set-private.h b/src/res-set-private.h
index b5a9230..9206c78 100644
--- a/src/res-set-private.h
+++ b/src/res-set-private.h
@@ -9,6 +9,8 @@ resset_t *resset_create(union resconn_u*, const char*, uint32_t,
void resset_destroy(resset_t *);
void resset_ref(resset_t *);
void resset_unref(resset_t *);
+void resset_update_flags(resset_t *, uint32_t, uint32_t,
+ uint32_t,uint32_t);
resset_t *resset_find(union resconn_u *, const char *, uint32_t);
#endif /* __RES_SET_PRIVATE_H__ */
diff --git a/src/res-set.c b/src/res-set.c
index f89e184..c27a745 100644
--- a/src/res-set.c
+++ b/src/res-set.c
@@ -76,6 +76,21 @@ void resset_unref(resset_t *rset)
}
}
+void resset_update_flags(resset_t *rset,
+ uint32_t all,
+ uint32_t opt,
+ uint32_t share,
+ uint32_t mask)
+{
+ if (rset != NULL) {
+ rset->flags.all = all;
+ rset->flags.opt = opt;
+ rset->flags.share = share;
+ rset->flags.mask = mask;
+ }
+}
+
+
resset_t *resset_find(resconn_t *rcon, const char *peer, uint32_t id)
{
resset_t *rset;
diff --git a/src/res-types.h b/src/res-types.h
index ebcd9c8..5fb0e28 100644
--- a/src/res-types.h
+++ b/src/res-types.h
@@ -20,6 +20,7 @@ typedef enum {
resource_scale_button = 10,
resource_snap_button = 11,
resource_lens_cover = 12,
+ resource_headset_buttons = 13,
} resource_type_t;
@@ -35,6 +36,7 @@ typedef enum {
#define RESOURCE_SCALE_BUTTON RESOURCE_BIT( resource_scale_button )
#define RESOURCE_SNAP_BUTTON RESOURCE_BIT( resource_snap_button )
#define RESOURCE_LENS_COVER RESOURCE_BIT( resource_lens_cover )
+#define RESOURCE_HEADSET_BUTTONS RESOURCE_BIT( resource_headset_buttons )
typedef enum {
resource_auto_release = 0,