FORUMS
Remove All Ads from XDA

[ROM][6.0.1] CyanogenMod 13.0 Builds [6.0.1_r74][2016/12/5][Linux+CAF+Google+CM]

9,828 posts
Thanks Meter: 19,296
 
By jgcaap, Senior Member on 3rd March 2015, 12:54 PM
Post Reply Email Thread
CyanogenMOD Builds

Hello everyone, after long studying both kernel and ROMs, i've decided to start building a ROM of my own.


Download

If you want to use Xposed. After flashing rom, boot it and only after that flash Xposed.

GAPPS

Support and a complete pack with other stuff (cm-12.1)

It is recommended to use F2FS.

Recovery - Wipe - advanced wipe - Select internal card - FS options - Check F2FS and swipe.

Remember that you'll loose everything on your internal memory.

Partition configuration i recomend for best speed:
cache --> F2FS
Internal Data -->F2FS
System --> EXT4


Features:
Updated SQL to 3.14.1
Optimized SQL code for faster Read/Write
CM Super User (for now is the most stable one)
CameraNext from COS13
New Kernel
Improved Code of frameworks
Optimized Build with custom toolchain on ROM and Kernel
Optimizations for our chip
Improved sound with speex resampler
Improved bionic with many optimized libraries (faster rom)
Improved Art with upstream patches
More than 100 mem fixes not included on cm builds
Optimized native frameworks for our device
LZMA updated to the latest
Proguard 5.3
Google Webview
F2FS ready for data and cache
Immersive mode
Expanded Notifications
Network Monitor
K1 Camera (Color OS camera and plugins)
ColorOs Blobs (much better quality)
More coming soon



I'm a very praticle user, and my aim will be to get a very fluid stable system, at same time with speed and battery, keeping most stock possible with the optimizations which will improve for real our experience.

Thanks

You problably wondering why i say is CAF+Google+CM. It's in fact very easy... and i have seen many threads which mislead the interpertation. Google provides AOSP+ kernel patches for the nexus devices which are for our chipset.
Qualcom provides CAF changes which is over linux kernel changes and google changes. (in other words kernel is linux based and frameworks/art/bionic are based on the google stuff which is also based on linux)
We still have CM changes.

So basically how it works? i'll simplify

We use Google as base which includes CAF changes and CM changes... and with this ROM... jgcaap changes

So why Add CAF on some roms at tittle?
Basically is linux kernel with CAF changes without google or CM changes on kernel (and kernel only)

But let me add you some knowledge here. What you call CAF is in fact Oxygen OS kernel. In other words, what Devs which have on title CAF which is related to 3.4.0 kernel is in fact linux+CAF+Oxygen OS.

Oxygen OS changes is only compatible with blobs which are from oxygen OS, and we do not use it. So because of that, the rom problably won't boot in case you flash a "CAF" kernel

Why some Devs use the called CAF and some CM source?

Depends on preference. I prefer CM because i believe is the best not only on performance but also never had issues with it. But there might be different experiences regarding the phone you have since we all have different batches. There are devs which believe that compability issues might be related to some CM commits. As also, there are devs which think the other way around.



Join out Google+ community

Big thanks to @RobbieL811 for the patience and help he provided to create these builds.
Thanks also for the experience i won with @ak @savoca @Lord Boeffla @ZaneZam by discussing and learning about the kernel. A big thanks to @dorimanx. Thank you @franciscofranco for commits to improve kernel!
Thank you @Markox89 on being first help on rom building. @katinatez for guiding me to create better builds! @arter97 for his toolchains and commits.
Thanks @supervis0r for the headbanner.
As you might know, all credits go to CyanogenMod Team.


Source Code
OnePlus Thread
If you like my work, please consider a donation.
Attached Thumbnails
Click image for larger version

Name:	KlnDQuI.png
Views:	77378
Size:	17.5 KB
ID:	3250263  
The Following 386 Users Say Thank You to jgcaap For This Useful Post: [ View ] Gift jgcaap Ad-Free
3rd March 2015, 02:54 PM |#2  
jgcaap's Avatar
OP Senior Member
Flag Porto
Thanks Meter: 19,296
 
Donate to Me
More
Flashing instructions:
1) Firmware (I'll keep updated always when necessary.)
2) ROM
3) Slim Gapps (don't flash any other)
4) Let me know how it go.

