Homebrew $1000 for a working Sys-Tweak on the newest firmware

https://github.com/gzk47/switch-sys-tweak
Just looking at the forks on github and supposedly this has been updated for atmosphere 1.10
It's booting, but icons are broken. At least that was the case last time I tested this.
Post automatically merged:

For other people that would want to tackle this - you are basically expected to reimplement all functions listed here:

https://switchbrew.org/wiki/NS_services#IReadOnlyApplicationControlDataInterface

sys-tweak reimplemented only first 7 functions, all forks too have at best 7 functions. Currently you need to have 23 functions reimplemented for sys-tweak to not shit itself at any circumstance.
Post automatically merged:


If you want some helper, here it is a file that has all pointers for 21.0.0 (for newer FWs bot shitted itself) and listed what data are expected to go in and out:
https://yls8.mtheall.com/ninupdates...0001F/v1409287084/swipcgen_server_modern.info

You look at nn::ns::detail::IReadOnlyApplicationControlDataInterface

Code:
  'nn::ns::detail::IReadOnlyApplicationControlDataInterface': { # 0x4c028623, vtable size 23, possible vtables [0x7100362B58 23, 0x710035B1F8 23]
      0:     {"vt":  0x20, "lr": 0x7100166FF4, "inbytes":  0x10, "outbytes":     4, "buffers": [6]},
      1:     {"vt":  0x28, "lr": 0x71001671B0, "inbytes":     4, "outbytes":     1},
      2:     {"vt":  0x30, "lr": 0x7100167310, "inbytes":     1, "outbytes":     8},
      3:     {"vt":  0x38, "lr": 0x710016747C, "inbytes":     8, "outbytes":     1},
      4:     {"vt":  0x40, "lr": 0x71001675D8, "inbytes":     0, "outbytes":     8, "buffers": [5], "buffer_entry_sizes": [0x8]},
      5:     {"vt":  0x48, "lr": 0x7100167764, "inbytes":  0x10, "outbytes":     8, "buffers": [6]},
      6:     {"vt":  0x50, "lr": 0x710016793C, "inbytes":  0x10, "outbytes":     8, "buffers": [6]},
      7:     {"vt":  0x58, "lr": 0x7100167B14, "inbytes":     8, "outbytes":  0x80},
      8:     {"vt":  0x60, "lr": 0x7100167C94, "inbytes":  0x88, "outbytes":     4, "buffers": [6]},
      9:     {"vt":  0x68, "lr": 0x7100167E54, "inbytes":     8, "outbytes":     0, "buffers": [5]},
      10:    {"vt":  0x70, "lr": 0x7100167FDC, "inbytes":  0x10, "outbytes":     0, "buffers": [5], "buffer_entry_sizes": [0x8], "inhandles": [1], "outhandles": [1], "outinterfaces": ['nn::ns::detail::IAsyncValue']},
      11:    {"vt":  0x78, "lr": 0x7100168234, "inbytes":     8, "outbytes":     0, "buffers": [5], "buffer_entry_sizes": [0x10], "inhandles": [1], "outhandles": [1], "outinterfaces": ['nn::ns::detail::IAsyncValue']},
      12:    {"vt":  0x80, "lr": 0x7100168488, "inbytes":  0x10, "outbytes":     0, "buffers": [5], "buffer_entry_sizes": [0x10], "inhandles": [1], "outhandles": [1], "outinterfaces": ['nn::ns::detail::IAsyncValue']},
      13:    {"vt":  0x88, "lr": 0x71001686E0, "inbytes":     8, "outbytes":     0, "buffers": [5], "buffer_entry_sizes": [0x8], "inhandles": [1], "outhandles": [1], "outinterfaces": ['nn::ns::detail::IAsyncValue']},
      14:    {"vt":  0x90, "lr": 0x7100168934, "inbytes":  0x10, "outbytes":     0, "buffers": [5], "buffer_entry_sizes": [0x8], "inhandles": [1], "outhandles": [1], "outinterfaces": ['nn::ns::detail::IAsyncValue']},
      15:    {"vt":  0x98, "lr": 0x7100168B90, "inbytes":  0x10, "outbytes":     0, "buffers": [5], "buffer_entry_sizes": [0x8], "inhandles": [1], "outhandles": [1], "outinterfaces": ['nn::ns::detail::IAsyncValue']},
      16:    {"vt":  0xA0, "lr": 0x7100168DEC, "inbytes":     0, "outbytes":     0, "outhandles": [1], "outinterfaces": ['nn::ns::detail::IAsyncResult']},
      17:    {"vt":  0xA8, "lr": 0x7100168F98, "inbytes":  0x90, "outbytes":     4, "buffers": [6]},
      18:    {"vt":  0xB0, "lr": 0x7100169164, "inbytes":  0x10, "outbytes":     8, "buffers": [6]},
      19:    {"vt":  0xB8, "lr": 0x7100169330, "inbytes":  0x10, "outbytes":   0xC, "buffers": [6]},
      20:    {"vt":  0xC0, "lr": 0x7100169514, "inbytes":  0x10, "outbytes":   0xC, "buffers": [6]},
      21:    {"vt":  0xC8, "lr": 0x7100169700, "inbytes":  0x10, "outbytes":   0xC, "buffers": [6]},
      22:    {"vt":  0xD0, "lr": 0x71001698D8, "inbytes":  0x10, "outbytes":   0xC, "buffers": [6]},
  },
 
