summaryrefslogtreecommitdiff
path: root/cleopatre/devkit/plcd
diff options
context:
space:
mode:
Diffstat (limited to 'cleopatre/devkit/plcd')
-rw-r--r--cleopatre/devkit/plcd/inc/plcd_ctx.h1
-rw-r--r--cleopatre/devkit/plcd/src/plcd_stack.c32
2 files changed, 33 insertions, 0 deletions
diff --git a/cleopatre/devkit/plcd/inc/plcd_ctx.h b/cleopatre/devkit/plcd/inc/plcd_ctx.h
index 73fef9bac8..3973b4e087 100644
--- a/cleopatre/devkit/plcd/inc/plcd_ctx.h
+++ b/cleopatre/devkit/plcd/inc/plcd_ctx.h
@@ -95,6 +95,7 @@ typedef enum
PLCD_FORCE_ROLE_NONE = 0,
PLCD_FORCE_ROLE_CCO,
PLCD_FORCE_ROLE_STA,
+ PLCD_FORCE_ROLE_NB,
} plcd_force_role_t;
typedef struct
diff --git a/cleopatre/devkit/plcd/src/plcd_stack.c b/cleopatre/devkit/plcd/src/plcd_stack.c
index 922f0ca0fa..9d2f01b81e 100644
--- a/cleopatre/devkit/plcd/src/plcd_stack.c
+++ b/cleopatre/devkit/plcd/src/plcd_stack.c
@@ -711,6 +711,37 @@ plcd_stack_set_tonemask (const plcd_ctx_t *ctx)
}
/**
+ * Send DRV_STA_FORCE_ROLE if needed.
+ *
+ * \param ctx plcd context
+ * \return -1 on error, 0 otherwise
+ */
+static int
+plcd_stack_force_role (const plcd_ctx_t *ctx)
+{
+ PLCD_ASSERT (ctx);
+
+ /* From cleopatre/devkit/doc/chapter_drv_mme.rst */
+ switch (ctx->hpav_conf.force_role)
+ {
+ case PLCD_FORCE_ROLE_STA:
+ case PLCD_FORCE_ROLE_CCO:
+ return plcd_send_recv_single_value (
+ ctx, DRV_STA_FORCE_ROLE,
+ &ctx->hpav_conf.force_role, 1);
+
+ case PLCD_FORCE_ROLE_NONE:
+ /* Cesar default value, there is nothing to send. */
+ return 0;
+
+ default:
+ syslog (LOG_ERR,
+ "Undefined plcd_stack_force_role value");
+ return -1;
+ }
+}
+
+/**
* Send DRV_STA_SET_CONFIG.REQ with contents of given file, and receive
* DRV_STA_SET_CONFIG.CNF.
*
@@ -878,6 +909,7 @@ plcd_stack_init (const plcd_ctx_t *ctx)
{&plcd_stack_set_tonemask, "tonemask"},
{&plcd_stack_set_phy, "phy"},
{&plcd_stack_set_internal, "internal"},
+ {&plcd_stack_force_role, "force_role"},
{&plcd_stack_start, "start"},
};