Notes:
1) keep new modem which is on the op, also compatible with oxygen modem (I'll upload)
2) flash rom after rebooting recovery
3) kernel development will be 3.60 and upward.



Toubleshooting:

I'm not responsible for any damage caused to the device.

There is a bug which drains battery over ambient display, if you have drains, is a CM/google bug (problably a feature i'll deprecrate in case i'm not able to improve it).

You'll get great performance and stuff working if you use exatly what i've shared.

Mods/kernels/scripts not provided by me, i won't give any support.

Problem: After flashing firmware appear no SIM
Solution: There is a known problem with TWRP ofiicial. Download the custom version from katinatez which is 2.8.6.0 or 2.8.7.5 and flash again

Description: TWRP messed up

Problem: Appears wrong binary when flashing new ROM, even by flashing firmware
Solution: flash new firmware, reboot recovery, flash rom.

Changelog :

22/02/2016

cm-13.0 9b2ae3b] Fix for launching App from Recent Apps on first click
Author: Narendra <[email protected]>
Date: Mon Feb 1 16:23:00 2016 +0530
1 file changed, 8 insertions(+), 1 deletion(-)
[cm-13.0 9fa1b87] Fix NullPointerException in DhcpPacket.getTransactionId()
Author: Damien Vagner <[email protected]>
Date: Tue Jan 26 16:41:51 2016 +0100
1 file changed, 2 insertions(+)
[cm-13.0 8e92512] BatteryStats: fix wrong calculation of battery voltage
Author: yangxiaoxing <[email protected]>
Date: Mon Feb 15 20:18:49 2016 +0800
1 file changed, 4 insertions(+), 4 deletions(-)
[cm-13.0 2aa17a5] Use clang for libhwui
Author: Chris Craik <[email protected]>
Date: Tue Nov 3 10:33:34 2015 -0800
1 file changed, 3 insertions(+)
[cm-13.0 19bde4a] Avoid unregistering client while stopping LE Scan
Author: Om Prakash Sahoo <[email protected]>
Date: Thu Mar 19 11:23:31 2015 +0100
1 file changed, 1 insertion(+), 3 deletions(-)
[cm-13.0 fd1596b] When the applicantion is removed, reset network permission of this uid.
Author: zhangshuxiao <[email protected]>
Date: Wed Feb 3 21:28:25 2016 +0800
1 file changed, 34 insertions(+), 1 deletion(-)
[cm-13.0 68870f2] Camera2: Fix getInternalFormatSizes for depth
Author: Chien-Yu Chen <[email protected]>
Date: Tue Feb 16 14:28:50 2016 -0800
1 file changed, 4 insertions(+), 2 deletions(-)
[cm-13.0 8bd72fa] ImageReader: override the flexible YUV compatible formats
Author: Zhijun He <[email protected]>
Date: Wed Feb 17 17:24:04 2016 -0800
1 file changed, 8 insertions(+)
[cm-13.0 cb55b48] The value returned by mNotificationList.size() is out of synchronize
Author: guoyin.chen <[email protected]>
Date: Wed Feb 17 15:21:53 2016 +0800
1 file changed, 3 insertions(+), 2 deletions(-)
[cm-13.0 5c534d6] Framework changes for disabling per app metered network usage
Author: Kamaljeet Maini <[email protected]>
Date: Fri Jan 8 14:17:41 2016 -0800
2 files changed, 15 insertions(+), 2 deletions(-)
[cm-13.0 a770f26] Return only if both playback and capture not present
Author: Sumit Bhattacharya <[email protected]>
Date: Mon Sep 28 15:13:28 2015 +0530
1 file changed, 10 insertions(+), 2 deletions(-)
[cm-13.0 ea55b93] Fix bugs : when user designate print range, NumberFormatException is occured.
Author: hyoyeon.hwang <[email protected]>
Date: Thu Feb 11 19:18:01 2016 +0900
1 file changed, 8 insertions(+), 2 deletions(-)
[cm-13.0 600a94e] Sometimes property service is slow to respond.
Author: Gao,KunX <[email protected]>
Date: Mon Oct 21 16:16:00 2013 +0800
1 file changed, 1 insertion(+)
[cm-13.0 0fbe527] Don't apply clang flag to gcc builds.
Author: Dan Albert <[email protected]>
Date: Thu Nov 5 00:59:09 2015 -0800
1 file changed, 1 insertion(+), 1 deletion(-)
[cm-13.0 45e55ba] UsbdeviceManager: Avoid sending extra USB_STATE broadcast intent
Author: Maunik Shah <[email protected]>
Date: Sat Dec 12 15:28:51 2015 +0530
1 file changed, 1 deletion(-)
[cm-13.0 d516638] Fix to NullPointerException when activity is relaunched
Author: Daniel 2 Olofsson <[email protected]>
Date: Tue Apr 30 11:50:16 2013 +0200
1 file changed, 8 insertions(+)
[cm-13.0 f0506b2] ChooseTypeAndAccountActivity: Fix the NullPointerException
Author: kaiyiz <[email protected]>
Date: Fri Jul 26 15:27:39 2013 +0800
1 file changed, 1 insertion(+), 1 deletion(-)
[cm-13.0 49a0b89] Performance Optimization: Align texture dirty rect
Author: ywen <[email protected]>
Date: Mon Feb 15 16:09:40 2016 +0800
1 file changed, 10 insertions(+), 4 deletions(-)
[cm-13.0 b0493ba] Avoid duplicate call to onLoadFinished()
Author: Romain Vimont (®om) <[email protected]>
Date: Thu Dec 5 11:08:10 2013 +0100
1 file changed, 1 insertion(+), 1 deletion(-)

