1081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;;; android-host.el --- Module to use host binaries from an Android dev tree. 2081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; 3081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; Copyright (C) 2009 The Android Open Source Project 4081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; 5081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; Licensed under the Apache License, Version 2.0 (the "License"); 6081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; you may not use this file except in compliance with the License. 7081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; You may obtain a copy of the License at 8081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; 9081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; http://www.apache.org/licenses/LICENSE-2.0 10081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; 11081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; Unless required by applicable law or agreed to in writing, software 12081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; distributed under the License is distributed on an "AS IS" BASIS, 13081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; See the License for the specific language governing permissions and 15081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; limitations under the License. 16081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania 17081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;;; Commentary: 18081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; 19081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; This module defines interactive functions to send the most common 20081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; commands to a device. 21081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; 22081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; Currently only one device is supported. 23081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; 24081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; In your .emacs load this file (e.g (require 'android-host)) then 25081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; you can either create new shortcuts e.g: 26081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; 27081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; (global-set-key [f8] 'android-adb-sync) 28081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; 29081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; or rely on autocompletion M-x and-sync will expand to 30081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; M-x android-adb-sync 31081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; 32081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; By default the following key bindings are active: 33081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; C-x a a android-adb-root 34081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; C-x a r android-adb-remount 35081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; C-x a s android-adb-sync 36081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; C-x a b android-adb-shell-reboot-bootloader 37081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; C-x a f android-fastboot-flashall 38081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; 39081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;; android-fastboot-flashall is still work in progress, check the 402022dcd9f1d3b524eb9d7c5bcb3050285bcbd9feNicolas Catania;; associated buffer (*Android Output*) for errors when you use it. 41081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania 42081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;;; Code: 43081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania 44081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania(require 'android-common) 45081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania 46081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania(defvar android-host-command-map (make-sparse-keymap)) 47081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania 48081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania(defun android-host-key-prefix-set (var val) 49081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania "Bind the keys shortcuts to the functions.i" 50081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania ;; TODO: This should go in a minor mode keymap instead of 51081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania ;; messing with the global one. 52081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (define-key global-map (read-kbd-macro val) android-host-command-map) 53081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (custom-set-default var val)) 54081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania 55081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania(let ((map android-host-command-map)) 56081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (define-key map (kbd "a") 'android-adb-root) 57081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (define-key map (kbd "r") 'android-adb-remount) 58081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (define-key map (kbd "s") 'android-adb-sync) 59081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (define-key map (kbd "b") 'android-adb-shell-reboot-bootloader) 60081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (define-key map (kbd "f") 'android-fastboot-flashall)) 61081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania 62081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania(defcustom android-host-key-prefix "C-x a" 63081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania "Prefix keystrokes for Android commands." 64081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania :group 'android 65081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania :type 'string 66081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania :set 'android-host-key-prefix-set) 67081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania 68081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania(defun android-adb-remount () 69081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania "Execute 'adb remount'." 70081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (interactive) 71081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (android-adb-command "remount")) 72081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania 73081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania(defun android-adb-root () 74081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania "Execute 'adb root'." 75081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (interactive) 76081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (android-adb-command "root")) 77081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania 78081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania(defun android-adb-shell-reboot-bootloader () 79081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania "Execute 'adb shell reboot bootloader'." 80081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (interactive) 81081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (android-adb-shell-command "reboot bootloader")) 82081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania 83081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania(defun android-adb-sync () 84081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania "Execute 'adb sync'." 85081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (interactive) 862997ec39a2a646340f6ca04ab2027aeb286563f9Nicolas Catania ;; Always force root and remount, this way sync always works even on 872997ec39a2a646340f6ca04ab2027aeb286563f9Nicolas Catania ;; a device that has just rebooted or that runs a userdebug build. 882997ec39a2a646340f6ca04ab2027aeb286563f9Nicolas Catania (android-adb-root) 892997ec39a2a646340f6ca04ab2027aeb286563f9Nicolas Catania (android-adb-remount) 90081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (android-adb-command "sync" 'p)) 91081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania 92081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania(defun android-fastboot-sentinel (process event) 93081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania "Called when the fastboot process is done." 94081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania ;; TODO: Should barf if the last lines are not: 95081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania ;; OKAY 96081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania ;; rebooting... 97081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (princ 98081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (format "Process: %s had the event `%s'" process event))) 99081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania 100081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania(defun android-fastboot-flashall (arg) 101081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania "Execute 'fastboot -p <product> flashall'. 102081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania 103081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas CataniaWith no ARG, don't wipe the user data. 104081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas CataniaWith ARG, wipe the user data." 105081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (interactive "P") 1062022dcd9f1d3b524eb9d7c5bcb3050285bcbd9feNicolas Catania (when (get-buffer android-output-buffer-name) 1072022dcd9f1d3b524eb9d7c5bcb3050285bcbd9feNicolas Catania (with-current-buffer android-output-buffer-name 1082022dcd9f1d3b524eb9d7c5bcb3050285bcbd9feNicolas Catania (erase-buffer))) 109081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (let ((proc 110081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (if arg 111081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (start-process-shell-command 1122022dcd9f1d3b524eb9d7c5bcb3050285bcbd9feNicolas Catania "fastboot" 1132022dcd9f1d3b524eb9d7c5bcb3050285bcbd9feNicolas Catania android-output-buffer-name 1142022dcd9f1d3b524eb9d7c5bcb3050285bcbd9feNicolas Catania (concat (android-fastboot) " flashall -w")) 115081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (start-process-shell-command 1162022dcd9f1d3b524eb9d7c5bcb3050285bcbd9feNicolas Catania "fastboot" android-output-buffer-name 1172022dcd9f1d3b524eb9d7c5bcb3050285bcbd9feNicolas Catania (concat (android-fastboot) " flashall"))))) 118081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania (set-process-sentinel proc 'android-fastboot-sentinel))) 119081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania 120081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania 121081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania(provide 'android-host) 122081e65d06f722a4a9d6bb22e445da7f3dc15820dNicolas Catania;;; android-host.el ends here 123