Skip to content

Commit 37e6c28

Browse files
jfischer-nocarlescufi
authored andcommitted
[nrf fromlist] samples: hid-mouse: modify sample to use USB BC12 drivers
Add an example of how to use USB BC12 driver callback among the USB device support. Upstream PR #: 106759 Signed-off-by: Johann Fischer <johann.fischer@nordicsemi.no>
1 parent 15e1d1a commit 37e6c28

2 files changed

Lines changed: 59 additions & 0 deletions

File tree

samples/subsys/usb/hid-mouse/sample.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,12 @@ tests:
1818
- mimxrt1060_evk/mimxrt1062/qspi
1919
- max32690evkit/max32690/m4
2020
tags: usb
21+
sample.usb_device_next.hid-mouse-bc12:
22+
filter: dt_chosen_enabled("zephyr,usb-bc12")
23+
depends_on:
24+
- usbd
25+
integration_platforms:
26+
- nrf54lm20dk/nrf54lm20b/cpuapp
27+
extra_configs:
28+
- CONFIG_USB_BC12=y
29+
tags: usb

samples/subsys/usb/hid-mouse/src/main.c

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include <zephyr/kernel.h>
1313
#include <zephyr/device.h>
1414
#include <zephyr/drivers/gpio.h>
15+
#include <zephyr/drivers/usb/usb_bc12.h>
1516
#include <zephyr/input/input.h>
1617
#include <zephyr/sys/util.h>
1718

@@ -21,6 +22,7 @@
2122
#include <zephyr/logging/log.h>
2223
LOG_MODULE_REGISTER(main, LOG_LEVEL_INF);
2324

25+
static const struct device *bc12_dev = DEVICE_DT_GET_OR_NULL(DT_CHOSEN(zephyr_usb_bc12));
2426
static const struct gpio_dt_spec led0 = GPIO_DT_SPEC_GET(DT_ALIAS(led0), gpios);
2527
static const uint8_t hid_report_desc[] = HID_MOUSE_REPORT_DESC(2);
2628

@@ -101,6 +103,40 @@ struct hid_device_ops mouse_ops = {
101103
.get_report = mouse_get_report,
102104
};
103105

106+
static const char *bc12type_to_str(const enum bc12_type type)
107+
{
108+
switch (type) {
109+
case BC12_TYPE_NONE:
110+
return "NONE";
111+
case BC12_TYPE_SDP:
112+
return "SDP";
113+
case BC12_TYPE_DCP:
114+
return "DCP";
115+
case BC12_TYPE_CDP:
116+
return "CDP";
117+
case BC12_TYPE_PROPRIETARY:
118+
return "PROPRIETARY";
119+
case BC12_TYPE_UNKNOWN:
120+
return "UNKNOWN";
121+
default:
122+
return "ERROR";
123+
}
124+
}
125+
126+
static void bc12_result_cb(const struct device *dev,
127+
struct bc12_partner_state *const state,
128+
void *const user_data)
129+
{
130+
if (state->bc12_role != BC12_PORTABLE_DEVICE) {
131+
LOG_ERR("Unexpected BC role");
132+
return;
133+
}
134+
135+
LOG_INF("New BC state %s (%d uV %d uA)",
136+
bc12type_to_str(state->type), state->voltage_uv, state->current_ua);
137+
138+
}
139+
104140
int main(void)
105141
{
106142
struct usbd_context *sample_usbd;
@@ -132,6 +168,20 @@ int main(void)
132168
return ret;
133169
}
134170

171+
if (IS_ENABLED(CONFIG_USB_BC12)) {
172+
if (!device_is_ready(bc12_dev)) {
173+
LOG_ERR("USB BC1.2 device %s is not ready", bc12_dev->name);
174+
return -EIO;
175+
}
176+
177+
bc12_set_result_cb(bc12_dev, &bc12_result_cb, NULL);
178+
ret = bc12_set_role(bc12_dev, BC12_PORTABLE_DEVICE);
179+
if (ret != 0) {
180+
LOG_ERR("Failed to set BC12 role");
181+
return -EIO;
182+
}
183+
}
184+
135185
sample_usbd = sample_usbd_init_device(NULL);
136186
if (sample_usbd == NULL) {
137187
LOG_ERR("Failed to initialize USB device");

0 commit comments

Comments
 (0)