07/01/2016

ART:
Fix bogus logging statement. …
Fix 030-bad-finalizer & 059-finalizer-throw. …
Partially fix 046-reflect. …
Fix 137-cfi. …
Fix 055-enum-performance. …
Fix bug with test 964.

Frameworks:

System crash fixed when turn off MagnificationGesture …
Allow faster app switching …
SwipeHelper: Let's cut Max Excape Animation in Half too …
Reduce risk of memory corruption due to finalization. …
NullPointerException when starting VoiceInteractionManagerService …

Added:
Network monitor

bacon configs:
updated WCNSS
Synced with hammer configs
updated camera configs

kernel:
synced with CM

built kernel 2.53 with a new touch driver, let me know if is better.

misc:
updated SuperSU 2.66

05/01/2016

Changelog:
Added CAF task manager
Add Snapdragon Camera

frameworks/base
Scroll: modified velocitytracker …
Reduce synchronized region when checking idle states. …
handle timeout of requestNetwork …
Skip duplicated appop checking of ContentProvider. …
SettingsProvider: Update icon. …
ConcurrentModificationException in SyncManager …
Restart persistent process if start timeout. …
Reduce sscanf times for optimization …
Make 'Restrict Background Data' notification swipeable …
PackageManager: allow build-time disabling of components …
base: Allow certian browsers to log-in …
Trace SQLite operations …
Forward Port: Smoother Upload and Download Animation …
Fix On Tap Home button …

ART:
rebased ART with caf stuff and CM (undertest)
Disabled clang for now.

Kernel:
Disabled cortex-a15 as there is evidence for causing battery drains.

26/12/2015
on rom level was added:
compiler-rt latest available
openssh latest available
jpeg latest available
libhevc latest available
lzma latest available
sqlite 3.9.2
Random reboots fix
Code synced with CM
New toolchain GCC 4.9 optimized for our device for ROM and Kernel
Added boring SSL
Hopefully killed the graphics random anoying whatever we call it.


On art:
Remove unused WorkStealing thread pool
ART: Abort if malloc() fails in SwapAllocator::allocate().
ART: Include zero-padding in String::SizeOf().
ART: Fix destruction order in Runtime.
ART: Fix bug in DeadPhiHandling
ART: (Partially) fix lock aliasing
base: Fix an infinite loop in HashSet::Insert
ART: Fix potential integer overflow in JNI.
Delegate long-to-float type conversions to the runtime on ARM.
Fix race condition for method root marking in VisitNativeRoots
Fix hash set memory leaks
ART: Improve Indenter performance.
ART: Update run-test 100
ART: Fix PACKED size of tls_ptr_size.


Updated kernel:

Very summarised to what was done on kernel:
full rebased where was removed all commits not related to Krait but cortex-A15
Reverted back to CAF cpu boost
changed intereactive configuration to be more battery friendly
Using only aligned access for best performance and stability, as unalignment has it's own bad costs. Read more here: http://www.alexonlinux.com/aligned-v...-memory-access
Added stable ondemand governor from CAF
Updated to latest wifidriver
Optimize kernel cfbfillrect function
Use of ALIGNED_STRUCT_PAGE

02/10/2015
Frameworks base:
Fix filedescriptor leakage in MediaMetadataRetriever
fix bug about view cache in RemoteViews
Fix NativeDaemonConnectorException issue accessing null object
Fix problem with BootAnimation exit
Correct the first index for drain.
Properly handle null URIs.
Reduce log verbosity: Don't spam logcat
Increase Touch Sensitivity
Turn off debugging
[ActivityManager] Fix IndexOutOfBoundsException

bionic:
Import memchr implementation from cortex-strings for Cortex A15
libc: Import optimized string routines from Apple

Update webview to 46.0.2490.76

Synced with CM

18/10/2015
Readded Qualcom Bionic Optimization
Synced with CM 18/10/2015

17/10/2015

Rebased the whole rom and removed many commits unecessary and creating incompabilities.
Update to SQLite 3.8.11.1
Synced with CM 17/10/2015

16/10/2015

bionic:
Rebased:
Use ARM/Aarch64 assembly for fabs/fabsf … new
libc: arm: add optimized memchr implementation …
bionic: libc: arm: Update libgcc_compat. … new
libc: arm: a15: add optimized memcpy implementation …
Catch up on upstream's round/roundf/roundl. … new
Remove __ARM_HAVE_HALFWORD_MULTIPLY. …
Remove __ARM_HAVE_LDREXD. …
Sync libm with upstream. …
Properly align init/fini_arrays for crtend.o …
bionic: libc: arm: Remvoe a couple extra '.text's. …

bionic: libc: arm: Optimized strrchr, courtesy NetBSD. …
bionic: libc: arm: Optimized strchr, courtesy NetBSD. …
Speed-up ARM memcmp by leveraging NEON. …
bionic: benchmarks: Add more benchmarks. …
cortex-a9: Fix reference to __memcpy_base_aligned. …


av:
Prevent integer underflows in ID3::Iterator …
Fix potential double close in IMediaMetadataRetriever::setDataSource …
camera2: fix various BpCameraDeviceUser methods to return correct res… …

base:
IndexOutOfBoundsException on addPreference in PreferenceGroup …
Reset the setOnKeyListener callback when view is destroyed …
Text size for empty view shall be styled according to theme …
Remove hard-coded DrawSelectorOnTop on ListFragment's default ListView. …
Frameworks/base: Fix AdapterViewAnimator.createOrReuseLayoutParams …
Safely handle interrupts during Thread.join() …
Retry if interrupted before mMessageThread has joined …
Implement finalizer for RS contexts. …
Make accessing mInputMethodTarget thread-safe …


native:
Avoid overwriting EGL14.EGL_NO_SURFACE …
libgui: Only allow one return from useFenceSync …
SurfaceFlinger: Fix null pointer exception …
Eliminate multiple benign overflow conditions. …
Eliminate benign overflow condition triggered upon loop termination i… …
Enable multiple benign overflow conditions. …
Benign unsigned integer overflow in Parcel …
The Following 92 Users Say Thank You to jgcaap For This Useful Post: [ View ] Gift jgcaap Ad-Free
3rd March 2015, 06:53 PM |#3  
jgcaap's Avatar
OP Senior Member
Flag Porto
Thanks Meter: 19,296
 
Donate to Me
More
Frequently Asked Questions:

Q: What changes have you made between versions?
A: All changes made are the same as CyanogenMod ROM which can be found here: http://www.cmxlog.com/13/bacon/ and all manual changes will be also stated on 2nd post.
You can also check on Settings --> About where are all the changes.

Q: What is LZ4?
A: Read here about the project: https://github.com/Cyan4973/lz4

Q: Was the latest build used LZ4?
A: This is still under testing and I'm working on it. It'll be in the test folder.

Q: What is the test folder?
A: Unstable, and test builds where I seek to study a new configuration to enhance user experience.

Q: Why don't you always share changelogs?
A: Limited time. Sorry about it.