Last edited by masagrator,
Well boys. If someone wants to do it and wants the bounty, maybe start now as it seems like I won't be around here (and in general) for much longer. I've had health problems for a long time now and it seems like someone up there has already decided that my time's almost up.
 
Other people might not have seen, because I didn't until this thread returned recently and I happened to scroll up, that masagrator had added a bunch of very useful dev info to an earlier post.
It's booting, but icons are broken. At least that was the case last time I tested this.
Post automatically merged:

For other people that would want to tackle this - you are basically expected to reimplement all functions listed here:

https://switchbrew.org/wiki/NS_services#IReadOnlyApplicationControlDataInterface

sys-tweak reimplemented only first 7 functions, all forks too have at best 7 functions. Currently you need to have 23 functions reimplemented for sys-tweak to not shit itself at any circumstance.
Post automatically merged:


If you want some helper, here it is a file that has all pointers for 21.0.0 (for newer FWs bot shitted itself) and listed what data are expected to go in and out:
https://yls8.mtheall.com/ninupdates...0001F/v1409287084/swipcgen_server_modern.info

You look at nn::ns::detail::IReadOnlyApplicationControlDataInterface

Code:
  'nn::ns::detail::IReadOnlyApplicationControlDataInterface': { # 0x4c028623, vtable size 23, possible vtables [0x7100362B58 23, 0x710035B1F8 23]
      0:     {"vt":  0x20, "lr": 0x7100166FF4, "inbytes":  0x10, "outbytes":     4, "buffers": [6]},
      1:     {"vt":  0x28, "lr": 0x71001671B0, "inbytes":     4, "outbytes":     1},
      2:     {"vt":  0x30, "lr": 0x7100167310, "inbytes":     1, "outbytes":     8},
      3:     {"vt":  0x38, "lr": 0x710016747C, "inbytes":     8, "outbytes":     1},
      4:     {"vt":  0x40, "lr": 0x71001675D8, "inbytes":     0, "outbytes":     8, "buffers": [5], "buffer_entry_sizes": [0x8]},
      5:     {"vt":  0x48, "lr": 0x7100167764, "inbytes":  0x10, "outbytes":     8, "buffers": [6]},
      6:     {"vt":  0x50, "lr": 0x710016793C, "inbytes":  0x10, "outbytes":     8, "buffers": [6]},
      7:     {"vt":  0x58, "lr": 0x7100167B14, "inbytes":     8, "outbytes":  0x80},
      8:     {"vt":  0x60, "lr": 0x7100167C94, "inbytes":  0x88, "outbytes":     4, "buffers": [6]},
      9:     {"vt":  0x68, "lr": 0x7100167E54, "inbytes":     8, "outbytes":     0, "buffers": [5]},
      10:    {"vt":  0x70, "lr": 0x7100167FDC, "inbytes":  0x10, "outbytes":     0, "buffers": [5], "buffer_entry_sizes": [0x8], "inhandles": [1], "outhandles": [1], "outinterfaces": ['nn::ns::detail::IAsyncValue']},
      11:    {"vt":  0x78, "lr": 0x7100168234, "inbytes":     8, "outbytes":     0, "buffers": [5], "buffer_entry_sizes": [0x10], "inhandles": [1], "outhandles": [1], "outinterfaces": ['nn::ns::detail::IAsyncValue']},
      12:    {"vt":  0x80, "lr": 0x7100168488, "inbytes":  0x10, "outbytes":     0, "buffers": [5], "buffer_entry_sizes": [0x10], "inhandles": [1], "outhandles": [1], "outinterfaces": ['nn::ns::detail::IAsyncValue']},
      13:    {"vt":  0x88, "lr": 0x71001686E0, "inbytes":     8, "outbytes":     0, "buffers": [5], "buffer_entry_sizes": [0x8], "inhandles": [1], "outhandles": [1], "outinterfaces": ['nn::ns::detail::IAsyncValue']},
      14:    {"vt":  0x90, "lr": 0x7100168934, "inbytes":  0x10, "outbytes":     0, "buffers": [5], "buffer_entry_sizes": [0x8], "inhandles": [1], "outhandles": [1], "outinterfaces": ['nn::ns::detail::IAsyncValue']},
      15:    {"vt":  0x98, "lr": 0x7100168B90, "inbytes":  0x10, "outbytes":     0, "buffers": [5], "buffer_entry_sizes": [0x8], "inhandles": [1], "outhandles": [1], "outinterfaces": ['nn::ns::detail::IAsyncValue']},
      16:    {"vt":  0xA0, "lr": 0x7100168DEC, "inbytes":     0, "outbytes":     0, "outhandles": [1], "outinterfaces": ['nn::ns::detail::IAsyncResult']},
      17:    {"vt":  0xA8, "lr": 0x7100168F98, "inbytes":  0x90, "outbytes":     4, "buffers": [6]},
      18:    {"vt":  0xB0, "lr": 0x7100169164, "inbytes":  0x10, "outbytes":     8, "buffers": [6]},
      19:    {"vt":  0xB8, "lr": 0x7100169330, "inbytes":  0x10, "outbytes":   0xC, "buffers": [6]},
      20:    {"vt":  0xC0, "lr": 0x7100169514, "inbytes":  0x10, "outbytes":   0xC, "buffers": [6]},
      21:    {"vt":  0xC8, "lr": 0x7100169700, "inbytes":  0x10, "outbytes":   0xC, "buffers": [6]},
      22:    {"vt":  0xD0, "lr": 0x71001698D8, "inbytes":  0x10, "outbytes":   0xC, "buffers": [6]},
  },
 
