Compare commits
356 Commits
FunKey-OS-
...
master
Author | SHA1 | Date |
---|---|---|
Michel-FK | d50676f1ca | |
Vincent-FK | bfd37970b2 | |
Michel-FK | dbddad6f77 | |
Michel-FK | 5cdcd6ab80 | |
Vincent-FK | 7507bdd845 | |
Vincent-FK | 7a15dcc3ef | |
Vincent-FK | 208303ed0b | |
Vincent-FK | f7d1bfb43b | |
Vincent-FK | 34241ca5d5 | |
Vincent-FK | 7038bdbbb9 | |
Vincent-FK | f60111fa45 | |
Vincent-FK | 977a7f48db | |
Michel-FK | 2155537e62 | |
Michel-FK | 04570f0499 | |
Michel-FK | 29f5f5b3f3 | |
Vincent-FK | 0f174bd18e | |
Vincent-FK | 2ae4604084 | |
Vincent-FK | 5cd95016d9 | |
Vincent-FK | 305aa2ba83 | |
Vincent-FK | b10b3ccb48 | |
Vincent-FK | 0b5a4a30db | |
Vincent-FK | 8cd07a9898 | |
Vincent-FK | b56b9009f9 | |
Vincent-FK | 7dae96d0bf | |
Vincent-FK | d7707c4aae | |
Vincent-FK | 21fe588593 | |
Michel-FK | ff83118833 | |
Vincent-FK | bfed99494e | |
Michel-FK | b2847c1cd4 | |
Michel-FK | bc35b7e59c | |
Michel-FK | 50d83ed555 | |
Michel-FK | 8ba4b07964 | |
Michel-FK | 67ee9f1520 | |
Michel-FK | 1d7ccfd67d | |
Michel-FK | 7d80bc7eed | |
Michel-FK | cefbb581ee | |
Michel-FK | 6a43bca1e6 | |
Michel-FK | 4b519d9911 | |
Michel-FK | 8c3bdba798 | |
Michel-FK | 547c1fe5b9 | |
Michel-FK | ffa35c0983 | |
Michel-FK | f9d5f09520 | |
Michel-FK | 961e7dbf24 | |
Michel-FK | ee49693543 | |
Michel-FK | 0d19c7a7f1 | |
Michel-FK | 52cf2a0f5d | |
Michel-FK | d6ba530bf1 | |
Michel-FK | 6e008cc539 | |
Michel-FK | d5175b091c | |
Michel-FK | 83519eeedb | |
Michel-FK | 50d8df9895 | |
Michel-FK | 2d764e398a | |
Michel-FK | ffa1595cd3 | |
Michel-FK | c8593fac19 | |
Michel-FK | 1e709b5553 | |
Michel-FK | fff025d51a | |
Michel-FK | 240b8fea15 | |
Vincent-FK | 484d4e6905 | |
Michel-FK | d36b044b51 | |
Michel-FK | 44708bfbd3 | |
Vincent-FK | fd35689bdf | |
Michel-FK | 7155485b41 | |
Michel-FK | afa336a963 | |
Vincent-FK | c7b8895d5e | |
Vincent-FK | af75789294 | |
Michel-FK | de57db21fd | |
Vincent-FK | 52d20491c4 | |
Michel-FK | ab7e5ae158 | |
Michel-FK | 8532918f00 | |
Vincent-FK | 13201b7f69 | |
Vincent-FK | 7408d35142 | |
Vincent-FK | 7976bcc7c1 | |
Vincent-FK | 4909b67d29 | |
Michel-FK | b291b0f2b4 | |
Michel-FK | 1e1c164aaf | |
Vincent-FK | 805f709542 | |
Michel-FK | 750d9e8455 | |
Vincent-FK | 1daa9fc386 | |
Michel-FK | bc8f05ea52 | |
Michel-FK | 7a6ecc55f6 | |
Michel-FK | 0b2342ad9d | |
Michel-FK | 6b05f7b8e6 | |
Michel-FK | 7f5cf7c430 | |
Michel-FK | 3f3a1ad794 | |
Michel-FK | 320c699689 | |
Michel-FK | e6d932c8c7 | |
Vincent-FK | a8e063874f | |
Michel-FK | 853d7e3096 | |
Vincent-FK | dfc375ee33 | |
Michel-FK | 81dfe214d4 | |
Michel-FK | 9a61dd6500 | |
Michel-FK | 0b48940dc3 | |
Michel-FK | 226d623cf5 | |
Michel-FK | 14452674e7 | |
Michel-FK | ab65bc508e | |
Michel-FK | 9309849d41 | |
Michel-FK | 8164185024 | |
Michel-FK | 0a9e3d8ffe | |
Vincent-FK | fc7b0f49e6 | |
Vincent-FK | 583715ca18 | |
Vincent-FK | f689129516 | |
Vincent-FK | 5c9bb0470e | |
Vincent-FK | 65c9057265 | |
Vincent-FK | a94d77dc39 | |
Vincent-FK | 81d2ddd95e | |
Vincent-FK | 59cc6faf55 | |
Vincent-FK | 7ca2dd67fa | |
Michel-FK | 097e961b22 | |
Michel-FK | 45343de238 | |
Vincent-FK | dc654d9e65 | |
Michel-FK | d2e65cd657 | |
Michel-FK | 0434095392 | |
Michel-FK | b3bde9a4db | |
Michel-FK | 0e4fd2b01a | |
Michel-FK | 4fff8cdb5b | |
Michel-FK | 2ee0987dd3 | |
Michel-FK | d7563346b0 | |
Vincent-FK | 32d005f84e | |
Vincent-FK | 613b32137c | |
Vincent-FK | 462e886c71 | |
Vincent-FK | f56ac1ccb6 | |
Vincent-FK | 65a52717c8 | |
Vincent-FK | ca46745bc9 | |
Vincent-FK | bae44ebf27 | |
Vincent-FK | e079747a5c | |
Vincent-FK | 78c6514bf5 | |
Vincent-FK | 8a5fe96fc7 | |
Vincent-FK | 4e71aa1eca | |
Vincent-FK | d7a8d0c6ac | |
Vincent-FK | 03d65c70f2 | |
Michel-FK | bedcde05df | |
Vincent-FK | 2077caf06f | |
Michel-FK | 7c8ff8178f | |
Michel-FK | bd762a952e | |
Michel-FK | 800ff3b306 | |
Vincent-FK | 20983034d9 | |
Vincent-FK | 180c3ef440 | |
Michel-FK | f7dec069cd | |
Michel-FK | 4017482c63 | |
Vincent-FK | 3e4458901b | |
Michel-FK | e8fe02a086 | |
Michel-FK | 1862c4d21e | |
Vincent-FK | 7678fcab13 | |
Vincent-FK | b596ed1aea | |
Vincent-FK | d802c7a257 | |
Michel-FK | d472581e8c | |
Michel-FK | 429a66c73e | |
Vincent-FK | 7f418686bb | |
Michel-FK | 6aad3d29e8 | |
Vincent-FK | d4e9dbb360 | |
Vincent-FK | 17dd23cc6c | |
Vincent-FK | 98c64da4cd | |
Michel-FK | 51bb45c9c3 | |
Michel-FK | 252eba806b | |
Michel-FK | 902df88622 | |
Michel-FK | 041120fbbc | |
Michel-FK | 59b33c35d8 | |
Michel-FK | 4669209598 | |
Michel-FK | 110afa175c | |
Vincent-FK | f95a8303de | |
Michel-FK | aa1d880800 | |
Vincent-FK | afeaa5719c | |
Michel-FK | 6cdb1b67fa | |
Michel-FK | f150595176 | |
Vincent-FK | 8293770a3f | |
Michel-FK | 4e32b1fa1f | |
Michel-FK | fccc5410a1 | |
Michel-FK | 4f03f243eb | |
Michel-FK | f05e8aa1c0 | |
Michel-FK | 49ef2304d5 | |
Michel-FK | 32dd326342 | |
Vincent-FK | c1fd9e55d6 | |
Vincent-FK | 8a62ff605e | |
Vincent-FK | a77c5e67d9 | |
Vincent-FK | a0b6d3f8e8 | |
Vincent-FK | 4243dd85b6 | |
Vincent-FK | 9d5c1baeb8 | |
Michel-FK | 127b338d70 | |
Michel-FK | 61b1ec3d8d | |
Vincent-FK | 7c8666a5b3 | |
Vincent-FK | af69d8d030 | |
Vincent-FK | 55046aa82b | |
Vincent-FK | 7dc82e3635 | |
Vincent-FK | e07f2428b4 | |
Michel-FK | 9caf05fe1c | |
Michel-FK | 88ba4641cc | |
Michel-FK | 329cc0c055 | |
Michel-FK | c709ba0eff | |
Michel-FK | 7cc4acff1a | |
Vincent-FK | 8952620d72 | |
Vincent-FK | d4e3445736 | |
Vincent-FK | 504ff1b66a | |
Michel-FK | 04d118f951 | |
Michel-FK | 428b3198dc | |
Michel-FK | 866ee950c0 | |
Michel-FK | 58d32976ee | |
Michel-FK | c5d71641b1 | |
Michel-FK | 2e1990a653 | |
Michel-FK | 63bb57f1b8 | |
Michel-FK | 7f802e37a2 | |
Michel-FK | 71f4e7e919 | |
Michel-FK | 69ab9a706a | |
Vincent-FK | 005f2e92a4 | |
Vincent-FK | a514d86f45 | |
Michel-FK | d6dc05e4ba | |
Michel-FK | 83f6d93425 | |
Vincent-FK | 5d83b1d725 | |
Michel-FK | 4799bacb8a | |
Michel-FK | 2b723deb77 | |
Michel-FK | 1e6a9b73e9 | |
Michel-FK | 831ca59078 | |
Vincent-FK | 7b49da5733 | |
Michel-FK | ad559c2923 | |
Michel-FK | b043815b7e | |
Vincent-FK | 33b27f30ae | |
Michel-FK | 992d6a22dd | |
Michel-FK | 6d3211d352 | |
Vincent-FK | 0f5f1da248 | |
Michel-FK | 5384a4ee0a | |
Michel-FK | 440d6705a5 | |
Michel-FK | 0ebb4e16c3 | |
Michel-FK | 229a95771c | |
Vincent-FK | c0c5276fc9 | |
Michel-FK | a2962db41e | |
Michel-FK | f2f3a40412 | |
Vincent-FK | d61eea8905 | |
Michel-FK | 49a504881d | |
Michel-FK | d8dfb19352 | |
Vincent-FK | f3e6189351 | |
Michel-FK | a13f826567 | |
Michel-FK | 56fba206e2 | |
Michel-FK | f0bd6a1433 | |
Michel-FK | 68962d9e6e | |
Vincent-FK | fd302c369c | |
Michel-FK | 8e06c42a8f | |
Michel-FK | d3f8c11f8a | |
Michel-FK | 26cd7d558d | |
Vincent-FK | bc9b87f2e1 | |
Michel-FK | 7cb240543f | |
Michel-FK | 5bec48c5e0 | |
Michel-FK | a02b1a8237 | |
Michel-FK | 269c3f3567 | |
Michel-FK | e4ae1337a7 | |
Michel-FK | 003dbdec06 | |
Michel-FK | 1619db5e64 | |
Michel-FK | ca161be4d0 | |
Vincent-FK | d75f41e186 | |
Michel-FK | bb0f2b4302 | |
Michel-FK | 8e15b18a5c | |
Vincent-FK | 1372f14a0c | |
Michel-FK | cd420403be | |
Michel-FK | 195db3df69 | |
Michel-FK | a3ec6e56d6 | |
Michel-FK | 0c08cf93c6 | |
Michel-FK | 812fc1c689 | |
Michel-FK | b13207547e | |
Michel-FK | 87fa30bd52 | |
Michel-FK | e2be7d1156 | |
Michel-FK | 1ce74b8dca | |
Michel-FK | 134edcfc90 | |
Michel-FK | 6e9df57977 | |
Michel-FK | 53674684cc | |
Michel-FK | b2bc701995 | |
Michel-FK | 77220c7041 | |
Vincent-FK | 563d2cce28 | |
Michel-FK | a2c15a84e9 | |
Michel-FK | a62f5c1c08 | |
Michel-FK | 693e7266cb | |
Michel-FK | 7cff145ddf | |
Michel-FK | 3ec1810907 | |
Michel-FK | a8a53935b1 | |
Vincent-FK | 965cde9142 | |
Michel-FK | dd9a96b777 | |
Vincent-FK | b50de3f689 | |
Michel-FK | 124ec1ffad | |
Vincent-FK | 9c5b7e5847 | |
Michel-FK | 3efcd72086 | |
Michel-FK | fe94c8854f | |
Michel-FK | 9d371bdcc1 | |
Michel-FK | 3fb448651c | |
Michel-FK | 3152ffdd70 | |
Michel-FK | 7df1959bd2 | |
Michel-FK | aea9ff5548 | |
Michel-FK | a2fd0cf6f4 | |
Vincent-FK | b4bc8aedbb | |
Michel-FK | 777f1f8051 | |
Michel-FK | 92b16b9883 | |
Vincent-FK | 360b2fe986 | |
Michel-FK | d72bfae27f | |
Michel-FK | 422e7a5e3a | |
Michel-FK | 39cd04aa15 | |
Michel-FK | 236df1d44d | |
Michel-FK | 449acd45f8 | |
Michel-FK | a23339e36e | |
Michel-FK | 358fe33b26 | |
Michel-FK | c8f0ce97a8 | |
Michel-FK | 19348a2640 | |
Michel-FK | 347bbf3ee9 | |
Michel-FK | f6f2293fc3 | |
Michel-FK | 5a3fd024dc | |
Michel-FK | 9c694e7d25 | |
Michel-FK | 5c68473704 | |
Vincent-FK | f458b797c3 | |
Michel-FK | 7f9b4894c8 | |
Michel-FK | 5fad29cb14 | |
Michel-FK | aa4f88b9d8 | |
Michel-FK | 3b59cf4a74 | |
Michel-FK | 5e17d55017 | |
Michel-FK | 73394dc3d3 | |
Vincent-FK | 86dfe25eb9 | |
Michel-FK | 59929c47e4 | |
Vincent-FK | e44d07ac08 | |
Michel-FK | e1f868f5e9 | |
Michel-FK | b0979156cf | |
Michel-FK | 952086f635 | |
Michel-FK | 133f2a479e | |
Michel-FK | 75f58ae1da | |
Michel-FK | 91953c3c61 | |
Michel-FK | 9a26b58cf5 | |
Michel-FK | b43ad98065 | |
Michel-FK | 514b73cdf0 | |
Michel-FK | 4cdd246fac | |
Vincent-FK | f9e898f043 | |
Vincent-FK | 86b0f44728 | |
Michel-FK | 342457cf01 | |
Vincent-FK | 991f4f8fa5 | |
Michel-FK | 7cf0a58588 | |
Michel-FK | d82ceb8c40 | |
Michel-FK | 23901cc01b | |
Michel-FK | 7a08337282 | |
Michel-FK | c2604aec3d | |
Michel-FK | 52d4ef46fc | |
Michel-FK | c6f69b98c8 | |
Michel-FK | 5e7dcec348 | |
Michel-FK | 43c372fe9c | |
Michel-FK | 1d5a5cd50c | |
Michel-FK | 5c4ad6f278 | |
Michel-FK | f91b499ece | |
Michel-FK | bec57da3a3 | |
Michel-FK | 04a7eb19a3 | |
Vincent-FK | e4ac7ac148 | |
Vincent-FK | 9d21d6821d | |
Michel-FK | 76e8110779 | |
Vincent-FK | 520507231e | |
Michel-FK | 64fd9b198b | |
Michel-FK | c8e679f912 | |
Vincent-FK | 8f23d2d74f | |
Michel-FK | 94916cba31 | |
Vincent-FK | 32303fbd50 | |
Michel-FK | bbddf7004a | |
Vincent-FK | 60f18fa15a | |
Vincent-FK | f34d1d107e | |
Michel-FK | 707d8f5b8e | |
Michel-FK | 9e45468ce1 | |
Michel-FK | d4dc552bf8 | |
Michel-FK | f6d4b3f7b3 |
|
@ -24,6 +24,8 @@ jobs:
|
|||
sudo rm -rf /var/lib/apt/lists/*
|
||||
sudo sed -i 's/# \(en_US.UTF-8\)/\1/' /etc/locale.gen
|
||||
sudo locale-gen --purge --lang en_US.UTF-8
|
||||
- name: Build SDK
|
||||
run: make sdk
|
||||
- name: Build FunKey-OS
|
||||
run: make
|
||||
- uses: actions/upload-artifact@v2
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
name: FunKey SDK Build
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
branches: [ master ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-20.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y -q --no-install-recommends make binutils build-essential gcc g++ patch bzip2 perl cpio unzip rsync file bc wget python python-dev xxd libncurses5-dev cvs git mercurial rsync liblscp-dev subversion python3 python3-dev python3-distutils python3-setuptools ca-certificates openssh-client expect locales sudo procps
|
||||
sudo apt-get -y autoremove
|
||||
sudo apt-get -y clean
|
||||
sudo rm -rf /var/lib/apt/lists/*
|
||||
sudo sed -i 's/# \(en_US.UTF-8\)/\1/' /etc/locale.gen
|
||||
sudo locale-gen --purge --lang en_US.UTF-8
|
||||
- name: Build SDK
|
||||
run: make sdk
|
||||
- uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Upload artifacts
|
||||
path: |
|
||||
images/*
|
||||
br.log
|
|
@ -1,3 +1,3 @@
|
|||
[submodule "buildroot"]
|
||||
path = buildroot
|
||||
url = git://git.buildroot.net/buildroot
|
||||
url = https://github.com/FunKey-Project/buildroot.git
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/mednafen/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/FunKey-GPIO-Mapping/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/fkgpiod/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/retrofe/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/PCSX-ReARMed/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/FCEUX/Config.in"
|
||||
|
@ -9,3 +9,13 @@ source "$BR2_EXTERNAL_FUNKEY_PATH/package/PocketSNES/Config.in"
|
|||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/gpsp/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/dmtx-utils/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/ProdScreens/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/fonts-droid/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/libini/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/libopk/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/libxdgmime/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/gmenu2x/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/agg/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/fluidlite/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/libmikmod/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/commander/Config.in"
|
||||
source "$BR2_EXTERNAL_FUNKEY_PATH/package/bibi/Config.in"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Busybox version: 1.31.1
|
||||
# Mon Nov 9 00:34:05 2020
|
||||
# Busybox version: 1.32.0
|
||||
# Tue Apr 6 08:18:28 2021
|
||||
#
|
||||
CONFIG_HAVE_DOT_CONFIG=y
|
||||
|
||||
|
@ -76,6 +76,7 @@ CONFIG_PREFIX="./_install"
|
|||
# CONFIG_DEBUG_SANITIZE is not set
|
||||
# CONFIG_UNIT_TEST is not set
|
||||
# CONFIG_WERROR is not set
|
||||
# CONFIG_WARN_SIMPLE_MSG is not set
|
||||
CONFIG_NO_DEBUG_LIB=y
|
||||
# CONFIG_DMALLOC is not set
|
||||
# CONFIG_EFENCE is not set
|
||||
|
@ -462,6 +463,7 @@ CONFIG_FEATURE_FIND_SIZE=y
|
|||
CONFIG_FEATURE_FIND_PRUNE=y
|
||||
CONFIG_FEATURE_FIND_QUIT=y
|
||||
# CONFIG_FEATURE_FIND_DELETE is not set
|
||||
CONFIG_FEATURE_FIND_EMPTY=y
|
||||
CONFIG_FEATURE_FIND_PATH=y
|
||||
CONFIG_FEATURE_FIND_REGEX=y
|
||||
# CONFIG_FEATURE_FIND_CONTEXT is not set
|
||||
|
@ -692,6 +694,7 @@ CONFIG_FEATURE_SETPRIV_CAPABILITY_NAMES=y
|
|||
CONFIG_SWITCH_ROOT=y
|
||||
# CONFIG_TASKSET is not set
|
||||
# CONFIG_FEATURE_TASKSET_FANCY is not set
|
||||
# CONFIG_FEATURE_TASKSET_CPULIST is not set
|
||||
CONFIG_UEVENT=y
|
||||
CONFIG_UMOUNT=y
|
||||
CONFIG_FEATURE_UMOUNT_ALL=y
|
||||
|
@ -805,6 +808,7 @@ CONFIG_MAKEDEVS=y
|
|||
CONFIG_FEATURE_MAKEDEVS_TABLE=y
|
||||
# CONFIG_MAN is not set
|
||||
CONFIG_MICROCOM=y
|
||||
CONFIG_MIM=y
|
||||
CONFIG_MT=y
|
||||
# CONFIG_NANDWRITE is not set
|
||||
# CONFIG_NANDDUMP is not set
|
||||
|
@ -1095,6 +1099,7 @@ CONFIG_SH_IS_ASH=y
|
|||
# CONFIG_BASH_IS_ASH is not set
|
||||
# CONFIG_BASH_IS_HUSH is not set
|
||||
CONFIG_BASH_IS_NONE=y
|
||||
CONFIG_SHELL_ASH=y
|
||||
CONFIG_ASH=y
|
||||
CONFIG_ASH_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_ASH_INTERNAL_GLOB=y
|
||||
|
@ -1115,6 +1120,7 @@ CONFIG_ASH_GETOPTS=y
|
|||
CONFIG_ASH_CMDCMD=y
|
||||
# CONFIG_CTTYHACK is not set
|
||||
# CONFIG_HUSH is not set
|
||||
# CONFIG_SHELL_HUSH is not set
|
||||
# CONFIG_HUSH_BASH_COMPAT is not set
|
||||
# CONFIG_HUSH_BRACE_EXPANSION is not set
|
||||
# CONFIG_HUSH_LINENO_VAR is not set
|
||||
|
@ -1177,6 +1183,7 @@ CONFIG_FEATURE_ROTATE_LOGFILE=y
|
|||
CONFIG_FEATURE_REMOTE_LOG=y
|
||||
# CONFIG_FEATURE_SYSLOGD_DUP is not set
|
||||
# CONFIG_FEATURE_SYSLOGD_CFG is not set
|
||||
# CONFIG_FEATURE_SYSLOGD_PRECISE_TIMESTAMPS is not set
|
||||
CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256
|
||||
# CONFIG_FEATURE_IPC_SYSLOG is not set
|
||||
CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0
|
||||
|
|
|
@ -25,6 +25,7 @@ CONFIG_CPU_FREQ=y
|
|||
CONFIG_CPUFREQ_DT=y
|
||||
CONFIG_VFP=y
|
||||
CONFIG_NEON=y
|
||||
CONFIG_KERNEL_MODE_NEON=y
|
||||
# CONFIG_COREDUMP is not set
|
||||
CONFIG_HIBERNATION=y
|
||||
CONFIG_PM_STD_PARTITION="/dev/mmcblk0p2"
|
||||
|
@ -119,6 +120,9 @@ CONFIG_USB_ZERO=m
|
|||
CONFIG_USB_ETH=m
|
||||
CONFIG_USB_ETH_EEM=y
|
||||
CONFIG_USB_G_NCM=m
|
||||
CONFIG_USB_FUNCTIONFS=m
|
||||
CONFIG_USB_FUNCTIONFS_ETH=y
|
||||
CONFIG_USB_FUNCTIONFS_RNDIS=y
|
||||
CONFIG_USB_MASS_STORAGE=m
|
||||
CONFIG_USB_G_SERIAL=m
|
||||
CONFIG_USB_G_ACM_MS=m
|
||||
|
@ -152,7 +156,7 @@ CONFIG_AUTOFS4_FS=y
|
|||
CONFIG_VFAT_FS=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_CONFIGFS_FS=y
|
||||
# CONFIG_MISC_FILESYSTEMS is not set
|
||||
CONFIG_SQUASHFS=y
|
||||
# CONFIG_NETWORK_FILESYSTEMS is not set
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,26 @@
|
|||
Merge this bug as it can affect performance :
|
||||
https://github.com/OpenDingux/SDL/commit/e51100dce8da9099278dac9f5affbecf6396378b
|
||||
|
||||
--- a/src/audio/alsa/SDL_alsa_audio.c
|
||||
+++ b/src/audio/alsa/SDL_alsa_audio.c
|
||||
@@ -479,6 +479,10 @@
|
||||
return(-1);
|
||||
}
|
||||
|
||||
+ /* Switch to blocking mode for playback */
|
||||
+ /* Note: this must happen before hw/sw params are set. */
|
||||
+ SDL_NAME(snd_pcm_nonblock)(pcm_handle, 0);
|
||||
+
|
||||
/* Figure out what the hardware is capable of */
|
||||
snd_pcm_hw_params_alloca(&hwparams);
|
||||
status = SDL_NAME(snd_pcm_hw_params_any)(pcm_handle, hwparams);
|
||||
@@ -611,9 +615,6 @@
|
||||
}
|
||||
SDL_memset(mixbuf, spec->silence, spec->size);
|
||||
|
||||
- /* Switch to blocking mode for playback */
|
||||
- SDL_NAME(snd_pcm_nonblock)(pcm_handle, 0);
|
||||
-
|
||||
/* We're ready to rock and roll. :-) */
|
||||
return(0);
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
diff --git a/src/video/fbcon/SDL_fbevents.c b/src/video/fbcon/SDL_fbevents.c
|
||||
index 5e369a4..549a7ad 100644
|
||||
--- a/src/video/fbcon/SDL_fbevents.c
|
||||
+++ b/src/video/fbcon/SDL_fbevents.c
|
||||
@@ -270,17 +270,6 @@ int FB_OpenKeyboard(_THIS)
|
||||
fprintf(stderr, "vtpath = %s, fd = %d\n",
|
||||
vtpath, keyboard_fd);
|
||||
#endif /* DEBUG_KEYBOARD */
|
||||
-
|
||||
- /* This needs to be our controlling tty
|
||||
- so that the kernel ioctl() calls work
|
||||
- */
|
||||
- if ( keyboard_fd >= 0 ) {
|
||||
- tty0_fd = open("/dev/tty", O_RDWR, 0);
|
||||
- if ( tty0_fd >= 0 ) {
|
||||
- ioctl(tty0_fd, TIOCNOTTY, 0);
|
||||
- close(tty0_fd);
|
||||
- }
|
||||
- }
|
||||
}
|
||||
}
|
||||
if ( keyboard_fd < 0 ) {
|
|
@ -0,0 +1,15 @@
|
|||
pcm.monocard{
|
||||
slave.pcm "hw:0"
|
||||
slave.channels 2
|
||||
type route
|
||||
ttable {
|
||||
# Copy both input channels to output channel 1 (Right).
|
||||
0.1 1
|
||||
1.1 1
|
||||
# Send nothing to output channel 0 (Left).
|
||||
0.0 0
|
||||
1.0 0
|
||||
}
|
||||
}
|
||||
|
||||
pcm.!default monocard
|
|
@ -0,0 +1,25 @@
|
|||
CLEAR
|
||||
MAP FN TO KEY KEY_K
|
||||
MAP START TO KEY KEY_S
|
||||
MAP UP TO KEY KEY_U
|
||||
MAP LEFT TO KEY KEY_L
|
||||
MAP FN+LEFT TO KEY KEY_J
|
||||
MAP DOWN TO KEY KEY_D
|
||||
MAP FN+DOWN TO KEY KEY_H
|
||||
MAP RIGHT TO KEY KEY_R
|
||||
MAP FN+RIGHT TO KEY KEY_I
|
||||
MAP R TO KEY KEY_N
|
||||
MAP L TO KEY KEY_M
|
||||
MAP A TO KEY KEY_A
|
||||
MAP B TO KEY KEY_B
|
||||
MAP X TO KEY KEY_X
|
||||
MAP Y TO KEY KEY_Y
|
||||
MAP MENU TO KEY KEY_Q
|
||||
MAP FN+UP TO COMMAND snapshot
|
||||
MAP FN+A TO COMMAND volume up
|
||||
MAP FN+Y TO COMMAND volume down
|
||||
MAP FN+X TO COMMAND brightness up
|
||||
MAP FN+B TO COMMAND brightness down
|
||||
MAP FN+L TO KEY KEY_V
|
||||
MAP FN+R TO KEY KEY_O
|
||||
MAP FN+L+R TO COMMAND system_stats toggle
|
|
@ -8,4 +8,4 @@ tmpfs /run tmpfs mode=0755,nosuid,nodev 0 0
|
|||
sysfs /sys sysfs defaults 0 0
|
||||
/dev/mmcblk0p3 none swap sw 0 0
|
||||
configfs /sys/kernel/config configfs rw,relatime 0 0
|
||||
/dev/mmcblk0p4 /mnt vfat rw,relatime,fmask=0022,dmask=0022,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0
|
||||
/dev/mmcblk0p4 /mnt vfat rw,relatime,fmask=0022,dmask=0022,iocharset=iso8859-1,shortname=mixed 0 0
|
||||
|
|
|
@ -1,66 +0,0 @@
|
|||
##################################
|
||||
# Funkey GPIO keymap config file #
|
||||
##################################
|
||||
# Format:
|
||||
#
|
||||
# - First all GPIO Pin numbers must be declared (integers separated by commas)
|
||||
# By default, pins are declared active high, to declare them active low, add char '*'
|
||||
# Example: 0,1,2,3,4,6,7,10*,11,12,13,14,15
|
||||
#
|
||||
# - Then the mapping can be done as follows (one line per mapping):
|
||||
# Pin_number[+Pin_number...], type_mapping, value, str_help_name_pin, str_help_fct_pin
|
||||
#
|
||||
# args: * Pin_number is the pin number concerned by the maping,
|
||||
# add +Pin_number for multiple touch mapping (not limited in nb of pins)
|
||||
# * type_mapping can be KEYBOARD or SHELL_COMMAND
|
||||
# * value is :
|
||||
# if type_mapping==KEYBOARD: the keycode from /usr/include/linux/input.h]
|
||||
# if type_mapping==SHELL_COMMAND: the shell command to exec
|
||||
# * str_help_name_pin is a sweet name for the pin (ex: PB5)
|
||||
# * str_help_fct_pin is an help str to indicate the function of this mapping
|
||||
|
||||
|
||||
|
||||
###################################
|
||||
# Pins declaration:
|
||||
0,1,2,3,4,6,7,10*,11,12,13,14,15
|
||||
|
||||
|
||||
###################################
|
||||
# Mapping:
|
||||
#7, KEYBOARD, KEY_F, KEY_F, Fn
|
||||
#7+6, KEYBOARD, KEY_K, KEY_K, Select
|
||||
7, KEYBOARD, KEY_K, KEY_K, Select
|
||||
6, KEYBOARD, KEY_S, KEY_S, Start
|
||||
3, KEYBOARD, KEY_U, KEY_U, Up
|
||||
7+3, KEYBOARD, KEY_P, KEY_P, Quick Save
|
||||
4, KEYBOARD, KEY_L, KEY_L, Left
|
||||
7+4, KEYBOARD, KEY_J, KEY_J, Aspect ratio factor --
|
||||
1, KEYBOARD, KEY_D, KEY_D, Down
|
||||
7+1, KEYBOARD, KEY_H, KEY_H, Aspect ratio mode change
|
||||
0, KEYBOARD, KEY_R, KEY_R, Right
|
||||
7+0, KEYBOARD, KEY_I, KEY_I, Aspect ratio factor ++
|
||||
15, KEYBOARD, KEY_N, KEY_N, R1
|
||||
7+15, KEYBOARD, KEY_O, KEY_O, R2
|
||||
2, KEYBOARD, KEY_M, KEY_M, L1
|
||||
7+2, KEYBOARD, KEY_V, KEY_V, L2
|
||||
12, KEYBOARD, KEY_A, KEY_A, A
|
||||
14, KEYBOARD, KEY_B, KEY_B, B
|
||||
13, KEYBOARD, KEY_Y, KEY_Y, Y
|
||||
11, KEYBOARD, KEY_X, KEY_X, X
|
||||
|
||||
7+12, SHELL_COMMAND, quick_action_volume_up, Fn+Y, Volume++
|
||||
7+13, SHELL_COMMAND, quick_action_volume_down, Fn+A, Volume--
|
||||
7+11, SHELL_COMMAND, quick_action_bright_up, Fn+B, Brightness++
|
||||
7+14, SHELL_COMMAND, quick_action_bright_down, Fn+X, Brightness--
|
||||
10, SHELL_COMMAND, sched_shutdown 1 & signal_usr1_to_emulators, N_OE, Quick save and Poweroff because of N_OE
|
||||
7+15+2, SHELL_COMMAND, display_notif_system_stats, Fn+L1+L2, display system cpu and ram usage
|
||||
|
||||
#7+12, KEYBOARD, KEY_G, KEY_G, Brightness++
|
||||
#7+14, KEYBOARD, KEY_E, KEY_E, Volume--
|
||||
#7+13, KEYBOARD, KEY_W, KEY_W, Brightness--
|
||||
#7+11, KEYBOARD, KEY_C, KEY_C, Volume++
|
||||
#10, KEYBOARD, KEY_T, KEY_T, Should Poweroff because N_OE_received
|
||||
#7+15, KEYBOARD, KEY_Q, 7+11, Launch menu
|
||||
|
||||
|
|
@ -1 +1 @@
|
|||
FunKey_S Rev.E
|
||||
FunKey_S Rev.F
|
||||
|
|
|
@ -4,20 +4,10 @@ THIS=$(basename $0)
|
|||
|
||||
case "$1" in
|
||||
start)
|
||||
|
||||
# Check is SWAP partition already created
|
||||
fdisk -l /dev/mmcblk0 | grep "Linux swap" > /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
first_boot
|
||||
exit $?
|
||||
fi
|
||||
|
||||
# Check is share partition already created
|
||||
fdisk -l /dev/mmcblk0 | grep "W95 FAT32" > /dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
first_boot
|
||||
exit $?
|
||||
fi
|
||||
first_boot_ok=$(fw_printenv -n first_boot_ok 2>/dev/null)
|
||||
if ! [ ! "${first_boot_ok}" -ne "${first_boot_ok}" ] 2> /dev/null; then
|
||||
first_boot
|
||||
fi
|
||||
;;
|
||||
stop)
|
||||
;;
|
||||
|
|
|
@ -5,6 +5,6 @@
|
|||
|___| |_____|__|__||__|\__||_____|___ |
|
||||
FUN ON A KEYCHAIN |_____|
|
||||
-----------------------------------------------------
|
||||
Version 1.1.0
|
||||
Version 2.3.0
|
||||
-----------------------------------------------------
|
||||
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
NAME="FunKey-OS"
|
||||
VERSION="1.1.0 (Quacking Quagga)"
|
||||
VERSION="2.3.0 (Zen Zebu)"
|
||||
ID=funkey
|
||||
ID_LIKE=buildroot
|
||||
PRETTY_NAME="FunKey-OS 1.1.0"
|
||||
VERSION_ID="1.1.0"
|
||||
PRETTY_NAME="FunKey-OS 2.3.0"
|
||||
VERSION_ID="2.3.0"
|
||||
HOME_URL="https://www.funkey-project.com/"
|
||||
SUPPORT_URL="https://www.funkey-project.com/"
|
||||
BUG_REPORT_URL="https://www.funkey-project.com/"
|
||||
PRIVACY_POLICY_URL="https://www.funkey-project.com"
|
||||
VERSION_CODENAME=Quacking
|
||||
UBUNTU_CODENAME=Quacking
|
||||
VERSION_CODENAME=Zen
|
||||
UBUNTU_CODENAME=Zen
|
||||
|
|
|
@ -11,7 +11,6 @@ fi
|
|||
export PAGER='/bin/more'
|
||||
export EDITOR='/usr/bin/nano'
|
||||
export SDL_NOMOUSE=1
|
||||
export MEDNAFEN_HOME=/tmp/funkey/.mednafen
|
||||
|
||||
# Source configuration files from /etc/profile.d
|
||||
for i in /etc/profile.d/*.sh ; do
|
||||
|
|
|
@ -1 +1 @@
|
|||
rootfs 1.1.0
|
||||
rootfs 2.3.0
|
||||
|
|
|
@ -2,7 +2,7 @@ args_mmc=setenv bootargs console=ttyS0,115200 panic=5 rootwait fbcon=map:10 fbco
|
|||
baudrate=115200
|
||||
bootcmd=run getbootpart; run check_keys; if test ${found} = 1; then setenv bootpart 1; fi; run args_mmc; run loadfdt; run loadimage; bootz ${loadaddr} - ${fdtaddr}
|
||||
bootdelay=0
|
||||
check_keys=run set_pullups; setenv found 0; setenv timeout ${delay}; while test ${timeout} > 0; do run read_keys; if test ${keys} = f83f; then setenv found 1; setenv timeout 0; else setexpr timeout ${timeout} - 1; fi; done
|
||||
check_keys=run probe_i2c; run set_pullups; setenv found 0; setenv timeout ${delay}; while test ${timeout} > 0; do run read_keys; echo ${keys}; if test ${keys} = f83f; then setenv found 1; setenv timeout 0; else setexpr timeout ${timeout} - 1; fi; done
|
||||
console=ttyS0,115200
|
||||
delay=1
|
||||
fdt_high=0xffffffff
|
||||
|
@ -11,8 +11,9 @@ getbootpart=part list mmc 0 -bootable bootpart
|
|||
loadaddr=0x41000000
|
||||
loadfdt=load mmc 0:${bootpart} ${fdtaddr} /boot/sun8i-v3s-funkey.dtb
|
||||
loadimage=load mmc 0:${bootpart} ${loadaddr} /boot/zImage
|
||||
read_keys=i2c read 20 0 2 1c20500; setexpr.w keys *1c20500
|
||||
set_pullups=i2c mw 20 46 df; i2c mw 20 47 f8
|
||||
probe_i2c=if i2c probe 76; then setenv i2caddr 76; else setenv i2caddr 20; fi
|
||||
read_keys=i2c read ${i2caddr} 0 2 1c20500; setexpr.w keys *1c20500 \\& 0xf8ff
|
||||
set_pullups=i2c mw ${i2caddr} 46 df; i2c mw ${i2caddr} 47 f8
|
||||
stderr=serial@01c28000
|
||||
stdin=serial@01c28000
|
||||
stdout=serial@01c28000
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
/mnt
|
|
@ -0,0 +1 @@
|
|||
/mnt/funkey/.gmenu2x
|
|
@ -18,6 +18,47 @@ alias l='ls $LS_OPTIONS -lA'
|
|||
# alias cp='cp -i'
|
||||
# alias mv='mv -i'
|
||||
|
||||
# Alias functions for compatibility
|
||||
volume_get() {
|
||||
volume get "$@"
|
||||
}
|
||||
|
||||
volume_set() {
|
||||
volume set "$@"
|
||||
}
|
||||
|
||||
brightness_get() {
|
||||
brightness get "$@"
|
||||
}
|
||||
|
||||
brightness_set() {
|
||||
brightness set "$@"
|
||||
}
|
||||
|
||||
notif_set() {
|
||||
notif set "$@"
|
||||
}
|
||||
|
||||
start_audio_amp() {
|
||||
audio_amp "$@"
|
||||
}
|
||||
|
||||
cancel_sched_powerdown() {
|
||||
powerdown handle
|
||||
}
|
||||
|
||||
# Relocate HOME into the r/w partition
|
||||
export HOME=/mnt/FunKey
|
||||
mkdir -p "${HOME}"
|
||||
export MEDNAFEN_HOME=$HOME/.mednafen
|
||||
mkdir -p "${MEDNAFEN_HOME}"
|
||||
cp "/usr/games/lynxboot.img" "/usr/games/mednafen-09x.cfg" "${MEDNAFEN_HOME}/"
|
||||
export GMENU2X_HOME="$HOME/.gmenu2x"
|
||||
mkdir -p "${GMENU2X_HOME}"
|
||||
export RETROFE_HOME="$HOME/.retrofe"
|
||||
mkdir -p "${RETROFE_HOME}"
|
||||
mkdir -p "${RETROFE_HOME}/layouts"
|
||||
|
||||
# Resize the console to the terminal dimensions
|
||||
resize() {
|
||||
if [[ -t 0 && $# -eq 0 ]]; then
|
||||
|
@ -36,24 +77,20 @@ resize() {
|
|||
fi
|
||||
}
|
||||
|
||||
# Restore saved volume
|
||||
echo "Restore saved volume"
|
||||
volume set $(volume get) >/dev/null 2>&1
|
||||
|
||||
# Start ampli if necessary
|
||||
echo "Start audio amplifier if necessary"
|
||||
if [[ "$(volume_get)" -ne "0" ]]; then
|
||||
start_audio_amp 1 >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
# Force unmute sound card and reset volume
|
||||
echo "Force unmute sound card and reset volume"
|
||||
volume_set $(volume_get) >/dev/null 2>&1
|
||||
|
||||
# Reset saved brightness
|
||||
echo "Reset saved brightness"
|
||||
brightness_set $(brightness_get) >/dev/null 2>&1
|
||||
# Restore saved brightness
|
||||
echo "Restore saved brightness"
|
||||
brightness set $(brightness get) >/dev/null 2>&1
|
||||
|
||||
# Start Assembly tests (blocking process)
|
||||
assembly_tests >/dev/null 2>&1
|
||||
|
||||
# Start launcher
|
||||
echo "Start launcher"
|
||||
start_launcher >/dev/null 2>&1 &
|
||||
# Restart saved application/game if any
|
||||
instant_play load
|
||||
|
||||
# Start frontend
|
||||
echo "Start frontend"
|
||||
frontend init >/dev/null 2>&1 &
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Uncomment and edit the following line to use a different ROM path.
|
||||
list.path = %BASE_ITEM_PATH%/%ITEM_COLLECTION_NAME%
|
||||
list.includeMissingItems = false
|
||||
list.extensions = gba,GBA
|
||||
list.extensions = gba,GBA,zip,ZIP
|
||||
list.menuSort = yes
|
||||
|
||||
launcher = gba
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Uncomment and edit the following line to use a different ROM path.
|
||||
list.path = %BASE_ITEM_PATH%/%ITEM_COLLECTION_NAME%
|
||||
list.includeMissingItems = false
|
||||
list.extensions = nes,NES
|
||||
list.extensions = nes,NES,fds,FDS,zip,ZIP
|
||||
list.menuSort = yes
|
||||
|
||||
launcher = NES
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Uncomment and edit the following line to use a different ROM path.
|
||||
list.path = %BASE_ITEM_PATH%/%ITEM_COLLECTION_NAME%
|
||||
list.includeMissingItems = false
|
||||
list.extensions = zip,ZIP,pce,PCE,sgx,SGX
|
||||
list.extensions = zip,ZIP,pce,PCE,sgx,SGX,cue,CUE
|
||||
list.menuSort = yes
|
||||
|
||||
launcher = pce
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Uncomment and edit the following line to use a different ROM path.
|
||||
list.path = %BASE_ITEM_PATH%/%ITEM_COLLECTION_NAME%
|
||||
list.includeMissingItems = false
|
||||
list.extensions = sfc,SFC,smc,SMC
|
||||
list.extensions = sfc,SFC,smc,SMC,zip,ZIP
|
||||
list.menuSort = yes
|
||||
|
||||
launcher = snes
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
|
@ -19,7 +19,7 @@ list.includeMissingItems = true
|
|||
###############################################################################
|
||||
# Extensions are comma separated without spaces
|
||||
###############################################################################
|
||||
list.extensions = zip,ZIP,md,MD
|
||||
list.extensions = zip,ZIP,md,MD,bin,BIN,32x,32X,cue,CUE,cso,CSO,chd,CHD,smd,SMD
|
||||
|
||||
###############################################################################
|
||||
# If a menu.xml file exists, it will display the menu alphabetically. To
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1007 B |
|
@ -19,7 +19,7 @@ list.includeMissingItems = true
|
|||
###############################################################################
|
||||
# Extensions are comma separated without spaces
|
||||
###############################################################################
|
||||
list.extensions = zip,ZIP,sms,SMS
|
||||
list.extensions = zip,ZIP,sms,SMS,bin,BIN
|
||||
|
||||
###############################################################################
|
||||
# If a menu.xml file exists, it will display the menu alphabetically. To
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Uncomment and edit the following line to use a different ROM path.
|
||||
list.path = %BASE_ITEM_PATH%/%ITEM_COLLECTION_NAME%
|
||||
list.includeMissingItems = false
|
||||
list.extensions = zip,ZIP,wsc,WSC
|
||||
list.extensions = zip,ZIP,wsc,WSC,ws,WS
|
||||
list.menuSort = yes
|
||||
|
||||
launcher = wonderswan
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Security
|
||||
cp /usr/games/mednafen-09x.cfg ${MEDNAFEN_HOME}/
|
||||
export HOME=/tmp/funkey
|
||||
mkdir -p ${HOME}
|
||||
cd ${HOME}
|
||||
mednafen -fs 1 -gg.stretch full "$1"
|
||||
|
||||
# Launch the process in background, record the PID into a file, wait
|
||||
# for the process to terminate and erase the recorded PID
|
||||
mednafen -fs 1 -gg.stretch full "$1"&
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#!/bin/sh
|
||||
|
||||
export HOME=/tmp/funkey
|
||||
mkdir -p ${HOME}
|
||||
cd ${HOME}
|
||||
sdlgnuboy --syncrtc "$1"
|
||||
# Launch the process in background, record the PID into a file, wait
|
||||
# for the process to terminate and erase the recorded PID
|
||||
sdlgnuboy --syncrtc --stereo=0 "$1"&
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
export HOME=/tmp/funkey
|
||||
mkdir -p ${HOME}
|
||||
# Launch the process in background, record the PID into a file, wait
|
||||
# for the process to terminate and erase the recorded PID
|
||||
cd ${HOME}
|
||||
gpsp "$1"
|
||||
gpsp "$1"&
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#!/bin/sh
|
||||
|
||||
export HOME=/tmp/funkey
|
||||
mkdir -p ${HOME}
|
||||
cd ${HOME}
|
||||
gpsp "$1"
|
||||
# Launch the process in background, record the PID into a file, wait
|
||||
# for the process to terminate and erase the recorded PID
|
||||
gpsp "$1"&
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Security
|
||||
cp /usr/games/mednafen-09x.cfg ${MEDNAFEN_HOME}/
|
||||
export HOME=/tmp/funkey
|
||||
mkdir -p ${HOME}
|
||||
cd ${HOME}
|
||||
mednafen -fs 1 -lynx.stretch full "$1"
|
||||
|
||||
# Launch the process in background, record the PID into a file, wait
|
||||
# for the process to terminate and erase the recorded PID
|
||||
mednafen -fs 1 -lynx.stretch full "$1"&
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Security
|
||||
cp /usr/games/mednafen-09x.cfg ${MEDNAFEN_HOME}/
|
||||
export HOME=/tmp/funkey
|
||||
mkdir -p ${HOME}
|
||||
cd ${HOME}
|
||||
mednafen -sound 1 -soundrate 22050 -soundbufsize 100 -vdriver sdl -frameskip 1 -fs 0 "$1"
|
||||
|
||||
# Launch the process in background, record the PID into a file, wait
|
||||
# for the process to terminate and erase the recorded PID
|
||||
mednafen -sound 1 -soundrate 22050 -soundbufsize 100 -vdriver sdl -frameskip 1 -fs 0 "$1"&
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#!/bin/sh
|
||||
|
||||
export HOME=/tmp/funkey
|
||||
mkdir -p ${HOME}
|
||||
cd ${HOME}
|
||||
PicoDrive "$1"
|
||||
# Launch the process in background, record the PID into a file, wait
|
||||
# for the process to terminate and erase the recorded PID
|
||||
PicoDrive "$1"&
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
#!/bin/sh
|
||||
|
||||
export HOME=/tmp/funkey
|
||||
mkdir -p ${HOME}
|
||||
cd ${HOME}
|
||||
fceux "$1"
|
||||
|
||||
# Launch the process in background, record the PID into a file, wait
|
||||
# for the process to terminate and erase the recorded PID
|
||||
fceux "$1"&
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Security
|
||||
cp /usr/games/mednafen-09x.cfg ${MEDNAFEN_HOME}/
|
||||
export HOME=/tmp/funkey
|
||||
mkdir -p ${HOME}
|
||||
cd ${HOME}
|
||||
mednafen -fs 1 -ngp.stretch full "$1"
|
||||
|
||||
# Launch the process in background, record the PID into a file, wait
|
||||
# for the process to terminate and erase the recorded PID
|
||||
mednafen -fs 1 -ngp.stretch full "$1"&
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Security
|
||||
cp /usr/games/mednafen-09x.cfg ${MEDNAFEN_HOME}/
|
||||
export HOME=/tmp/funkey
|
||||
mkdir -p ${HOME}
|
||||
cd ${HOME}
|
||||
mednafen -fs 1 -force_module pce_fast -pce_fast.stretch full "$1"
|
||||
|
||||
# Launch the process in background, record the PID into a file, wait
|
||||
# for the process to terminate and erase the recorded PID
|
||||
mednafen -fs 1 -force_module pce_fast -pce_fast.stretch full "$1"&
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#!/bin/sh
|
||||
|
||||
export HOME=/tmp/funkey
|
||||
mkdir -p ${HOME}
|
||||
cd ${HOME}
|
||||
pcsx -frameskip -cdfile "$1"
|
||||
# Launch the process in background, record the PID into a file, wait
|
||||
# for the process to terminate and erase the recorded PID
|
||||
pcsx -frameskip -cdfile "$1"&
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
#!/bin/sh
|
||||
|
||||
export HOME=/tmp/funkey
|
||||
mkdir -p ${HOME}
|
||||
cd ${HOME}
|
||||
#pcsx -frameskip -cdfile "$1"
|
||||
pcsx -cdfile "$1"
|
||||
# Launch the process in background, record the PID into a file, wait
|
||||
# for the process to terminate and erase the recorded PID
|
||||
pcsx -cdfile "$1"&
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#!/bin/sh
|
||||
|
||||
export HOME=/tmp/funkey
|
||||
mkdir -p ${HOME}
|
||||
cd ${HOME}
|
||||
PicoDrive "$1"
|
||||
# Launch the process in background, record the PID into a file, wait
|
||||
# for the process to terminate and erase the recorded PID
|
||||
PicoDrive "$1"&
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#!/bin/sh
|
||||
|
||||
export HOME=/tmp/funkey
|
||||
mkdir -p ${HOME}
|
||||
cd ${HOME}
|
||||
psnes "$1"
|
||||
# Launch the process in background, record the PID into a file, wait
|
||||
# for the process to terminate and erase the recorded PID
|
||||
psnes "$1"&
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#!/bin/sh
|
||||
|
||||
export HOME=/tmp/funkey
|
||||
mkdir -p ${HOME}
|
||||
cd ${HOME}
|
||||
psnes "$1"
|
||||
# Launch the process in background, record the PID into a file, wait
|
||||
# for the process to terminate and erase the recorded PID
|
||||
psnes "$1"&
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Security
|
||||
cp /usr/games/mednafen-09x.cfg ${MEDNAFEN_HOME}/
|
||||
export HOME=/tmp/funkey
|
||||
mkdir -p ${HOME}
|
||||
cd ${HOME}
|
||||
mednafen -fs 1 -wswan.stretch full "$1"
|
||||
|
||||
# Launch the process in background, record the PID into a file, wait
|
||||
# for the process to terminate and erase the recorded PID
|
||||
mednafen -fs 1 -wswan.stretch full "$1"&
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
|
|
@ -3021,10 +3021,10 @@ ngp.enable 1
|
|||
ngp.forcemono 1
|
||||
|
||||
;ngp, Built-In, Gamepad: A
|
||||
ngp.input.builtin.gamepad.a keyboard 97
|
||||
ngp.input.builtin.gamepad.a keyboard 98~keyboard 120
|
||||
|
||||
;ngp, Built-In, Gamepad: B
|
||||
ngp.input.builtin.gamepad.b keyboard 98
|
||||
ngp.input.builtin.gamepad.b keyboard 97~keyboard 121
|
||||
|
||||
;ngp, Built-In, Gamepad: DOWN ↓
|
||||
ngp.input.builtin.gamepad.down keyboard 100
|
||||
|
|
|
@ -17,13 +17,12 @@ if [ $? -ne 0 ]; then
|
|||
warn "$@"
|
||||
exit $return_code
|
||||
}
|
||||
|
||||
die_notif () {
|
||||
local return_code=$1
|
||||
shift
|
||||
warn "$@"
|
||||
notif set 0 "$@"
|
||||
exit $return_code
|
||||
}
|
||||
fi
|
||||
|
||||
notif () {
|
||||
info "$@"
|
||||
printf "$@" > /sys/class/graphics/fb0/notification
|
||||
}
|
||||
|
||||
clear_notif () {
|
||||
printf "clear" > /sys/class/graphics/fb0/notification
|
||||
}
|
||||
|
|
|
@ -0,0 +1,154 @@
|
|||
#!/bin/sh
|
||||
|
||||
#set -xv
|
||||
|
||||
SELF=${SELF:-$(basename $0)}
|
||||
|
||||
source /usr/local/lib/utils
|
||||
source usb_gadget
|
||||
|
||||
# The composite gadget directory
|
||||
GADGET=/sys/kernel/config/usb_gadget/FunKey
|
||||
|
||||
# USB VID for Intel
|
||||
ID_VENDOR="0x8087"
|
||||
|
||||
# USB PID for Multifunction Composite Gadget
|
||||
ID_PRODUCT="0x011e"
|
||||
|
||||
# Get the CPU serial number
|
||||
SERIAL="$(grep Serial /proc/cpuinfo | sed 's/Serial\s*: \(\w*\)/\1/')"
|
||||
|
||||
# Initialize the ADB
|
||||
init_adb() {
|
||||
|
||||
# Don't proceed if existing gadget is present
|
||||
if [ -e ${GADGET} ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Get the legacy drivers out of the way
|
||||
modprobe -r g_ether
|
||||
modprobe -r g_mass_storage
|
||||
|
||||
# Load the libcomposite USB driver, configfs and various other drivers
|
||||
modprobe libcomposite
|
||||
modprobe usb_f_serial
|
||||
modprobe usb_f_fs
|
||||
modprobe usb_f_acm
|
||||
|
||||
# USB Device Controller Driver
|
||||
local udc_driver=$(ls /sys/class/udc | cut -f1 | head -n 1)
|
||||
|
||||
# Create our gadget directory
|
||||
mkdir ${GADGET}
|
||||
mkdir ${GADGET}/strings/0x409
|
||||
mkdir ${GADGET}/configs/FunKey.1
|
||||
mkdir ${GADGET}/configs/FunKey.1/strings/0x409
|
||||
mkdir ${GADGET}/functions/acm.GS0
|
||||
mkdir ${GADGET}/functions/ffs.adb
|
||||
|
||||
# USB VID and PID
|
||||
echo ${ID_VENDOR} > ${GADGET}/idVendor
|
||||
echo ${ID_PRODUCT} > ${GADGET}/idProduct
|
||||
|
||||
# Device String Descriptiors
|
||||
echo "Intel" > ${GADGET}/strings/0x409/manufacturer
|
||||
echo "FunKey S" > ${GADGET}/strings/0x409/product
|
||||
echo ${SERIAL} > ${GADGET}/strings/0x409/serialnumber
|
||||
|
||||
# Configuration
|
||||
|
||||
# Maximum power is 120 mA
|
||||
echo 120 > ${GADGET}/configs/FunKey.1/MaxPower
|
||||
|
||||
# Configuration String Descriptors
|
||||
echo "ADB+CDC" > ${GADGET}/configs/FunKey.1/strings/0x409/configuration
|
||||
|
||||
# Add the ACM function to the FunKey.1 configuration
|
||||
ln -s ${GADGET}/functions/acm.GS0 ${GADGET}/configs/FunKey.1
|
||||
|
||||
# Add the FunctionFS function to the FunKey.1 configuration
|
||||
ln -s ${GADGET}/functions/ffs.adb ${GADGET}/configs/FunKey.1
|
||||
|
||||
# Create the function filesystem
|
||||
mkdir /dev/usb-ffs
|
||||
mkdir /dev/usb-ffs/adb
|
||||
|
||||
# Mount the ADB function filesystem
|
||||
mount -t functionfs adb /dev/usb-ffs/adb
|
||||
|
||||
# Bring up the loopback network
|
||||
ifup lo
|
||||
|
||||
# Launch the ADB daemon
|
||||
adbd >/dev/null &
|
||||
|
||||
# Sleeping is required to wait for the UDC to come up
|
||||
sleep 5
|
||||
|
||||
# Bind the USB Gadget
|
||||
echo ${udc_driver} > ${GADGET}/UDC
|
||||
return 0
|
||||
}
|
||||
|
||||
# Deinitialize the ADB
|
||||
deinit_adb() {
|
||||
|
||||
# Unbind the device
|
||||
echo > ${GADGET}/UDC
|
||||
|
||||
# Kill the ADB daemon
|
||||
killall adbd
|
||||
|
||||
# Bring down the local network
|
||||
ifdown lo
|
||||
|
||||
# Unmount the ADB function filesystem
|
||||
umount /dev/usb-ffs/adb
|
||||
|
||||
# Delete the function filesystem
|
||||
rmdir /dev/usb-ffs/adb
|
||||
rmdir /dev/usb-ffs
|
||||
|
||||
# Remove functions from configurations
|
||||
rm ${GADGET}/configs/FunKey.1/acm.GS0
|
||||
rm ${GADGET}/configs/FunKey.1/ffs.adb
|
||||
|
||||
# Remove string directories in configurations
|
||||
rmdir ${GADGET}/configs/FunKey.1/strings/0x409
|
||||
|
||||
# Remove configurations
|
||||
rmdir ${GADGET}/configs/FunKey.1
|
||||
|
||||
# Remove functions
|
||||
rmdir ${GADGET}/functions/acm.GS0
|
||||
rmdir ${GADGET}/functions/ffs.adb
|
||||
|
||||
# Remove strings
|
||||
rmdir ${GADGET}/strings/0x409
|
||||
|
||||
# Finallyy remove the gadget
|
||||
rmdir ${GADGET}
|
||||
|
||||
# Unload the kernel modules
|
||||
modprobe -r usb_f_serial usb_f_fs usb_f_acm
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
|
||||
start)
|
||||
deinit_usb_gadget
|
||||
init_adb
|
||||
;;
|
||||
|
||||
stop)
|
||||
deinit_adb
|
||||
init_usb_gadget
|
||||
;;
|
||||
|
||||
*)
|
||||
die 15 "Usage $0 {start|stop}"
|
||||
;;
|
||||
esac
|
||||
exit $?
|
|
@ -16,6 +16,10 @@ if [ -f ${LOCK_FILE} ]; then
|
|||
fi
|
||||
touch ${LOCK_FILE}
|
||||
|
||||
## Register ourself as the running FunKey task for receiving USR1
|
||||
## signal for shutting down
|
||||
pid record $$
|
||||
|
||||
## Binaries
|
||||
PROD_SCREEN_BIN="/usr/local/sbin/funkey_prod_screens"
|
||||
GET_PROC_UID="/usr/local/sbin/get_sid"
|
||||
|
@ -28,7 +32,7 @@ stop_loop=false
|
|||
proc_uid=$($GET_PROC_UID)
|
||||
|
||||
## Defines
|
||||
VERSION="1.00"
|
||||
VERSION="1.01"
|
||||
LOG_FILE="/root/logs/assembly_tests/assy_tests_${proc_uid}.log"
|
||||
[ -d $(dirname $LOG_FILE) ] || mkdir -p $(dirname $LOG_FILE)
|
||||
MAGNET_DETECTED_FILE="/root/.assembly_tests_magnet_detected"
|
||||
|
@ -38,7 +42,7 @@ QR_CODE_IMG="/root/logs/assembly_tests/qrcode.png"
|
|||
## Function called when SIGURS1 is caught while waiting for it
|
||||
function function_magnet_detected_ok {
|
||||
## Kill scheduled shutdown
|
||||
pkill sched_shutdown
|
||||
pkill -f "powerdown schedule"
|
||||
|
||||
## Write magnet_detected file
|
||||
if $test_failed; then
|
||||
|
@ -51,13 +55,16 @@ function function_magnet_detected_ok {
|
|||
## Clean shutdown
|
||||
echo " Caught SIGUSR1 signal: magnet detected"
|
||||
echo " Rebooting now..."
|
||||
shutdown_funkey
|
||||
powerdown now
|
||||
exit 0
|
||||
}
|
||||
|
||||
## Function called when SIGUSR1 is caught while NOT waiting for it
|
||||
function function_magnet_detected_ko {
|
||||
echo "ERROR: Caught SIGUSR1 signal (magnet detected!)"
|
||||
|
||||
## Kill the funkey_prod_screen binary
|
||||
killall -s USR1 "${PROD_SCREEN_BIN}" > /dev/null 2>&1
|
||||
sync
|
||||
}
|
||||
|
||||
|
@ -71,7 +78,7 @@ function launch_tests_up_until_magnet {
|
|||
termfix_all > /dev/null
|
||||
|
||||
## Clear all notifs
|
||||
notif_clear
|
||||
notif clear
|
||||
|
||||
## Test if log file aleady exists
|
||||
if [[ -f $LOG_FILE ]]; then
|
||||
|
@ -92,24 +99,17 @@ function launch_tests_up_until_magnet {
|
|||
echo " OK"
|
||||
sync
|
||||
|
||||
## Check if battery present
|
||||
if [[ $(cat /sys/class/power_supply/axp20x-battery/present) == "0" ]]; then
|
||||
|
||||
## Launch screen to wait for battery
|
||||
echo "TEST BATTERY:"
|
||||
sync
|
||||
$PROD_SCREEN_BIN WAIT_BATTERY 2>&1
|
||||
res="$?"
|
||||
echo " $res"
|
||||
if [[ "$res" == "0" ]]; then
|
||||
echo " OK"
|
||||
else
|
||||
echo " FAIL"
|
||||
test_failed=true
|
||||
fi
|
||||
else
|
||||
echo "TEST BATTERY:"
|
||||
## Battery tests
|
||||
echo "TEST BATTERY:"
|
||||
sync
|
||||
$PROD_SCREEN_BIN WAIT_BATTERY 2>&1
|
||||
res="$?"
|
||||
echo " $res"
|
||||
if [[ "$res" == "0" ]]; then
|
||||
echo " OK"
|
||||
else
|
||||
echo " FAIL"
|
||||
test_failed=true
|
||||
fi
|
||||
sync
|
||||
|
||||
|
@ -158,7 +158,7 @@ function launch_tests_up_until_magnet {
|
|||
|
||||
## Play 1kHz sine wave
|
||||
echo " Play 2kHz sine wave"
|
||||
notif_set 0 "^^^ PLAYING SINE WAVE...^^^ ...... ^ ... ...^ .. ..^.. .^. . .^ . ..^ .. ..^ ... ...^ .......^^"
|
||||
notif set 0 "^^^ PLAYING SINE WAVE...^^^ ...... ^ ... ...^ .. ..^.. .^. . .^ . ..^ .. ..^ ... ...^ .......^^"
|
||||
speaker-test -t sine -s 1 -f 2000 >/dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
echo " ERROR: SPEAKER SINE"
|
||||
|
@ -166,7 +166,7 @@ function launch_tests_up_until_magnet {
|
|||
return
|
||||
fi
|
||||
sync
|
||||
notif_clear
|
||||
notif clear
|
||||
|
||||
## Launch prod screen test speaker
|
||||
$PROD_SCREEN_BIN SPEAKER 2>&1
|
||||
|
@ -213,7 +213,7 @@ function launch_tests_up_until_magnet {
|
|||
sync
|
||||
|
||||
# Catch SIGUSR1 events
|
||||
trap function_magnet_detected_ok SIGUSR1
|
||||
#trap function_magnet_detected_ok SIGUSR1
|
||||
|
||||
## Launch prod screen test magnet
|
||||
echo "TEST MAGNET:"
|
||||
|
@ -221,8 +221,15 @@ function launch_tests_up_until_magnet {
|
|||
$PROD_SCREEN_BIN MAGNET 2>&1
|
||||
res="$?"
|
||||
echo " $res"
|
||||
|
||||
## Register ourself back as the running FunKey task for receiving USR1
|
||||
## signal for shutting down
|
||||
pid record $$
|
||||
|
||||
# check magnet test result
|
||||
if [[ "$res" == "0" ]]; then
|
||||
echo " OK"
|
||||
function_magnet_detected_ok
|
||||
else
|
||||
echo " FAILED"
|
||||
test_failed=true
|
||||
|
@ -241,7 +248,7 @@ function launch_tests_after_magnet {
|
|||
#termfix_all > /dev/null
|
||||
|
||||
## Clear all notifs
|
||||
#notif_clear
|
||||
#notif clear
|
||||
|
||||
# Log from magnet file
|
||||
echo " Found file: " $MAGNET_DETECTED_FILE
|
||||
|
@ -363,6 +370,6 @@ if ! $test_failed; then
|
|||
exit 0
|
||||
else
|
||||
## Shutdown
|
||||
shutdown_funkey &
|
||||
powerdown now &
|
||||
exit 1
|
||||
fi
|
||||
|
|
|
@ -0,0 +1,59 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Uncomment the following line to get debug info
|
||||
#set -x
|
||||
|
||||
SELF="$(basename ${0})"
|
||||
SYSTEM_GPIO="/sys/class/gpio"
|
||||
|
||||
# Power Audio Amplifier enable GPIO (('F' - 'A') * 32 + 6 = 166)
|
||||
GPIO_PF6=166
|
||||
|
||||
usage() {
|
||||
>2& echo "Usage: ${SELF} [1|on|ON|On for ON, 0|off|OFF|Off for OFF]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Check number of arguments
|
||||
if [ ${#} -ne 1 ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
case "${1}" in
|
||||
1|on|ON|On)
|
||||
|
||||
# Turn ON only if volume is not null
|
||||
if [ "$(volume get)" -ne "0" ]; then
|
||||
echo "Turning audio amplifier ON"
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
new_state=1
|
||||
;;
|
||||
|
||||
0|off|OFF|Off)
|
||||
echo "Turning audio amplifier OFF"
|
||||
new_state=0
|
||||
;;
|
||||
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
|
||||
# Export the GPIO if necessary
|
||||
if [ ! -d "${SYSTEM_GPIO}/gpio${GPIO_PF6}" ]; then
|
||||
echo ${GPIO_PF6} > "${SYSTEM_GPIO}/export"
|
||||
fi
|
||||
|
||||
# Set the power audio amplifier GPIO as output
|
||||
echo "out" > "${SYSTEM_GPIO}/gpio${GPIO_PF6}/direction"
|
||||
|
||||
# Read the current power audio amplifier state
|
||||
current_state=$(cat "${SYSTEM_GPIO}/gpio${GPIO_PF6}/value")
|
||||
|
||||
# Enable/disable the power audio amplifier if necessary
|
||||
if [ ${current_state} -ne ${new_state} ]; then
|
||||
echo ${new_state} > "${SYSTEM_GPIO}/gpio${GPIO_PF6}/value"
|
||||
fi
|
||||
exit 0
|
|
@ -0,0 +1,128 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Uncomment the following line to get debug info
|
||||
#set -x
|
||||
|
||||
SELF="$(basename ${0})"
|
||||
SYSTEM_BRIGHTNESS="/sys/class/backlight/backlight/brightness"
|
||||
DEFAULT_BRIGHTNESS_VALUE=100
|
||||
BRIGHTNESS_STEP=10
|
||||
NOTIF_DURATION=2
|
||||
|
||||
usage() {
|
||||
>&2 echo "Usage: ${SELF} get"
|
||||
>&2 echo " ${SELF} set new_brightness_percentage"
|
||||
exit 1
|
||||
}
|
||||
|
||||
increase_brightness() {
|
||||
|
||||
# Get current value
|
||||
local current_brightness=$(get_brightness)
|
||||
|
||||
# Compute new brightness value
|
||||
local new_brightness=0
|
||||
let new_brightness=${current_brightness}+${BRIGHTNESS_STEP}
|
||||
if [ ${new_brightness} -gt 100 ]; then
|
||||
new_brightness=100
|
||||
fi
|
||||
|
||||
# Change brightness
|
||||
if [ ${new_brightness} -ne ${current_brightness} ]; then
|
||||
set_brightness ${new_brightness}
|
||||
fi
|
||||
|
||||
# Notif
|
||||
notif set ${NOTIF_DURATION} " BRIGHTNESS: ${new_brightness}%%"
|
||||
}
|
||||
|
||||
decrease_brightness() {
|
||||
|
||||
# Get current value
|
||||
local current_brightness=$(get_brightness)
|
||||
|
||||
# Compute new brightness value
|
||||
local new_brightness=0
|
||||
if [ ${current_brightness} -gt ${BRIGHTNESS_STEP} ]; then
|
||||
let new_brightness=${current_brightness}-${BRIGHTNESS_STEP}
|
||||
fi
|
||||
|
||||
# Change brightness
|
||||
if [ ${new_brightness} -ne ${current_brightness} ]; then
|
||||
set_brightness ${new_brightness}
|
||||
fi
|
||||
|
||||
# Notif
|
||||
notif set ${NOTIF_DURATION} " BRIGHTNESS: ${new_brightness}%%"
|
||||
}
|
||||
|
||||
get_brightness() {
|
||||
local brightness=$(fw_printenv -n brightness 2>/dev/null)
|
||||
if ! [ ! "${brightness}" -ne "${brightness}" ] 2> /dev/null; then
|
||||
brightness=${DEFAULT_BRIGHTNESS_VALUE}
|
||||
fw_setenv brightness ${brightness}
|
||||
fi
|
||||
echo ${brightness}
|
||||
}
|
||||
|
||||
set_brightness() {
|
||||
|
||||
# Set the new brightness percentage in the kernel driver
|
||||
local brightness=${1}
|
||||
local kernel_brightness
|
||||
let kernel_brightness=${brightness}+10
|
||||
let kernel_brightness/=10
|
||||
echo ${kernel_brightness} > "${SYSTEM_BRIGHTNESS}"
|
||||
|
||||
# Set the new brightness value in a bootloader variable
|
||||
if [ ${?} -eq 0 -a $(get_brightness) -ne ${brightness} ]; then
|
||||
fw_setenv brightness ${brightness}
|
||||
fi
|
||||
}
|
||||
|
||||
# Check number of arguments
|
||||
if [ ${#} -lt 1 -o ${#} -gt 2 ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
case "${1}" in
|
||||
up)
|
||||
if [ ${#} -ne 1 ]; then
|
||||
usage
|
||||
fi
|
||||
increase_brightness
|
||||
;;
|
||||
|
||||
down)
|
||||
if [ ${#} -ne 1 ]; then
|
||||
usage
|
||||
fi
|
||||
decrease_brightness
|
||||
;;
|
||||
|
||||
get)
|
||||
if [ ${#} -ne 1 ]; then
|
||||
usage
|
||||
fi
|
||||
get_brightness
|
||||
;;
|
||||
|
||||
set)
|
||||
if [ ${#} -ne 2 ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
# Make sure the argument is a positive number <= 100
|
||||
if [ -n "${2}" ] && [ "${2}" -eq "${2}" ] 2>/dev/null && \
|
||||
[ "${2}" -ge 0 ] && [ "${2}" -le 100 ]; then
|
||||
set_brightness "${2}"
|
||||
else
|
||||
usage
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
exit 0
|
|
@ -1,18 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
BRIGHTNESS_DEFAULT_VALUE=100
|
||||
|
||||
# Check args
|
||||
if [ ${#} -ne 0 ]; then
|
||||
echo "Usage: $(basename ${0})"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Sanity check: Check if integer
|
||||
brightness=$(fw_printenv -n brightness 2>/dev/null)
|
||||
if ! [ ! "${brightness}" -ne "${brightness}" ] 2> /dev/null; then
|
||||
brightness=${BRIGHTNESS_DEFAULT_VALUE}
|
||||
fw_setenv brightness ${brightness}
|
||||
fi
|
||||
echo ${brightness}
|
||||
exit 0
|
|
@ -1,13 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
SYSTEM_BRIGHTNESS=/sys/class/backlight/backlight/brightness
|
||||
|
||||
# Check args
|
||||
if [ ${#} -ne 0 ]; then
|
||||
echo "Usage: $(basename ${0})"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
let brightness=$(cat ${SYSTEM_BRIGHTNESS})*10-10
|
||||
echo ${brightness}
|
||||
exit 0
|
|
@ -1,27 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
SYSTEM_BRIGHTNESS=/sys/class/backlight/backlight/brightness
|
||||
|
||||
# Check args
|
||||
if [ ${#} -ne 1 ]; then
|
||||
echo "Usage: $(basename ${0}) new_brightness_percentage"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check value's range
|
||||
if [ ${1} -gt 100 ]; then
|
||||
echo "Usage: Wrong brightness percentage (${1}), must be between 0 and 100"
|
||||
exit 1
|
||||
fi
|
||||
brightness_percentage=${1}
|
||||
|
||||
# Set new brightness percentage
|
||||
let value=${1}+10
|
||||
let value/=10
|
||||
echo ${value} > ${SYSTEM_BRIGHTNESS}
|
||||
|
||||
# Set new brightness value in brightness file
|
||||
if [ ${?} -eq 0 -a $(brightness_get) -ne ${brightness_percentage} ]; then
|
||||
fw_setenv brightness ${brightness_percentage}
|
||||
fi
|
||||
exit 0
|
|
@ -1,21 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
SYSTEM_BRIGHTNESS=/sys/class/backlight/backlight/brightness
|
||||
|
||||
# Check args
|
||||
if [ ${#} -ne 1 ]; then
|
||||
echo "Usage: $(basename ${0}) new_brightness_percentage"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check value's range
|
||||
if [ ${1} -gt 100 ]; then
|
||||
echo "Usage: Wrong brightness percentage (${1}), must be between 0 and 100"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Set new brightness percentage
|
||||
let value=${1}+10
|
||||
let value/=10
|
||||
echo ${value} > ${SYSTEM_BRIGHTNESS}
|
||||
exit 0
|
|
@ -1,5 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
notif_set 0 "Getting system stats..."
|
||||
killall -s USR1 system_stats
|
||||
exit 0
|
|
@ -14,31 +14,40 @@ SELF=$(basename $0)
|
|||
root_part=$(cat /proc/cmdline | sed -n 's|^.*root=\([^ ]*\).*|\1|p')
|
||||
root_part_num=${root_part#/dev/mmcblk0p}
|
||||
if [ "${root_part_num}" -eq 1 ]; then
|
||||
die 0 "recovery mode"
|
||||
die_notif 0 "recovery mode"
|
||||
elif [ "${root_part_num}" = "{$root_part}" ]; then
|
||||
die 1 "${root_part} is not an SD card partition, aborting"
|
||||
die_notif 1 "${root_part} is not an SD card partition, aborting"
|
||||
elif [ "${root_part_num}" -ne 2 ]; then
|
||||
die 2 "unknown partition layout, aborting"
|
||||
die_notif 2 "unknown partition layout, aborting"
|
||||
fi
|
||||
let swap_part_num=${root_part_num}+1
|
||||
swap_part=/dev/mmcblk0p${swap_part_num}
|
||||
let share_part_num=${swap_part_num}+1
|
||||
share_part=/dev/mmcblk0p${share_part_num}
|
||||
let usb_part_num=${swap_part_num}+1
|
||||
usb_part=/dev/mmcblk0p${usb_part_num}
|
||||
|
||||
check_root_id () {
|
||||
[ $(id -u) -ne 0 ] && die 3 "this script must be run as root, aborting"
|
||||
[ $(id -u) -ne 0 ] && die_notif 3 "this script must be run as root, aborting"
|
||||
return 0
|
||||
}
|
||||
|
||||
resize_rootfs_partition () {
|
||||
|
||||
# Check if root partition is already resized
|
||||
local rootfs_part_line=$(fdisk -l /dev/mmcblk0 2>/dev/null | grep ${root_part})
|
||||
set ${rootfs_part_line}
|
||||
local rootfs_part_size=${6}
|
||||
if [ "${rootfs_part_size}" = "1G" ]; then
|
||||
info "root partition is already resized"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Check that the last partition is the rootfs partition
|
||||
local last_part_line=$(fdisk -l /dev/mmcblk0 2>/dev/null | tail -n 1)
|
||||
set ${last_part_line}
|
||||
local last_part_num=${1#/dev/mmcblk0p}
|
||||
local part_start=${3}
|
||||
if [ "${last_part_num}" != "${root_part_num}" ]; then
|
||||
die 4 "rootfs is not the last partition. Don't know how to expand, aborting"
|
||||
die_notif 4 "rootfs is not the last partition. Don't know how to expand, aborting"
|
||||
fi
|
||||
|
||||
# Remove (temporarily) the rootfs partition
|
||||
|
@ -55,39 +64,50 @@ w
|
|||
EOF
|
||||
|
||||
# Mark the rootfs partition as bootable
|
||||
sfdisk -A /dev/mmcblk0 ${root_part_num} >/dev/null 2>&1 || die 7 "cannot make the rootfs partition bootable, aborting"
|
||||
sfdisk -A /dev/mmcblk0 ${root_part_num} >/dev/null 2>&1 || die_notif 7 "cannot make the rootfs partition bootable, aborting"
|
||||
|
||||
return 0
|
||||
}
|
||||
# Reload the partition table
|
||||
partprobe /dev/mmcblk0 >/dev/null 2>&1 || die_notif 8 "cannot reload the partition table, aborting"
|
||||
|
||||
reload_partition_table () {
|
||||
partprobe /dev/mmcblk0 >/dev/null 2>&1 || die 9 "cannot reload the partition table, aborting"
|
||||
return 0
|
||||
}
|
||||
|
||||
resize_rootfs_filesystem () {
|
||||
local rootfs_line=$(df | grep /dev/root)
|
||||
set ${rootfs_line}
|
||||
local rootfs_size=${2}
|
||||
if [ ${rootfs_size} -gt 1000000 ]; then
|
||||
info "rootfs already resized"
|
||||
return 0
|
||||
fi
|
||||
rw
|
||||
resize2fs ${root_part} >/dev/null 2>&1 || die 10 "cannot resize the root filesystem, aborting"
|
||||
resize2fs ${root_part} >/dev/null 2>&1 || die_notif 9 "cannot resize the root filesystem, aborting"
|
||||
ro
|
||||
return 0
|
||||
}
|
||||
|
||||
create_swap () {
|
||||
mount | grep -q ${share_part}
|
||||
if [ $? -ne 0 ]; then
|
||||
|
||||
# Check that the last partition is the rootfs partition
|
||||
local last_part_line=$(fdisk -l /dev/mmcblk0 2>/dev/null | tail -n 1)
|
||||
set ${last_part_line}
|
||||
local last_part_num=${1#/dev/mmcblk0p}
|
||||
if [ "$last_part_num" != "$root_part_num" ]; then
|
||||
die 11 "rootfs is not the last partition. Don't know how to create the backing store partition"
|
||||
fi
|
||||
# Check if swap partition already exists
|
||||
fdisk -l /dev/mmcblk0 2>/dev/null | grep "Linux swap" >/dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
info "swap partition already exists"
|
||||
else
|
||||
mount | grep -q ${usb_part}
|
||||
if [ $? -ne 0 ]; then
|
||||
|
||||
# Create an additional linux swap partition
|
||||
let swap_part_num=${last_part_num}+1
|
||||
swap_part=/dev/mmcblk0p${swap_part_num}
|
||||
fdisk /dev/mmcblk0 >/dev/null 2>&1 <<EOF
|
||||
# Check that the last partition is the rootfs partition
|
||||
local last_part_line=$(fdisk -l /dev/mmcblk0 2>/dev/null | tail -n 1)
|
||||
set ${last_part_line}
|
||||
local last_part_num=${1#/dev/mmcblk0p}
|
||||
if [ "$last_part_num" != "$root_part_num" ]; then
|
||||
die_notif 10 "rootfs is not the last partition. Don't know how to create the backing store partition"
|
||||
fi
|
||||
|
||||
# Create an additional linux swap partition
|
||||
let swap_part_num=${last_part_num}+1
|
||||
swap_part=/dev/mmcblk0p${swap_part_num}
|
||||
fdisk /dev/mmcblk0 >/dev/null 2>&1 <<EOF
|
||||
n
|
||||
p
|
||||
${swap_part_num}
|
||||
|
@ -98,21 +118,35 @@ ${wap_part_num}
|
|||
82
|
||||
w
|
||||
EOF
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check if swap is enabled
|
||||
local swap_line=$(free | grep Swap)
|
||||
set ${swap_line}
|
||||
local swap_size=${2}
|
||||
if [ ${swap_size} -eq 0 ]; then
|
||||
mkswap ${swap_part} >/dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
die 14 "cannot create swap file, aborting"
|
||||
die_notif 11 "cannot create swap file, aborting"
|
||||
fi
|
||||
|
||||
# Enable swap
|
||||
swapon -a >/dev/null 2>&1 || die_notif 12 "cannot enable swap file, aborting"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
enable_swap () {
|
||||
swapon -a >/dev/null 2>&1 || die 15 "cannot enable swap file, aborting"
|
||||
return 0
|
||||
}
|
||||
create_usb_partition () {
|
||||
|
||||
create_backing_store_partition () {
|
||||
mount | grep -q ${share_part}
|
||||
# Check if the USB partition already exists
|
||||
fdisk -l /dev/mmcblk0 2>/dev/null | grep "W95 FAT32" >/dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
info "USB partition already exists"
|
||||
return 0
|
||||
fi
|
||||
|
||||
mount | grep -q ${usb_part}
|
||||
if [ $? -ne 0 ]; then
|
||||
|
||||
# Check that the last partition is the swap partition
|
||||
|
@ -120,76 +154,91 @@ create_backing_store_partition () {
|
|||
set ${last_part_line}
|
||||
local last_part_num=${1#/dev/mmcblk0p}
|
||||
if [ "${last_part_num}" != "${swap_part_num}" ]; then
|
||||
die 15 "rootfs is not the last partition. Don't know how to create the backing store partition"
|
||||
die_notif 13 "rootfs is not the last partition. Don't know how to create the backing store partition"
|
||||
fi
|
||||
|
||||
# Create an additional FAT32 share partition that fills the disk
|
||||
let share_part_num=${last_part_num}+1
|
||||
share_part=/dev/mmcblk0p${share_part_num}
|
||||
# Create an additional FAT32 USB partition that fills the disk
|
||||
let usb_part_num=${last_part_num}+1
|
||||
usb_part=/dev/mmcblk0p${usb_part_num}
|
||||
fdisk /dev/mmcblk0 >/dev/null 2>&1 <<EOF
|
||||
n
|
||||
p
|
||||
${share_part_num}
|
||||
${usb_part_num}
|
||||
|
||||
|
||||
t
|
||||
${share_part_num}
|
||||
${usb_part_num}
|
||||
c
|
||||
w
|
||||
EOF
|
||||
sync
|
||||
fi
|
||||
|
||||
# Reload the partition table
|
||||
partprobe /dev/mmcblk0 >/dev/null 2>&1 || die_notif 14 "cannot reload the partition table, aborting"
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
format_backing_store_partition () {
|
||||
format_usb_partition () {
|
||||
|
||||
# Check if the USB partition is already mounted
|
||||
mount | grep /mnt > /dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
info "USB partition already mounted"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Format the backing store as FAT32
|
||||
mkfs.vfat ${share_part} >/dev/null 2>&1 || die 17 "cannot format the backing store partition"
|
||||
mkfs.vfat ${usb_part} >/dev/null 2>&1 || die_notif 15 "cannot format the backing store partition"
|
||||
return 0
|
||||
}
|
||||
|
||||
copy_files_to_store_partition () {
|
||||
# Add file to force assembly tests
|
||||
|
||||
|
||||
mount /mnt/ || die 18 "Cannot mount /mnt"
|
||||
unzip -q -o /usr/local/share/mnt_freware_games.zip -d /mnt/
|
||||
umount /mnt/ || die 20 "Cannot unmount /mnt"
|
||||
copy_files_to_usb_partition () {
|
||||
|
||||
# Check if the USB partition is already mounted
|
||||
mount | grep /mnt > /dev/null 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
mount /mnt/ || die_notif 16 "Cannot mount /mnt"
|
||||
fi
|
||||
|
||||
# Copy freware games and other necessary mnt files
|
||||
unzip -q -o /usr/local/share/mnt_files.zip -d /mnt/
|
||||
|
||||
# Copy OPKs
|
||||
set +f
|
||||
cp -r /usr/local/share/OPKs/* /mnt
|
||||
set -f
|
||||
|
||||
# Unmount USB partition
|
||||
umount /mnt/ || die_notif 17 "Cannot unmount /mnt"
|
||||
return 0
|
||||
}
|
||||
|
||||
check_root_id
|
||||
notif " FIRST BOOT DETECTED"
|
||||
notif set 0 " FIRST BOOT DETECTED"
|
||||
|
||||
notif " 1/9 RESIZE ROOT PARTITION"
|
||||
notif set 0 " 1/6 RESIZE ROOT PARTITION"
|
||||
resize_rootfs_partition
|
||||
|
||||
notif " 2/9 RELOAD ROOT PARTITION"
|
||||
reload_partition_table
|
||||
|
||||
notif " 3/9 RESIZE ROOT FILESYSTEM"
|
||||
notif set 0 " 2/6 RESIZE ROOT FILESYSTEM"
|
||||
resize_rootfs_filesystem
|
||||
|
||||
notif " 4/9 CREATE SWAP"
|
||||
notif set 0 " 3/6 CREATE SWAP"
|
||||
create_swap
|
||||
|
||||
notif " 5/9 ENABLE SWAP"
|
||||
enable_swap
|
||||
notif set 0 " 4/6 CREATE USB PARTITION"
|
||||
create_usb_partition
|
||||
|
||||
notif " 6/9 CREATE USB PARTITION"
|
||||
create_backing_store_partition
|
||||
notif set 0 " 5/6 FORMAT USB PARTITION"
|
||||
format_usb_partition
|
||||
|
||||
notif " 7/9 RELOAD PARTITION TABLE"
|
||||
reload_partition_table
|
||||
notif set 0 " 6/6 COPY FILES TO ^ USB PARTITION"
|
||||
copy_files_to_usb_partition
|
||||
|
||||
notif " 8/9 FORMAT USB PARTITION"
|
||||
format_backing_store_partition
|
||||
notif set 0 " FIRST BOOT SETUP FINISHED!"
|
||||
|
||||
notif " 9/9 COPY FILES TO ^ USB PARTITION"
|
||||
copy_files_to_store_partition
|
||||
|
||||
notif " FIRST BOOT SETUP FINISHED!"
|
||||
fw_setenv first_boot_ok 1
|
||||
|
||||
sleep 1
|
||||
clear_notif
|
||||
notif clear
|
||||
|
|
|
@ -0,0 +1,161 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Uncomment the following line to get debug info
|
||||
#set -x
|
||||
|
||||
SELF="$(basename ${0})"
|
||||
LAUNCHER_FILE="$HOME/Launchers/launcher.txt"
|
||||
FRONTEND_FILE="$HOME/.frontend"
|
||||
PREVENT_LAUNCHER_FILE="/mnt/prevent_launcher"
|
||||
DISABLE_FRONTEND_FILE="/mnt/disable_frontend"
|
||||
DEFAULT_FRONTEND=retrofe
|
||||
LOCK_FILE="/var/lock/frontend.lock"
|
||||
REBOOTING_FILE="/run/rebooting"
|
||||
LAST_OPK_FILE="/mnt/last_opk"
|
||||
|
||||
# Convert old launcher file to new frontend
|
||||
if [ -f "${LAUNCHER_FILE}" ]; then
|
||||
mv "${LAUNCHER_FILE}" "${FRONTEND_FILE}"
|
||||
rm -rf $(dirname "${LAUNCHER_FILE}") 2>/dev/null
|
||||
fi
|
||||
|
||||
# Convert old prevent launcher file to new frontend disable file
|
||||
if [ -f "${PREVENT_LAUNCHER_FILE}" ]; then
|
||||
mv "${PREVENT_LAUNCHER_FILE}" "${DISABLE_FRONTEND_FILE}"
|
||||
fi
|
||||
|
||||
usage() {
|
||||
>&2 echo "Usage: ${SELF} init"
|
||||
>&2 echo " ${SELF} get"
|
||||
>&2 echo " ${SELF} set gmenu2x|retrofe|none"
|
||||
exit 1
|
||||
}
|
||||
|
||||
set_frontend() {
|
||||
mkdir -p "$(dirname "$FRONTEND_FILE")"
|
||||
local frontend=$(get_frontend)
|
||||
local new_frontend="${1}"
|
||||
echo "Setting frontend: ${new_frontend}"
|
||||
if [ "${new_frontend}" = "none" ]; then
|
||||
touch "${DISABLE_FRONTEND_FILE}"
|
||||
else
|
||||
rm -f "${DISABLE_FRONTEND_FILE}"
|
||||
fi
|
||||
if [ "${frontend}" != "none" ]; then
|
||||
pkill "${frontend}"
|
||||
fi
|
||||
echo "${new_frontend}" > "${FRONTEND_FILE}"
|
||||
}
|
||||
|
||||
get_frontend() {
|
||||
local frontend=$(cat "${FRONTEND_FILE}" 2>/dev/null | head -1)
|
||||
|
||||
# Check if not empty
|
||||
if [ "x${frontend}" = "x" ]; then
|
||||
frontend="${DEFAULT_FRONTEND}"
|
||||
echo "${frontend}" > "${FRONTEND_FILE}"
|
||||
fi
|
||||
|
||||
# Return frontend name
|
||||
echo "${frontend}"
|
||||
}
|
||||
|
||||
init_frontend() {
|
||||
if [ -f "${LOCK_FILE}" ]; then
|
||||
>&2 echo "${LOCK_FILE} already exists"
|
||||
exit 1
|
||||
fi
|
||||
touch "${LOCK_FILE}"
|
||||
|
||||
# Then loop to launch the frontend indefinitely
|
||||
while true; do
|
||||
|
||||
# Check if frontend disable file is present
|
||||
if [ -f "${DISABLE_FRONTEND_FILE}" -o -f "${REBOOTING_FILE}" ]; then
|
||||
echo "${DISABLE_FRONTEND_FILE} file found, not starting frontend"
|
||||
sleep 5
|
||||
else
|
||||
|
||||
# Umount any remaining OPK, if any
|
||||
umount /opk >/dev/null 2>&1
|
||||
if [ -r "${LAST_OPK_FILE}" -a ! -f "${REBOOTING_FILE}" ]; then
|
||||
rm "${LAST_OPK_FILE}"
|
||||
fi
|
||||
|
||||
# Launch selected frontend
|
||||
local frontend="$(get_frontend)"
|
||||
case "${frontend}" in
|
||||
gmenu2x|retrofe)
|
||||
"${frontend}"&
|
||||
;;
|
||||
|
||||
none)
|
||||
echo "no frontend"
|
||||
sleep 5
|
||||
;;
|
||||
|
||||
*)
|
||||
DEFAULT_FRONTEND=retrofe
|
||||
echo "Unrecognized frontend: $frontend, setting $DEFAULT_FRONTEND"
|
||||
set_frontend "${DEFAULT_FRONTEND}"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Record the PID into a file, wait for the process to
|
||||
# terminate and erase the recorded PID
|
||||
pid record $!
|
||||
wait $!
|
||||
pid erase
|
||||
|
||||
# In case retrofe/opkrun quits with errors, clear graphic VT
|
||||
termfix_all
|
||||
|
||||
# In case retrofe/opkrun quits with errors, reset default key mapping
|
||||
keymap default
|
||||
fi
|
||||
|
||||
# Prevent 100% CPU usage
|
||||
sleep 0.5
|
||||
|
||||
# Exit if console rebooting
|
||||
if [ -f "${REBOOTING_FILE}" ]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# Remove lock file and exit
|
||||
rm "${LOCK_FILE}"
|
||||
}
|
||||
|
||||
# Check number of arguments
|
||||
if [ ${#} -lt 1 -o ${#} -gt 2 ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
case "${1}" in
|
||||
set)
|
||||
if [ ${#} -ne 2 ]; then
|
||||
usage
|
||||
fi
|
||||
set_frontend "${2}"
|
||||
;;
|
||||
|
||||
get)
|
||||
if [ ${#} -ne 1 ]; then
|
||||
usage
|
||||
fi
|
||||
get_frontend
|
||||
;;
|
||||
|
||||
init)
|
||||
if [ ${#} -ne 1 ]; then
|
||||
usage
|
||||
fi
|
||||
init_frontend
|
||||
;;
|
||||
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
exit 0
|
|
@ -0,0 +1,105 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Uncomment the following line to get debug info
|
||||
#set -x
|
||||
|
||||
SELF="$(basename ${0})"
|
||||
INSTANT_PLAY_FILE="/mnt/instant_play"
|
||||
RESUME_PLAY_FILE="/mnt/resume_play"
|
||||
LAST_OPK_FILE="/mnt/last_opk"
|
||||
PID_PATH="/var/run/pid_path"
|
||||
REBOOTING_FILE="/run/rebooting"
|
||||
|
||||
usage() {
|
||||
>&2 echo "Usage: ${SELF} load"
|
||||
>&2 echo " ${SELF} save application args..."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Check number of arguments
|
||||
if [ ${#} -lt 1 ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
case ${1} in
|
||||
load)
|
||||
if [ ${#} -ne 1 ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
# Umount any remaining OPK, if any
|
||||
umount /opk >/dev/null 2>&1
|
||||
|
||||
# Mount last OPK, if any
|
||||
if [ -r "${LAST_OPK_FILE}" ]; then
|
||||
last_opk=$(cat "${LAST_OPK_FILE}")
|
||||
mount -t squashfs "${last_opk}" /opk
|
||||
fi
|
||||
|
||||
# Remove unnecessary files
|
||||
rm -f "${RESUME_PLAY_FILE}"
|
||||
|
||||
# Launch Previous Game if any
|
||||
if [ -f "${INSTANT_PLAY_FILE}" ]; then
|
||||
keymap resume
|
||||
echo -n "Found Instant Play file, restarting previous game with command: "
|
||||
cat "${INSTANT_PLAY_FILE}"
|
||||
mv "${INSTANT_PLAY_FILE}" "${RESUME_PLAY_FILE}"
|
||||
source "${RESUME_PLAY_FILE}"
|
||||
rm -f "${RESUME_PLAY_FILE}"
|
||||
keymap default
|
||||
termfix_all
|
||||
fi
|
||||
|
||||
# Unmount last OPK, if any
|
||||
if [ -r "${LAST_OPK_FILE}" -a ! -f "${REBOOTING_FILE}" ]; then
|
||||
umount /opk
|
||||
rm "${LAST_OPK_FILE}"
|
||||
fi
|
||||
;;
|
||||
|
||||
save)
|
||||
if [ ${#} -lt 2 ]; then
|
||||
usage
|
||||
fi
|
||||
shift
|
||||
|
||||
# Get curent binary real path
|
||||
bin=$(printf %s "$1" | sed "s/'/'\\\\''/g")
|
||||
bin_name=$(basename "$bin")
|
||||
bin_path="$(cat $PID_PATH)"/"$bin_name"
|
||||
|
||||
# Write quick load file args
|
||||
echo -n "" > "${INSTANT_PLAY_FILE}"
|
||||
printf "'" >> "${INSTANT_PLAY_FILE}"
|
||||
echo -n "$bin_path" >> "${INSTANT_PLAY_FILE}"
|
||||
printf "' " >> "${INSTANT_PLAY_FILE}"
|
||||
shift
|
||||
|
||||
while [ "$#" != "0" ]
|
||||
do
|
||||
printf "'" >> "${INSTANT_PLAY_FILE}"
|
||||
printf %s "$1" | sed "s/'/'\\\\''/g" >> "${INSTANT_PLAY_FILE}"
|
||||
printf "' " >> "${INSTANT_PLAY_FILE}"
|
||||
shift
|
||||
done
|
||||
|
||||
# Add the magic sauce to launch the process in background,
|
||||
# record the PID into a file, wait for the process to
|
||||
# terminate and erase the recorded PID
|
||||
cat << EOF >> "${INSTANT_PLAY_FILE}"
|
||||
&
|
||||
pid record \$!
|
||||
wait \$!
|
||||
pid erase
|
||||
EOF
|
||||
|
||||
# Now terminate gracefully
|
||||
exec powerdown now
|
||||
;;
|
||||
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
exit 0
|
|
@ -1,20 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Uncomment the following line to get debug info
|
||||
#set -x
|
||||
|
||||
# Get USB state
|
||||
usb_present=$(cat /sys/class/power_supply/axp20x-usb/present)
|
||||
|
||||
# Get udc state
|
||||
udc_state=$(cat /sys/class/udc/musb-hdrc.1.auto/state)
|
||||
|
||||
if [[ x"$udc_state" == "xconfigured" -a "$usb_present" == "1" ]]; then
|
||||
|
||||
# Connected succesfully to a host
|
||||
echo "yes"
|
||||
exit 0
|
||||
else
|
||||
echo "no"
|
||||
exit 1
|
||||
fi
|
|
@ -0,0 +1,116 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Uncomment the following line to get debug info
|
||||
#set -x
|
||||
|
||||
SELF=$(basename ${0})
|
||||
LAST_MAPPING="/mnt/FunKey/.last_mapping.key"
|
||||
FIFO="/tmp/fkgpiod.fifo"
|
||||
|
||||
usage() {
|
||||
echo "Usage: ${SELF} default"
|
||||
echo " ${SELF} load <config_file>"
|
||||
echo " ${SELF} resume"
|
||||
echo " ${SELF} rom <rom_path>"
|
||||
echo " ${SELF} save <config_file>"
|
||||
exit 1
|
||||
}
|
||||
|
||||
log() {
|
||||
logger -t "${SELF}[$$]" "$*"
|
||||
}
|
||||
|
||||
write_fifo() {
|
||||
echo "${1}" >"${FIFO}" 2>/dev/null
|
||||
}
|
||||
|
||||
# Check number of args
|
||||
if [ ${#} -lt 1 ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
# Create FIFO it it does not exist yet
|
||||
if [ ! -p "${FIFO}" ]; then
|
||||
rm -f "${FIFO}"
|
||||
log "FIFO does not exist, create it"
|
||||
mkfifo "${FIFO}"
|
||||
chmod 0640 "${FIFO}"
|
||||
fi
|
||||
|
||||
case "${1}" in
|
||||
default)
|
||||
if [ ${#} -ne 1 ]; then
|
||||
usage
|
||||
fi
|
||||
log "default: LOAD /etc/fkgpiod.conf"
|
||||
write_fifo "LOAD /etc/fkgpiod.conf"
|
||||
;;
|
||||
|
||||
load)
|
||||
if [ ${#} -ne 2 ]; then
|
||||
usage
|
||||
fi
|
||||
config_file="${2}"
|
||||
log "load: LOAD ${config_file}"
|
||||
write_fifo "LOAD ${config_file}"
|
||||
log "load: SAVE ${LAST_MAPPING}"
|
||||
write_fifo "SAVE ${LAST_MAPPING}"
|
||||
;;
|
||||
|
||||
resume)
|
||||
if [ ${#} -ne 1 ]; then
|
||||
usage
|
||||
fi
|
||||
if [ -f "${LAST_MAPPING}" ]; then
|
||||
log "resume: LOAD ${LAST_MAPPING}"
|
||||
write_fifo "LOAD ${LAST_MAPPING}"
|
||||
fi
|
||||
;;
|
||||
|
||||
rom)
|
||||
if [ ${#} -gt 2 ]; then
|
||||
usage
|
||||
elif [ ${#} -eq 1 ]; then
|
||||
console_keymap=""
|
||||
rom_keymap=""
|
||||
else
|
||||
rom_path="${2}"
|
||||
console_keymap="$(dirname "${rom_path}")/default_config.key"
|
||||
rom_keymap="${rom_path%.*}.key"
|
||||
fi
|
||||
if [ -f "${console_keymap}" ]; then
|
||||
log "rom: LOAD ${console_keymap}"
|
||||
write_fifo "LOAD ${console_keymap}"
|
||||
fi
|
||||
for desktop_file in $(ls /opk/*.desktop 2>/dev/null); do
|
||||
opk_keymap=$(grep FK-Keymap= "${desktop_file}" | cut -d '=' -f 2)
|
||||
if [ "${opk_keymap:0:1}" != "/" ]; then
|
||||
opk_keymap="/opk/${opk_keymap}"
|
||||
fi
|
||||
if [ -f "${opk_keymap}" ]; then
|
||||
log "rom: LOAD ${opk_keymap}"
|
||||
write_fifo "LOAD ${opk_keymap}"
|
||||
fi
|
||||
done
|
||||
if [ -f "${rom_keymap}" ]; then
|
||||
log "rom: LOAD ${rom_keymap}"
|
||||
write_fifo "LOAD ${rom_keymap}"
|
||||
fi
|
||||
log "rom: SAVE ${LAST_MAPPING}"
|
||||
write_fifo "SAVE ${LAST_MAPPING}"
|
||||
;;
|
||||
|
||||
save)
|
||||
if [ ${#} -ne 2 ]; then
|
||||
usage
|
||||
fi
|
||||
config_file="${2}"
|
||||
log "save: SAVE ${config_file}"
|
||||
write_fifo "SAVE ${config_file}"
|
||||
;;
|
||||
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
exit 0
|
|
@ -1,4 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
killall mednafen gpsp psnes pcsx sdlgnuboy PicoDriveBin
|
||||
exit 0
|
|
@ -3,32 +3,28 @@
|
|||
# General constants declaration
|
||||
THRESHOLD_PERCENT_LOW_BAT=5
|
||||
THRESHOLD_PERCENT_EXTREMELY_LOW_BAT=2
|
||||
MAX_EXTREMELY_LOW_BAT_BEFORE_SHUTDOWN=5
|
||||
MAX_LOW_BAT_COUNT=5
|
||||
SLEEP_SECS=2
|
||||
RESCALE_MAX_PERCENTAGE=120
|
||||
|
||||
# Blink Low bat constants declaration
|
||||
BLINK_ICON=0
|
||||
LOW_BAT_SECS_DISPLAYED=5
|
||||
LOW_BAT_SECS_NOT_DISPLAYED=5
|
||||
LOW_BAT_DISPLAY_TIMEOUT=5
|
||||
|
||||
# Files and commands declaration
|
||||
USB_PRESENT_FILE=/sys/class/power_supply/axp20x-usb/present
|
||||
USB_PRESENT_FILE="/sys/class/power_supply/axp20x-usb/present"
|
||||
|
||||
# Cheat for no USB present simulation when debugging
|
||||
#USB_PRESENT_FILE=/sys/class/power_supply/axp20x-ac/present
|
||||
BAT_PRESENT_FILE=/sys/class/power_supply/axp20x-battery/present
|
||||
BAT_PERCENT_FILE=/sys/class/power_supply/axp20x-battery/capacity
|
||||
BAT_PERCENT_RESCALED_FILE=/tmp/current_battery_percentage
|
||||
LOW_BAT_ICON=/sys/class/graphics/fb0/low_battery
|
||||
SCHEDULE_SHUTDOWN_CMD=sched_shutdown
|
||||
SIGNAL_URS1_TO_EMULATORS_CMD=signal_usr1_to_emulators
|
||||
BAT_PRESENT_FILE="/sys/class/power_supply/axp20x-battery/present"
|
||||
BAT_PERCENT_FILE="/sys/class/power_supply/axp20x-battery/capacity"
|
||||
BAT_PERCENT_RESCALED_FILE="/tmp/current_battery_percentage"
|
||||
LOW_BAT_ICON="/sys/class/graphics/fb0/low_battery"
|
||||
|
||||
# Variables declaration
|
||||
low_bat_status=0
|
||||
low_bat_displayed=0
|
||||
cur_secs_disp=0
|
||||
cur_nb_extremely_low_bat_before_shutdown=0
|
||||
low_bat_count=0
|
||||
|
||||
# Default: Hide Low Bat Icon
|
||||
echo 0 > ${LOW_BAT_ICON}
|
||||
|
@ -73,7 +69,7 @@ while true; do
|
|||
|
||||
# Reset status
|
||||
low_bat_status=0
|
||||
cur_nb_extremely_low_bat_before_shutdown=0
|
||||
low_bat_count=0
|
||||
echo 0 > ${LOW_BAT_ICON}
|
||||
fi
|
||||
fi
|
||||
|
@ -82,7 +78,7 @@ while true; do
|
|||
|
||||
# Reset status
|
||||
low_bat_status=0
|
||||
cur_nb_extremely_low_bat_before_shutdown=0
|
||||
low_bat_count=0
|
||||
echo 0 > ${LOW_BAT_ICON}
|
||||
fi
|
||||
fi
|
||||
|
@ -92,24 +88,24 @@ while true; do
|
|||
|
||||
# Check extremely low bat for clean shutdown
|
||||
if [ ${cur_bat_percent} -le ${THRESHOLD_PERCENT_EXTREMELY_LOW_BAT} ]; then
|
||||
let cur_nb_extremely_low_bat_before_shutdown++
|
||||
echo "cur_nb_extremely_low_bat_before_shutdown = ${cur_nb_extremely_low_bat_before_shutdown}"
|
||||
let low_bat_count++
|
||||
echo "low_bat_count = ${low_bat_count}"
|
||||
|
||||
# Clean shutdown
|
||||
if [ ${cur_nb_extremely_low_bat_before_shutdown} -ge ${MAX_EXTREMELY_LOW_BAT_BEFORE_SHUTDOWN} ]; then
|
||||
if [ ${low_bat_count} -ge ${MAX_LOW_BAT_COUNT} ]; then
|
||||
echo "Battery extremely low, shutting down now..."
|
||||
sched_shutdown 1 & signal_usr1_to_emulators
|
||||
powerdown schedule 1
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# Blinking process
|
||||
if [ ${BLINK_ICON} -eq 1 ]; then
|
||||
if [ ${low_bat_displayed} -eq 1 -a ${cur_secs_disp} -ge ${LOW_BAT_SECS_DISPLAYED} ]; then
|
||||
if [ ${low_bat_displayed} -eq 1 -a ${cur_secs_disp} -ge ${LOW_BAT_DISPLAY_TIMEOUT} ]; then
|
||||
low_bat_displayed=0
|
||||
cur_secs_disp=0
|
||||
echo 0 > ${LOW_BAT_ICON}
|
||||
elif [ ${low_bat_displayed} -eq 0 -a ${cur_secs_disp} -ge ${LOW_BAT_SECS_NOT_DISPLAYED} ]; then
|
||||
elif [ ${low_bat_displayed} -eq 0 -a ${cur_secs_disp} -ge ${LOW_BAT_DISPLAY_TIMEOUT} ]; then
|
||||
low_bat_displayed=1
|
||||
cur_secs_disp=0
|
||||
echo 1 > ${LOW_BAT_ICON}
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Uncomment the following line to get debug info
|
||||
#set -x
|
||||
|
||||
SELF="$(basename ${0})"
|
||||
NOTIFICATION_DISPLAY=/sys/class/graphics/fb0/notification
|
||||
|
||||
usage() {
|
||||
>&2 echo "Usage: ${SELF} set duration message"
|
||||
>&2 echo " ${SELF} display duration message"
|
||||
>&2 echo " ${SELF} clear"
|
||||
exit 1
|
||||
}
|
||||
|
||||
notif_clear() {
|
||||
|
||||
printf "clear" > "${NOTIFICATION_DISPLAY}"
|
||||
}
|
||||
|
||||
notif_display() {
|
||||
local duration="${1}"
|
||||
local message="${*:2}"
|
||||
if ! [ ! "${duration}" -ne "${duration}" ] 2> /dev/null; then
|
||||
>&2 echo "error: ${duration} is not a number"
|
||||
exit 3
|
||||
fi
|
||||
printf "${message}" > "${NOTIFICATION_DISPLAY}"
|
||||
if [ ${duration} -ne 0 ]; then
|
||||
sleep ${duration}
|
||||
notif_clear
|
||||
fi
|
||||
}
|
||||
|
||||
notif_set() {
|
||||
local duration="${1}"
|
||||
local message="${*:2}"
|
||||
if ! [ ! "${duration}" -ne "${duration}" ]; then
|
||||
>&2 echo "error: ${duration} is not a number"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# Kill previous notif disp process
|
||||
pkill -f "notif display" 2> /dev/null
|
||||
|
||||
# Print new notif
|
||||
notif display "${duration}" "${message}" &
|
||||
}
|
||||
|
||||
case "${1}" in
|
||||
set)
|
||||
if [ ${#} -ne 3 ]; then
|
||||
usage
|
||||
fi
|
||||
shift
|
||||
notif_set "${1}" "${2}"
|
||||
;;
|
||||
|
||||
clear)
|
||||
if [ ${#} -ne 1 ]; then
|
||||
usage
|
||||
fi
|
||||
notif_clear
|
||||
;;
|
||||
|
||||
display)
|
||||
if [ ${#} -ne 3 ]; then
|
||||
usage
|
||||
fi
|
||||
shift
|
||||
notif_display "${1}" "${2}"
|
||||
;;
|
||||
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
exit 0
|
|
@ -1,8 +0,0 @@
|
|||
#!/bin/sh
|
||||
# Clear all current notifications
|
||||
|
||||
NOTIFICATION_DISPLAY=/sys/class/graphics/fb0/notification
|
||||
|
||||
printf "clear" > ${NOTIFICATION_DISPLAY}
|
||||
|
||||
exit 0
|
|
@ -1,38 +0,0 @@
|
|||
#!/bin/sh
|
||||
# Display notification for a certain amount of time
|
||||
# Special char: ^ to add a new line
|
||||
# Set seconds to 0 to display indefinitely (until the next notif)
|
||||
|
||||
NOTIFICATION_DISPLAY=/sys/class/graphics/fb0/notification
|
||||
|
||||
display_usage() {
|
||||
echo -e "Usage:\n$(basename ${0}) nb_seconds_display message_to_display\n"
|
||||
}
|
||||
|
||||
# If less than two arguments supplied, display usage
|
||||
if [ ${#} -le 1 ]; then
|
||||
echo "Display notification for a certain amount of time"
|
||||
display_usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get number of seconds to display notif
|
||||
nb_secs=${1}
|
||||
if ! [ ! "${nb_secs}" -ne "${nb_secs}" ] 2> /dev/null; then
|
||||
echo "error: ${nb_secs} is not a number" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Print notif
|
||||
printf "${*:2}" > ${NOTIFICATION_DISPLAY}
|
||||
|
||||
# Clear notif if NB_SECS is not 0, otherwise never clear
|
||||
if [ ${nb_secs} -ne 0 ]; then
|
||||
|
||||
# Wait time before clearing notif
|
||||
sleep ${nb_secs}
|
||||
|
||||
# Clear notif
|
||||
printf "clear" > ${NOTIFICATION_DISPLAY}
|
||||
fi
|
||||
exit 0
|
|
@ -1,36 +0,0 @@
|
|||
#!/bin/sh
|
||||
# Erase previous notif and display new one in background process for a certain amount of seconds
|
||||
# Special char: ^ to add a new line
|
||||
# Set seconds to 0 to display indefinitely (until the next notif_set)
|
||||
|
||||
NOTIFICATION_DISPLAY=/sys/class/graphics/fb0/notification
|
||||
|
||||
display_usage() {
|
||||
echo -e "Usage:\n$(basename ${0}) nb_seconds_display message_to_display\n"
|
||||
}
|
||||
|
||||
# If less than two arguments supplied, display usage
|
||||
if [ ${#} -le 1 ]; then
|
||||
echo "Erase previous notif and display new one in background process for a certain amount of time"
|
||||
echo "Special char: ^ to add a new line"
|
||||
echo "Set seconds to 0 to display indefinitely (until the next $(basename ${0}))"
|
||||
display_usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Get number of seconds to display notif
|
||||
nb_secs=${1}
|
||||
if ! [ ! "${nb_secs}" -ne "${nb_secs}" ]; then
|
||||
echo "error: ${nb_secs} is not a number" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Kill previous notif_disp process
|
||||
pkill notif_disp 2> /dev/null
|
||||
|
||||
## Clear previous notif
|
||||
#printf "clear" > ${NOTIFICATION_DISPLAY}
|
||||
|
||||
# Print new notif
|
||||
notif_disp "$@" &
|
||||
exit 0
|
|
@ -0,0 +1,59 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Uncomment the following line to get debug info
|
||||
#set -x
|
||||
|
||||
SELF="$(basename ${0})"
|
||||
PID_FILE="/var/run/funkey.pid"
|
||||
PID_PATH="/var/run/pid_path"
|
||||
|
||||
usage() {
|
||||
>&2 echo "Usage: ${SELF} record pid"
|
||||
>&2 echo " ${SELF} erase"
|
||||
>&2 echo " ${SELF} print"
|
||||
exit 1
|
||||
}
|
||||
|
||||
record_pid() {
|
||||
local pid="${1}"
|
||||
if ! [ ! "${pid}" -ne "${pid}" ]; then
|
||||
>&2 echo "error: ${pid} is not a number"
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# Save PID
|
||||
echo "${1}" > "${PID_FILE}"
|
||||
|
||||
# Save current pid path
|
||||
pid_path=$(dirname $(readlink /proc/${pid}/exe))
|
||||
echo -n "$pid_path" > "$PID_PATH"
|
||||
}
|
||||
|
||||
erase_pid() {
|
||||
rm -f "${PID_FILE}"
|
||||
}
|
||||
|
||||
case "${1}" in
|
||||
record)
|
||||
if [ ${#} -ne 2 ]; then
|
||||
usage
|
||||
fi
|
||||
record_pid "${2}"
|
||||
;;
|
||||
|
||||
erase)
|
||||
if [ ${#} -ne 1 ]; then
|
||||
usage
|
||||
fi
|
||||
erase_pid
|
||||
;;
|
||||
|
||||
print)
|
||||
cat "${PID_FILE}"
|
||||
;;
|
||||
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
exit 0
|
|
@ -0,0 +1,83 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Uncomment the following line to get debug info
|
||||
#set -x
|
||||
|
||||
SELF="$(basename ${0})"
|
||||
REBOOTING_FILE="/run/rebooting"
|
||||
|
||||
usage() {
|
||||
>&2 echo "Usage: ${SELF} schedule delay"
|
||||
>&2 echo " ${SELF} handle"
|
||||
>&2 echo " ${SELF} now"
|
||||
exit 1
|
||||
}
|
||||
|
||||
schedule_powerdown() {
|
||||
|
||||
# Send USR1 signal to the running FunKey process to warn about
|
||||
# impending shutdown
|
||||
kill -USR1 "$(pid print)" > /dev/null 2>&1
|
||||
|
||||
# Delay for the given grace period seconds to catch signal USR2.
|
||||
# If the signal is caught, then it means the running FunKey
|
||||
# process canceled this shutdown and will handle it by itself.
|
||||
sleep ${1}
|
||||
|
||||
# Delay expired, initiate final powerdown
|
||||
powerdown_now
|
||||
}
|
||||
|
||||
handle_powerdown() {
|
||||
pkill -f "powerdown schedule"
|
||||
}
|
||||
|
||||
powerdown_now() {
|
||||
|
||||
# Sync before all else
|
||||
sync
|
||||
|
||||
# Notif fullscreen "Shutting down"
|
||||
notif set 0 "^^^^^^^^ SHUTTING DOWN...^^^^^^^^"
|
||||
|
||||
# Notify system, reboot in progress
|
||||
touch "${REBOOTING_FILE}"
|
||||
|
||||
# Shutdown amp
|
||||
audio_amp off >/dev/null 2>&1
|
||||
|
||||
# Force Read Only
|
||||
ro
|
||||
|
||||
# Poweroff
|
||||
poweroff
|
||||
}
|
||||
|
||||
action="${1:-now}"
|
||||
case "${action}" in
|
||||
schedule)
|
||||
if [ ${#} != 2 -o "${2}" == "0" ]; then
|
||||
usage
|
||||
fi
|
||||
schedule_powerdown ${2}
|
||||
;;
|
||||
|
||||
handle)
|
||||
if [ ${#} -ne 1 ]; then
|
||||
usage
|
||||
fi
|
||||
handle_powerdown
|
||||
;;
|
||||
|
||||
now)
|
||||
if [ ${#} -gt 1 ]; then
|
||||
usage
|
||||
fi
|
||||
powerdown_now
|
||||
;;
|
||||
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
exit 0
|
|
@ -1,22 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
STEP_BRIGHTNESS=10
|
||||
NOTIF_DURATION=2
|
||||
|
||||
# Get current value
|
||||
current_brightness=$(brightness_get)
|
||||
|
||||
# Compute new brightness value
|
||||
new_brightness=0
|
||||
if [ ${current_brightness} -gt ${STEP_BRIGHTNESS} ]; then
|
||||
let new_brightness=${current_brightness}-${STEP_BRIGHTNESS}
|
||||
fi
|
||||
|
||||
# Change brightness
|
||||
if [ ${new_brightness} -ne ${current_brightness} ]; then
|
||||
brightness_set ${new_brightness}
|
||||
fi
|
||||
|
||||
# Notif
|
||||
notif_set ${NOTIF_DURATION} " BRIGHTNESS: ${new_brightness}%%"
|
||||
exit 0
|
|
@ -1,22 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
STEP_BRIGHTNESS=10
|
||||
NOTIF_DURATION=2
|
||||
|
||||
# Get current value
|
||||
current_brightness=$(brightness_get)
|
||||
|
||||
# Compute new brightness value
|
||||
let new_brightness=${current_brightness}+${STEP_BRIGHTNESS}
|
||||
if [ ${new_brightness} -gt 100 ]; then
|
||||
new_brightness=100
|
||||
fi
|
||||
|
||||
# Change brightness
|
||||
if [ ${new_brightness} -ne ${current_brightness} ]; then
|
||||
brightness_set ${new_brightness}
|
||||
fi
|
||||
|
||||
# Notif
|
||||
notif_set ${NOTIF_DURATION} " BRIGHTNESS: ${new_brightness}%%"
|
||||
exit 0
|
|
@ -1,22 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
STEP_VOLUME=10
|
||||
NOTIF_DURATION=2
|
||||
|
||||
# Get current value
|
||||
current_volume=$(volume_get)
|
||||
|
||||
# Compute new volume value
|
||||
new_volume=0
|
||||
if [ ${current_volume} -gt ${STEP_VOLUME} ]; then
|
||||
let new_volume=${current_volume}-${STEP_VOLUME}
|
||||
fi
|
||||
|
||||
# Change volume
|
||||
if [ ${new_volume} -ne ${current_volume} ]; then
|
||||
volume_set ${new_volume}
|
||||
fi
|
||||
|
||||
# Notif
|
||||
notif_set ${NOTIF_DURATION} " VOLUME: ${new_volume}%%"
|
||||
exit 0
|
|
@ -1,22 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
STEP_VOLUME=10
|
||||
NOTIF_DURATION=2
|
||||
|
||||
# Get current value
|
||||
current_volume=$(volume_get)
|
||||
|
||||
# Compute new volume value
|
||||
let new_volume=${current_volume}+${STEP_VOLUME}
|
||||
if [ ${new_volume} -gt 100 ]; then
|
||||
new_volume=100
|
||||
fi
|
||||
|
||||
# Change volume
|
||||
if [ ${new_volume} -ne ${current_volume} ]; then
|
||||
volume_set ${new_volume}
|
||||
fi
|
||||
|
||||
# Notif
|
||||
notif_set ${NOTIF_DURATION} " VOLUME: ${new_volume}%%"
|
||||
exit 0
|
|
@ -1,15 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
if [ ${#} != 1 ]; then
|
||||
echo "Usage: $0 seconds_before_shutdown"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
nb_secs_to_wait=$1
|
||||
|
||||
# Wait $nb_secs_to_wait seconds to catch signal USR2
|
||||
# If the signal is caught, then it means a process canceled this shutdown
|
||||
sleep ${nb_secs_to_wait}
|
||||
|
||||
# Too late to cancel: init shutdown
|
||||
shutdown_funkey
|
|
@ -48,12 +48,13 @@ mount_share () {
|
|||
fi
|
||||
|
||||
# Create the directory structure if required
|
||||
(cd /mnt; mkdir -p "Atari lynx" "Game Boy" "Game Boy Color" "Game Boy Advance" "Game Gear" "Neo Geo Pocket" "NES" "PS1" "PS1/bios" "Sega Genesis" "Sega Master System" "SNES" "WonderSwan" "PCE-TurboGrafx")
|
||||
#(cd /mnt; mkdir -p "Applications" "Emulators" "Games" "Atari lynx" "Game Boy" "Game Boy Color" "Game Boy Advance" "Game Gear" "Neo Geo Pocket" "NES" "PS1" "PS1/bios" "Sega Genesis" "Sega Master System" "SNES" "WonderSwan" "PCE-TurboGrafx")
|
||||
(cd /mnt; mkdir -p "Emulators" "Atari lynx" "Game Boy" "Game Boy Color" "Game Boy Advance" "Game Gear" "Neo Geo Pocket" "NES" "PS1" "PS1/bios" "Sega Genesis" "Sega Master System" "SNES" "WonderSwan" "PCE-TurboGrafx")
|
||||
|
||||
# Check if there is a firmware update file
|
||||
if [ -f /mnt/FunKey-*.fwu ]; then
|
||||
warn "found a firmware update file, going into recovery mode"
|
||||
notif "^^^^^^^^ UPDATING...^^^^^^^^"
|
||||
notif set 0 "^^^^^^^^ UPDATING...^^^^^^^^"
|
||||
recovery_mode
|
||||
fi
|
||||
|
||||
|
@ -126,6 +127,25 @@ is_share_started () {
|
|||
return $res
|
||||
}
|
||||
|
||||
is_usb_data_connected () {
|
||||
|
||||
# Get USB state
|
||||
local usb_present=$(cat /sys/class/power_supply/axp20x-usb/present)
|
||||
|
||||
# Get udc state
|
||||
local udc_state=$(cat /sys/class/udc/musb-hdrc.1.auto/state)
|
||||
|
||||
if [ "x${udc_state}" = "xconfigured" -a "${usb_present}" -eq 1 ]; then
|
||||
|
||||
# Connected succesfully to a host
|
||||
echo "yes"
|
||||
return 0
|
||||
else
|
||||
echo "no"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
|
||||
init)
|
||||
|
@ -144,6 +164,9 @@ case "$1" in
|
|||
is_share_started
|
||||
;;
|
||||
|
||||
is_usb_data_connected)
|
||||
is_usb_data_connected
|
||||
;;
|
||||
|
||||
*)
|
||||
die 15 "Usage $0 {init|start|stop|is_sharing}"
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Notif fullscreen "Shutting down"
|
||||
notif_set 0 "^^^^^^^^ SHUTTING DOWN...^^^^^^^^"
|
||||
|
||||
# Shutdown amp
|
||||
start_audio_amp 0 >/dev/null 2>&1
|
||||
|
||||
# Force Read Only
|
||||
ro
|
||||
|
||||
# Poweroff
|
||||
poweroff
|
|
@ -1,23 +0,0 @@
|
|||
#!/bin/sh
|
||||
# This should replaced by storing the correct PID before
|
||||
# launching an emulator and signaling only this one.
|
||||
|
||||
RUN_ENV_VAR=$(fw_printenv -n assembly_tests 2>/dev/null)
|
||||
if [ "x${RUN_ENV_VAR}" == "x1" ]; then
|
||||
# First this one
|
||||
killall -s USR1 assembly_tests > /dev/null 2>&1
|
||||
|
||||
# Then this one
|
||||
killall -s USR1 funkey_prod_screens > /dev/null 2>&1
|
||||
fi
|
||||
|
||||
# Send signal to all PCSX first (time critical)
|
||||
killall -s USR1 pcsx > /dev/null 2>&1
|
||||
|
||||
# Send signal to all other emulators
|
||||
killall -s USR1 gpsp psnes sdlgnuboy PicoDrive mednafen fceux > /dev/null 2>&1
|
||||
|
||||
# Send signal to launcher
|
||||
killall -s USR1 retrofe > /dev/null 2>&1
|
||||
|
||||
exit 0
|
|
@ -0,0 +1,33 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Uncomment the following line to get debug info
|
||||
#set -x
|
||||
|
||||
# Check args
|
||||
if [ ${#} -ne 0 ]; then
|
||||
echo "Usage: $(basename ${0})"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Lock file (necessary since fbgrab must run in bg not to block the buttons while gaming)
|
||||
LOCK_FILE="/var/lock/snap.lock"
|
||||
if [ -f "${LOCK_FILE}" ]; then
|
||||
echo "${LOCK_FILE} already exists"
|
||||
exit 1
|
||||
fi
|
||||
touch "${LOCK_FILE}"
|
||||
|
||||
# Increment name and save snapshot
|
||||
SNAPSHOT_EXT=PNG
|
||||
SNAPSHOT_DIR=/mnt/FunKey/snapshots
|
||||
mkdir -p "${SNAPSHOT_DIR}"
|
||||
last=$(cd ${SNAPSHOT_DIR}; ls IMG_*.${SNAPSHOT_EXT} 2> /dev/null | tail -1 | sed 's/^IMG_0*\([0-9]\+\)\.'${SNAPSHOT_EXT}'$/\1/')
|
||||
let last=${last}+1
|
||||
snapshot_file=$(printf "IMG_%04d.${SNAPSHOT_EXT}" $last)
|
||||
notif set 2 " SCREENSHOT ${snapshot_file}"
|
||||
fbgrab "${SNAPSHOT_DIR}/${snapshot_file}" >/dev/null 2>&1 &
|
||||
|
||||
# Remove lock file
|
||||
rm -f "${LOCK_FILE}"
|
||||
|
||||
exit 0
|
|
@ -1,31 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Check number of args
|
||||
if [ ${#} -ne 1 ]; then
|
||||
echo "Usage: $(basename ${0}) [1 for on, 0 for off]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check Enable arg
|
||||
enable=${1}
|
||||
if [ ${enable} -eq 1 ]; then
|
||||
echo "Turning audio amplifier ON"
|
||||
elif [ ${enable} -eq 0 ]; then
|
||||
echo "Turning audio amplifier OFF"
|
||||
else
|
||||
echo "Usage: $(basename ${0}) [1 for on, 0 for off]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# PA enable GPIO
|
||||
GPIO_PF6=166
|
||||
|
||||
# Export GPIO
|
||||
if [ ! -d /sys/class/gpio/gpio${GPIO_PF6} ]; then
|
||||
echo ${GPIO_PF6} > /sys/class/gpio/export
|
||||
fi
|
||||
|
||||
# Enable/disable cmd
|
||||
echo "out" > /sys/class/gpio/gpio${GPIO_PF6}/direction
|
||||
echo ${enable} > /sys/class/gpio/gpio${GPIO_PF6}/value
|
||||
exit 0
|
|
@ -1,12 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
LOCK_FILE=/var/lock/gpio_manager.lock
|
||||
|
||||
if [ -f ${LOCK_FILE} ]; then
|
||||
echo "${LOCK_FILE} already exists"
|
||||
exit 1
|
||||
fi
|
||||
touch ${LOCK_FILE}
|
||||
funkey_gpio_management
|
||||
rm "${LOCK_FILE}"
|
||||
exit 0
|
|
@ -1,46 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
LOCK_FILE=/var/lock/launcher.lock
|
||||
PREVENT_LAUNCHER_FILE=/mnt/prevent_launcher
|
||||
PREVENT_LAUNCHER_FILE2=/boot/prevent_launcher
|
||||
QUICK_LOAD_FILE=/mnt/quick_load_cmd
|
||||
|
||||
if [ -f ${LOCK_FILE} ]; then
|
||||
echo "${LOCK_FILE} already exists"
|
||||
exit 1
|
||||
fi
|
||||
touch ${LOCK_FILE}
|
||||
|
||||
mkdir -p ${MEDNAFEN_HOME}
|
||||
cp /usr/games/lynxboot.img /usr/games/mednafen-09x.cfg ${MEDNAFEN_HOME}/
|
||||
|
||||
# Launch Previous Game
|
||||
if [ -f ${QUICK_LOAD_FILE} ]; then
|
||||
command=$(cat ${QUICK_LOAD_FILE})
|
||||
echo "Found quick load file, restarting previous game with command:"
|
||||
echo ${command}
|
||||
rm ${QUICK_LOAD_FILE}
|
||||
eval ${command}
|
||||
termfix_all
|
||||
fi
|
||||
|
||||
# Loop to launch launcher indefinitely
|
||||
while true; do
|
||||
|
||||
# Check if prevent launcher file present
|
||||
if [ -f ${PREVENT_LAUNCHER_FILE} ]; then
|
||||
echo "Found file: ${PREVENT_LAUNCHER_FILE}, not launching launcher"
|
||||
sleep 5
|
||||
elif [ -f ${PREVENT_LAUNCHER_FILE2} ]; then
|
||||
echo "Found file: ${PREVENT_LAUNCHER_FILE2}, not launching launcher"
|
||||
sleep 5
|
||||
else
|
||||
# Launch Retrofe
|
||||
retrofe
|
||||
|
||||
# In case retrofe quits with errors, clear graphic VT
|
||||
termfix_all
|
||||
fi
|
||||
done
|
||||
rm ${LOCK_FILE}
|
||||
exit 0
|
|
@ -0,0 +1,18 @@
|
|||
#!/bin/sh
|
||||
|
||||
. /etc/os-release
|
||||
ROOTFS_VERSION=`echo $VERSION | sed -e 's/.*-g/g/'`
|
||||
ROOTFS_DATE=`date -r /etc/os-release '+%a %b %d %Y' `
|
||||
|
||||
KERNEL_VERSION=`uname -r`
|
||||
KERNEL_DATE=`uname -v |cut -d ' ' -f 3-5,8`
|
||||
PROCESSOR=`cat /proc/cpuinfo |head -1 |sed 's/^.*: //' `
|
||||
RAM=`cat /proc/meminfo | head -1 |sed 's/^MemTotal: \+//' `
|
||||
SWAP=`awk 'BEGIN { getline } { print "\t"$1": "$3" kB" }' /proc/swaps 2>/dev/null`
|
||||
[ "$SWAP" ] && SWAP="Swap: $SWAP\n"
|
||||
|
||||
echo -e "Kernel version: $KERNEL_VERSION\nCompiled: $KERNEL_DATE\n
|
||||
Root FS version: $ROOTFS_VERSION\nCompiled: $ROOTFS_DATE\n
|
||||
Processor: $PROCESSOR\nUsable RAM: $RAM\n$SWAP
|
||||
Network interfaces:"
|
||||
ip -o -4 address list | awk '{if ($2 != "lo") { printf "%7s %s\n", $2, gensub("/.*$", "", "g", $4) ; outlines++ } } END { if (outlines == 0) print " (none)" }'
|
|
@ -1,7 +1,25 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Uncomment the following line to get debug info
|
||||
#set -x
|
||||
|
||||
SELF="$(basename ${0})"
|
||||
UPDATE_PERIOD=2 #seconds
|
||||
|
||||
usage() {
|
||||
>2& echo "Usage: ${SELF} [toggle]"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Check number of arguments
|
||||
if [ ${#} -eq 1 -a "${1}" = "toggle" ]; then
|
||||
notif set 0 " Getting system stats..."
|
||||
killall -s USR1 "${SELF}"
|
||||
exit 0
|
||||
elif [ ${#} -ne 0 ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
notif_dirty=0
|
||||
perform=0
|
||||
|
||||
|
@ -10,7 +28,7 @@ function toggle_perform()
|
|||
{
|
||||
let perform=1-${perform}
|
||||
if [ ${perform} -eq 0 ]; then
|
||||
notif_clear
|
||||
notif clear
|
||||
notif_dirty=1
|
||||
fi
|
||||
}
|
||||
|
@ -20,16 +38,21 @@ while true; do
|
|||
if [ ${perform} -eq 1 ]; then
|
||||
|
||||
# Compute stats
|
||||
cpu=$(printf "%.1f\n" $(mpstat -P ALL $UPDATE_PERIOD 1 | tail -1 | awk '{print 100-$12}'))
|
||||
ram_mem=$(printf "%.1f\n" $(free | grep Mem | awk '{print $3/$2 * 100.0}'))
|
||||
ram_swap=$(printf "%.1f\n" $(free | grep Swap | awk '{print $3/$2 * 100.0}'))
|
||||
cpu=$(printf "%.0f\n" $(mpstat -P ALL $UPDATE_PERIOD 1 | tail -1 | awk '{print 100-$12}'))
|
||||
ram_mem=$(printf "%.0f\n" $(free | grep Mem | awk '{print $3/$2 * 100.0}'))
|
||||
ram_swap=$(printf "%.0f\n" $(free | grep Swap | awk '{print $3/$2 * 100.0}'))
|
||||
ip_addr=$(ifconfig usb0 | grep "inet " | awk -F'[: ]+' '{ print $4 }')
|
||||
|
||||
# Notif
|
||||
if [ ${notif_dirty} -eq 1 ]; then
|
||||
notif_clear
|
||||
notif clear
|
||||
notif_dirty=0
|
||||
else
|
||||
notif_set 0 "CPU:${cpu}%% RAM:${ram_mem}%% SWAP:${ram_swap}%%"
|
||||
if [ "x${ip_addr}" != "x" ]; then
|
||||
notif set 0 " CPU:${cpu}%% RAM:${ram_mem}%% SWAP:${ram_swap}%%^IP:${ip_addr}"
|
||||
else
|
||||
notif set 0 " CPU:${cpu}%% RAM:${ram_mem}%% SWAP:${ram_swap}%%"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
sleep ${UPDATE_PERIOD}
|
||||
|
|
|
@ -6,13 +6,17 @@ SELF=${SELF:-$(basename $0)}
|
|||
|
||||
source /usr/local/lib/utils
|
||||
|
||||
# The composite gadget directory
|
||||
# The composite gadget directory
|
||||
GADGET=/sys/kernel/config/usb_gadget/FunKey
|
||||
|
||||
# Check if Ethernet over USB network is requested
|
||||
[ ! -f /mnt/usbnet ]
|
||||
USBNET=${?}
|
||||
|
||||
# Check if Android Debug Bridge is requested
|
||||
[ ! -f /mnt/adb ]
|
||||
ADB=${?}
|
||||
|
||||
# USB VID for Linux Foundation
|
||||
ID_VENDOR="0x1d6b"
|
||||
|
||||
|
@ -37,6 +41,12 @@ init_usb_gadget() {
|
|||
return 0
|
||||
fi
|
||||
|
||||
# ADB has precedence over USB Mass Storage / Ethernet over USB
|
||||
if [ ${ADB} -eq 1 ]; then
|
||||
adb start
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Get the legacy drivers out of the way
|
||||
modprobe -r g_ether
|
||||
modprobe -r g_mass_storage
|
||||
|
@ -167,3 +177,48 @@ init_usb_gadget() {
|
|||
echo ${udc_driver} > ${GADGET}/UDC
|
||||
return 0
|
||||
}
|
||||
|
||||
# Deinitialize the USB gadget
|
||||
deinit_usb_gadget() {
|
||||
|
||||
# Unbind the device
|
||||
echo > ${GADGET}/UDC
|
||||
|
||||
# Remove functions from configurations
|
||||
rm ${GADGET}/configs/FunKey.1/mass_storage.mmcblk0p4
|
||||
if [ ${USBNET} -eq 1 ]; then
|
||||
rm ${GADGET}/configs/FunKey.1/rndis.usb0
|
||||
fi
|
||||
|
||||
# Remove string directories in configurations
|
||||
rmdir ${GADGET}/configs/FunKey.1/strings/0x409
|
||||
|
||||
# Remove configurations from OS descriptors
|
||||
if [ ${USBNET} -eq 1 ]; then
|
||||
rm ${GADGET}/os_desc/FunKey.1
|
||||
fi
|
||||
|
||||
# Remove configurations
|
||||
rmdir ${GADGET}/configs/FunKey.1
|
||||
|
||||
# Remove extended properties from OS descriptors
|
||||
if [ ${USBNET} -eq 1 ]; then
|
||||
rmdir ${GADGET}/functions/rndis.usb0/os_desc/interface.rndis/Icons
|
||||
rmdir ${GADGET}/functions/rndis.usb0/os_desc/interface.rndis/Label
|
||||
fi
|
||||
|
||||
# Remove functions
|
||||
rmdir ${GADGET}/functions/mass_storage.mmcblk0p4
|
||||
if [ ${USBNET} -eq 1 ]; then
|
||||
rmdir ${GADGET}/functions/rndis.usb0
|
||||
fi
|
||||
|
||||
# Remove strings
|
||||
rmdir ${GADGET}/strings/0x409
|
||||
|
||||
# Finallyy remove the gadget
|
||||
rmdir ${GADGET}
|
||||
|
||||
# Unload the kernel modules
|
||||
modprobe -r usb_f_mass_storage usb_f_rndis
|
||||
}
|
||||
|
|
|
@ -0,0 +1,136 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Uncomment the following line to get debug info
|
||||
#set -x
|
||||
|
||||
SELF="$(basename ${0})"
|
||||
DEFAULT_VOLUME_VALUE=50
|
||||
MINIMUM_VOLUME=16
|
||||
VOLUME_STEP=10
|
||||
NOTIF_DURATION=2
|
||||
|
||||
usage() {
|
||||
>&2 echo "Usage: ${SELF} get"
|
||||
>&2 echo " ${SELF} set new_volume_percentage"
|
||||
exit 1
|
||||
}
|
||||
|
||||
increase_volume() {
|
||||
|
||||
# Get current value
|
||||
local current_volume=$(get_volume)
|
||||
|
||||
# Compute new volume value
|
||||
local new_volume=0
|
||||
let new_volume=${current_volume}+${VOLUME_STEP}
|
||||
if [ ${new_volume} -gt 100 ]; then
|
||||
new_volume=100
|
||||
fi
|
||||
|
||||
# Change volume
|
||||
if [ ${new_volume} -ne ${current_volume} ]; then
|
||||
set_volume ${new_volume}
|
||||
fi
|
||||
|
||||
# Notif
|
||||
notif set ${NOTIF_DURATION} " VOLUME: ${new_volume}%%"
|
||||
}
|
||||
|
||||
decrease_volume() {
|
||||
|
||||
# Get current value
|
||||
local current_volume=$(get_volume)
|
||||
|
||||
# Compute new volume value
|
||||
local new_volume=0
|
||||
if [ ${current_volume} -gt ${VOLUME_STEP} ]; then
|
||||
let new_volume=${current_volume}-${VOLUME_STEP}
|
||||
fi
|
||||
|
||||
# Change volume
|
||||
if [ ${new_volume} -ne ${current_volume} ]; then
|
||||
set_volume ${new_volume}
|
||||
fi
|
||||
|
||||
# Notif
|
||||
notif set ${NOTIF_DURATION} " VOLUME: ${new_volume}%%"
|
||||
}
|
||||
|
||||
get_volume() {
|
||||
local volume=$(fw_printenv -n volume 2>/dev/null)
|
||||
if ! [ ! "${volume}" -ne "${volume}" ] 2> /dev/null; then
|
||||
volume=${DEFAULT_VOLUME_VALUE}
|
||||
fw_setenv volume ${volume}
|
||||
fi
|
||||
echo ${volume}
|
||||
}
|
||||
|
||||
set_volume() {
|
||||
|
||||
local current_volume=$(get_volume)
|
||||
|
||||
# Set the new volume value (from 0 to 63) into ALSA
|
||||
local new_volume=${1}
|
||||
local alsa_volume=$(echo "a = $new_volume * (63 - $MINIMUM_VOLUME) / 100 + \
|
||||
$MINIMUM_VOLUME + 0.5; scale = 0; a / 1" | bc -l)
|
||||
amixer -q sset 'Headphone' ${alsa_volume} unmute
|
||||
|
||||
# Set the new volume value in a bootloader variable
|
||||
if [ ${?} -eq 0 -a ${current_volume} -ne ${new_volume} ]; then
|
||||
fw_setenv volume ${new_volume}
|
||||
fi
|
||||
|
||||
# Turn on/off audio amplifier if necessary
|
||||
if [ ${new_volume} -eq 0 ]; then
|
||||
audio_amp off
|
||||
else
|
||||
audio_amp on
|
||||
fi
|
||||
}
|
||||
|
||||
# Check number of arguments
|
||||
if [ ${#} -lt 1 -o ${#} -gt 2 ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
case "${1}" in
|
||||
up)
|
||||
if [ ${#} -ne 1 ]; then
|
||||
usage
|
||||
fi
|
||||
increase_volume
|
||||
;;
|
||||
|
||||
down)
|
||||
if [ ${#} -ne 1 ]; then
|
||||
usage
|
||||
fi
|
||||
decrease_volume
|
||||
;;
|
||||
|
||||
get)
|
||||
if [ ${#} -ne 1 ]; then
|
||||
usage
|
||||
fi
|
||||
get_volume
|
||||
;;
|
||||
|
||||
set)
|
||||
if [ ${#} -ne 2 ]; then
|
||||
usage
|
||||
fi
|
||||
|
||||
# Make sure the argument is a positive number <= 100
|
||||
if [ -n "${2}" ] && [ "${2}" -eq "${2}" ] 2>/dev/null && \
|
||||
[ "${2}" -ge 0 ] && [ "${2}" -le 100 ]; then
|
||||
set_volume "${2}"
|
||||
else
|
||||
usage
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
exit 0
|
|
@ -1,18 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
VOLUME_DEFAULT_VALUE=50
|
||||
|
||||
# Check args
|
||||
if [ ${#} -ne 0 ]; then
|
||||
echo "Usage: $(basename ${0})"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Sanity check: Check if integer
|
||||
volume=$(fw_printenv -n volume 2>/dev/null)
|
||||
if ! [ ! "${volume}" -ne "${volume}" ] 2> /dev/null; then
|
||||
volume=${VOLUME_DEFAULT_VALUE}
|
||||
fw_setenv volume ${volume}
|
||||
fi
|
||||
echo ${volume}
|
||||
exit 0
|
|
@ -1,4 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
amixer sget 'Headphone' | tail -1 | cut -d' ' -f7 | sed 's/[^0-9]//g'
|
||||
exit 0
|
|
@ -1,38 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Check args
|
||||
if [ ${#} -ne 1 ]; then
|
||||
echo "Usage: $(basename ${0}) new_volume_percentage"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check value's range
|
||||
if [ ${1} -gt 100 ]; then
|
||||
echo "Usage: Wrong volume percentage (${1}), must be between 0 and 100"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Scale new volume value between 0 and 63
|
||||
volume_percent=${1}
|
||||
vol_mini=16;
|
||||
volume_scaled=$(echo "a = $volume_percent * (63 - $vol_mini) / 100 + $vol_mini + 0.5; scale = 0; a / 1" | bc -l)
|
||||
#echo $volume_scaled
|
||||
|
||||
# Get current value
|
||||
current_volume=$(volume_get)
|
||||
|
||||
# Turn on/off audio amplifier if necessary
|
||||
if [ ${current_volume} -eq 0 -a ${volume_percent} -ne 0 ]; then
|
||||
start_audio_amp 1
|
||||
elif [ ${current_volume} -ne 0 -a ${volume_percent} -eq 0 ]; then
|
||||
start_audio_amp 0
|
||||
fi
|
||||
|
||||
# Set new volume
|
||||
amixer -q sset 'Headphone' ${volume_scaled} unmute
|
||||
|
||||
# Change new volume value in volume file
|
||||
if [ ${?} -eq 0 -a ${current_volume} -ne ${volume_percent} ]; then
|
||||
fw_setenv volume ${volume_percent}
|
||||
fi
|
||||
exit 0
|
|
@ -1,31 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Check args
|
||||
if [ ${#} -ne 1 ]; then
|
||||
echo "Usage: ${0} new_volume_percentage"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check value's range
|
||||
if [ ${1} -gt 100 ]; then
|
||||
echo "Usage: Wrong volume percentage (${1}), must be between 0 and 100"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Scale new volume value between 0 and 63
|
||||
volume_percent=${1}
|
||||
volume_scaled=$(echo "a = ${1} * 63 / 100 + 0.5; scale = 0; a / 1" | bc -l)
|
||||
|
||||
# Get current value
|
||||
current_volume=$(volume_get)
|
||||
|
||||
# Turn on/off ampli if necessary
|
||||
if [ ${current_volume} -eq 0 -a ${volume_scaled} -ne 0 ]; then
|
||||
start_audio_amp 1
|
||||
elif [ ${current_volume} -ne 0 -a ${volume_scaled} -eq 0 ]; then
|
||||
start_audio_amp 0
|
||||
fi
|
||||
|
||||
# Set new volume
|
||||
amixer -q sset 'Headphone' ${volume_scaled} unmute
|
||||
exit 0
|
|
@ -1,18 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Write quick load file args
|
||||
QUICK_LOAD_FILE=/mnt/quick_load_cmd
|
||||
|
||||
echo -n "" > $QUICK_LOAD_FILE
|
||||
for i in "$@"; do
|
||||
if $(echo "$i" | egrep -q '[[:space:]]'); then
|
||||
|
||||
# Add quotes around arguments containing spaces
|
||||
echo -n "\"$i\" " >> ${QUICK_LOAD_FILE}
|
||||
else
|
||||
echo -n "$i " >> ${QUICK_LOAD_FILE}
|
||||
fi
|
||||
done
|
||||
echo "" >> ${QUICK_LOAD_FILE}
|
||||
|
||||
exit 0
|
|
@ -0,0 +1 @@
|
|||
This is the folder where you can put all your standalone applications opks
|
|
@ -0,0 +1 @@
|
|||
This is the folder where you can put all your emulators opks
|
|
@ -0,0 +1 @@
|
|||
This is the folder where you can put all your standalone games opks
|
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
.
|
|
@ -0,0 +1,20 @@
|
|||
GMenu2X has been created by Massimiliano "Ryo" Torromeo, and is released under the GPL-v2 license.
|
||||
|
||||
This version is maintained by the Qi-Hardware and OpenDingux crew. The credits, as well as the latest source code can be found here:
|
||||
http://projects.qi-hardware.com/index.php/p/gmenu2x
|
||||
|
||||
Credits for the translations:
|
||||
----
|
||||
English & Italian by Massimiliano Torromeo
|
||||
French by Paul Cercueil
|
||||
Danish by claus
|
||||
Dutch by superfly
|
||||
Spanish by pedator
|
||||
Portuguese (Portugal) by NightShadow
|
||||
Slovak by Jozef
|
||||
Swedish by Esslan and Micket
|
||||
German by fusion_power, johnnysnet and Waldteufel
|
||||
Finnish by Jontte and Atte
|
||||
Norwegian by Lithium Flower
|
||||
Russian by XaMMaX90
|
||||
Polish by Artur Rojek
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue