diff options
-rw-r--r-- | BoardConfig.mk | 5 | ||||
-rw-r--r--[-rwxr-xr-x] | audio/audio_hw.c | 62 | ||||
-rw-r--r--[-rwxr-xr-x] | audio/ril_interface.c | 23 | ||||
-rw-r--r--[-rwxr-xr-x] | audio/ril_interface.h | 1 | ||||
-rw-r--r-- | device.mk | 7 | ||||
-rw-r--r-- | egl.cfg | 4 | ||||
-rwxr-xr-x | init.tuna.rc | 31 | ||||
-rwxr-xr-x | init.tuna.usb.rc | 38 | ||||
-rw-r--r-- | kernel | bin | 3918988 -> 4072984 bytes | |||
-rw-r--r-- | liblight/lights.c | 14 | ||||
-rw-r--r-- | libsensors/SamsungSensorBase.cpp | 4 | ||||
-rw-r--r-- | libsensors/sensors.cpp | 12 | ||||
-rw-r--r-- | media_codecs.xml | 119 | ||||
-rwxr-xr-x | media_profiles.xml | 2 | ||||
-rw-r--r-- | nfc/nfc_hw.c | 6 | ||||
-rw-r--r-- | overlay/frameworks/base/core/res/res/values/config.xml | 10 | ||||
-rw-r--r-- | overlay/packages/apps/Settings/res/values-pl/arrays.xml | 12 | ||||
-rw-r--r-- | recovery/Android.mk | 2 | ||||
-rw-r--r-- | recovery/recovery_ui.c | 115 | ||||
-rw-r--r-- | recovery/recovery_ui.cpp | 111 |
20 files changed, 348 insertions, 230 deletions
diff --git a/BoardConfig.mk b/BoardConfig.mk index b1a43ac..21d411c 100644 --- a/BoardConfig.mk +++ b/BoardConfig.mk @@ -35,7 +35,7 @@ BOARD_KERNEL_BASE := 0x80000000 TARGET_NO_RADIOIMAGE := true TARGET_BOARD_PLATFORM := omap4 TARGET_BOOTLOADER_BOARD_NAME := tuna -TARGET_BOARD_INFO_FILE := device/samsung/tuna/board-info.txt +TARGET_BOARD_INFO_FILE ?= device/samsung/tuna/board-info.txt BOARD_EGL_CFG := device/samsung/tuna/egl.cfg @@ -43,6 +43,9 @@ BOARD_EGL_CFG := device/samsung/tuna/egl.cfg #BOARD_USES_OVERLAY := true USE_OPENGL_RENDERER := true +# set if the target supports FBIO_WAITFORVSYNC +TARGET_HAS_WAITFORVSYNC := true + TARGET_RECOVERY_PIXEL_FORMAT := "BGRA_8888" TARGET_RECOVERY_UI_LIB := librecovery_ui_tuna diff --git a/audio/audio_hw.c b/audio/audio_hw.c index bbd849a..7699ce4 100755..100644 --- a/audio/audio_hw.c +++ b/audio/audio_hw.c @@ -483,7 +483,7 @@ struct tuna_audio_device { pthread_mutex_t lock; /* see note below on mutex acquisition order */ struct mixer *mixer; struct mixer_ctls mixer_ctls; - int mode; + audio_mode_t mode; int devices; struct pcm *pcm_modem_dl; struct pcm *pcm_modem_ul; @@ -616,7 +616,7 @@ static int set_route_by_array(struct mixer *mixer, struct route_setting *route, static int start_call(struct tuna_audio_device *adev) { - LOGE("Opening modem PCMs"); + ALOGE("Opening modem PCMs"); pcm_config_vx.rate = adev->wb_amr ? VX_WB_SAMPLING_RATE : VX_NB_SAMPLING_RATE; @@ -624,7 +624,7 @@ static int start_call(struct tuna_audio_device *adev) if (adev->pcm_modem_dl == NULL) { adev->pcm_modem_dl = pcm_open(0, PORT_MODEM, PCM_OUT, &pcm_config_vx); if (!pcm_is_ready(adev->pcm_modem_dl)) { - LOGE("cannot open PCM modem DL stream: %s", pcm_get_error(adev->pcm_modem_dl)); + ALOGE("cannot open PCM modem DL stream: %s", pcm_get_error(adev->pcm_modem_dl)); goto err_open_dl; } } @@ -632,7 +632,7 @@ static int start_call(struct tuna_audio_device *adev) if (adev->pcm_modem_ul == NULL) { adev->pcm_modem_ul = pcm_open(0, PORT_MODEM, PCM_IN, &pcm_config_vx); if (!pcm_is_ready(adev->pcm_modem_ul)) { - LOGE("cannot open PCM modem UL stream: %s", pcm_get_error(adev->pcm_modem_ul)); + ALOGE("cannot open PCM modem UL stream: %s", pcm_get_error(adev->pcm_modem_ul)); goto err_open_ul; } } @@ -654,7 +654,7 @@ err_open_dl: static void end_call(struct tuna_audio_device *adev) { - LOGE("Closing modem PCMs"); + ALOGE("Closing modem PCMs"); pcm_stop(adev->pcm_modem_dl); pcm_stop(adev->pcm_modem_ul); @@ -876,7 +876,7 @@ static void force_all_standby(struct tuna_audio_device *adev) static void select_mode(struct tuna_audio_device *adev) { if (adev->mode == AUDIO_MODE_IN_CALL) { - LOGE("Entering IN_CALL state, in_call=%d", adev->in_call); + ALOGE("Entering IN_CALL state, in_call=%d", adev->in_call); if (!adev->in_call) { force_all_standby(adev); /* force earpiece route for in call state if speaker is the @@ -896,12 +896,11 @@ static void select_mode(struct tuna_audio_device *adev) adev->devices &= ~AUDIO_DEVICE_OUT_SPEAKER; select_output_device(adev); start_call(adev); - ril_set_call_clock_sync(&adev->ril, SOUND_CLOCK_START); adev_set_voice_volume(&adev->hw_device, adev->voice_volume); adev->in_call = 1; } } else { - LOGE("Leaving IN_CALL state, in_call=%d, mode=%d", + ALOGE("Leaving IN_CALL state, in_call=%d, mode=%d", adev->in_call, adev->mode); if (adev->in_call) { adev->in_call = 0; @@ -1147,7 +1146,7 @@ static int start_output_stream(struct tuna_stream_out *out) /* Close any PCMs that could not be opened properly and return an error */ for (i = 0; i < PCM_TOTAL; i++) { if (out->pcm[i] && !pcm_is_ready(out->pcm[i])) { - LOGE("cannot open pcm_out driver: %s", pcm_get_error(out->pcm[i])); + ALOGE("cannot open pcm_out driver: %s", pcm_get_error(out->pcm[i])); pcm_close(out->pcm[i]); out->pcm[i] = NULL; success = false; @@ -1166,7 +1165,7 @@ static int start_output_stream(struct tuna_stream_out *out) return -ENOMEM; } -static int check_input_parameters(uint32_t sample_rate, int format, int channel_count) +static int check_input_parameters(uint32_t sample_rate, audio_format_t format, int channel_count) { if (format != AUDIO_FORMAT_PCM_16_BIT) return -EINVAL; @@ -1191,7 +1190,7 @@ static int check_input_parameters(uint32_t sample_rate, int format, int channel_ return 0; } -static size_t get_input_buffer_size(uint32_t sample_rate, int format, int channel_count) +static size_t get_input_buffer_size(uint32_t sample_rate, audio_format_t format, int channel_count) { size_t size; size_t device_rate; @@ -1281,7 +1280,7 @@ static int get_playback_delay(struct tuna_stream_out *out, buffer->time_stamp.tv_sec = 0; buffer->time_stamp.tv_nsec = 0; buffer->delay_ns = 0; - LOGV("get_playback_delay(): pcm_get_htimestamp error," + ALOGV("get_playback_delay(): pcm_get_htimestamp error," "setting playbackTimestamp to 0"); return status; } @@ -1325,12 +1324,12 @@ static uint32_t out_get_channels(const struct audio_stream *stream) return AUDIO_CHANNEL_OUT_STEREO; } -static int out_get_format(const struct audio_stream *stream) +static audio_format_t out_get_format(const struct audio_stream *stream) { return AUDIO_FORMAT_PCM_16_BIT; } -static int out_set_format(struct audio_stream *stream, int format) +static int out_set_format(struct audio_stream *stream, audio_format_t format) { return 0; } @@ -1642,7 +1641,7 @@ static int start_input_stream(struct tuna_stream_in *in) /* this assumes routing is done previously */ in->pcm = pcm_open(0, PORT_MM2_UL, PCM_IN, &in->config); if (!pcm_is_ready(in->pcm)) { - LOGE("cannot open pcm_in driver: %s", pcm_get_error(in->pcm)); + ALOGE("cannot open pcm_in driver: %s", pcm_get_error(in->pcm)); pcm_close(in->pcm); adev->active_input = NULL; return -ENOMEM; @@ -1688,12 +1687,12 @@ static uint32_t in_get_channels(const struct audio_stream *stream) } } -static int in_get_format(const struct audio_stream *stream) +static audio_format_t in_get_format(const struct audio_stream *stream) { return AUDIO_FORMAT_PCM_16_BIT; } -static int in_set_format(struct audio_stream *stream, int format) +static int in_set_format(struct audio_stream *stream, audio_format_t format) { return 0; } @@ -1814,7 +1813,7 @@ static void get_capture_delay(struct tuna_stream_in *in, buffer->time_stamp.tv_sec = 0; buffer->time_stamp.tv_nsec = 0; buffer->delay_ns = 0; - LOGW("read get_capture_delay(): pcm_htimestamp error"); + ALOGW("read get_capture_delay(): pcm_htimestamp error"); return; } @@ -1835,7 +1834,7 @@ static void get_capture_delay(struct tuna_stream_in *in, buffer->time_stamp = tstamp; buffer->delay_ns = delay_ns; - LOGV("get_capture_delay time_stamp = [%ld].[%ld], delay_ns: [%d]," + ALOGV("get_capture_delay time_stamp = [%ld].[%ld], delay_ns: [%d]," " kernel_delay:[%ld], buf_delay:[%ld], rsmp_delay:[%ld], kernel_frames:[%d], " "in->frames_in:[%d], in->proc_frames_in:[%d], frames:[%d]", buffer->time_stamp.tv_sec , buffer->time_stamp.tv_nsec, buffer->delay_ns, @@ -1849,7 +1848,7 @@ static int32_t update_echo_reference(struct tuna_stream_in *in, size_t frames) struct echo_reference_buffer b; b.delay_ns = 0; - LOGV("update_echo_reference, frames = [%d], in->ref_frames_in = [%d], " + ALOGV("update_echo_reference, frames = [%d], in->ref_frames_in = [%d], " "b.frame_count = [%d]", frames, in->ref_frames_in, frames - in->ref_frames_in); if (in->ref_frames_in < frames) { @@ -1868,12 +1867,12 @@ static int32_t update_echo_reference(struct tuna_stream_in *in, size_t frames) if (in->echo_reference->read(in->echo_reference, &b) == 0) { in->ref_frames_in += b.frame_count; - LOGV("update_echo_reference: in->ref_frames_in:[%d], " + ALOGV("update_echo_reference: in->ref_frames_in:[%d], " "in->ref_buf_size:[%d], frames:[%d], b.frame_count:[%d]", in->ref_frames_in, in->ref_buf_size, frames, b.frame_count); } } else - LOGW("update_echo_reference: NOT enough frames to read ref buffer"); + ALOGW("update_echo_reference: NOT enough frames to read ref buffer"); return b.delay_ns; } @@ -1966,7 +1965,7 @@ static int get_next_buffer(struct resampler_buffer_provider *buffer_provider, in->config.period_size * audio_stream_frame_size(&in->stream.common)); if (in->read_status != 0) { - LOGE("get_next_buffer() pcm_read error %d", in->read_status); + ALOGE("get_next_buffer() pcm_read error %d", in->read_status); buffer->raw = NULL; buffer->frame_count = 0; return in->read_status; @@ -2055,7 +2054,7 @@ static ssize_t process_frames(struct tuna_stream_in *in, void* buffer, ssize_t f in->proc_buf = (int16_t *)realloc(in->proc_buf, in->proc_buf_size * in->config.channels * sizeof(int16_t)); - LOGV("process_frames(): in->proc_buf %p size extended to %d frames", + ALOGV("process_frames(): in->proc_buf %p size extended to %d frames", in->proc_buf, in->proc_buf_size); } frames_rd = read_frames(in, @@ -2236,7 +2235,7 @@ exit: static int adev_open_output_stream(struct audio_hw_device *dev, - uint32_t devices, int *format, + uint32_t devices, audio_format_t *format, uint32_t *channels, uint32_t *sample_rate, struct audio_stream_out **stream_out) { @@ -2393,7 +2392,7 @@ static int adev_set_master_volume(struct audio_hw_device *dev, float volume) return -ENOSYS; } -static int adev_set_mode(struct audio_hw_device *dev, int mode) +static int adev_set_mode(struct audio_hw_device *dev, audio_mode_t mode) { struct tuna_audio_device *adev = (struct tuna_audio_device *)dev; @@ -2426,7 +2425,7 @@ static int adev_get_mic_mute(const struct audio_hw_device *dev, bool *state) } static size_t adev_get_input_buffer_size(const struct audio_hw_device *dev, - uint32_t sample_rate, int format, + uint32_t sample_rate, audio_format_t format, int channel_count) { size_t size; @@ -2438,7 +2437,7 @@ static size_t adev_get_input_buffer_size(const struct audio_hw_device *dev, } static int adev_open_input_stream(struct audio_hw_device *dev, uint32_t devices, - int *format, uint32_t *channel_mask, + audio_format_t *format, uint32_t *channel_mask, uint32_t *sample_rate, audio_in_acoustics_t acoustics, struct audio_stream_in **stream_in) @@ -2507,6 +2506,7 @@ static int adev_open_input_stream(struct audio_hw_device *dev, uint32_t devices, return 0; err: + free(in->buffer); if (in->resampler) release_resampler(in->resampler); @@ -2522,8 +2522,8 @@ static void adev_close_input_stream(struct audio_hw_device *dev, in_standby(&stream->common); + free(in->buffer); if (in->resampler) { - free(in->buffer); release_resampler(in->resampler); } if (in->proc_buf) @@ -2612,7 +2612,7 @@ static int adev_open(const hw_module_t* module, const char* name, adev->mixer = mixer_open(0); if (!adev->mixer) { free(adev); - LOGE("Unable to open the mixer, aborting."); + ALOGE("Unable to open the mixer, aborting."); return -EINVAL; } @@ -2667,7 +2667,7 @@ static int adev_open(const hw_module_t* module, const char* name, !adev->mixer_ctls.earpiece_volume) { mixer_close(adev->mixer); free(adev); - LOGE("Unable to locate all mixer controls, aborting."); + ALOGE("Unable to locate all mixer controls, aborting."); return -EINVAL; } diff --git a/audio/ril_interface.c b/audio/ril_interface.c index 4e1e2a1..3d7ce06 100755..100644 --- a/audio/ril_interface.c +++ b/audio/ril_interface.c @@ -36,7 +36,6 @@ int (*_ril_is_connected)(void *); int (*_ril_disconnect)(void *); int (*_ril_set_call_volume)(void *, enum ril_sound_type, int); int (*_ril_set_call_audio_path)(void *, enum ril_audio_path); -int (*_ril_set_call_clock_sync)(void *, enum ril_clock_state); int (*_ril_register_unsolicited_handler)(void *, int, void *); int (*_ril_get_wb_amr)(void *, void *); @@ -72,7 +71,7 @@ static int ril_connect_if_required(struct ril_handle *ril) return 0; if (_ril_connect(ril->client) != RIL_CLIENT_ERR_SUCCESS) { - LOGE("ril_connect() failed"); + ALOGE("ril_connect() failed"); return -1; } @@ -94,7 +93,7 @@ int ril_open(struct ril_handle *ril) ril->handle = dlopen(RIL_CLIENT_LIBPATH, RTLD_NOW); if (!ril->handle) { - LOGE("Cannot open '%s'", RIL_CLIENT_LIBPATH); + ALOGE("Cannot open '%s'", RIL_CLIENT_LIBPATH); return -1; } @@ -105,7 +104,6 @@ int ril_open(struct ril_handle *ril) _ril_disconnect = dlsym(ril->handle, "Disconnect_RILD"); _ril_set_call_volume = dlsym(ril->handle, "SetCallVolume"); _ril_set_call_audio_path = dlsym(ril->handle, "SetCallAudioPath"); - _ril_set_call_clock_sync = dlsym(ril->handle, "SetCallClockSync"); _ril_register_unsolicited_handler = dlsym(ril->handle, "RegisterUnsolicitedHandler"); /* since this function is not supported in all RILs, don't require it */ @@ -113,16 +111,15 @@ int ril_open(struct ril_handle *ril) if (!_ril_open_client || !_ril_close_client || !_ril_connect || !_ril_is_connected || !_ril_disconnect || !_ril_set_call_volume || - !_ril_set_call_audio_path || !_ril_set_call_clock_sync || - !_ril_register_unsolicited_handler) { - LOGE("Cannot get symbols from '%s'", RIL_CLIENT_LIBPATH); + !_ril_set_call_audio_path || !_ril_register_unsolicited_handler) { + ALOGE("Cannot get symbols from '%s'", RIL_CLIENT_LIBPATH); dlclose(ril->handle); return -1; } ril->client = _ril_open_client(); if (!ril->client) { - LOGE("ril_open_client() failed"); + ALOGE("ril_open_client() failed"); dlclose(ril->handle); return -1; } @@ -148,7 +145,7 @@ int ril_close(struct ril_handle *ril) if ((_ril_disconnect(ril->client) != RIL_CLIENT_ERR_SUCCESS) || (_ril_close_client(ril->client) != RIL_CLIENT_ERR_SUCCESS)) { - LOGE("ril_disconnect() or ril_close_client() failed"); + ALOGE("ril_disconnect() or ril_close_client() failed"); return -1; } @@ -173,11 +170,3 @@ int ril_set_call_audio_path(struct ril_handle *ril, enum ril_audio_path path) return _ril_set_call_audio_path(ril->client, path); } - -int ril_set_call_clock_sync(struct ril_handle *ril, enum ril_clock_state state) -{ - if (ril_connect_if_required(ril)) - return 0; - - return _ril_set_call_clock_sync(ril->client, state); -} diff --git a/audio/ril_interface.h b/audio/ril_interface.h index 676772c..2ea83f8 100755..100644 --- a/audio/ril_interface.h +++ b/audio/ril_interface.h @@ -66,7 +66,6 @@ int ril_close(struct ril_handle *ril); int ril_set_call_volume(struct ril_handle *ril, enum ril_sound_type sound_type, float volume); int ril_set_call_audio_path(struct ril_handle *ril, enum ril_audio_path path); -int ril_set_call_clock_sync(struct ril_handle *ril, enum ril_clock_state state); void ril_register_set_wb_amr_callback(void *function, void *data); #endif @@ -48,8 +48,7 @@ PRODUCT_PACKAGES += \ PRODUCT_PACKAGES += \ audio.primary.tuna \ - audio.a2dp.default \ - libaudioutils + audio.a2dp.default PRODUCT_PACKAGES += \ tuna_hdcp_keys @@ -60,6 +59,7 @@ PRODUCT_COPY_FILES := \ device/samsung/tuna/init.tuna.usb.rc:root/init.tuna.usb.rc \ device/samsung/tuna/ueventd.tuna.rc:root/ueventd.tuna.rc \ device/samsung/tuna/media_profiles.xml:system/etc/media_profiles.xml \ + device/samsung/tuna/media_codecs.xml:system/etc/media_codecs.xml \ device/samsung/tuna/gps.conf:system/etc/gps.conf # Bluetooth configuration files @@ -75,8 +75,7 @@ PRODUCT_COPY_FILES += \ device/samsung/tuna/bcmdhd.cal:system/etc/wifi/bcmdhd.cal PRODUCT_PROPERTY_OVERRIDES := \ - wifi.interface=wlan0 \ - wifi.supplicant_scan_interval=15 + wifi.interface=wlan0 # Set default USB interface PRODUCT_DEFAULT_PROPERTY_OVERRIDES += \ @@ -1,3 +1 @@ -0 0 android -0 1 POWERVR_SGX540_120 - +0 0 POWERVR_SGX540_120 diff --git a/init.tuna.rc b/init.tuna.rc index 70f1cbe..107f496 100755 --- a/init.tuna.rc +++ b/init.tuna.rc @@ -23,6 +23,9 @@ on post-fs-data mkdir /data/misc/camera 0770 media media mkdir /data/misc/camera/R5_MVEN003_LD2_ND0_IR0_SH0_FL1_SVEN003_DCCID1044 0770 media media + mkdir /data/radio 0775 radio radio + mkdir /data/radio/log 0775 radio radio + setprop vold.post_fs_data_done 1 # LTE @@ -50,6 +53,10 @@ on boot write /sys/bus/usb/devices/usb1/power/autosuspend_delay_ms 0 write /sys/bus/usb/devices/usb2/power/autosuspend_delay_ms 0 +# Set up kernel tracing, but disable it by default + chmod 0222 /sys/kernel/debug/tracing/trace_marker + write /sys/kernel/debug/tracing/tracing_on 0 + on fs mkdir /factory 0775 radio radio mount ext4 /dev/block/platform/omap/omap_hsmmc.0/by-name/system /system wait ro @@ -77,8 +84,6 @@ on fs # We chown/chmod /factory because mount is run as root + defaults chown radio radio /factory chmod 0775 /factory - mkdir /data/radio 0775 radio radio - mkdir /data/radio/log 0775 radio radio # add symlink for HDCP key symlink /factory/hdcp.keys /system/vendor/firmware/hdcp.keys @@ -116,10 +121,10 @@ on fs chown radio radio /sys/bus/usb/devices/usb1/power/control on property:persist.sys.tuna.off_mode=* - write /d/pm_debug/enable_off_mode $persist.sys.tuna.off_mode + write /d/pm_debug/enable_off_mode ${persist.sys.tuna.off_mode} on property:ril.modem.lte.powercontrol=* - write /sys/bus/usb/devices/1-1/power/control $ril.modem.lte.powercontrol + write /sys/bus/usb/devices/1-1/power/control ${ril.modem.lte.powercontrol} service fRom /system/bin/fRom \ -x /data/misc/camera/R5_MVEN003_LD2_ND0_IR0_SH0_FL1_SVEN003_DCCID1044 \ @@ -138,7 +143,7 @@ service hciattach /system/bin/brcm_patchram_plus --enable_hci --no2bytes --enabl disabled oneshot -service pvrsrvinit /vendor/bin/pvrsrvinit +service pvrsrvctl /vendor/bin/pvrsrvctl --start --no-module class core user root group root @@ -173,8 +178,20 @@ service smc_pa_wvdrm /system/bin/smc_pa_ctrl \ service sdcard /system/bin/sdcard /data/media 1023 1023 class late_start +service p2p_supplicant /system/bin/wpa_supplicant \ + -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf -N \ + -ip2p0 -Dnl80211 -c/data/misc/wifi/p2p_supplicant.conf -e/data/misc/wifi/entropy.bin -puse_p2p_group_interface=1 + # we will start as root and wpa_supplicant will switch to user wifi + # after setting up the capabilities required for WEXT + # user wifi + # group wifi inet keystore + class main + socket wpa_wlan0 dgram 660 wifi wifi + disabled + oneshot + service wpa_supplicant /system/bin/wpa_supplicant \ - -Dnl80211 -iwlan0 -puse_p2p_group_interface=1 -e/data/misc/wifi/entropy.bin + -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf -e/data/misc/wifi/entropy.bin # we will start as root and wpa_supplicant will switch to user wifi # after setting up the capabilities required for WEXT # user wifi @@ -184,7 +201,7 @@ service wpa_supplicant /system/bin/wpa_supplicant \ disabled oneshot -service dhcpcd_wlan0 /system/bin/dhcpcd -ABKL +service dhcpcd_wlan0 /system/bin/dhcpcd -aABKL class main disabled oneshot diff --git a/init.tuna.usb.rc b/init.tuna.usb.rc index 20bf090..e86a7bd 100755 --- a/init.tuna.usb.rc +++ b/init.tuna.usb.rc @@ -1,79 +1,79 @@ on init - write /sys/class/android_usb/android0/iSerial $ro.serialno + write /sys/class/android_usb/android0/iSerial ${ro.serialno} write /sys/class/android_usb/android0/f_rndis/manufacturer Samsung write /sys/class/android_usb/android0/f_rndis/vendorID 04e8 write /sys/class/android_usb/android0/f_rndis/wceis 1 on boot - write /sys/class/android_usb/android0/iManufacturer $ro.product.manufacturer - write /sys/class/android_usb/android0/iProduct $ro.product.model + write /sys/class/android_usb/android0/iManufacturer ${ro.product.manufacturer} + write /sys/class/android_usb/android0/iProduct ${ro.product.model} on property:sys.usb.config=mtp write /sys/class/android_usb/android0/enable 0 write /sys/class/android_usb/android0/idVendor 04e8 write /sys/class/android_usb/android0/idProduct 685c - write /sys/class/android_usb/android0/functions $sys.usb.config + write /sys/class/android_usb/android0/functions ${sys.usb.config} write /sys/class/android_usb/android0/enable 1 - setprop sys.usb.state $sys.usb.config + setprop sys.usb.state ${sys.usb.config} on property:sys.usb.config=mtp,adb write /sys/class/android_usb/android0/enable 0 write /sys/class/android_usb/android0/idVendor 04e8 write /sys/class/android_usb/android0/idProduct 6860 - write /sys/class/android_usb/android0/functions $sys.usb.config + write /sys/class/android_usb/android0/functions ${sys.usb.config} write /sys/class/android_usb/android0/enable 1 start adbd - setprop sys.usb.state $sys.usb.config + setprop sys.usb.state ${sys.usb.config} on property:sys.usb.config=rndis write /sys/class/android_usb/android0/enable 0 write /sys/class/android_usb/android0/idVendor 04e8 write /sys/class/android_usb/android0/idProduct 6863 - write /sys/class/android_usb/android0/functions $sys.usb.config + write /sys/class/android_usb/android0/functions ${sys.usb.config} write /sys/class/android_usb/android0/bDeviceClass 224 write /sys/class/android_usb/android0/enable 1 - setprop sys.usb.state $sys.usb.config + setprop sys.usb.state ${sys.usb.config} on property:sys.usb.config=rndis,adb write /sys/class/android_usb/android0/enable 0 write /sys/class/android_usb/android0/idVendor 04e8 write /sys/class/android_usb/android0/idProduct 6864 - write /sys/class/android_usb/android0/functions $sys.usb.config + write /sys/class/android_usb/android0/functions ${sys.usb.config} write /sys/class/android_usb/android0/bDeviceClass 224 write /sys/class/android_usb/android0/enable 1 start adbd - setprop sys.usb.state $sys.usb.config + setprop sys.usb.state ${sys.usb.config} on property:sys.usb.config=ptp write /sys/class/android_usb/android0/enable 0 write /sys/class/android_usb/android0/idVendor 04e8 write /sys/class/android_usb/android0/idProduct 6865 - write /sys/class/android_usb/android0/functions $sys.usb.config + write /sys/class/android_usb/android0/functions ${sys.usb.config} write /sys/class/android_usb/android0/enable 1 - setprop sys.usb.state $sys.usb.config + setprop sys.usb.state ${sys.usb.config} on property:sys.usb.config=ptp,adb write /sys/class/android_usb/android0/enable 0 write /sys/class/android_usb/android0/idVendor 04e8 write /sys/class/android_usb/android0/idProduct 6866 - write /sys/class/android_usb/android0/functions $sys.usb.config + write /sys/class/android_usb/android0/functions ${sys.usb.config} write /sys/class/android_usb/android0/enable 1 start adbd - setprop sys.usb.state $sys.usb.config + setprop sys.usb.state ${sys.usb.config} on property:sys.usb.config=rndis,dm write /sys/class/android_usb/android0/enable 0 write /sys/class/android_usb/android0/idVendor 04e8 write /sys/class/android_usb/android0/idProduct 6864 - write /sys/class/android_usb/android0/functions $sys.usb.config + write /sys/class/android_usb/android0/functions ${sys.usb.config} write /sys/class/android_usb/android0/enable 1 - setprop sys.usb.state $sys.usb.config + setprop sys.usb.state ${sys.usb.config} on property:sys.usb.config=rndis,acm,dm write /sys/class/android_usb/android0/enable 0 write /sys/class/android_usb/android0/idVendor 04e8 write /sys/class/android_usb/android0/idProduct 6864 - write /sys/class/android_usb/android0/functions $sys.usb.config + write /sys/class/android_usb/android0/functions ${sys.usb.config} write /sys/class/android_usb/android0/f_acm/instances 1 write /sys/class/android_usb/android0/enable 1 - setprop sys.usb.state $sys.usb.config + setprop sys.usb.state ${sys.usb.config} Binary files differdiff --git a/liblight/lights.c b/liblight/lights.c index 8c675b2..1dfcd8b 100644 --- a/liblight/lights.c +++ b/liblight/lights.c @@ -54,7 +54,7 @@ static int write_int(char const *path, int value) already_warned = 0; - LOGV("write_int: path %s, value %d", path, value); + ALOGV("write_int: path %s, value %d", path, value); fd = open(path, O_RDWR); if (fd >= 0) { @@ -65,7 +65,7 @@ static int write_int(char const *path, int value) return amt == -1 ? -errno : 0; } else { if (already_warned == 0) { - LOGE("write_int failed to open %s\n", path); + ALOGE("write_int failed to open %s\n", path); already_warned = 1; } return -errno; @@ -95,7 +95,7 @@ static int set_light_backlight(struct light_device_t *dev, static int close_lights(struct light_device_t *dev) { - LOGV("close_light is called"); + ALOGV("close_light is called"); if (dev) free(dev); @@ -115,15 +115,15 @@ static int write_leds(struct an30259a_pr_control *led) if (fd >= 0) { err = ioctl(fd, AN30259A_PR_SET_IMAX, &imax); if (err) - LOGE("failed to set imax"); + ALOGE("failed to set imax"); err = ioctl(fd, AN30259A_PR_SET_LED, led); if (err < 0) - LOGE("failed to set leds!"); + ALOGE("failed to set leds!"); close(fd); } else { - LOGE("failed to open %s!", LED_FILE); + ALOGE("failed to open %s!", LED_FILE); err = -errno; } @@ -211,7 +211,7 @@ static struct hw_module_methods_t lights_module_methods = { .open = open_lights, }; -const struct hw_module_t HAL_MODULE_INFO_SYM = { +struct hw_module_t HAL_MODULE_INFO_SYM = { .tag = HARDWARE_MODULE_TAG, .version_major = 1, .version_minor = 0, diff --git a/libsensors/SamsungSensorBase.cpp b/libsensors/SamsungSensorBase.cpp index 0ec4915..fe3f14e 100644 --- a/libsensors/SamsungSensorBase.cpp +++ b/libsensors/SamsungSensorBase.cpp @@ -70,13 +70,13 @@ SamsungSensorBase::SamsungSensorBase(const char *dev_name, return; mInputSysfsEnable = makeSysfsName(input_name, "enable"); if (!mInputSysfsEnable) { - LOGE("%s: unable to allocate mem for %s:enable", __func__, + ALOGE("%s: unable to allocate mem for %s:enable", __func__, data_name); return; } mInputSysfsPollDelay = makeSysfsName(input_name, "poll_delay"); if (!mInputSysfsPollDelay) { - LOGE("%s: unable to allocate mem for %s:poll_delay", __func__, + ALOGE("%s: unable to allocate mem for %s:poll_delay", __func__, data_name); return; } diff --git a/libsensors/sensors.cpp b/libsensors/sensors.cpp index 156f08d..2a33731 100644 --- a/libsensors/sensors.cpp +++ b/libsensors/sensors.cpp @@ -16,7 +16,7 @@ #define LOG_NDEBUG 0 #define LOG_TAG "Sensors" -//#define FUNC_LOG LOGV("%s", __PRETTY_FUNCTION__) +//#define FUNC_LOG ALOGV("%s", __PRETTY_FUNCTION__) #define FUNC_LOG #include <hardware/sensors.h> @@ -215,7 +215,7 @@ sensors_poll_context_t::sensors_poll_context_t() int wakeFds[2]; int result = pipe(wakeFds); - LOGE_IF(result<0, "error creating wake pipe (%s)", strerror(errno)); + ALOGE_IF(result<0, "error creating wake pipe (%s)", strerror(errno)); fcntl(wakeFds[0], F_SETFL, O_NONBLOCK); fcntl(wakeFds[1], F_SETFL, O_NONBLOCK); mWritePipeFd = wakeFds[1]; @@ -249,7 +249,7 @@ int sensors_poll_context_t::activate(int handle, int enabled) if (!err) { const char wakeMessage(WAKE_MESSAGE); int result = write(mWritePipeFd, &wakeMessage, 1); - LOGE_IF(result<0, "error sending wake message (%s)", strerror(errno)); + ALOGE_IF(result<0, "error sending wake message (%s)", strerror(errno)); } return err; } @@ -306,14 +306,14 @@ int sensors_poll_context_t::pollEvents(sensors_event_t* data, int count) n = poll(mPollFds, numFds, nbEvents ? 0 : polltime); } while (n < 0 && errno == EINTR); if (n<0) { - LOGE("poll() failed (%s)", strerror(errno)); + ALOGE("poll() failed (%s)", strerror(errno)); return -errno; } if (mPollFds[wake].revents & POLLIN) { char msg; int result = read(mPollFds[wake].fd, &msg, 1); - LOGE_IF(result<0, "error reading from wake pipe (%s)", strerror(errno)); - LOGE_IF(msg != WAKE_MESSAGE, "unknown message on wake queue (0x%02x)", int(msg)); + ALOGE_IF(result<0, "error reading from wake pipe (%s)", strerror(errno)); + ALOGE_IF(msg != WAKE_MESSAGE, "unknown message on wake queue (0x%02x)", int(msg)); mPollFds[wake].revents = 0; } if(mPollFds[mpl_power].revents & POLLIN) { diff --git a/media_codecs.xml b/media_codecs.xml new file mode 100644 index 0000000..af21aa4 --- /dev/null +++ b/media_codecs.xml @@ -0,0 +1,119 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!-- Copyright (C) 2012 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<!-- +<!DOCTYPE MediaCodecs [ +<!ELEMENT MediaCodecs (Decoders,Encoders)> +<!ELEMENT Decoders (MediaCodec*)> +<!ELEMENT Encoders (MediaCodec*)> +<!ELEMENT MediaCodec (Type*,Quirk*)> +<!ATTLIST MediaCodec name CDATA #REQUIRED> +<!ATTLIST MediaCodec type CDATA> +<!ELEMENT Type EMPTY> +<!ATTLIST Type name CDATA #REQUIRED> +<!ELEMENT Quirk EMPTY> +<!ATTLIST Quirk name CDATA #REQUIRED> +]> + +There's a simple and a complex syntax to declare the availability of a +media codec: + +A codec that properly follows the OpenMax spec and therefore doesn't have any +quirks and that only supports a single content type can be declared like so: + + <MediaCodec name="OMX.foo.bar" type="something/interesting" /> + +If a codec has quirks OR supports multiple content types, the following syntax +can be used: + + <MediaCodec name="OMX.foo.bar" > + <Type name="something/interesting" /> + <Type name="something/else" /> + ... + <Quirk name="requires-allocate-on-input-ports" /> + <Quirk name="requires-allocate-on-output-ports" /> + <Quirk name="output-buffers-are-unreadable" /> + </MediaCodec> + +Only the three quirks included above are recognized at this point: + +"requires-allocate-on-input-ports" + must be advertised if the component does not properly support specification + of input buffers using the OMX_UseBuffer(...) API but instead requires + OMX_AllocateBuffer to be used. + +"requires-allocate-on-output-ports" + must be advertised if the component does not properly support specification + of output buffers using the OMX_UseBuffer(...) API but instead requires + OMX_AllocateBuffer to be used. + +"output-buffers-are-unreadable" + must be advertised if the emitted output buffers of a decoder component + are not readable, i.e. use a custom format even though abusing one of + the official OMX colorspace constants. + Clients of such decoders will not be able to access the decoded data, + naturally making the component much less useful. The only use for + a component with this quirk is to render the output to the screen. + Audio decoders MUST NOT advertise this quirk. + Video decoders that advertise this quirk must be accompanied by a + corresponding color space converter for thumbnail extraction, + matching surfaceflinger support that can render the custom format to + a texture and possibly other code, so just DON'T USE THIS QUIRK. + +--> + +<MediaCodecs> + <Decoders> + <MediaCodec name="OMX.TI.DUCATI1.VIDEO.DECODER" > + <Type name="video/mp4v-es" /> + <Type name="video/3gpp" /> + <Type name="video/avc" /> + <Quirk name="requires-allocate-on-input-ports" /> + <Quirk name="requires-allocate-on-output-ports" /> + </MediaCodec> + + <MediaCodec name="OMX.google.mp3.decoder" type="audio/mpeg" /> + <MediaCodec name="OMX.google.amrnb.decoder" type="audio/3gpp" /> + <MediaCodec name="OMX.google.amrwb.decoder" type="audio/amr-wb" /> + <MediaCodec name="OMX.google.aac.decoder" type="audio/mp4a-latm" /> + <MediaCodec name="OMX.google.g711.alaw.decoder" type="audio/g711-alaw" /> + <MediaCodec name="OMX.google.g711.mlaw.decoder" type="audio/g711-mlaw" /> + <MediaCodec name="OMX.google.vorbis.decoder" type="audio/vorbis" /> + + <MediaCodec name="OMX.google.mpeg4.decoder" type="video/mp4v-es" /> + <MediaCodec name="OMX.google.h263.decoder" type="video/3gpp" /> + <MediaCodec name="OMX.google.h264.decoder" type="video/avc" /> + <MediaCodec name="OMX.google.vpx.decoder" type="video/x-vnd.on2.vp8" /> + </Decoders> + + <Encoders> + <MediaCodec name="OMX.TI.DUCATI1.VIDEO.MPEG4E" > + <Type name="video/mp4v-es" /> + <Type name="video/3gpp" /> + <Quirk name="requires-allocate-on-input-ports" /> + <Quirk name="requires-allocate-on-output-ports" /> + </MediaCodec> + + <MediaCodec name="OMX.TI.DUCATI1.VIDEO.H264E" type="video/avc" > + <Quirk name="requires-allocate-on-input-ports" /> + <Quirk name="requires-allocate-on-output-ports" /> + </MediaCodec> + + <MediaCodec name="OMX.google.amrnb.encoder" type="audio/3gpp" /> + <MediaCodec name="OMX.google.amrwb.encoder" type="audio/amr-wb" /> + <MediaCodec name="OMX.google.aac.encoder" type="audio/mp4a-latm" /> + </Encoders> +</MediaCodecs> diff --git a/media_profiles.xml b/media_profiles.xml index 02058a5..ce6d7dd 100755 --- a/media_profiles.xml +++ b/media_profiles.xml @@ -367,7 +367,7 @@ minChannels="1" maxChannels="1" /> <AudioEncoderCap name="amrnb" enabled="true" - minBitRate="5525" maxBitRate="12200" + minBitRate="4750" maxBitRate="12200" minSampleRate="8000" maxSampleRate="8000" minChannels="1" maxChannels="1" /> diff --git a/nfc/nfc_hw.c b/nfc/nfc_hw.c index 99adc29..cd26be5 100644 --- a/nfc/nfc_hw.c +++ b/nfc/nfc_hw.c @@ -31,8 +31,6 @@ static uint8_t pn544_eedata_settings[][4] = { ,{0x00,0x9B,0xD6,0x1E} // GSP setting for this threshold ,{0x00,0x9B,0xDD,0x1C} // GSP setting for this threshold ,{0x00,0x9B,0x84,0x13} // ANACM2 setting - ,{0x00,0x99,0x81,0x7F} // ANAVMID setting PCD - ,{0x00,0x99,0x31,0x70} // ANAVMID setting PICC #ifdef maguro // Maguro load modulation settings ,{0x00,0x99,0x29,0xF4} // Type A load modulation amplitude fine tuning @@ -86,8 +84,8 @@ static uint8_t pn544_eedata_settings[][4] = { ,{0x00,0x9C,0x12,0x00} // ,{0x00,0x9C,0x13,0x00} // - //WTX for LLCP communication - ,{0x00,0x98,0xA2,0x0E} // Max value: 14 (default value: 09) + // NFC-DEP Target Waiting Time (WT) + ,{0x00,0x98,0xA2,0x08} // Set to 0x08 as required by [digital] (default value: 09) //SE GPIO ,{0x00, 0x98, 0x93, 0x40} diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml index 1af8aad..5b1f566 100644 --- a/overlay/frameworks/base/core/res/res/values/config.xml +++ b/overlay/frameworks/base/core/res/res/values/config.xml @@ -41,10 +41,10 @@ <bool name="config_unplugTurnsOnScreen">true</bool> <!-- Component name of the service providing network location support. --> - <string name="config_networkLocationProvider">com.google.android.location.NetworkLocationProvider</string> + <string name="config_networkLocationProvider" translatable="false">com.google.android.location.NetworkLocationProvider</string> <!-- Component name of the service providing geocoder API support. --> - <string name="config_geocodeProvider">com.google.android.location.GeocodeProvider</string> + <string name="config_geocodeProvider" translatable="false">com.google.android.location.GeocodeProvider</string> <!-- Flag indicating whether we should enable the automatic brightness in Settings. config_hardware_automatic_brightness_available is not set, so we will use software implementation --> @@ -239,17 +239,17 @@ <bool name="config_ui_enableFadingMarquee">false</bool> <!-- Component name of the service providing network location support. --> - <string name="config_networkLocationProvider">com.google.android.location.NetworkLocationProvider</string> + <string name="config_networkLocationProvider" translatable="false">com.google.android.location.NetworkLocationProvider</string> <!-- Component name of the service providing geocoder API support. --> - <string name="config_geocodeProvider">com.google.android.location.GeocodeProvider</string> + <string name="config_geocodeProvider" translatable="false">com.google.android.location.GeocodeProvider</string> <!-- Is the notification LED intrusive? Used to decide if there should be a disable option --> <bool name="config_intrusiveNotificationLed">true</bool> <!-- Component name of the default wallpaper. This will be ImageWallpaper if not specified --> - <string name="default_wallpaper_component">com.android.phasebeam/.PhaseBeamWallpaper</string> + <string name="default_wallpaper_component" translatable="false">com.android.phasebeam/.PhaseBeamWallpaper</string> <!-- Vibrator pattern for feedback about touching a virtual key --> <integer-array name="config_virtualKeyVibePattern"> diff --git a/overlay/packages/apps/Settings/res/values-pl/arrays.xml b/overlay/packages/apps/Settings/res/values-pl/arrays.xml index 265da14..3028803 100644 --- a/overlay/packages/apps/Settings/res/values-pl/arrays.xml +++ b/overlay/packages/apps/Settings/res/values-pl/arrays.xml @@ -21,11 +21,11 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string-array name="screen_timeout_entries"> - <item msgid="5314770629356662739">"15 sekund"</item> - <item msgid="8672738773876256432">"30 sekund"</item> - <item msgid="465923292941002466">"1 minuta"</item> - <item msgid="7955177189296850016">"2 minuty"</item> - <item msgid="1244255986255344525">"5 minut"</item> - <item msgid="294890536998091748">"10 minut"</item> + <item msgid="5314770629356662739">"15 sek."</item> + <item msgid="8672738773876256432">"30 sek."</item> + <item msgid="465923292941002466">"1 min."</item> + <item msgid="7955177189296850016">"2 min."</item> + <item msgid="1244255986255344525">"5 min."</item> + <item msgid="294890536998091748">"10 min."</item> </string-array> </resources> diff --git a/recovery/Android.mk b/recovery/Android.mk index 2fc8313..770feee 100644 --- a/recovery/Android.mk +++ b/recovery/Android.mk @@ -5,7 +5,7 @@ include $(CLEAR_VARS) LOCAL_MODULE_TAGS := eng LOCAL_C_INCLUDES += bootable/recovery -LOCAL_SRC_FILES := recovery_ui.c +LOCAL_SRC_FILES := recovery_ui.cpp # should match TARGET_RECOVERY_UI_LIB set in BoardConfig.mk LOCAL_MODULE := librecovery_ui_tuna diff --git a/recovery/recovery_ui.c b/recovery/recovery_ui.c deleted file mode 100644 index 50f8383..0000000 --- a/recovery/recovery_ui.c +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <linux/input.h> -#include <sys/stat.h> -#include <errno.h> -#include <string.h> - -#include "recovery_ui.h" -#include "common.h" - -char* MENU_HEADERS[] = { "Volume up/down to move highlight;", - "power button to select.", - "", - NULL }; - -char* MENU_ITEMS[] = { "reboot system now", - "apply update from /cache", - "wipe data/factory reset", - "wipe cache partition", - NULL }; - -void device_ui_init(UIParameters* ui_parameters) { -} - -int device_recovery_start() { - // recovery can get started before the kernel has created the EMMC - // devices, which will make the wipe_data operation fail (trying - // to open a device that doesn't exist). Hold up the start of - // recovery for up to 5 seconds waiting for the userdata partition - // block device to exist. - - const char* fn = "/dev/block/platform/omap/omap_hsmmc.0/by-name/userdata"; - - int tries = 0; - int ret; - struct stat buf; - do { - ++tries; - ret = stat(fn, &buf); - if (ret) { - printf("try %d: %s\n", tries, strerror(errno)); - sleep(1); - } - } while (ret && tries < 5); - if (!ret) { - printf("stat() of %s succeeded on try %d\n", fn, tries); - } else { - printf("failed to stat %s\n", fn); - } - - // We let recovery attempt to carry on even if the stat never - // succeeded. - - return 0; -} - -int device_toggle_display(volatile char* key_pressed, int key_code) { - // hold power and press volume-up - return key_pressed[KEY_POWER] && key_code == KEY_VOLUMEUP; -} - -int device_reboot_now(volatile char* key_pressed, int key_code) { - // Reboot if the power key is pressed five times in a row, with - // no other keys in between. - static int presses = 0; - if (key_code == KEY_POWER) { // power button - ++presses; - return presses == 5; - } else { - presses = 0; - return 0; - } -} - -int device_handle_key(int key_code, int visible) { - if (visible) { - switch (key_code) { - case KEY_DOWN: - case KEY_VOLUMEDOWN: - return HIGHLIGHT_DOWN; - - case KEY_UP: - case KEY_VOLUMEUP: - return HIGHLIGHT_UP; - - case KEY_ENTER: - case KEY_POWER: // crespo power - return SELECT_ITEM; - } - } - - return NO_ACTION; -} - -int device_perform_action(int which) { - return which == 1 ? ITEM_APPLY_CACHE : which; -} - -int device_wipe_data() { - return 0; -} diff --git a/recovery/recovery_ui.cpp b/recovery/recovery_ui.cpp new file mode 100644 index 0000000..0c8b8f9 --- /dev/null +++ b/recovery/recovery_ui.cpp @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <linux/input.h> +#include <sys/stat.h> +#include <errno.h> +#include <string.h> + +#include "common.h" +#include "device.h" +#include "screen_ui.h" + +const char* HEADERS[] = { "Volume up/down to move highlight;", + "power button to select.", + "", + NULL }; + +const char* ITEMS[] = { "reboot system now", + "apply update from ADB", + "apply update from USB drive", + "wipe data/factory reset", + "wipe cache partition", + NULL }; + +class TunaUI : public ScreenRecoveryUI { + public: + TunaUI() : + consecutive_power_keys(0) { + } + + virtual KeyAction CheckKey(int key) { + if (IsKeyPressed(KEY_POWER) && key == KEY_VOLUMEUP) { + return TOGGLE; + } + if (key == KEY_POWER) { + ++consecutive_power_keys; + if (consecutive_power_keys >= 7) { + return REBOOT; + } + } else { + consecutive_power_keys = 0; + } + return ENQUEUE; + } + + private: + int consecutive_power_keys; +}; + + +class TunaDevice : public Device { + public: + TunaDevice() : + ui(new TunaUI) { + } + + RecoveryUI* GetUI() { return ui; } + + int HandleMenuKey(int key_code, int visible) { + if (visible) { + switch (key_code) { + case KEY_DOWN: + case KEY_VOLUMEDOWN: + return kHighlightDown; + + case KEY_UP: + case KEY_VOLUMEUP: + return kHighlightUp; + + case KEY_POWER: + return kInvokeItem; + } + } + + return kNoAction; + } + + BuiltinAction InvokeMenuItem(int menu_position) { + switch (menu_position) { + case 0: return REBOOT; + case 1: return APPLY_ADB_SIDELOAD; + case 2: return APPLY_EXT; + case 3: return WIPE_DATA; + case 4: return WIPE_CACHE; + default: return NO_ACTION; + } + } + + const char* const* GetMenuHeaders() { return HEADERS; } + const char* const* GetMenuItems() { return ITEMS; } + + private: + RecoveryUI* ui; +}; + +Device* make_device() { + return new TunaDevice; +} |