I can add additional info.

CMD 19 has buffer size AT LEAST 0x1d000 instead of fixed 0x24000 like it was in original function, from which icon takes 0x19000 bytes and nacp still 0x4000 bytes. If first flag has BIT(0) set, icon is smaller for use as icon in Application's "Options" menu, takes max 0x10000 bytes.

CMDs 18, 20, 21 and 22 are variations of NsGetApplicationControlData. All of them take buffer 0x1d000.

18 - returns always Switch 1 data with full icon.
19 + 20 - returns Switch 1 data if flag2 =0, if flag2 = 1 it returns Switch 2 edition data. if flag1 & 1 = 0, it returns full icon, otherwise smaller icon.
21 - returns always Switch 1 data with small icon
22 - returns Switch 1 data with small icon if flag1 = 0, if flag1 = 1 it returns Switch 2 Edition data with full icon.

I am not working on fixing sys-tweak, this is a result on work for fixing nacp parsing because BoTW 1.9.0 introduced new type of nacp with compressed title section.
https://github.com/switchbrew/libnx/issues/714#issuecomment-3939873470
 
Last edited by masagrator,
For know known issues:
- On 20.0.0+ sorting in All Software doesn't work, i need to fix cmd 13. It's always sorting by last played.
- For one person All Software menu crashes no matter if FW is 19.0.1 or 21.2.0, currently I can't reproduce the issue .
Post automatically merged:

Fixed an issue with sorting applications. Still they are sorted by their original names, I will figure out later how to solve issue with replaced names and publishers.
Post automatically merged:

@NotUsingAnAltAccount Day 2 of asking "Where is my money?"
 
Last edited by masagrator,

Site & Scene News

Popular threads in this forum