2018-07-08 03:22:39 +03:00
|
|
|
{ config, lib, pkgs, ... }:
|
|
|
|
|
|
|
|
with lib;
|
|
|
|
with import ./initrd-order.nix;
|
|
|
|
|
|
|
|
let
|
|
|
|
cfg = config.mobile.boot.stage-1;
|
|
|
|
in
|
|
|
|
{
|
|
|
|
# FIXME Generic USB gadget support to come.
|
|
|
|
options.mobile.boot.stage-1.usb = {
|
|
|
|
enable = mkOption {
|
|
|
|
type = types.bool;
|
|
|
|
default = true;
|
|
|
|
description = ''
|
|
|
|
Enables USB features.
|
|
|
|
For now, only Android-based devices are supported.
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
features = mkOption {
|
|
|
|
type = types.listOf types.string;
|
|
|
|
default = [];
|
|
|
|
description = ''
|
|
|
|
`android_usb` features to enable.
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
adbd = mkOption {
|
|
|
|
type = types.bool;
|
|
|
|
default = true;
|
|
|
|
description = ''
|
|
|
|
Enables adbd on the device.
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
config.mobile.boot.stage-1 = lib.mkIf cfg.usb.enable {
|
|
|
|
usb.features = []
|
|
|
|
++ optional cfg.networking.enable "rndis"
|
|
|
|
++ optional cfg.usb.adbd "adb"
|
|
|
|
;
|
|
|
|
# TODO: Only run, when we have the android usb driver
|
|
|
|
init = lib.mkOrder AFTER_DEVICE_INIT ''
|
|
|
|
# Setting up Android-specific USB.
|
2018-07-11 21:44:39 +03:00
|
|
|
(
|
2018-07-08 03:22:39 +03:00
|
|
|
SYS=/sys/class/android_usb/android0
|
2018-07-11 21:44:39 +03:00
|
|
|
if [ -e "$SYS" ]; then
|
2018-11-06 06:50:08 +03:00
|
|
|
mkdir /dev/usb-ffs/adb
|
|
|
|
mount -t functionfs adb /dev/usb-ffs/adb/
|
2018-07-11 21:44:39 +03:00
|
|
|
printf "%s" "0" > "$SYS/enable"
|
|
|
|
printf "%s" "18D1" > "$SYS/idVendor"
|
|
|
|
printf "%s" "D001" > "$SYS/idProduct"
|
2018-11-06 06:50:08 +03:00
|
|
|
printf "%s" "0" > "$SYS/bDeviceClass"
|
|
|
|
#printf "%s" "adb" > "$SYS/f_ffs/aliases"
|
|
|
|
#printf "%s" "${concatStringsSep "," cfg.usb.features}" > "$SYS/functions"
|
|
|
|
printf "%s" "rndis,adb" > "$SYS/functions"
|
|
|
|
printf "%s" "FIXME" > "$SYS/iManufacturer"
|
|
|
|
printf "%s" "FIXME" > "$SYS/iProduct"
|
|
|
|
printf "%s" "FIXME" > "$SYS/iSerial"
|
2018-07-11 21:44:39 +03:00
|
|
|
sleep 0.5
|
|
|
|
printf "%s" "1" > "$SYS/enable"
|
|
|
|
sleep 1
|
2018-07-08 03:22:39 +03:00
|
|
|
|
2018-07-11 21:44:39 +03:00
|
|
|
${optionalString cfg.usb.adbd "adbd &\n"}
|
|
|
|
fi
|
|
|
|
)
|
2018-07-08 03:22:39 +03:00
|
|
|
'';
|
|
|
|
extraUtils = with pkgs; []
|
|
|
|
++ optional cfg.usb.adbd { package = adbd; extraCommand = "cp -fpv ${glibc.out}/lib/libnss_files.so.* $out/lib"; }
|
|
|
|
;
|
|
|
|
};
|
|
|
|
}
|