Q: Why do you many times ask for donations?
A: Well... This work is free, and as you know if you like it and on your own free will you think I deserve and currently wish to help me out as I am currently going to become unemployed and as also I study for my Masters in Finance, I believe is only fair. While you use, I'm testing and investing my time on it. Should be rewarded because of that right? Is only fair.

Q: Do you receive a lot of donations?
A: Since last year until today I've received around 300 euro. But I've invested 1000 hours on these android builds. That gives a ratio of 30 cents an hour.

Q: Why do you still invest on android since it doesn't provide you with any feasible income? I would have already quilted!
A: Basically this forum makes me relax.

Q: Will you leave cm builds when exodus is released?
A: I didn't plan on giving my cm builds, but if exodus proves to be superior why should I have double work right? Only time and users will tell.

Q: I'm confused. I have no clue which builds is the latest!
A: You can always download again!


Q: I want more from the rom!
A: Me too!

Q: Why you sometimes ignore users?
A: I never ignore, just don't have time to answer all. Please help one another and also use the search button. I think you prefer me learning to bring something nice then post all the time right? hehe

Q: I have so many questions to ask you!
A: I can provide many answers! Just ask!

Q: Can I PM you?
A: Only when is urgent!

Q: How to report bugs?
A: Our bugs are CM bugs. Report on JIRA: https://jira.cyanogenmod.org

Q: Are you CyanogenMod maintainer?
A: No, just a user which wants to have better builds possible. But would be nice to see CM adding me to the contributions list.

Q: Which Firmware do you use?
A: Download here: http://download.jgcaap.xyz/files/oneplusone/firmware/ as I'll provide the firmware there.

Q: Why Slim gaaps? Open Gaaps are so much cool!
A: Open Gaaps has provided many unstable issues which makes the phone unusable until a clean format. Slim gaaps have shown to be better on that.

Q: Why some buttons of UKM don't work?
A: Need time to improve that.. :P

Q: I want an updated app to auto-update roms. Too lazy to check the thread!
A: I understand, for now, is not feasible to do it as I need time to analyse and understand best solution as I update tool-chains regularly and also is not my priority. Remember time is limited for me.

Q: Why the picture is upside down?
A: Ask the app developer to fix it as it mounts incorrectly.

Q: But upside down is from the stock app you have on rom?
A: You probably changed kernel. Either use stock or a version which supports the find7 blobs.

Q: Why does the Rom charge slow? Please add quick charge feature!
A: Quick Charge is not available for your device, what is available is the option to lower or increase the mAh input of the charger, which will lead to a slower or faster-charging process. This has been lowered to save the battery lifetime because if you heat to much the battery the acids start to become basic and loose it's capacity to store electricity. But you still have the option to change this by flashing UKM (which is available on the server) and by installing synapse. Here is another thing I like to avoid:
http://www.phonearena.com/news/OnePl...-India_id84509

Q: Why not overclock?
A: Two reasons. One it damages the device. The second makes it heat, and if you read the answer to this question, you'll understand easily that it'll stress battery and make it loose its battery lifetime faster. as also it'll degrade the inboard components faster. Remember your phone is not a toy and there can be other damages done.

Q: Are you responsible for any damages we take?
A: Everything is tested, and I use it daily. If you have any damages you can only contact the company OnePlus to see if the warranty covers it. I am not responsible for any damages you have with your device.

Q: Can you add a bunch of features to kernel? I want 20 schedulers!
A: Kernel has to be small. So I'll only add the necessary.

Q: Can you compile with O3? Or Just Archi? I heard is super cool.
A: Already was on that path and quickly learned that the force of the light is the way. May the force be with you.
The Following 39 Users Say Thank You to jgcaap For This Useful Post: [ View ] Gift jgcaap Ad-Free
3rd March 2015, 07:54 PM |#4  
OmegaBlaze's Avatar
Senior Member
Thanks Meter: 636
 
More
ROM B is snappier and scrolling is better (less jitters/lag). That's the only difference I can tell between the two.
The Following 3 Users Say Thank You to OmegaBlaze For This Useful Post: [ View ] Gift OmegaBlaze Ad-Free
3rd March 2015, 08:03 PM |#5  
jgcaap's Avatar
OP Senior Member
Flag Porto
Thanks Meter: 19,296
 
Donate to Me
More
Quote:
Originally Posted by OmegaBlaze

