Index: tools/usb_gadget/server.py |
diff --git a/tools/usb_gadget/server.py b/tools/usb_gadget/server.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f9ccd9b372d7e7bc168a4dc19469bc1ef45b6e6c |
--- /dev/null |
+++ b/tools/usb_gadget/server.py |
@@ -0,0 +1,79 @@ |
+# Copyright 2014 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""WSGI application to manage a USB gadget. |
+""" |
+ |
+from tornado import httpserver |
+from tornado import web |
+ |
+import default_gadget |
+ |
+address = None |
+chip = None |
+claimed_by = None |
+default = default_gadget.DefaultGadget() |
+gadget = None |
+ |
+ |
+def SwitchGadget(new_gadget): |
+ if chip.IsConfigured(): |
+ chip.Destroy() |
+ |
+ global gadget |
+ gadget = new_gadget |
+ gadget.AddStringDescriptor(3, address) |
+ chip.Create(gadget) |
+ |
+ |
+class ClaimHandler(web.RequestHandler): |
+ |
+ def post(self): |
+ global claimed_by |
+ |
+ if claimed_by is None: |
+ claimed_by = self.get_argument('session_id') |
+ else: |
+ self.write('Device is already claimed by "{}".'.format(claimed_by)) |
+ self.set_status(403) |
+ |
+ |
+class UnclaimHandler(web.RequestHandler): |
+ |
+ def post(self): |
+ global claimed_by |
+ claimed_by = None |
+ if gadget != default: |
+ SwitchGadget(default) |
+ |
+ |
+class UnconfigureHandler(web.RequestHandler): |
+ |
+ def post(self): |
+ SwitchGadget(default) |
+ |
+ |
+class DisconnectHandler(web.RequestHandler): |
+ |
+ def post(self): |
+ if chip.IsConfigured(): |
+ chip.Destroy() |
+ |
+ |
+class ReconnectHandler(web.RequestHandler): |
+ |
+ def post(self): |
+ if not chip.IsConfigured(): |
+ chip.Create(gadget) |
+ |
+ |
+app = web.Application([ |
+ (r'/claim', ClaimHandler), |
+ (r'/unclaim', UnclaimHandler), |
+ (r'/unconfigure', UnconfigureHandler), |
+ (r'/disconnect', DisconnectHandler), |
+ (r'/reconnect', ReconnectHandler), |
+]) |
+ |
+http_server = httpserver.HTTPServer(app) |