Implement support for management powered event
diff --git a/doc/mgmt-api.txt b/doc/mgmt-api.txt
index 5e87cb6..34421ee 100644
--- a/doc/mgmt-api.txt
+++ b/doc/mgmt-api.txt
@@ -173,3 +173,10 @@
 
 Event Code		0x0005
 Event Parameters	Controller_Index (2 Octets)
+
+Controller Powered Event
+========================
+
+Event Code		0x0006
+Event Parameters	Controller_Index (2 Octets)
+			Powered (1 Octet)
diff --git a/lib/mgmt.h b/lib/mgmt.h
index 70cf4b6..46bc73f 100644
--- a/lib/mgmt.h
+++ b/lib/mgmt.h
@@ -96,3 +96,9 @@
 struct mgmt_ev_index_removed {
 	uint16_t index;
 } __packed;
+
+#define MGMT_EV_POWERED			0x0006
+struct mgmt_ev_powered {
+	uint16_t index;
+	uint8_t powered;
+} __packed;
diff --git a/plugins/mgmtops.c b/plugins/mgmtops.c
index 05317b7..a7117fa 100644
--- a/plugins/mgmtops.c
+++ b/plugins/mgmtops.c
@@ -171,6 +171,28 @@
 	remove_controller(index);
 }
 
+static void mgmt_powered(int sk, void *buf, size_t len)
+{
+	struct mgmt_ev_powered *ev = buf;
+	uint16_t index;
+
+	if (len < sizeof(*ev)) {
+		error("Too small powered event");
+		return;
+	}
+
+	index = btohs(bt_get_unaligned(&ev->index));
+
+	if (index > max_index) {
+		DBG("Ignoring powered event for unknown controller %u", index);
+		return;
+	}
+
+	controllers[index].enabled = ev->powered;
+
+	DBG("Controller %u powered %s", index, ev->powered ? "on" : "off");
+}
+
 static void read_index_list_complete(int sk, void *buf, size_t len)
 {
 	struct mgmt_rp_read_index_list *rp = buf;
@@ -364,6 +386,9 @@
 	case MGMT_EV_INDEX_REMOVED:
 		mgmt_index_removed(sk, buf + MGMT_HDR_SIZE, len);
 		break;
+	case MGMT_EV_POWERED:
+		mgmt_powered(sk, buf + MGMT_HDR_SIZE, len);
+		break;
 	default:
 		error("Unknown Management opcode %u", opcode);
 		break;