ROM B is snappier and scrolling is better (less jitters/lag). That's the only difference I can tell between the two.

thanks, if possible give 1-2 days on each rom, and make a vote on your preference
The Following 5 Users Say Thank You to jgcaap For This Useful Post: [ View ] Gift jgcaap Ad-Free
3rd March 2015, 08:17 PM |#6  
OmegaBlaze's Avatar
Senior Member
Thanks Meter: 636
 
More
Quote:
Originally Posted by jgcaap

thanks, if possible give 1-2 days on each rom, and make a vote on your preference

I take my first statement back.

After switching between both using Multirom: they're the same as of now lol

The number one thing I look for in roms is scrolling. Whichever ROM gives me the best scrolling, wins (because that's what I will be doing most often).
The Following 2 Users Say Thank You to OmegaBlaze For This Useful Post: [ View ] Gift OmegaBlaze Ad-Free
3rd March 2015, 10:39 PM |#7  
jgcaap's Avatar
OP Senior Member
Flag Porto
Thanks Meter: 19,296
 
Donate to Me
More
Quote:
Originally Posted by OmegaBlaze

I take my first statement back.

After switching between both using Multirom: they're the same as of now lol

The number one thing I look for in roms is scrolling. Whichever ROM gives me the best scrolling, wins (because that's what I will be doing most often).

HeHehe try check 2 days straight without rebooting. Because while using, cache accumulates on memory as programs. And can have different reactions. I used B for two days already. Now trying A. I'm studying a bit of how roms get along with different type of apps. I will say in the end each type of build used. I just don't want that to influence people
The Following 6 Users Say Thank You to jgcaap For This Useful Post: [ View ] Gift jgcaap Ad-Free
3rd March 2015, 10:43 PM |#8  
Setting.Out's Avatar
Recognized Contributor
Flag Asnieres-Sur-Seine
Thanks Meter: 8,476
 
More
Seems solid (v.b) I also match your benchmark..

Sent from my A0001 using XDA Premium 4 mobile app
Attached Thumbnails
Click image for larger version

Name:	1425419018215.jpg
Views:	20162
Size:	38.2 KB
ID:	3192989  
The Following User Says Thank You to Setting.Out For This Useful Post: [ View ] Gift Setting.Out Ad-Free
3rd March 2015, 10:46 PM |#9  
jgcaap's Avatar
OP Senior Member
Flag Porto
Thanks Meter: 19,296
 
Donate to Me
More
The second build seems to give different benchmark results if you test two/ three times... With the A build seems more consistent. Can you try that in your phone please?
The Following 5 Users Say Thank You to jgcaap For This Useful Post: [ View ] Gift jgcaap Ad-Free
3rd March 2015, 11:04 PM |#10  
Setting.Out's Avatar
Recognized Contributor
Flag Asnieres-Sur-Seine
Thanks Meter: 8,476
 
More
Quote:
Originally Posted by jgcaap

The second build seems to give different benchmark results if you test two/ three times... With the A build seems more consistent. Can you try that in your phone please?

I got fairly consistent scores with multiple runs on; SD read/write using SD tools, MFLOPS using linpack, metal on vellamo and general testing on antutu.. Though these tests were not ideal as my battery was low, caches weren't cleaned and all settings were kept 100% stock..

Sent from my A0001 using XDA Premium 4 mobile app
The Following User Says Thank You to Setting.Out For This Useful Post: [ View ] Gift Setting.Out Ad-Free
4th March 2015, 12:46 AM |#11  
jgcaap's Avatar
OP Senior Member
Flag Porto
Thanks Meter: 19,296
 
Donate to Me
More
Quote:
Originally Posted by Setting.Out

I got fairly consistent scores with multiple runs on; SD read/write using SD tools, MFLOPS using linpack, metal on vellamo and general testing on antutu.. Though these tests were not ideal as my battery was low, caches weren't cleaned and all settings were kept 100% stock..

Sent from my A0001 using XDA Premium 4 mobile app

Thank you for trying the rom with me. this will be good as I'll improve it with time.
The Following 3 Users Say Thank You to jgcaap For This Useful Post: [ View ] Gift jgcaap Ad-Free
Post Reply Subscribe to Thread

Guest Quick Reply (no urls or BBcode)
Message:
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes