mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 20:42:44 +02:00
Compare commits
260 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
dfee0c8ba2 | ||
|
0a4ac1b87c | ||
|
638624cf02 | ||
|
2f471a1c26 | ||
|
d1dbd8db51 | ||
|
de7cfeb3d9 | ||
|
2fc81d8f35 | ||
|
29f6f4fa7a | ||
|
b88afc509c | ||
|
ceb7ee1cbf | ||
|
0ba4f96bfe | ||
|
17bcd07095 | ||
|
ce6bc0c3e8 | ||
|
8f1cce6946 | ||
|
60bf943ec1 | ||
|
0ae0792770 | ||
|
953c1b7a8a | ||
|
5da574f852 | ||
|
b2d7022e1b | ||
|
29a6691b66 | ||
|
88de3cbea7 | ||
|
218e3f3a04 | ||
|
a063ceb19c | ||
|
e79dd7ac52 | ||
|
2e2b110668 | ||
|
432b4e3900 | ||
|
eef44aa5e1 | ||
|
688e4dd14e | ||
|
d4f5f4b145 | ||
|
6c430b273a | ||
|
58f1fc6561 | ||
|
65c643f149 | ||
|
73d79d4a0f | ||
|
163fdddabf | ||
|
c7c9617290 | ||
|
250a5777f7 | ||
|
5d5d13c9d6 | ||
|
2bbf49377e | ||
|
81bed00b5b | ||
|
8cff58d5af | ||
|
d66e3aa487 | ||
|
7b4e02be35 | ||
|
3c851a3443 | ||
|
df0508200b | ||
|
c769852631 | ||
|
e8341a00fe | ||
|
e570e67704 | ||
|
bb65fec6eb | ||
|
510d85bf48 | ||
|
ff2e76daf9 | ||
|
c8c4406467 | ||
|
b69d2fa95e | ||
|
919e3d3938 | ||
|
b615b01d44 | ||
|
be45a91b9c | ||
|
827c6b6ddf | ||
|
ce1f87050d | ||
|
99edb1c0f0 | ||
|
7d68ad6bd4 | ||
|
fda4e6b105 | ||
|
8d10ef8745 | ||
|
a215ae2da2 | ||
|
933c5a12f0 | ||
|
bb0ae8ac74 | ||
|
1bb5a21453 | ||
|
9439b39631 | ||
|
386118d16b | ||
|
08373603f7 | ||
|
412c48eab5 | ||
|
0094af6d29 | ||
|
ae491ce57b | ||
|
94cfa2be1c | ||
|
4ff1c52869 | ||
|
3a5d0dae35 | ||
|
288a09c4eb | ||
|
3bb619f46e | ||
|
3cb556acb3 | ||
|
140400d566 | ||
|
6f9bc920c9 | ||
|
e322bdf82d | ||
|
e6626a7825 | ||
|
25a8f21796 | ||
|
cb6f366a2a | ||
|
edc000928b | ||
|
4fcdb6eb34 | ||
|
e2424fd8bf | ||
|
af5072c096 | ||
|
6bd6fa8907 | ||
|
b954aaf35d | ||
|
8ce306b9b6 | ||
|
2e80cf9bba | ||
|
95f973fe98 | ||
|
6602c440b4 | ||
|
99a29b97ca | ||
|
dc0de47eb1 | ||
|
77c2d18046 | ||
|
a6686ae27a | ||
|
8747689be1 | ||
|
d219884bfa | ||
|
db592d8aeb | ||
|
9d1fd27b62 | ||
|
2e2284109b | ||
|
dca4fb772a | ||
|
cbb49e2ce0 | ||
|
4c0991dd88 | ||
|
ab2c2fb256 | ||
|
c09a21d87d | ||
|
3332ee2f6f | ||
|
f64d2059c4 | ||
|
8d9959010f | ||
|
f7af27cd21 | ||
|
c3e110988a | ||
|
4ece4e5b8f | ||
|
ee873e34d0 | ||
|
b5e47b6b67 | ||
|
6175293d0f | ||
|
ada230a882 | ||
|
4d59d366a1 | ||
|
dcebe96e71 | ||
|
174b5066a5 | ||
|
7549d3b124 | ||
|
e768ac74f9 | ||
|
6ee5d8d148 | ||
|
7caf74af76 | ||
|
3b2d72a427 | ||
|
75290f912e | ||
|
cea3018de6 | ||
|
5ca15e7696 | ||
|
09338f80b2 | ||
|
c4c9a6af3c | ||
|
ac414d2bc5 | ||
|
ea145a8d3c | ||
|
8b77139a04 | ||
|
de4d19df1a | ||
|
1543e84627 | ||
|
328d041c5c | ||
|
1a05cb20a2 | ||
|
97fef5e48d | ||
|
d8a4f33192 | ||
|
8b17648d0b | ||
|
62755bebe0 | ||
|
bb42eab289 | ||
|
d33bb0ad6a | ||
|
3a508e13b1 | ||
|
d14f931eab | ||
|
bf50bfdbbe | ||
|
9865dbf921 | ||
|
a1d6b3be43 | ||
|
d42ddeff78 | ||
|
cdba7dc808 | ||
|
f9a27d6cc7 | ||
|
f60f82856a | ||
|
0a88426a6a | ||
|
e6c7ac7c0b | ||
|
04aa28c436 | ||
|
3d9e1a9c7b | ||
|
6d8d9fd2fc | ||
|
32370bd19c | ||
|
587115f10a | ||
|
4a33b32f43 | ||
|
74c639ec3a | ||
|
16f8547f4c | ||
|
c208dd0a57 | ||
|
431c99465c | ||
|
93db7abb03 | ||
|
65b8ed5582 | ||
|
cee75bbe13 | ||
|
748cf5ab98 | ||
|
c6dcbdfffb | ||
|
b5714296d6 | ||
|
8db41edc43 | ||
|
bf2e48e22a | ||
|
b35d42faaa | ||
|
0cc2da720c | ||
|
8daccdf35a | ||
|
49507b86a8 | ||
|
369bb31311 | ||
|
0a64ff5af0 | ||
|
4ac0a9ffdc | ||
|
8e93933157 | ||
|
4ac3b0cec5 | ||
|
960599c4b5 | ||
|
ade5038282 | ||
|
fc2aaefb0f | ||
|
d90afaacde | ||
|
bee27ba607 | ||
|
0aba35b3ed | ||
|
3c9a623b24 | ||
|
982aef9ea5 | ||
|
b17873d071 | ||
|
cfdd847f11 | ||
|
84b92d9e64 | ||
|
373b13b7c0 | ||
|
58885db2cd | ||
|
8c8bd9debf | ||
|
4a850437f2 | ||
|
5421d1d716 | ||
|
5d95e17f9b | ||
|
4b2d111859 | ||
|
f893c043f7 | ||
|
6ce881b013 | ||
|
a1ddefd3ca | ||
|
f486127615 | ||
|
5d448a1048 | ||
|
f47e1d26ec | ||
|
e604350e9c | ||
|
4bd7863364 | ||
|
08e2b2d945 | ||
|
e2c3ae8e44 | ||
|
95fca6753d | ||
|
137f6d1ddc | ||
|
00d1a696b9 | ||
|
d6c6431a22 | ||
|
f7df9d578c | ||
|
5509f8f14b | ||
|
d54c9f9cc8 | ||
|
5d644b6e82 | ||
|
2e2cf43cf5 | ||
|
0d32a2c0d5 | ||
|
d6a1ef0af4 | ||
|
eb8ee97f1c | ||
|
7416b23ef9 | ||
|
ebb54a1224 | ||
|
de97b82bce | ||
|
ca9d007bd4 | ||
|
c5a9a909a9 | ||
|
7e29719263 | ||
|
f365c9b2b5 | ||
|
05744823ac | ||
|
3374db38a2 | ||
|
3bb44d77b7 | ||
|
0716ed6ffd | ||
|
ae6f69d339 | ||
|
c8f8145195 | ||
|
38ee48032f | ||
|
d4542ec9b0 | ||
|
ae3271ba4c | ||
|
0f4f0ed039 | ||
|
3fce0d49e2 | ||
|
c71cd80bcf | ||
|
15a5d1c44f | ||
|
531f9d7921 | ||
|
7751df9356 | ||
|
e48f1c339f | ||
|
076657fd31 | ||
|
d813bef54b | ||
|
5057a1912e | ||
|
d53150f855 | ||
|
109bd683df | ||
|
649f308d4b | ||
|
637dd12b2d | ||
|
c8fdae9189 | ||
|
9e52e55177 | ||
|
a1a69ebe09 | ||
|
43202cc829 | ||
|
110c2f0622 | ||
|
348b21def2 | ||
|
2f6fcf7fb2 | ||
|
e9ee0b2421 | ||
|
a35321b360 |
34
.doozer.json
34
.doozer.json
@ -1,34 +0,0 @@
|
||||
{
|
||||
"targets": {
|
||||
"lib": {
|
||||
|
||||
"buildenv": "docker:devkitpro/devkita64",
|
||||
|
||||
"buildcmd": [
|
||||
"sudo -E make -j${PARALLEL} -C nx install"
|
||||
]
|
||||
},
|
||||
|
||||
"docs": {
|
||||
// This target build and upload docs and will be trigged from doozer's CD script
|
||||
"auto": false,
|
||||
|
||||
"buildenv": "xenial-amd64",
|
||||
"builddeps": [
|
||||
"doxygen"
|
||||
],
|
||||
|
||||
"buildcmd": [
|
||||
"cd nx", "doxygen"
|
||||
],
|
||||
|
||||
"artifacts": [{
|
||||
"source": "nx/docs/html",
|
||||
"destination": {
|
||||
"type": "git",
|
||||
"branch": "gh-pages"
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
}
|
22
.github/workflows/build.yaml
vendored
Normal file
22
.github/workflows/build.yaml
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
name: Build libnx
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Test build
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: 'devkitpro/devkita64'
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: build
|
||||
run: make -C nx -j$(nproc)
|
39
.github/workflows/doxygen.yaml
vendored
Normal file
39
.github/workflows/doxygen.yaml
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
name: Build documentation
|
||||
|
||||
on:
|
||||
push:
|
||||
tags: [ v* ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build documentation
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Get current tag
|
||||
id: vars
|
||||
run: echo ::set-output name=tag::${GITHUB_REF/refs\/tags\//}
|
||||
|
||||
- name: Set up Doxygen
|
||||
run: sudo apt-get install -y doxygen
|
||||
|
||||
- name: Display Doxygen version
|
||||
run: echo "Doxygen version $(doxygen -v)"
|
||||
|
||||
- name: Build documentation
|
||||
run: |
|
||||
cd nx
|
||||
LIBNX_VERSION=${{ steps.vars.outputs.tag }} doxygen Doxyfile
|
||||
|
||||
- name: Deploy 🚀
|
||||
uses: JamesIves/github-pages-deploy-action@3.7.1
|
||||
with:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
BRANCH: gh-pages
|
||||
FOLDER: nx/docs/html
|
||||
CLEAN: true
|
||||
SINGLE_COMMIT: true
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -8,7 +8,10 @@
|
||||
*.pfs0
|
||||
Thumbs.db
|
||||
.*/
|
||||
!.github/
|
||||
debug/
|
||||
release/
|
||||
lib/
|
||||
docs/
|
||||
compile_commands.json
|
||||
.clangd
|
||||
|
272
Changelog.md
272
Changelog.md
@ -1,5 +1,277 @@
|
||||
# Changelog
|
||||
|
||||
## Version 4.7.0
|
||||
|
||||
#### system
|
||||
* Basic support for 18.0.0
|
||||
|
||||
#### services
|
||||
* fs: add GetFileSystemAttribute cmd
|
||||
* fs: Implement "ChallengeCardExistence" and "GetGameCardDeviceCertificate"
|
||||
|
||||
#### graphics
|
||||
* nvchannel: Fix SET_CLK_RATE, implement GET_CLK_RATE and SET_SUBMIT_TIMEOUT
|
||||
|
||||
#### miscellaneous
|
||||
* Update SetSysProductModel_Aula comment
|
||||
|
||||
## Version 4.6.0
|
||||
|
||||
#### system
|
||||
* svc: fix query/insecure names
|
||||
|
||||
#### miscellaneous
|
||||
* add fsDeviceOperatorGetGameCardUpdatePartitionInfo
|
||||
* Add NX_ prefix to PACKED, NORETURN, IGNORE_ARG and DEPRECATED macros
|
||||
* Fix: avoid segfault at static destructors
|
||||
|
||||
## Version 4.5.0
|
||||
|
||||
#### services
|
||||
* btdrv: Missing definitions for ble were added
|
||||
* capsdc: Updated for [17.0.0+]
|
||||
* hidsys: Support was added for many commands
|
||||
* fs:
|
||||
* Updated for [17.0.0+]
|
||||
* Support was added for many fsDeviceOperator commands
|
||||
* ncm: Updated for [17.0.0+]
|
||||
* nfc: Support was added for all remaining commands
|
||||
* ns: Added nsEstimateSizeToMove
|
||||
* pctl: Support was added for many commands
|
||||
* ssl: Updated sslConnectionSetPrivateOption for [17.0.0+]
|
||||
* ts: Updated for [17.0.0+]
|
||||
|
||||
#### devices
|
||||
* socket: Updated wrapper to automatically select latest available bsd service version (fixes multicast support)
|
||||
|
||||
#### miscellaneous
|
||||
* The linker script/crt0 were updated to support relro
|
||||
* A bug was fixed in aes-cbc block decryption
|
||||
* A number of problems were corrected involving incorrect ipc serialization with pointer arguments
|
||||
|
||||
**Several issues were fixed, and usability and stability were improved.**
|
||||
|
||||
## Version 4.4.2
|
||||
|
||||
#### system
|
||||
* ensure correct addresses for bss
|
||||
|
||||
#### miscellaneous
|
||||
* fix timezone to allow +/- and alphanumrics
|
||||
* end compile_commmands generation when elf linked
|
||||
|
||||
## Version 4.4.1
|
||||
|
||||
#### miscellaneous
|
||||
* add missing separator to local path
|
||||
|
||||
**Several issues were fixed, and usability and stability were improved.**
|
||||
|
||||
## Version 4.4.0
|
||||
|
||||
#### services
|
||||
* applet: add appletGetMessageEvent
|
||||
* usbcomms: add async API
|
||||
* usbcomms: expose VID:PID configuration
|
||||
|
||||
#### miscellaneous
|
||||
* correct problems revealed by gcc 13
|
||||
* mitigate race condition bug in nvservices
|
||||
|
||||
**Several issues were fixed, and usability and stability were improved.**
|
||||
|
||||
## Version 4.3.0
|
||||
|
||||
#### services
|
||||
* applet: Updated for [15.0.0+]. Added `__nx_applet_init_timeout`
|
||||
* audctl:
|
||||
* Added audctlGetActiveOutputTarget.
|
||||
* Fixed TargetVolume functions.
|
||||
* auddev: Added auddevGetActiveAudioDeviceName.
|
||||
* bpc: Fixed GetSleepButtonState/GetPowerButton.
|
||||
* fs: Updated for [16.0.0+]
|
||||
* hiddbg: Changed hiddbgAttachHdlsWorkBuffer to accept a user-supplied buffer and size.
|
||||
* ncm: Updated for [15.0.0+] and [16.0.0+].
|
||||
* pdm:
|
||||
* Updated for [16.0.0+].
|
||||
* Fixed pdmqryQueryAccountEvent on older sysvers.
|
||||
* Updated structs.
|
||||
* pl: Added [16.0.0+] sysver checks.
|
||||
* ssl:
|
||||
* Added support for new [16.0.0+] functionality.
|
||||
* Added ssl:s support [15.0.0+].
|
||||
* Added sslClearTls12FallbackFlag [14.0.0+].
|
||||
* Updated SslCaCertificateId enum.
|
||||
* usbhs: Added the remaining cmds and expose more functionality.
|
||||
* vi: Added [16.0.0+] Manager commands.
|
||||
* wlaninf: Added sysver check to account for its removal in \[15.0.0+\].
|
||||
|
||||
#### devices
|
||||
* nxlinkConnectToHost: Added timeout to avoid long hang when -s isn't specified for nxlink.
|
||||
|
||||
#### miscellaneous
|
||||
* Added CMSG macros to BSD headers.
|
||||
|
||||
**Several issues were fixed, and usability and stability were improved.**
|
||||
|
||||
## Version 4.2.2
|
||||
|
||||
#### system
|
||||
* svc: Added svcMapInsecureMemory, svcUnmapInsecureMemory [15.0.0+].
|
||||
* svc: Renamed perm parameter of svcMapDeviceAddressSpaceByForce and svcMapDeviceAddressSpaceAligned to option [15.0.0+].
|
||||
* svc: Corrected svcMapIoRegion, svcUnmapIoRegion.
|
||||
* env: Added HBABI support for hinting SVCs in the extended range 0x80..0xBF.
|
||||
* cache: Added instruction barrier to armICacheInvalidate.
|
||||
|
||||
#### graphics
|
||||
* Added nvGpuGetTimestamp, nvioctlNvhostCtrlGpu_GetGpuTime.
|
||||
|
||||
#### applets
|
||||
* swkbd: Corrected several typos and incorrect floating point values.
|
||||
|
||||
#### network
|
||||
* socket: Added socketNifmRequestRegisterSocketDescriptor, socketNifmRequestUnregisterSocketDescriptor.
|
||||
* nifm: nifmRequestSetKeptInSleep, nifmRequestRegisterSocketDescriptor, nifmRequestUnregisterSocketDescriptor, nifmSetWowlDelayedWakeTime.
|
||||
|
||||
#### other services
|
||||
* set:sys: setsysNeedsToUpdateHeadphoneVolume removed in [15.0.0].
|
||||
* pdm:qry: pdmqryQueryRecentlyPlayedApplication, pdmqryGetRecentlyPlayedApplicationUpdateEvent removed in [15.0.0].
|
||||
|
||||
Several issues were fixed, and usability and stability were improved.
|
||||
|
||||
## Version 4.2.1
|
||||
|
||||
#### system
|
||||
* cache: Adjusted cache maintenance ABI for [14.0.0+].
|
||||
* svc: Added InfoType_IsSvcPermitted [14.0.0+].
|
||||
* svc: Removed svcCallSecureMonitor's non-existent return type.
|
||||
* svc: Fixed definition of MemoryInfo struct.
|
||||
* ldscript: Generated ELFs now start with the `.text` section (required by GDB).
|
||||
|
||||
#### filesystem
|
||||
* Added fsOpenSaveDataInfoReaderWithFilter.
|
||||
* Added fsCreate_TemporaryStorage.
|
||||
* Fixed bug in fsOpen_TemporaryStorage.
|
||||
|
||||
#### graphics
|
||||
* Added nvIoctl3.
|
||||
* Adjusted hos version requirements in nvIoctl2 [3.0.0+].
|
||||
* Adjusted list of IOCTLs that use the cloned NV service session.
|
||||
* console: Added support for SGR 38/48 escape sequences.
|
||||
* console: Bold/Faint attributes no longer applied to the background.
|
||||
|
||||
#### input
|
||||
* hid: Added hidGetNpadLagerType, hidGetNpadStatesLager.
|
||||
* hid: Added HidNpadLagerType enum.
|
||||
* hid: Added HidNpadLagerState struct.
|
||||
* hid: Updated HidNpadStyleTag, HidNpadButton, HidDeviceTypeBits, HidDeviceType, HidAppletFooterUiType enums.
|
||||
* hid: Updated HidNpadInternalState struct.
|
||||
* hidsys: Added hidsysAcquireUniquePadConnectionEventHandle, hidsysGetUniquePadBluetoothAddress, hidsysDisconnectUniquePad, hidsysGetUniquePadType, hidsysGetUniquePadInterface, hidsysGetUniquePadControllerNumber.
|
||||
* hidsys: Added HidsysUniquePadType enum.
|
||||
|
||||
#### other
|
||||
* Added `BITL()` macro (unsigned long, i.e. 64-bit unsigned integer).
|
||||
* bpc: Adjusted for removed commands in [14.0.0+].
|
||||
* bpc: Added bpcGetPowerButton [6.0.0+].
|
||||
* btdrv: Adjusted for removed commands in [14.0.0+].
|
||||
* btm: Corrected inverted hos version check affecting several commands.
|
||||
* nfc: Added nfcSendCommandByPassThrough, nfcKeepPassThroughSession, nfcReleasePassThroughSession.
|
||||
* pm: Added support for [14.0.0+].
|
||||
* ts: Adjusted for removed commands in [14.0.0+].
|
||||
|
||||
Several issues were fixed, and usability and stability were improved.
|
||||
|
||||
## Version 4.2.0
|
||||
|
||||
#### system
|
||||
* Added new SVCs introduced in [13.0.0+].
|
||||
* Thread structures are now pre-populated with information prior to creation.
|
||||
|
||||
#### input
|
||||
* hidsys: Added support for [13.0.0+].
|
||||
* hiddbg: Added support for [13.0.0+].
|
||||
|
||||
#### graphics
|
||||
* Fixed crashes caused by arbitrary sizes in linear framebuffers.
|
||||
|
||||
#### other
|
||||
* ncm: Added support for [13.0.0+].
|
||||
* setsys: Added support for [13.0.0+].
|
||||
* Filled in SetSysNxControllerSettings structure definition (which was previously unpopulated).
|
||||
* btm: Added support for [13.0.0+].
|
||||
* btdrv: Added support for [13.0.0+].
|
||||
* Fixed btdrvRespondToSspRequest for [12.0.0+].
|
||||
* psel: Added support for [13.0.0+] (pselShowUserQualificationPromoter).
|
||||
* Corrected ldr:ro/ro:1 initialization.
|
||||
|
||||
Several issues were fixed, and usability and stability were improved.
|
||||
|
||||
## Version 4.1.3
|
||||
|
||||
#### input
|
||||
* **Removed old deprecated HID API**.
|
||||
|
||||
#### network
|
||||
* Fixed inet_pton implementation.
|
||||
|
||||
Several issues were fixed, and usability and stability were improved.
|
||||
|
||||
## Version 4.1.2
|
||||
|
||||
Several issues were fixed, and usability and stability were improved.
|
||||
|
||||
## Version 4.1.1
|
||||
|
||||
#### system
|
||||
* Fixed deadlock issue when multi-threaded services (e.g. filesystem, sockets) are starved of free sessions.
|
||||
|
||||
Several issues were fixed, and usability and stability were improved.
|
||||
|
||||
## Version 4.1.0
|
||||
|
||||
#### system
|
||||
* **Removed old virtmem API**.
|
||||
* Added mechanism for overriding libnx's dynamic memory allocation behavior.
|
||||
* This also added specific mechanisms for NV and BSD transfer memory handling.
|
||||
* Added hosversionIsAtmosphere, together with support for receiving this information through HBABI.
|
||||
* Added tipc (Tiny IPC) serialization support, introduced in [12.0.0+].
|
||||
* Updated sm, sm:m and pgl wrappers for tipc support.
|
||||
* Fixed certain serialization bug in cmif handling code.
|
||||
* argv setup code can now be overriden.
|
||||
* virtmem RNG algorithm can now be overriden.
|
||||
* Added support for incremental CRC calculations.
|
||||
|
||||
#### fs
|
||||
* Added fsOpenHostFileSystem(WithOption).
|
||||
|
||||
#### input
|
||||
* Added HidKeyboardKey enum.
|
||||
* Added hidKeyboardStateGetKey helper function.
|
||||
* Added support for SleepButton AutoPilot in hiddbg.
|
||||
* Updated hdls service wrapper for [12.0.0+].
|
||||
* Corrected HidGestureAttribute, HidGestureState.
|
||||
* Corrected several swkbd enums and structs.
|
||||
* Minor Palma documentation improvements.
|
||||
|
||||
#### other services
|
||||
* **Updated btdrv service wrapper for [12.0.0+]**, along with fixes and improved support.
|
||||
* Added audctl service wrapper.
|
||||
* Added audrec service wrapper.
|
||||
* Added avm service wrapper.
|
||||
* Added friends service wrapper (minimal functionality needed for retrieving the user's friend code).
|
||||
* Added htcs service wrapper.
|
||||
* Added mm:u service wrapper.
|
||||
* Added new nvioctlChannel_\* wrappers: Submit, GetSyncpt, GetModuleClockRate, MapCommandBuffer, UnmapCommandBuffer.
|
||||
* Added SetSysProductModel enum, now used by setsysGetProductModel.
|
||||
* Added audrvVoiceIsPaused.
|
||||
* Updated BtmDeviceCondition struct, including compatibility with all system versions.
|
||||
* Corrected pscmGetPmModule prototype.
|
||||
* Renamed ChargerType to PsmChargerType, corrected enum names.
|
||||
* Fixed bug in time offset handling.
|
||||
* Fixed bug in BSD (sockets) initialization.
|
||||
|
||||
**Several issues were fixed, and usability and stability were improved.**
|
||||
|
||||
## Version 4.0.0
|
||||
|
||||
#### system
|
||||
|
@ -1,7 +1,7 @@
|
||||
# Nintendo Switch AArch64-only userland library.
|
||||
Based on libctru.
|
||||
|
||||
[](https://doozer.io/switchbrew/libnx)
|
||||

|
||||
|
||||
# Install instructions
|
||||
See [Switchbrew](https://switchbrew.org/wiki/Setting_up_Development_Environment).
|
||||
|
@ -38,7 +38,7 @@ PROJECT_NAME = "libnx"
|
||||
# could be handy for archiving the generated documentation or if some version
|
||||
# control system is used.
|
||||
|
||||
PROJECT_NUMBER = "$(TRAVIS_TAG)"
|
||||
PROJECT_NUMBER = "$(LIBNX_VERSION)"
|
||||
|
||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||
# for a project that appears at the top of each page and should give viewer a
|
||||
|
22
nx/Makefile
22
nx/Makefile
@ -8,13 +8,6 @@ endif
|
||||
|
||||
include $(DEVKITPRO)/devkitA64/base_rules
|
||||
|
||||
export LIBNX_MAJOR := 4
|
||||
export LIBNX_MINOR := 0
|
||||
export LIBNX_PATCH := 0
|
||||
|
||||
|
||||
VERSION := $(LIBNX_MAJOR).$(LIBNX_MINOR).$(LIBNX_PATCH)
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# TARGET is the name of the output
|
||||
# BUILD is the directory where object files & intermediate files will be placed
|
||||
@ -95,17 +88,14 @@ export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
||||
#---------------------------------------------------------------------------------
|
||||
all: lib/libnx.a lib/libnxd.a
|
||||
|
||||
dist-bin: all
|
||||
@tar --exclude=*~ -cjf libnx-$(VERSION).tar.bz2 include lib default_icon.jpg switch_rules switch.ld switch.specs -C external/bsd include
|
||||
install: lib/libnx.a lib/libnxd.a
|
||||
@mkdir -p $(DESTDIR)$(DEVKITPRO)/libnx
|
||||
@cp -v default_icon.jpg switch_rules switch.ld switch.specs $(DESTDIR)$(DEVKITPRO)/libnx/
|
||||
@cp -rv include lib $(DESTDIR)$(DEVKITPRO)/libnx/
|
||||
@cp -rv external/bsd/include $(DESTDIR)$(DEVKITPRO)/libnx/
|
||||
|
||||
dist-src:
|
||||
@tar --exclude=*~ -cjf libnx-src-$(VERSION).tar.bz2 include source data external Makefile default_icon.jpg switch_rules switch.ld switch.specs
|
||||
|
||||
dist: dist-src dist-bin
|
||||
|
||||
install: dist-bin
|
||||
mkdir -p $(DESTDIR)$(DEVKITPRO)/libnx
|
||||
bzip2 -cd libnx-$(VERSION).tar.bz2 | tar -xf - -C $(DESTDIR)$(DEVKITPRO)/libnx
|
||||
@tar -cjf libnx-`git describe --tags | sed 's/^v//'`.tar.bz2 include source data external Makefile default_icon.jpg switch_rules switch.ld switch.specs
|
||||
|
||||
#dox:
|
||||
# @doxygen Doxyfile
|
||||
|
31
nx/external/bsd/include/sys/socket.h
vendored
31
nx/external/bsd/include/sys/socket.h
vendored
@ -437,8 +437,35 @@ struct cmsghdr {
|
||||
/* followed by u_char cmsg_data[]; */
|
||||
};
|
||||
|
||||
// socket credential stuff, we don't need this
|
||||
// cmsg macros, uses some obscure macro
|
||||
#define _ALIGNBYTES (sizeof(long) - 1)
|
||||
#define _ALIGN(p) (((unsigned long)(p) + _ALIGNBYTES) & ~_ALIGNBYTES)
|
||||
|
||||
/* given pointer to struct cmsghdr, return pointer to data */
|
||||
#define CMSG_DATA(cmsg) \
|
||||
((unsigned char *)(cmsg) + _ALIGN(sizeof(struct cmsghdr)))
|
||||
|
||||
/* given pointer to struct cmsghdr, return pointer to next cmsghdr */
|
||||
#define CMSG_NXTHDR(mhdr, cmsg) \
|
||||
(((char *)(cmsg) + _ALIGN((cmsg)->cmsg_len) + \
|
||||
_ALIGN(sizeof(struct cmsghdr)) > \
|
||||
((char *)(mhdr)->msg_control) + (mhdr)->msg_controllen) ? \
|
||||
(struct cmsghdr *)NULL : \
|
||||
(struct cmsghdr *)((char *)(cmsg) + _ALIGN((cmsg)->cmsg_len)))
|
||||
|
||||
/*
|
||||
* RFC 2292 requires to check msg_controllen, in case that the kernel returns
|
||||
* an empty list for some reasons.
|
||||
*/
|
||||
#define CMSG_FIRSTHDR(mhdr) \
|
||||
((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \
|
||||
(struct cmsghdr *)(mhdr)->msg_control : \
|
||||
(struct cmsghdr *)NULL)
|
||||
|
||||
/* Length of the contents of a control message of length len */
|
||||
#define CMSG_LEN(len) (_ALIGN(sizeof(struct cmsghdr)) + (len))
|
||||
|
||||
/* Length of the space taken up by a padded control message of length len */
|
||||
#define CMSG_SPACE(len) (_ALIGN(sizeof(struct cmsghdr)) + _ALIGN(len))
|
||||
|
||||
/* "Socket"-level control message types: */
|
||||
#define SCM_RIGHTS 0x01 /* access rights (array of int) */
|
||||
|
@ -42,6 +42,7 @@ extern "C" {
|
||||
#include "switch/sf/cmif.h"
|
||||
#include "switch/sf/service.h"
|
||||
#include "switch/sf/sessionmgr.h"
|
||||
#include "switch/sf/tipc.h"
|
||||
|
||||
#include "switch/services/sm.h"
|
||||
#include "switch/services/smm.h"
|
||||
@ -52,8 +53,10 @@ extern "C" {
|
||||
#include "switch/services/apm.h"
|
||||
#include "switch/services/applet.h"
|
||||
#include "switch/services/async.h"
|
||||
#include "switch/services/audctl.h"
|
||||
#include "switch/services/audin.h"
|
||||
#include "switch/services/audout.h"
|
||||
#include "switch/services/audrec.h"
|
||||
#include "switch/services/audren.h"
|
||||
#include "switch/services/auddev.h"
|
||||
#include "switch/services/hwopus.h"
|
||||
@ -71,6 +74,7 @@ extern "C" {
|
||||
#include "switch/services/spsm.h"
|
||||
//#include "switch/services/bsd.h" Use <sys/socket.h> instead
|
||||
//#include "switch/services/sfdnsres.h" Use <netdb.h> instead
|
||||
//#include "switch/services/htcs.h"
|
||||
#include "switch/services/fatal.h"
|
||||
#include "switch/services/time.h"
|
||||
#include "switch/services/usb.h"
|
||||
@ -125,6 +129,8 @@ extern "C" {
|
||||
#include "switch/services/news.h"
|
||||
#include "switch/services/ins.h"
|
||||
#include "switch/services/ectx.h"
|
||||
#include "switch/services/avm.h"
|
||||
#include "switch/services/mm.h"
|
||||
|
||||
#include "switch/display/binder.h"
|
||||
#include "switch/display/parcel.h"
|
||||
|
@ -111,7 +111,7 @@ typedef struct {
|
||||
u64 languageCode; ///< See set.h.
|
||||
char dialogMessage[0x800]; ///< UTF-8 Dialog message.
|
||||
char fullscreenMessage[0x800]; ///< UTF-8 Fullscreen message (displayed when the user clicks on "Details").
|
||||
} PACKED ErrorApplicationArg;
|
||||
} NX_PACKED ErrorApplicationArg;
|
||||
|
||||
/// Error application config.
|
||||
typedef struct {
|
||||
@ -283,6 +283,7 @@ void errorSystemSetContext(ErrorSystemConfig* c, const ErrorContext* ctx);
|
||||
* @param fullscreen_message UTF-8 fullscreen message, displayed when the user clicks on "Details". Optional, can be NULL (which disables displaying Details).
|
||||
* @note Sets the following fields: jumpFlag=1, {strings}, and uses ::ErrorType_Application. The rest are cleared.
|
||||
* @note On pre-5.0.0 this will initialize languageCode by using: setInitialize(), setMakeLanguageCode(SetLanguage_ENUS, ...), and setExit(). This is needed since an empty languageCode wasn't supported until [5.0.0+] (which would also use SetLanguage_ENUS).
|
||||
* @note With [10.0.0+] this must only be used when running under an Application, since otherwise the applet will trigger a fatalerr.
|
||||
* @warning This applet creates an error report that is logged in the system. Proceed at your own risk!
|
||||
*/
|
||||
Result errorApplicationCreate(ErrorApplicationConfig* c, const char* dialog_message, const char* fullscreen_message);
|
||||
|
@ -23,6 +23,7 @@ typedef enum {
|
||||
PselUiMode_LicenseRequirementsForNetworkService = 10, ///< [6.0.0+] LicenseRequirementsForNetworkService
|
||||
PselUiMode_LicenseRequirementsForNetworkServiceWithUserContextImpl = 11, ///< [7.0.0+] LicenseRequirementsForNetworkServiceWithUserContextImpl
|
||||
PselUiMode_UserCreatorForImmediateNaLoginTest = 12, ///< [7.0.0+] UserCreatorForImmediateNaLoginTest
|
||||
PselUiMode_UserQualificationPromoter = 13, ///< [13.0.0+] UserQualificationPromoter
|
||||
} PselUiMode;
|
||||
|
||||
/// UI message text to display with ::PselUiMode_UserSelector. Invalid values are handled as ::PselUserSelectionPurpose_General.
|
||||
@ -200,3 +201,10 @@ Result pselShowUserCreatorForStarter(void);
|
||||
* @param[in] user Input user ID.
|
||||
*/
|
||||
Result pselShowNintendoAccountNnidLinker(AccountUid user);
|
||||
|
||||
/**
|
||||
* @brief Shows the applet for UserQualificationPromoter.
|
||||
* @note Only available on [13.0.0+].
|
||||
* @param[in] user Input user ID.
|
||||
*/
|
||||
Result pselShowUserQualificationPromoter(AccountUid user);
|
||||
|
@ -84,10 +84,10 @@ typedef enum {
|
||||
/// SwkbdInline State
|
||||
typedef enum {
|
||||
SwkbdState_Inactive = 0x0, ///< Default state from \ref swkbdInlineCreate, before a state is set by \ref swkbdInlineUpdate when a reply is received. Also indicates that the applet is no longer running.
|
||||
SwkbdState_Initialized = 0x1, ///< Applet is initialized.
|
||||
SwkbdState_Unknown2 = 0x2,
|
||||
SwkbdState_TextAvailable = 0x3, ///< Text is available since a ChangedString* reply was received.
|
||||
SwkbdState_Submitted = 0x4, ///< The user pressed the ok-button, submitting the text and closing the applet.
|
||||
SwkbdState_Initialized = 0x1, ///< Applet is initialized but hidden.
|
||||
SwkbdState_Appearing = 0x2, ///< Applet is appearing.
|
||||
SwkbdState_Shown = 0x3, ///< Applet is fully shown and ready to accept text input.
|
||||
SwkbdState_Disappearing = 0x4, ///< The user pressed the ok or cancel button, causing the applet to disappear.
|
||||
SwkbdState_Unknown5 = 0x5,
|
||||
SwkbdState_Unknown6 = 0x6,
|
||||
} SwkbdState;
|
||||
@ -116,7 +116,7 @@ typedef struct {
|
||||
u32 buffer_size; ///< 0x1000-byte aligned buffer size.
|
||||
u64 entries[0x18];
|
||||
u16 total_entries;
|
||||
} PACKED SwkbdCustomizedDictionarySet;
|
||||
} NX_PACKED SwkbdCustomizedDictionarySet;
|
||||
|
||||
/// Base swkbd arg struct.
|
||||
typedef struct {
|
||||
@ -133,7 +133,7 @@ typedef struct {
|
||||
u16 guideText[514/2];
|
||||
u16 pad_x3aa;
|
||||
u32 stringLenMax; ///< When non-zero, specifies the max string length. When the input is too long, swkbd will stop accepting more input until text is deleted via the B button (Backspace). See also \ref SwkbdTextDrawType.
|
||||
u32 stringLenMaxExt; ///< When non-zero, specifies the max string length. When the input is too long, swkbd will display an icon and disable the ok-button.
|
||||
u32 stringLenMin; ///< When non-zero, specifies the min string length. When the input is too short, swkbd will display an icon and disable the ok-button.
|
||||
u32 passwordFlag; ///< Use password: 0 = disable, 1 = enable.
|
||||
SwkbdTextDrawType textDrawType; ///< See \ref SwkbdTextDrawType.
|
||||
u16 returnButtonFlag; ///< Controls whether the Return button is enabled, for newlines input. 0 = disabled, non-zero = enabled.
|
||||
@ -210,8 +210,8 @@ typedef struct {
|
||||
u8 dicFlag; ///< Enables dictionary usage when non-zero (including the system dictionary).
|
||||
u8 unk_x1b;
|
||||
u32 keySetDisableBitmask; ///< See SwkbdKeyDisableBitmask_*.
|
||||
s32 unk_x20;
|
||||
s32 unk_x24;
|
||||
s32 stringLenMax; ///< When non-negative and non-zero, specifies the max string length. When the input is too long, swkbd will stop accepting more input until text is deleted via the B button (Backspace).
|
||||
s32 stringLenMin; ///< When non-negative and non-zero, specifies the min string length. When the input is too short, swkbd will display an icon and disable the ok-button.
|
||||
u8 returnButtonFlag; ///< Controls whether the Return button is enabled, for newlines input. 0 = disabled, non-zero = enabled.
|
||||
u8 unk_x29; ///< [10.0.0+] When value 1-2, \ref swkbdInlineAppear / \ref swkbdInlineAppearEx will set keytopAsFloating=0 and footerScalable=1.
|
||||
u8 unk_x2a;
|
||||
@ -381,7 +381,7 @@ void swkbdConfigMakePresetUserName(SwkbdConfig* c);
|
||||
/**
|
||||
* @brief Clears the args in the SwkbdConfig struct and initializes it with the DownloadCode Preset.
|
||||
* @note Do not use this before \ref swkbdCreate.
|
||||
* @note Uses the following: swkbdConfigSetType() with \ref SwkbdType_Normal (\ref SwkbdType_QWERTY on [5.0.0+]), swkbdConfigSetKeySetDisableBitmask() with SwkbdKeyDisableBitmask_DownloadCode, swkbdConfigSetInitialCursorPos() with value 1, and swkbdConfigSetBlurBackground() with value 1. [5.0.0+]: swkbdConfigSetStringLenMax() with value 16, swkbdConfigSetStringLenMaxExt() with value 1, and swkbdConfigSetTextDrawType() with SwkbdTextDrawType_DownloadCode. Uses swkbdConfigSetTextGrouping() for [0-2] with: 0x3, 0x7, and 0xb.
|
||||
* @note Uses the following: swkbdConfigSetType() with \ref SwkbdType_Normal (\ref SwkbdType_QWERTY on [5.0.0+]), swkbdConfigSetKeySetDisableBitmask() with SwkbdKeyDisableBitmask_DownloadCode, swkbdConfigSetInitialCursorPos() with value 1, and swkbdConfigSetBlurBackground() with value 1. [5.0.0+]: swkbdConfigSetStringLenMax() with value 16, swkbdConfigSetStringLenMin() with value 1, and swkbdConfigSetTextDrawType() with SwkbdTextDrawType_DownloadCode. Uses swkbdConfigSetTextGrouping() for [0-2] with: 0x3, 0x7, and 0xb.
|
||||
* @param c SwkbdConfig struct.
|
||||
*/
|
||||
void swkbdConfigMakePresetDownloadCode(SwkbdConfig* c);
|
||||
@ -507,12 +507,12 @@ static inline void swkbdConfigSetStringLenMax(SwkbdConfig* c, u32 stringLenMax)
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets SwkbdArgCommon::stringLenMaxExt.
|
||||
* @brief Sets SwkbdArgCommon::stringLenMin.
|
||||
* @param c SwkbdConfig struct.
|
||||
* @param stringLenMaxExt stringLenMaxExt
|
||||
* @param stringLenMin stringLenMin
|
||||
*/
|
||||
static inline void swkbdConfigSetStringLenMaxExt(SwkbdConfig* c, u32 stringLenMaxExt) {
|
||||
c->arg.arg.arg.stringLenMaxExt = stringLenMaxExt;
|
||||
static inline void swkbdConfigSetStringLenMin(SwkbdConfig* c, u32 stringLenMin) {
|
||||
c->arg.arg.arg.stringLenMin = stringLenMin;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -805,6 +805,24 @@ void swkbdInlineAppearArgSetLeftButtonText(SwkbdAppearArg* arg, const char* str)
|
||||
*/
|
||||
void swkbdInlineAppearArgSetRightButtonText(SwkbdAppearArg* arg, const char* str);
|
||||
|
||||
/**
|
||||
* @brief Sets the stringLenMax for the specified SwkbdAppearArg, which was previously initialized with \ref swkbdInlineMakeAppearArg.
|
||||
* @param arg \ref SwkbdAppearArg
|
||||
* @param stringLenMax Max string length
|
||||
*/
|
||||
static inline void swkbdInlineAppearArgSetStringLenMax(SwkbdAppearArg* arg, s32 stringLenMax) {
|
||||
arg->stringLenMax = stringLenMax;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets the stringLenMin for the specified SwkbdAppearArg, which was previously initialized with \ref swkbdInlineMakeAppearArg.
|
||||
* @param arg \ref SwkbdAppearArg
|
||||
* @param stringLenMin Min string length
|
||||
*/
|
||||
static inline void swkbdInlineAppearArgSetStringLenMin(SwkbdAppearArg* arg, s32 stringLenMin) {
|
||||
arg->stringLenMin = stringLenMin;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Sets the audio volume.
|
||||
* @note \ref swkbdInlineUpdate must be called at some point afterwards for this to take affect.
|
||||
@ -832,7 +850,7 @@ void swkbdInlineSetCursorPos(SwkbdInline* s, s32 pos);
|
||||
|
||||
/**
|
||||
* @brief Sets the UserWordInfo.
|
||||
* @note Not avilable when \ref SwkbdState is above ::SwkbdState_Initialized. Can't be used if this was already used previously.
|
||||
* @note Not available when \ref SwkbdState is above ::SwkbdState_Initialized. Can't be used if this was already used previously.
|
||||
* @note The specified buffer must not be used after this, until \ref swkbdInlineClose is used.
|
||||
* @note \ref swkbdInlineUpdate must be called at some point afterwards.
|
||||
* @note If input==NULL or total_entries==0, this will just call \ref swkbdInlineUnsetUserWordInfo internally.
|
||||
@ -845,7 +863,7 @@ Result swkbdInlineSetUserWordInfo(SwkbdInline* s, const SwkbdDictWord *input, s3
|
||||
/**
|
||||
* @brief Request UnsetUserWordInfo.
|
||||
* @note \ref swkbdInlineUpdate must be called at some point afterwards for this to take affect.
|
||||
* @note Not avilable when \ref SwkbdState is above ::SwkbdState_Initialized.
|
||||
* @note Not available when \ref SwkbdState is above ::SwkbdState_Initialized.
|
||||
* @param s SwkbdInline object.
|
||||
*/
|
||||
Result swkbdInlineUnsetUserWordInfo(SwkbdInline* s);
|
||||
@ -861,7 +879,7 @@ void swkbdInlineSetUtf8Mode(SwkbdInline* s, bool flag);
|
||||
|
||||
/**
|
||||
* @brief Sets the CustomizeDic.
|
||||
* @note Not avilable when \ref SwkbdState is above ::SwkbdState_Initialized. Can't be used if this or \ref swkbdInlineSetCustomizedDictionaries was already used previously.
|
||||
* @note Not available when \ref SwkbdState is above ::SwkbdState_Initialized. Can't be used if this or \ref swkbdInlineSetCustomizedDictionaries was already used previously.
|
||||
* @note The specified buffer must not be used after this, until \ref swkbdInlineClose is used. However, it will also become available once \ref swkbdInlineUpdate handles SwkbdReplyType_UnsetCustomizeDic internally.
|
||||
* @param s SwkbdInline object.
|
||||
* @param buffer 0x1000-byte aligned buffer.
|
||||
@ -873,14 +891,14 @@ Result swkbdInlineSetCustomizeDic(SwkbdInline* s, void* buffer, size_t size, Swk
|
||||
/**
|
||||
* @brief Request UnsetCustomizeDic.
|
||||
* @note \ref swkbdInlineUpdate must be called at some point afterwards for this to take affect.
|
||||
* @note Not avilable when \ref SwkbdState is above ::SwkbdState_Initialized.
|
||||
* @note Not available when \ref SwkbdState is above ::SwkbdState_Initialized.
|
||||
* @param s SwkbdInline object.
|
||||
*/
|
||||
void swkbdInlineUnsetCustomizeDic(SwkbdInline* s);
|
||||
|
||||
/**
|
||||
* @brief Sets the CustomizedDictionaries.
|
||||
* @note Not avilable when \ref SwkbdState is above ::SwkbdState_Initialized. Can't be used if this or \ref swkbdInlineSetCustomizeDic was already used previously.
|
||||
* @note Not available when \ref SwkbdState is above ::SwkbdState_Initialized. Can't be used if this or \ref swkbdInlineSetCustomizeDic was already used previously.
|
||||
* @note The specified buffer in dic must not be used after this, until \ref swkbdInlineClose is used. However, it will also become available once \ref swkbdInlineUpdate handles SwkbdReplyType_UnsetCustomizedDictionaries internally.
|
||||
* @note Only available on [6.0.0+].
|
||||
* @param s SwkbdInline object.
|
||||
@ -890,7 +908,7 @@ Result swkbdInlineSetCustomizedDictionaries(SwkbdInline* s, const SwkbdCustomize
|
||||
|
||||
/**
|
||||
* @brief Request UnsetCustomizedDictionaries.
|
||||
* @note Not avilable when \ref SwkbdState is above ::SwkbdState_Initialized.
|
||||
* @note Not available when \ref SwkbdState is above ::SwkbdState_Initialized.
|
||||
* @note Only available on [6.0.0+].
|
||||
* @param s SwkbdInline object.
|
||||
*/
|
||||
@ -949,7 +967,7 @@ void swkbdInlineSetKeytopTranslate(SwkbdInline* s, float x, float y);
|
||||
/**
|
||||
* @brief Sets KeytopAsFloating.
|
||||
* @note \ref swkbdInlineUpdate must be called at some point afterwards for this to take affect.
|
||||
* @note Not avilable when \ref SwkbdState is above ::SwkbdState_Initialized.
|
||||
* @note Not available when \ref SwkbdState is above ::SwkbdState_Initialized.
|
||||
* @param s SwkbdInline object.
|
||||
* @param flag Flag
|
||||
*/
|
||||
|
@ -95,21 +95,21 @@ typedef struct {
|
||||
u32 pad; ///< Padding
|
||||
char lastUrl[0x1000]; ///< LastUrl string
|
||||
u64 lastUrlSize; ///< Size of LastUrl, including NUL-terminator.
|
||||
} PACKED WebCommonReturnValue;
|
||||
} NX_PACKED WebCommonReturnValue;
|
||||
|
||||
/// Header struct at offset 0 in the web Arg storage (non-webWifi).
|
||||
typedef struct {
|
||||
u16 total_entries; ///< Total \ref WebArgTLV entries following this struct.
|
||||
u16 pad; ///< Padding
|
||||
WebShimKind shimKind; ///< ShimKind
|
||||
} PACKED WebArgHeader;
|
||||
} NX_PACKED WebArgHeader;
|
||||
|
||||
/// Web TLV used in the web Arg storage.
|
||||
typedef struct {
|
||||
u16 type; ///< Type of this arg.
|
||||
u16 size; ///< Size of the arg data following this struct.
|
||||
u8 pad[4]; ///< Padding
|
||||
} PACKED WebArgTLV;
|
||||
} NX_PACKED WebArgTLV;
|
||||
|
||||
/// Config struct for web applets, non-WebWifi.
|
||||
typedef struct {
|
||||
@ -133,7 +133,7 @@ typedef struct {
|
||||
u8 visible;
|
||||
u16 unk_x5;
|
||||
u8 unk_x7;
|
||||
} PACKED WebBootFooterButtonEntry;
|
||||
} NX_PACKED WebBootFooterButtonEntry;
|
||||
|
||||
/// StorageHandleQueue
|
||||
typedef struct {
|
||||
|
@ -62,6 +62,7 @@ struct AudioDriverWaveBuf {
|
||||
bool audrvVoiceInit(AudioDriver* d, int id, int num_channels, PcmFormat format, int sample_rate);
|
||||
void audrvVoiceDrop(AudioDriver* d, int id);
|
||||
void audrvVoiceStop(AudioDriver* d, int id);
|
||||
bool audrvVoiceIsPaused(AudioDriver* d, int id);
|
||||
bool audrvVoiceIsPlaying(AudioDriver* d, int id);
|
||||
bool audrvVoiceAddWaveBuf(AudioDriver* d, int id, AudioDriverWaveBuf* wavebuf);
|
||||
u32 audrvVoiceGetWaveBufSeq(AudioDriver* d, int id);
|
||||
|
@ -24,11 +24,12 @@ do { \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/// Calculate a CRC32 over data.
|
||||
static inline u32 crc32Calculate(const void *src, size_t size) {
|
||||
/// Calculate a CRC32 over data using a seed.
|
||||
/// Can be used to calculate a CRC32 in chunks using an initial seed of zero for the first chunk.
|
||||
static inline u32 crc32CalculateWithSeed(u32 seed, const void *src, size_t size) {
|
||||
const u8 *src_u8 = (const u8 *)src;
|
||||
|
||||
u32 crc = 0xFFFFFFFF;
|
||||
u32 crc = ~seed;
|
||||
s64 len = size;
|
||||
|
||||
_CRC_ALIGN(u8, b);
|
||||
@ -44,14 +45,20 @@ static inline u32 crc32Calculate(const void *src, size_t size) {
|
||||
_CRC_REMAINDER(u16, h);
|
||||
_CRC_REMAINDER(u8, b);
|
||||
|
||||
return crc ^ 0xFFFFFFFF;
|
||||
return ~crc;
|
||||
}
|
||||
|
||||
/// Calculate a CRC32C over data.
|
||||
static inline u32 crc32cCalculate(const void *src, size_t size) {
|
||||
/// Calculate a CRC32 over data.
|
||||
static inline u32 crc32Calculate(const void *src, size_t size) {
|
||||
return crc32CalculateWithSeed(0, src, size);
|
||||
}
|
||||
|
||||
/// Calculate a CRC32C over data using a seed.
|
||||
/// Can be used to calculate a CRC32C in chunks using an initial seed of zero for the first chunk.
|
||||
static inline u32 crc32cCalculateWithSeed(u32 seed, const void *src, size_t size) {
|
||||
const u8 *src_u8 = (const u8 *)src;
|
||||
|
||||
u32 crc = 0xFFFFFFFF;
|
||||
u32 crc = ~seed;
|
||||
s64 len = size;
|
||||
|
||||
_CRC_ALIGN(u8, cb);
|
||||
@ -67,7 +74,12 @@ static inline u32 crc32cCalculate(const void *src, size_t size) {
|
||||
_CRC_REMAINDER(u16, ch);
|
||||
_CRC_REMAINDER(u8, cb);
|
||||
|
||||
return crc ^ 0xFFFFFFFF;
|
||||
return ~crc;
|
||||
}
|
||||
|
||||
/// Calculate a CRC32C over data.
|
||||
static inline u32 crc32cCalculate(const void *src, size_t size) {
|
||||
return crc32cCalculateWithSeed(0, src, size);
|
||||
}
|
||||
|
||||
#undef _CRC_REMAINDER
|
||||
|
@ -11,7 +11,7 @@ typedef struct {
|
||||
} BqRect;
|
||||
|
||||
typedef struct {
|
||||
struct { s64 timestamp; } PACKED;
|
||||
struct { s64 timestamp; } NX_PACKED;
|
||||
s32 isAutoTimestamp;
|
||||
BqRect crop;
|
||||
s32 scalingMode;
|
||||
|
@ -40,6 +40,8 @@ typedef enum {
|
||||
MemType_KernelStack=0x13, ///< Mapped in kernel during \ref svcCreateThread.
|
||||
MemType_CodeReadOnly=0x14, ///< Mapped in kernel during \ref svcControlCodeMemory.
|
||||
MemType_CodeWritable=0x15, ///< Mapped in kernel during \ref svcControlCodeMemory.
|
||||
MemType_Coverage=0x16, ///< Not available.
|
||||
MemType_Insecure=0x17, ///< Mapped in kernel during \ref svcMapInsecurePhysicalMemory.
|
||||
} MemoryType;
|
||||
|
||||
/// Memory state bitmasks.
|
||||
@ -71,6 +73,7 @@ typedef enum {
|
||||
MemAttr_IsIpcMapped=BIT(1), ///< Is IPC mapped (when IpcRefCount > 0).
|
||||
MemAttr_IsDeviceMapped=BIT(2), ///< Is device mapped (when DeviceRefCount > 0).
|
||||
MemAttr_IsUncached=BIT(3), ///< Is uncached.
|
||||
MemAttr_IsPermissionLocked=BIT(4), ///< Is permission locked.
|
||||
} MemoryAttribute;
|
||||
|
||||
/// Memory permission bitmasks.
|
||||
@ -91,8 +94,8 @@ typedef struct {
|
||||
u32 type; ///< Memory type (see lower 8 bits of \ref MemoryState).
|
||||
u32 attr; ///< Memory attributes (see \ref MemoryAttribute).
|
||||
u32 perm; ///< Memory permissions (see \ref Permission).
|
||||
u32 device_refcount; ///< Device reference count.
|
||||
u32 ipc_refcount; ///< IPC reference count.
|
||||
u32 device_refcount; ///< Device reference count.
|
||||
u32 padding; ///< Padding.
|
||||
} MemoryInfo;
|
||||
|
||||
@ -106,7 +109,7 @@ typedef struct {
|
||||
/// Secure monitor arguments.
|
||||
typedef struct {
|
||||
u64 X[8]; ///< Values of X0 through X7.
|
||||
} PACKED SecmonArgs;
|
||||
} NX_PACKED SecmonArgs;
|
||||
|
||||
/// Break reasons
|
||||
typedef enum {
|
||||
@ -204,8 +207,14 @@ typedef enum {
|
||||
InfoType_UsedNonSystemMemorySize = 22, ///< [6.0.0+] Amount of memory used by process, excluding that for process memory management.
|
||||
InfoType_IsApplication = 23, ///< [9.0.0+] Whether the specified process is an Application.
|
||||
InfoType_FreeThreadCount = 24, ///< [11.0.0+] The number of free threads available to the process's resource limit.
|
||||
InfoType_ThreadTickCount = 25, ///< [13.0.0+] Number of ticks spent on thread.
|
||||
InfoType_IsSvcPermitted = 26, ///< [14.0.0+] Does process have access to SVC (only usable with \ref svcSynchronizePreemptionState at present).
|
||||
InfoType_IoRegionHint = 27, ///< [16.0.0+] Low bits of the physical address for a KIoRegion.
|
||||
InfoType_AliasRegionExtraSize = 28, ///< [18.0.0+] Extra size added to the reserved region.
|
||||
|
||||
InfoType_ThreadTickCount = 0xF0000002, ///< Number of ticks spent on thread.
|
||||
InfoType_TransferMemoryHint = 34, ///< [19.0.0+] Low bits of the process address for a KTransferMemory.
|
||||
|
||||
InfoType_ThreadTickCountDeprecated = 0xF0000002, ///< [1.0.0-12.1.0] Number of ticks spent on thread.
|
||||
} InfoType;
|
||||
|
||||
/// GetSystemInfo IDs.
|
||||
@ -255,9 +264,10 @@ typedef enum {
|
||||
|
||||
/// WaitForAddress behaviors.
|
||||
typedef enum {
|
||||
ArbitrationType_WaitIfLessThan = 0, ///< Wait if the value is less than argument.
|
||||
ArbitrationType_DecrementAndWaitIfLessThan = 1, ///< Decrement the value and wait if it is less than argument.
|
||||
ArbitrationType_WaitIfEqual = 2, ///< Wait if the value is equal to argument.
|
||||
ArbitrationType_WaitIfLessThan = 0, ///< Wait if the 32-bit value is less than argument.
|
||||
ArbitrationType_DecrementAndWaitIfLessThan = 1, ///< Decrement the 32-bit value and wait if it is less than argument.
|
||||
ArbitrationType_WaitIfEqual = 2, ///< Wait if the 32-bit value is equal to argument.
|
||||
ArbitrationType_WaitIfEqual64 = 3, ///< [19.0.0+] Wait if the 64-bit value is equal to argument.
|
||||
} ArbitrationType;
|
||||
|
||||
/// Context of a scheduled thread.
|
||||
@ -268,6 +278,18 @@ typedef struct {
|
||||
u64 pc; ///< Program Counter for the thread.
|
||||
} LastThreadContext;
|
||||
|
||||
/// Memory mapping type.
|
||||
typedef enum {
|
||||
MemoryMapping_IoRegister = 0, ///< Mapping IO registers.
|
||||
MemoryMapping_Uncached = 1, ///< Mapping normal memory without cache.
|
||||
MemoryMapping_Memory = 2, ///< Mapping normal memory.
|
||||
} MemoryMapping;
|
||||
|
||||
/// Io Pools.
|
||||
typedef enum {
|
||||
IoPoolType_PcieA2 = 0, ///< Physical address range 0x12000000-0x1FFFFFFF
|
||||
} IoPoolType;
|
||||
|
||||
///@name Memory management
|
||||
///@{
|
||||
|
||||
@ -345,7 +367,7 @@ Result svcQueryMemory(MemoryInfo* meminfo_ptr, u32 *pageinfo, u64 addr);
|
||||
* @note Syscall number 0x07.
|
||||
*/
|
||||
|
||||
void NORETURN svcExitProcess(void);
|
||||
void NX_NORETURN svcExitProcess(void);
|
||||
|
||||
/**
|
||||
* @brief Creates a thread.
|
||||
@ -365,7 +387,7 @@ Result svcStartThread(Handle handle);
|
||||
* @brief Exits the current thread.
|
||||
* @note Syscall number 0x0A.
|
||||
*/
|
||||
void NORETURN svcExitThread(void);
|
||||
void NX_NORETURN svcExitThread(void);
|
||||
|
||||
/**
|
||||
* @brief Sleeps the current thread for the specified amount of time.
|
||||
@ -651,7 +673,7 @@ Result svcOutputDebugString(const char *str, u64 size);
|
||||
* @param[in] res Result code.
|
||||
* @note Syscall number 0x28.
|
||||
*/
|
||||
void NORETURN svcReturnFromException(Result res);
|
||||
void NX_NORETURN svcReturnFromException(Result res);
|
||||
|
||||
/**
|
||||
* @brief Retrieves information about the system, or a certain kernel object.
|
||||
@ -790,7 +812,7 @@ Result svcGetThreadContext3(ThreadContext* ctx, Handle thread);
|
||||
* @return Result code.
|
||||
* @note Syscall number 0x34.
|
||||
*/
|
||||
Result svcWaitForAddress(void *address, u32 arb_type, s32 value, s64 timeout);
|
||||
Result svcWaitForAddress(void *address, u32 arb_type, s64 value, s64 timeout);
|
||||
|
||||
/**
|
||||
* @brief Signals (and updates) an address depending on type and value. [4.0.0+]
|
||||
@ -829,6 +851,27 @@ Result svcGetResourceLimitPeakValue(s64 *out, Handle reslimit_h, LimitableResour
|
||||
|
||||
///@}
|
||||
|
||||
///@name Memory Management
|
||||
///@{
|
||||
|
||||
/**
|
||||
* @brief Creates an IO Pool. [13.0.0+]
|
||||
* @return Result code.
|
||||
* @note Syscall number 0x39.
|
||||
* @warning This is a privileged syscall. Use \ref envIsSyscallHinted to check if it is available.
|
||||
*/
|
||||
Result svcCreateIoPool(Handle *out_handle, u32 pool_type);
|
||||
|
||||
/**
|
||||
* @brief Creates an IO Region. [13.0.0+]
|
||||
* @return Result code.
|
||||
* @note Syscall number 0x3A.
|
||||
* @warning This is a privileged syscall. Use \ref envIsSyscallHinted to check if it is available.
|
||||
*/
|
||||
Result svcCreateIoRegion(Handle *out_handle, Handle io_pool_h, u64 physical_address, u64 size, u32 memory_mapping, u32 perm);
|
||||
|
||||
///@}
|
||||
|
||||
///@name Debugging
|
||||
///@{
|
||||
/**
|
||||
@ -923,6 +966,22 @@ Result svcCreateEvent(Handle* server_handle, Handle* client_handle);
|
||||
///@name Memory management
|
||||
///@{
|
||||
|
||||
/**
|
||||
* @brief Maps an IO Region. [13.0.0+]
|
||||
* @return Result code.
|
||||
* @note Syscall number 0x46.
|
||||
* @warning This is a privileged syscall. Use \ref envIsSyscallHinted to check if it is available.
|
||||
*/
|
||||
Result svcMapIoRegion(Handle io_region_h, void *address, u64 size, u32 perm);
|
||||
|
||||
/**
|
||||
* @brief Undoes the effects of \ref svcMapIoRegion. [13.0.0+]
|
||||
* @return Result code.
|
||||
* @note Syscall number 0x47.
|
||||
* @warning This is a privileged syscall. Use \ref envIsSyscallHinted to check if it is available.
|
||||
*/
|
||||
Result svcUnmapIoRegion(Handle io_region_h, void *address, u64 size);
|
||||
|
||||
/**
|
||||
* @brief Maps unsafe memory (usable for GPU DMA) for a system module at the desired address. [5.0.0+]
|
||||
* @return Result code.
|
||||
@ -1064,14 +1123,14 @@ Result svcQueryPhysicalAddress(PhysicalMemoryInfo *out, u64 virtaddr);
|
||||
* @warning This is a privileged syscall. Use \ref envIsSyscallHinted to check if it is available.
|
||||
* @warning Only exists on [10.0.0+]. For older versions use \ref svcLegacyQueryIoMapping.
|
||||
*/
|
||||
Result svcQueryIoMapping(u64* virtaddr, u64* out_size, u64 physaddr, u64 size);
|
||||
Result svcQueryMemoryMapping(u64* virtaddr, u64* out_size, u64 physaddr, u64 size);
|
||||
|
||||
/**
|
||||
* @brief Returns a virtual address mapped to a given IO range.
|
||||
* @return Result code.
|
||||
* @note Syscall number 0x55.
|
||||
* @warning This is a privileged syscall. Use \ref envIsSyscallHinted to check if it is available.
|
||||
* @warning Only exists on [1.0.0-9.2.0]. For newer versions use \ref svcQueryIoMapping.
|
||||
* @warning Only exists on [1.0.0-9.2.0]. For newer versions use \ref svcQueryMemoryMapping.
|
||||
*/
|
||||
Result svcLegacyQueryIoMapping(u64* virtaddr, u64 physaddr, u64 size);
|
||||
|
||||
@ -1111,7 +1170,7 @@ Result svcDetachDeviceAddressSpace(u64 device, Handle handle);
|
||||
* @note Syscall number 0x59.
|
||||
* @warning This is a privileged syscall. Use \ref envIsSyscallHinted to check if it is available.
|
||||
*/
|
||||
Result svcMapDeviceAddressSpaceByForce(Handle handle, Handle proc_handle, u64 map_addr, u64 dev_size, u64 dev_addr, u32 perm);
|
||||
Result svcMapDeviceAddressSpaceByForce(Handle handle, Handle proc_handle, u64 map_addr, u64 dev_size, u64 dev_addr, u32 option);
|
||||
|
||||
/**
|
||||
* @brief Maps an attached device address space to an userspace address.
|
||||
@ -1120,10 +1179,10 @@ Result svcMapDeviceAddressSpaceByForce(Handle handle, Handle proc_handle, u64 ma
|
||||
* @note Syscall number 0x5A.
|
||||
* @warning This is a privileged syscall. Use \ref envIsSyscallHinted to check if it is available.
|
||||
*/
|
||||
Result svcMapDeviceAddressSpaceAligned(Handle handle, Handle proc_handle, u64 map_addr, u64 dev_size, u64 dev_addr, u32 perm);
|
||||
Result svcMapDeviceAddressSpaceAligned(Handle handle, Handle proc_handle, u64 map_addr, u64 dev_size, u64 dev_addr, u32 option);
|
||||
|
||||
/**
|
||||
* @brief Maps an attached device address space to an userspace address.
|
||||
* @brief Maps an attached device address space to an userspace address. [1.0.0-12.1.0]
|
||||
* @return Result code.
|
||||
* @remark The userspace destination address must have the \ref MemState_MapDeviceAlignedAllowed bit set.
|
||||
* @note Syscall number 0x5B.
|
||||
@ -1511,10 +1570,28 @@ Result svcSetResourceLimitLimitValue(Handle reslimit, LimitableResource which, u
|
||||
/**
|
||||
* @brief Calls a secure monitor function (TrustZone, EL3).
|
||||
* @param regs Arguments to pass to the secure monitor.
|
||||
* @return Return value from the secure monitor.
|
||||
* @note Syscall number 0x7F.
|
||||
* @warning This is a privileged syscall. Use \ref envIsSyscallHinted to check if it is available.
|
||||
*/
|
||||
u64 svcCallSecureMonitor(SecmonArgs* regs);
|
||||
void svcCallSecureMonitor(SecmonArgs* regs);
|
||||
|
||||
///@}
|
||||
|
||||
///@name Memory management
|
||||
///@{
|
||||
|
||||
/**
|
||||
* @brief Maps new insecure memory at the desired address. [15.0.0+]
|
||||
* @return Result code.
|
||||
* @note Syscall number 0x90.
|
||||
*/
|
||||
Result svcMapInsecurePhysicalMemory(void *address, u64 size);
|
||||
|
||||
/**
|
||||
* @brief Undoes the effects of \ref svcMapInsecureMemory. [15.0.0+]
|
||||
* @return Result code.
|
||||
* @note Syscall number 0x91.
|
||||
*/
|
||||
Result svcUnmapInsecurePhysicalMemory(void *address, u64 size);
|
||||
|
||||
///@}
|
@ -52,7 +52,7 @@ Result threadStart(Thread* t);
|
||||
/**
|
||||
* @brief Exits the current thread immediately.
|
||||
*/
|
||||
void NORETURN threadExit(void);
|
||||
void NX_NORETURN threadExit(void);
|
||||
|
||||
/**
|
||||
* @brief Waits for a thread to finish executing.
|
||||
|
@ -72,6 +72,21 @@ static inline void* tmemGetAddr(TransferMemory* t){
|
||||
return t->map_addr;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Closes handle of a transfer memory object.
|
||||
* @param t Transfer memory information structure.
|
||||
* @return Result code.
|
||||
*/
|
||||
Result tmemCloseHandle(TransferMemory* t);
|
||||
|
||||
/**
|
||||
* @brief Waits until source backing memory permissions match perm.
|
||||
* @param t Transfer memory information structure.
|
||||
* @param perm Permissions which the source backing memory is expected to have before return.
|
||||
* @return Result code.
|
||||
*/
|
||||
Result tmemWaitForPermission(TransferMemory* t, Permission perm);
|
||||
|
||||
/**
|
||||
* @brief Frees up resources used by a transfer memory object, unmapping and closing handles, etc.
|
||||
* @param t Transfer memory information structure.
|
||||
|
@ -10,22 +10,6 @@
|
||||
/// Address space reservation type (see \ref virtmemAddReservation)
|
||||
typedef struct VirtmemReservation VirtmemReservation;
|
||||
|
||||
/**
|
||||
* @brief Reserves a slice of general purpose address space sequentially.
|
||||
* @param size Desired size of the slice (rounded up to page alignment).
|
||||
* @return Pointer to the slice of address space.
|
||||
* @deprecated This function is prone to race conditions, please use \ref virtmemFindAslr or \ref virtmemFindCodeMemory (and, if necessary, \ref virtmemAddReservation) instead.
|
||||
*/
|
||||
void* DEPRECATED virtmemReserve(size_t size);
|
||||
|
||||
/**
|
||||
* @brief Relinquishes a slice of address space reserved with virtmemReserve (currently no-op).
|
||||
* @param addr Pointer to the slice.
|
||||
* @param size Size of the slice.
|
||||
* @deprecated This function is a companion of \ref virtmemReserve which is deprecated.
|
||||
*/
|
||||
void DEPRECATED virtmemFree(void* addr, size_t size);
|
||||
|
||||
/// Locks the virtual memory manager mutex.
|
||||
void virtmemLock(void);
|
||||
|
||||
|
@ -10,6 +10,7 @@ typedef struct {
|
||||
|
||||
Result nvFenceInit(void);
|
||||
void nvFenceExit(void);
|
||||
u32 nvFenceGetFd(void);
|
||||
|
||||
Result nvFenceWait(NvFence* f, s32 timeout_us);
|
||||
|
||||
|
@ -13,3 +13,4 @@ const u32* nvGpuGetTpcMasks(u32 *num_masks_out);
|
||||
Result nvGpuZbcGetActiveSlotMask(u32 *out_slot, u32 *out_mask);
|
||||
Result nvGpuZbcAddColor(const u32 color_l2[4], const u32 color_ds[4], u32 format);
|
||||
Result nvGpuZbcAddDepth(float depth);
|
||||
Result nvGpuGetTimestamp(u64 *ts);
|
||||
|
@ -117,6 +117,11 @@ typedef struct {
|
||||
u32 mask;
|
||||
} nvioctl_zbc_slot_mask;
|
||||
|
||||
typedef struct {
|
||||
u64 timestamp;
|
||||
u64 reserved;
|
||||
} nvioctl_gpu_time;
|
||||
|
||||
typedef struct {
|
||||
u32 id;
|
||||
u32 value;
|
||||
@ -129,6 +134,41 @@ typedef struct {
|
||||
};
|
||||
} nvioctl_gpfifo_entry;
|
||||
|
||||
typedef struct {
|
||||
u32 mem;
|
||||
u32 offset;
|
||||
u32 words;
|
||||
} nvioctl_cmdbuf;
|
||||
|
||||
typedef struct {
|
||||
u32 cmdbuf_mem;
|
||||
u32 cmdbuf_offset;
|
||||
u32 target;
|
||||
u32 target_offset;
|
||||
} nvioctl_reloc;
|
||||
|
||||
typedef struct {
|
||||
u32 shift;
|
||||
} nvioctl_reloc_shift;
|
||||
|
||||
typedef struct {
|
||||
u32 syncpt_id;
|
||||
u32 syncpt_incrs;
|
||||
u32 waitbase_id; // Always -1
|
||||
u32 next; //< Next valid incr index, or -1
|
||||
u32 prev; //< Previous valid incr index, or -1
|
||||
} nvioctl_syncpt_incr;
|
||||
|
||||
typedef struct {
|
||||
u32 handle;
|
||||
u32 iova;
|
||||
} nvioctl_command_buffer_map;
|
||||
|
||||
typedef struct {
|
||||
u32 rate;
|
||||
u32 moduleid;
|
||||
} nvioctl_clk_rate;
|
||||
|
||||
#define NVGPU_ZBC_TYPE_INVALID 0
|
||||
#define NVGPU_ZBC_TYPE_COLOR 1
|
||||
#define NVGPU_ZBC_TYPE_DEPTH 2
|
||||
@ -219,6 +259,7 @@ Result nvioctlNvhostCtrlGpu_ZbcQueryTable(u32 fd, u32 index, nvioctl_zbc_entry *
|
||||
Result nvioctlNvhostCtrlGpu_GetCharacteristics(u32 fd, nvioctl_gpu_characteristics *out);
|
||||
Result nvioctlNvhostCtrlGpu_GetTpcMasks(u32 fd, void *buffer, size_t size);
|
||||
Result nvioctlNvhostCtrlGpu_ZbcGetActiveSlotMask(u32 fd, nvioctl_zbc_slot_mask *out);
|
||||
Result nvioctlNvhostCtrlGpu_GetGpuTime(u32 fd, nvioctl_gpu_time *out);
|
||||
|
||||
Result nvioctlNvhostAsGpu_BindChannel(u32 fd, u32 channel_fd);
|
||||
Result nvioctlNvhostAsGpu_AllocSpace(u32 fd, u32 pages, u32 page_size, u32 flags, u64 align_or_offset, u64 *offset);
|
||||
@ -247,3 +288,11 @@ Result nvioctlChannel_SetPriority(u32 fd, u32 priority);
|
||||
Result nvioctlChannel_SetTimeout(u32 fd, u32 timeout);
|
||||
Result nvioctlChannel_AllocGpfifoEx2(u32 fd, u32 num_entries, u32 flags, u32 unk0, u32 unk1, u32 unk2, u32 unk3, nvioctl_fence *fence_out);
|
||||
Result nvioctlChannel_SetUserData(u32 fd, void* addr);
|
||||
Result nvioctlChannel_Submit(u32 fd, const nvioctl_cmdbuf *cmdbufs, u32 num_cmdbufs, const nvioctl_reloc *relocs, const nvioctl_reloc_shift *reloc_shifts, u32 num_relocs,
|
||||
const nvioctl_syncpt_incr *syncpt_incrs, u32 num_syncpt_incrs, nvioctl_fence *fences, u32 num_fences);
|
||||
Result nvioctlChannel_GetSyncpt(u32 fd, u32 module_id, u32 *syncpt);
|
||||
Result nvioctlChannel_GetModuleClockRate(u32 fd, u32 module_id, u32 *freq);
|
||||
Result nvioctlChannel_SetModuleClockRate(u32 fd, u32 module_id, u32 freq);
|
||||
Result nvioctlChannel_MapCommandBuffer(u32 fd, nvioctl_command_buffer_map *maps, u32 num_maps, bool compressed);
|
||||
Result nvioctlChannel_UnmapCommandBuffer(u32 fd, const nvioctl_command_buffer_map *maps, u32 num_maps, bool compressed);
|
||||
Result nvioctlChannel_SetSubmitTimeout(u32 fd, u32 timeout);
|
||||
|
@ -125,6 +125,7 @@ enum {
|
||||
LibnxError_LibAppletBadExit,
|
||||
LibnxError_InvalidCmifOutHeader,
|
||||
LibnxError_ShouldNotHappen,
|
||||
LibnxError_Timeout,
|
||||
};
|
||||
|
||||
/// libnx binder error codes
|
||||
|
@ -56,10 +56,10 @@ bool btdevGattAttributeUuidIsSame(const BtdrvGattAttributeUuid *a, const BtdrvGa
|
||||
Result btdevAcquireBleScanEvent(Event* out_event);
|
||||
|
||||
/// Wrapper for \ref btmuGetBleScanFilterParameter.
|
||||
Result btdevGetBleScanParameter(u16 unk, BtdrvBleAdvertisePacketParameter *out);
|
||||
Result btdevGetBleScanParameter(u16 parameter_id, BtdrvBleAdvertisePacketParameter *out);
|
||||
|
||||
/// Wrapper for \ref btmuGetBleScanFilterParameter2.
|
||||
Result btdevGetBleScanParameter2(u16 unk, BtdrvGattAttributeUuid *out);
|
||||
Result btdevGetBleScanParameter2(u16 parameter_id, BtdrvGattAttributeUuid *out);
|
||||
|
||||
/// Wrapper for \ref btdevStartBleScanGeneral.
|
||||
Result btdevStartBleScanGeneral(BtdrvBleAdvertisePacketParameter param);
|
||||
@ -94,7 +94,7 @@ Result btdevAcquireBleConnectionStateChangedEvent(Event* out_event);
|
||||
Result btdevConnectToGattServer(BtdrvAddress addr);
|
||||
|
||||
/// Wrapper for \ref btmuBleDisconnect.
|
||||
Result btdevDisconnectFromGattServer(u32 id);
|
||||
Result btdevDisconnectFromGattServer(u32 connection_handle);
|
||||
|
||||
/// Wrapper for \ref btmuBleGetConnectionState.
|
||||
Result btdevGetBleConnectionInfoList(BtdrvBleConnectionInfo *info, u8 count, u8 *total_out);
|
||||
|
@ -103,8 +103,8 @@ struct PrintConsole
|
||||
int windowHeight; ///< Window height in characters
|
||||
|
||||
int tabSize; ///< Size of a tab
|
||||
int fg; ///< Foreground color
|
||||
int bg; ///< Background color
|
||||
u16 fg; ///< Foreground color
|
||||
u16 bg; ///< Background color
|
||||
int flags; ///< Reverse/bright flags
|
||||
|
||||
bool consoleInitialised; ///< True if the console is initialized
|
||||
@ -119,13 +119,14 @@ struct PrintConsole
|
||||
#define CONSOLE_COLOR_REVERSE (1<<6) ///< Reversed color text
|
||||
#define CONSOLE_CONCEAL (1<<7) ///< Concealed text
|
||||
#define CONSOLE_CROSSED_OUT (1<<8) ///< Crossed out text
|
||||
#define CONSOLE_FG_CUSTOM (1<<9) ///< Foreground custom color
|
||||
#define CONSOLE_BG_CUSTOM (1<<10) ///< Background custom color
|
||||
|
||||
/// Console debug devices supported by libnx.
|
||||
typedef enum {
|
||||
debugDevice_NULL, ///< Swallows prints to stderr
|
||||
debugDevice_SVC, ///< Outputs stderr debug statements using svcOutputDebugString, which can then be captured by interactive debuggers
|
||||
debugDevice_CONSOLE, ///< Directs stderr debug statements to Switch console window
|
||||
debugDevice_3DMOO = debugDevice_SVC,
|
||||
} debugDevice;
|
||||
|
||||
/**
|
||||
|
@ -10,8 +10,6 @@ typedef enum {
|
||||
|
||||
/// Configuration structure for socketInitalize
|
||||
typedef struct {
|
||||
u32 bsdsockets_version; ///< Observed 1 on 2.0 LibAppletWeb, 2 on 3.0.
|
||||
|
||||
u32 tcp_tx_buf_size; ///< Size of the TCP transfer (send) buffer (initial or fixed).
|
||||
u32 tcp_rx_buf_size; ///< Size of the TCP receive buffer (initial or fixed).
|
||||
u32 tcp_tx_buf_max_size; ///< Maximum size of the TCP transfer (send) buffer. If it is 0, the size of the buffer is fixed to its initial value.
|
||||
@ -46,3 +44,15 @@ int socketSslConnectionSetSocketDescriptor(SslConnection *c, int sockfd);
|
||||
/// Wrapper for \ref sslConnectionGetSocketDescriptor. Returns the output sockfd on success and -1 on error.
|
||||
int socketSslConnectionGetSocketDescriptor(SslConnection *c);
|
||||
|
||||
#ifdef _SOCKLEN_T_DECLARED
|
||||
struct sockaddr;
|
||||
/// Wrapper for \ref sslConnectionSetDtlsSocketDescriptor. Returns the output sockfd on success and -1 on error. errno==ENOENT indicates that no sockfd was returned, this error must be ignored.
|
||||
int socketSslConnectionSetDtlsSocketDescriptor(SslConnection *c, int sockfd, const struct sockaddr *addr, socklen_t addrlen);
|
||||
#endif
|
||||
|
||||
/// Wrapper for \ref nifmRequestRegisterSocketDescriptor. Returns 0 on success and -1 on error.
|
||||
int socketNifmRequestRegisterSocketDescriptor(NifmRequest* r, int sockfd);
|
||||
|
||||
/// Wrapper for \ref nifmRequestUnregisterSocketDescriptor. Returns 0 on success and -1 on error.
|
||||
int socketNifmRequestUnregisterSocketDescriptor(NifmRequest* r, int sockfd);
|
||||
|
||||
|
@ -18,7 +18,7 @@ typedef struct {
|
||||
Result usbCommsInitialize(void);
|
||||
|
||||
/// Initializes usbComms with a specific number of interfaces.
|
||||
Result usbCommsInitializeEx(u32 num_interfaces, const UsbCommsInterfaceInfo *infos);
|
||||
Result usbCommsInitializeEx(u32 num_interfaces, const UsbCommsInterfaceInfo *infos, u16 idVendor, u16 idProduct);
|
||||
|
||||
/// Exits usbComms.
|
||||
void usbCommsExit(void);
|
||||
@ -26,6 +26,9 @@ void usbCommsExit(void);
|
||||
/// Sets whether to throw a fatal error in usbComms{Read/Write}* on failure, or just return the transferred size. By default (false) the latter is used.
|
||||
void usbCommsSetErrorHandling(bool flag);
|
||||
|
||||
///@name Synchronous API
|
||||
///@{
|
||||
|
||||
/// Read data with the default interface.
|
||||
size_t usbCommsRead(void* buffer, size_t size);
|
||||
|
||||
@ -37,3 +40,31 @@ size_t usbCommsReadEx(void* buffer, size_t size, u32 interface);
|
||||
|
||||
/// Same as usbCommsWrite except with the specified interface.
|
||||
size_t usbCommsWriteEx(const void* buffer, size_t size, u32 interface);
|
||||
|
||||
///@}
|
||||
|
||||
///@name Asynchronous API
|
||||
///@{
|
||||
|
||||
/// Retrieve event used for read completion with the given interface.
|
||||
Event *usbCommsGetReadCompletionEvent(u32 interface);
|
||||
|
||||
/// Start an asynchronous read. The completion event will be signaled when the read completes.
|
||||
/// The buffer must be page-aligned and no larger than one page.
|
||||
Result usbCommsReadAsync(void *buffer, size_t size, u32 *urbId, u32 interface);
|
||||
|
||||
/// Complete an asynchronous read, clearing the completion event, and return the amount of data which was read.
|
||||
Result usbCommsGetReadResult(u32 urbId, u32 *transferredSize, u32 interface);
|
||||
|
||||
|
||||
/// Retrieve event used for write completion with the given interface.
|
||||
Event *usbCommsGetWriteCompletionEvent(u32 interface);
|
||||
|
||||
/// Start an asynchronous write. The completion event will be signaled when the write completes.
|
||||
/// The buffer must be page-aligned and no larger than one page.
|
||||
Result usbCommsWriteAsync(void *buffer, size_t size, u32 *urbId, u32 interface);
|
||||
|
||||
/// Complete an asynchronous write, clearing the completion event, and return the amount of data which was written.
|
||||
Result usbCommsGetWriteResult(u32 urbId, u32 *transferredSize, u32 interface);
|
||||
|
||||
///@}
|
||||
|
@ -12,4 +12,4 @@
|
||||
* @brief Aborts program execution with a result code.
|
||||
* @param[in] res Result code.
|
||||
*/
|
||||
void NORETURN diagAbortWithResult(Result res);
|
||||
void NX_NORETURN diagAbortWithResult(Result res);
|
||||
|
@ -28,7 +28,7 @@ enum {
|
||||
EntryType_OverrideHeap=3, ///< Provides heap override information.
|
||||
EntryType_OverrideService=4, ///< Provides service override information.
|
||||
EntryType_Argv=5, ///< Provides argv.
|
||||
EntryType_SyscallAvailableHint=6, ///< Provides syscall availability hints.
|
||||
EntryType_SyscallAvailableHint=6, ///< Provides syscall availability hints (SVCs 0x00..0x7F).
|
||||
EntryType_AppletType=7, ///< Provides APT applet type.
|
||||
EntryType_AppletWorkaround=8, ///< Indicates that APT is broken and should not be used.
|
||||
EntryType_Reserved9=9, ///< Unused/reserved entry type, formerly used by StdioSockets.
|
||||
@ -37,6 +37,7 @@ enum {
|
||||
EntryType_RandomSeed=14, ///< Provides random data used to seed the pseudo-random number generator.
|
||||
EntryType_UserIdStorage=15, ///< Provides persistent storage for the preselected user id.
|
||||
EntryType_HosVersion=16, ///< Provides the currently running Horizon OS version.
|
||||
EntryType_SyscallAvailableHint2=17, ///< Provides syscall availability hints (SVCs 0x80..0xBF).
|
||||
};
|
||||
|
||||
enum {
|
||||
@ -44,7 +45,7 @@ enum {
|
||||
};
|
||||
|
||||
/// Loader return function.
|
||||
typedef void NORETURN (*LoaderReturnFn)(int result_code);
|
||||
typedef void NX_NORETURN (*LoaderReturnFn)(int result_code);
|
||||
|
||||
/**
|
||||
* @brief Parses the homebrew loader environment block (internally called).
|
||||
@ -81,7 +82,7 @@ void* envGetArgv(void);
|
||||
* @param svc Syscall number to test.
|
||||
* @returns true if the syscall is available.
|
||||
*/
|
||||
bool envIsSyscallHinted(u8 svc);
|
||||
bool envIsSyscallHinted(unsigned svc);
|
||||
|
||||
/// Returns the handle to the running homebrew process.
|
||||
Handle envGetOwnProcessHandle(void);
|
||||
|
@ -25,6 +25,9 @@ u32 hosversionGet(void);
|
||||
/// Sets or overrides the current HOS version. This function is normally called automatically by libnx on startup with the version info obtained with \ref setsysGetFirmwareVersion.
|
||||
void hosversionSet(u32 version);
|
||||
|
||||
/// Returns whether the current HOS version is augmented by running the Atmosphère custom firmware.
|
||||
bool hosversionIsAtmosphere(void);
|
||||
|
||||
/// Returns true if the current HOS version is equal to or above the specified major/minor/micro version.
|
||||
static inline bool hosversionAtLeast(u8 major, u8 minor, u8 micro) {
|
||||
return hosversionGet() >= MAKEHOSVERSION(major,minor,micro);
|
||||
|
@ -344,10 +344,10 @@ Service* appletGetServiceSession_Proxy(void);
|
||||
/// Gets the Service object for IAppletCommonFunctions. Only initialized with AppletType_SystemApplet, AppletType_LibraryApplet, or AppletType_OverlayApplet, on [7.0.0+].
|
||||
Service* appletGetServiceSession_AppletCommonFunctions(void);
|
||||
|
||||
/// Gets the Service object for I*Functions, specific to each AppletType (IApplicationFunctions for AppletType_*Application). Not initialized with AppletType_LibraryApplet.
|
||||
/// Gets the Service object for I*Functions, specific to each AppletType (IApplicationFunctions for AppletType_*Application). Not initialized with AppletType_LibraryApplet pre-15.0.0. On [15.0.0+] with AppletType_LibraryApplet this returns the object for IHomeMenuFunctions.
|
||||
Service* appletGetServiceSession_Functions(void);
|
||||
|
||||
/// Gets the Service object for IGlobalStateController. Only initialized with AppletType_SystemApplet.
|
||||
/// Gets the Service object for IGlobalStateController. Only initialized with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet.
|
||||
Service* appletGetServiceSession_GlobalStateController(void);
|
||||
|
||||
/// Gets the Service object for IApplicationCreator. Only initialized with AppletType_SystemApplet.
|
||||
@ -1732,37 +1732,37 @@ Result appletPrepareForJit(void);
|
||||
|
||||
///@}
|
||||
|
||||
///@name IHomeMenuFunctions: IFunctions for AppletType_SystemApplet.
|
||||
///@name IHomeMenuFunctions: IFunctions for AppletType_SystemApplet and on [15.0.0+] for AppletType_LibraryApplet.
|
||||
///@{
|
||||
|
||||
/**
|
||||
* @brief RequestToGetForeground
|
||||
* @note Only available with AppletType_SystemApplet.
|
||||
* @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet.
|
||||
*/
|
||||
Result appletRequestToGetForeground(void);
|
||||
|
||||
/**
|
||||
* @brief LockForeground
|
||||
* @note Only available with AppletType_SystemApplet.
|
||||
* @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet.
|
||||
*/
|
||||
Result appletLockForeground(void);
|
||||
|
||||
/**
|
||||
* @brief UnlockForeground
|
||||
* @note Only available with AppletType_SystemApplet.
|
||||
* @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet.
|
||||
*/
|
||||
Result appletUnlockForeground(void);
|
||||
|
||||
/**
|
||||
* @brief Pops a storage from the general channel.
|
||||
* @note Only available with AppletType_SystemApplet.
|
||||
* @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet.
|
||||
* @param[out] s Storage object.
|
||||
*/
|
||||
Result appletPopFromGeneralChannel(AppletStorage *s);
|
||||
|
||||
/**
|
||||
* @brief Gets an Event which is signaled when a new storage is available with \ref appletPopFromGeneralChannel where previously no storage was available, this event is automatically cleared by the system once the last storage is popped.
|
||||
* @note Only available with AppletType_SystemApplet.
|
||||
* @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet.
|
||||
* @note The Event must be closed by the user once finished with it.
|
||||
* @param[out] out_event Output Event with autoclear=false.
|
||||
*/
|
||||
@ -1770,7 +1770,7 @@ Result appletGetPopFromGeneralChannelEvent(Event *out_event);
|
||||
|
||||
/**
|
||||
* @brief Gets a \ref AppletLockAccessor for HomeButtonWriter.
|
||||
* @note Only available with AppletType_SystemApplet.
|
||||
* @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet.
|
||||
* @note Similar to using \ref appletGetWriterLockAccessorEx with inval=0.
|
||||
* @param a LockAccessor object.
|
||||
*/
|
||||
@ -1778,14 +1778,14 @@ Result appletGetHomeButtonWriterLockAccessor(AppletLockAccessor *a);
|
||||
|
||||
/**
|
||||
* @brief IsSleepEnabled
|
||||
* @note Only available with AppletType_SystemApplet on [11.0.0+].
|
||||
* @note Only available with AppletType_SystemApplet on [11.0.0+], or on [15.0.0+] with AppletType_LibraryApplet.
|
||||
* @param[out] out Output flag.
|
||||
*/
|
||||
Result appletIsSleepEnabled(bool *out);
|
||||
|
||||
/**
|
||||
* @brief PopRequestLaunchApplicationForDebug
|
||||
* @note Only available with AppletType_SystemApplet on [6.0.0+].
|
||||
* @note Only available with AppletType_SystemApplet on [6.0.0+], or on [15.0.0+] with AppletType_LibraryApplet.
|
||||
* @param[out] uids Output array of \ref AccountUid.
|
||||
* @param[in] count Size of the uids array in entries, must be at least the size stored in state.
|
||||
* @param[out] application_id Output ApplicationId.
|
||||
@ -1795,21 +1795,21 @@ Result appletPopRequestLaunchApplicationForDebug(AccountUid *uids, s32 count, u6
|
||||
|
||||
/**
|
||||
* @brief IsForceTerminateApplicationDisabledForDebug
|
||||
* @note Only available with AppletType_SystemApplet on [9.0.0+].
|
||||
* @note Only available with AppletType_SystemApplet on [9.0.0+], or on [15.0.0+] with AppletType_LibraryApplet.
|
||||
* @param[out] out Output flag. 0 when DebugMode is not enabled, otherwise this is loaded from a system-setting.
|
||||
*/
|
||||
Result appletIsForceTerminateApplicationDisabledForDebug(bool *out);
|
||||
|
||||
/**
|
||||
* @brief Launches DevMenu and the dev Overlay-applet. This will enter an infinite-sleep-loop on success.
|
||||
* @note Only available with AppletType_SystemApplet on [8.0.0+].
|
||||
* @note Only available with AppletType_SystemApplet on [8.0.0+], or on [15.0.0+] with AppletType_LibraryApplet.
|
||||
* @note This verifies that DebugMode is enabled, then uses a ns cmd. That cmd then loads the system-settings for these two ProgramIds (which normally only exist on devunits), and verifies that these programs are installed + launches them.
|
||||
*/
|
||||
Result appletLaunchDevMenu(void);
|
||||
|
||||
/**
|
||||
* @brief SetLastApplicationExitReason
|
||||
* @note Only available with AppletType_SystemApplet on [11.0.0+].
|
||||
* @note Only available with AppletType_SystemApplet on [11.0.0+], or on [15.0.0+] with AppletType_LibraryApplet.
|
||||
* @param[in] reason Reason
|
||||
*/
|
||||
Result appletSetLastApplicationExitReason(s32 reason);
|
||||
@ -1821,65 +1821,65 @@ Result appletSetLastApplicationExitReason(s32 reason);
|
||||
|
||||
/**
|
||||
* @brief Start the sequence for entering sleep-mode.
|
||||
* @note Only available with AppletType_SystemApplet.
|
||||
* @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet.
|
||||
* @param[in] flag Flag, official sw uses hard-coded value = true.
|
||||
*/
|
||||
Result appletStartSleepSequence(bool flag);
|
||||
|
||||
/**
|
||||
* @brief Start the system-shutdown sequence.
|
||||
* @note Only available with AppletType_SystemApplet.
|
||||
* @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet.
|
||||
*/
|
||||
Result appletStartShutdownSequence(void);
|
||||
|
||||
/**
|
||||
* @brief Start the system-reboot sequence.
|
||||
* @note Only available with AppletType_SystemApplet.
|
||||
* @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet.
|
||||
*/
|
||||
Result appletStartRebootSequence(void);
|
||||
|
||||
/**
|
||||
* @brief IsAutoPowerDownRequested. Uses an idle:sys cmd internally.
|
||||
* @note Only available with AppletType_SystemApplet on [7.0.0+].
|
||||
* @note Only available with AppletType_SystemApplet on [7.0.0+], or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet.
|
||||
* @param[out] out Output flag.
|
||||
*/
|
||||
Result appletIsAutoPowerDownRequested(bool *out);
|
||||
|
||||
/**
|
||||
* @brief LoadAndApplyIdlePolicySettings. Uses an idle:sys cmd internally.
|
||||
* @note Only available with AppletType_SystemApplet.
|
||||
* @note Only available with AppletType_SystemApplet, or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet.
|
||||
*/
|
||||
Result appletLoadAndApplyIdlePolicySettings(void);
|
||||
|
||||
/**
|
||||
* @brief NotifyCecSettingsChanged. Uses an omm cmd internally.
|
||||
* @note Only available with AppletType_SystemApplet on [2.0.0+].
|
||||
* @note Only available with AppletType_SystemApplet on [2.0.0+], or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet.
|
||||
*/
|
||||
Result appletNotifyCecSettingsChanged(void);
|
||||
|
||||
/**
|
||||
* @brief Sets the DefaultHomeButtonLongPressTime.
|
||||
* @note Only available with AppletType_SystemApplet on [3.0.0+].
|
||||
* @note Only available with AppletType_SystemApplet on [3.0.0+], or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet.
|
||||
* @param[in] val Input value.
|
||||
*/
|
||||
Result appletSetDefaultHomeButtonLongPressTime(s64 val);
|
||||
|
||||
/**
|
||||
* @brief UpdateDefaultDisplayResolution. Uses an omm cmd internally.
|
||||
* @note Only available with AppletType_SystemApplet on [3.0.0+].
|
||||
* @note Only available with AppletType_SystemApplet on [3.0.0+], or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet.
|
||||
*/
|
||||
Result appletUpdateDefaultDisplayResolution(void);
|
||||
|
||||
/**
|
||||
* @brief ShouldSleepOnBoot. Uses an omm cmd internally.
|
||||
* @note Only available with AppletType_SystemApplet on [3.0.0+].
|
||||
* @note Only available with AppletType_SystemApplet on [3.0.0+], or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet.
|
||||
* @param[out] out Output flag.
|
||||
*/
|
||||
Result appletShouldSleepOnBoot(bool *out);
|
||||
|
||||
/**
|
||||
* @brief Gets an Event which is signaled for HdcpAuthenticationFailed.
|
||||
* @note Only available with AppletType_SystemApplet on [4.0.0+].
|
||||
* @note Only available with AppletType_SystemApplet on [4.0.0+], or on [15.0.0+] with AppletType_LibraryApplet/AppletType_OverlayApplet.
|
||||
* @note The Event must be closed by the user once finished with it.
|
||||
* @param[out] out_event Output Event with autoclear=false.
|
||||
*/
|
||||
@ -2689,6 +2689,11 @@ Result appletSetHandlingHomeButtonShortPressedEnabled(bool flag);
|
||||
*/
|
||||
AppletInfo *appletGetAppletInfo(void);
|
||||
|
||||
/**
|
||||
* @brief Gets the event associated with notification messages.
|
||||
*/
|
||||
Event *appletGetMessageEvent(void);
|
||||
|
||||
/**
|
||||
* @brief Gets a notification message, see \ref AppletMessage.
|
||||
*/
|
||||
|
70
nx/include/switch/services/audctl.h
Normal file
70
nx/include/switch/services/audctl.h
Normal file
@ -0,0 +1,70 @@
|
||||
/**
|
||||
* @file audctl.h
|
||||
* @brief Audio Control IPC wrapper.
|
||||
* @author plutoo
|
||||
* @copyright libnx Authors
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "../types.h"
|
||||
#include "../audio/audio.h"
|
||||
#include "../sf/service.h"
|
||||
#include "../kernel/event.h"
|
||||
|
||||
typedef enum {
|
||||
AudioTarget_Invalid = 0,
|
||||
AudioTarget_Speaker = 1,
|
||||
AudioTarget_Headphone = 2,
|
||||
AudioTarget_Tv = 3,
|
||||
AudioTarget_UsbOutputDevice = 4,
|
||||
AudioTarget_Bluetooth = 5,
|
||||
} AudioTarget;
|
||||
|
||||
typedef enum {
|
||||
AudioOutputMode_Invalid = 0,
|
||||
AudioOutputMode_Pcm1ch = 1,
|
||||
AudioOutputMode_Pcm2ch = 2,
|
||||
AudioOutputMode_Pcm6ch = 3,
|
||||
AudioOutputMode_PcmAuto = 4,
|
||||
} AudioOutputMode;
|
||||
|
||||
typedef enum {
|
||||
AudioForceMutePolicy_Disable = 0,
|
||||
AudioForceMutePolicy_SpeakerMuteOnHeadphoneUnplugged = 1,
|
||||
} AudioForceMutePolicy;
|
||||
|
||||
typedef enum {
|
||||
AudioHeadphoneOutputLevelMode_Normal = 0,
|
||||
AudioHeadphoneOutputLevelMode_HighPower = 1,
|
||||
} AudioHeadphoneOutputLevelMode;
|
||||
|
||||
Result audctlInitialize(void);
|
||||
void audctlExit(void);
|
||||
Service* audctlGetServiceSession(void);
|
||||
|
||||
Result audctlGetTargetVolume(s32* volume_out, AudioTarget target);
|
||||
Result audctlSetTargetVolume(AudioTarget target, s32 volume);
|
||||
Result audctlGetTargetVolumeMin(s32* volume_out);
|
||||
Result audctlGetTargetVolumeMax(s32* volume_out);
|
||||
Result audctlIsTargetMute(bool* mute_out, AudioTarget target);
|
||||
Result audctlSetTargetMute(AudioTarget target, bool mute);
|
||||
Result audctlIsTargetConnected(bool* connected_out, AudioTarget target); ///< [1.0.0-17.0.1]
|
||||
Result audctlSetDefaultTarget(AudioTarget target, u64 fade_in_ns, u64 fade_out_ns);
|
||||
Result audctlGetDefaultTarget(AudioTarget* target_out);
|
||||
Result audctlGetAudioOutputMode(AudioOutputMode* mode_out, AudioTarget target);
|
||||
Result audctlSetAudioOutputMode(AudioTarget target, AudioOutputMode mode);
|
||||
Result audctlSetForceMutePolicy(AudioForceMutePolicy policy); ///< [1.0.0-13.2.1]
|
||||
Result audctlGetForceMutePolicy(AudioForceMutePolicy* policy_out); ///< [1.0.0-13.2.1]
|
||||
Result audctlGetOutputModeSetting(AudioOutputMode* mode_out, AudioTarget target);
|
||||
Result audctlSetOutputModeSetting(AudioTarget target, AudioOutputMode mode);
|
||||
Result audctlSetOutputTarget(AudioTarget target);
|
||||
Result audctlSetInputTargetForceEnabled(bool enable);
|
||||
Result audctlSetHeadphoneOutputLevelMode(AudioHeadphoneOutputLevelMode mode); ///< [3.0.0+]
|
||||
Result audctlGetHeadphoneOutputLevelMode(AudioHeadphoneOutputLevelMode* mode_out); ///< [3.0.0+]
|
||||
Result audctlAcquireAudioVolumeUpdateEventForPlayReport(Event* event_out); ///< [3.0.0-13.2.1]
|
||||
Result audctlAcquireAudioOutputDeviceUpdateEventForPlayReport(Event* event_out); ///< [3.0.0-13.2.1]
|
||||
Result audctlGetAudioOutputTargetForPlayReport(AudioTarget* target_out); ///< [3.0.0+]
|
||||
Result audctlNotifyHeadphoneVolumeWarningDisplayedEvent(void); ///< [3.0.0+]
|
||||
Result audctlSetSystemOutputMasterVolume(float volume); ///< [4.0.0+]
|
||||
Result audctlGetSystemOutputMasterVolume(float* volume_out); ///< [4.0.0+]
|
||||
Result audctlGetActiveOutputTarget(AudioTarget* target);
|
@ -22,4 +22,4 @@ Service* auddevGetServiceSession(void);
|
||||
Result auddevListAudioDeviceName(AudioDeviceName *DeviceNames, s32 max_names, s32 *total_names);
|
||||
Result auddevSetAudioDeviceOutputVolume(const AudioDeviceName *DeviceName, float volume);
|
||||
Result auddevGetAudioDeviceOutputVolume(const AudioDeviceName *DeviceName, float *volume);
|
||||
|
||||
Result auddevGetActiveAudioDeviceName(AudioDeviceName *DeviceName);
|
||||
|
50
nx/include/switch/services/audrec.h
Normal file
50
nx/include/switch/services/audrec.h
Normal file
@ -0,0 +1,50 @@
|
||||
/**
|
||||
* @file audrec.h
|
||||
* @brief Audio Recorder IPC wrapper.
|
||||
* @author plutoo
|
||||
* @copyright libnx Authors
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "../types.h"
|
||||
#include "../audio/audio.h"
|
||||
#include "../sf/service.h"
|
||||
#include "../kernel/event.h"
|
||||
|
||||
typedef struct {
|
||||
u64 released_ns;
|
||||
u64 next_buffer_ptr;
|
||||
u64 sample_buffer_ptr;
|
||||
u64 sample_buffer_capacity;
|
||||
u64 data_size;
|
||||
u64 data_offset;
|
||||
} FinalOutputRecorderBuffer;
|
||||
|
||||
typedef struct {
|
||||
u32 sample_rate;
|
||||
u32 channel_count;
|
||||
} FinalOutputRecorderParameter;
|
||||
|
||||
typedef struct {
|
||||
u32 sample_rate;
|
||||
u32 channel_count;
|
||||
u32 sample_format;
|
||||
u32 state;
|
||||
} FinalOutputRecorderParameterInternal;
|
||||
|
||||
typedef struct {
|
||||
Service s;
|
||||
} AudrecRecorder;
|
||||
|
||||
Result audrecInitialize(void);
|
||||
void audrecExit(void);
|
||||
Service* audrecGetServiceSession(void);
|
||||
|
||||
Result audrecOpenFinalOutputRecorder(AudrecRecorder* recorder_out, FinalOutputRecorderParameter* param_in, u64 aruid, FinalOutputRecorderParameterInternal* param_out);
|
||||
|
||||
Result audrecRecorderStart(AudrecRecorder* recorder);
|
||||
Result audrecRecorderStop(AudrecRecorder* recorder);
|
||||
Result audrecRecorderRegisterBufferEvent(AudrecRecorder* recorder, Event* out_event);
|
||||
Result audrecRecorderAppendFinalOutputRecorderBuffer(AudrecRecorder* recorder, u64 buffer_client_ptr, FinalOutputRecorderBuffer* param);
|
||||
Result audrecRecorderGetReleasedFinalOutputRecorderBuffers(AudrecRecorder* recorder, u64* out_buffers, u64* inout_count, u64* out_released);
|
||||
void audrecRecorderClose(AudrecRecorder* recorder);
|
45
nx/include/switch/services/avm.h
Normal file
45
nx/include/switch/services/avm.h
Normal file
@ -0,0 +1,45 @@
|
||||
/**
|
||||
* @file avm.h
|
||||
* @brief AVM services IPC wrapper. Only available on [6.0.0+].
|
||||
* @author Behemoth
|
||||
* @copyright libnx Authors
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "../types.h"
|
||||
#include "../sf/service.h"
|
||||
|
||||
typedef struct {
|
||||
u64 application_id;
|
||||
u32 version;
|
||||
u32 required;
|
||||
} AvmVersionListEntry;
|
||||
|
||||
typedef struct {
|
||||
u64 application_id;
|
||||
u32 version;
|
||||
} AvmRequiredVersionEntry;
|
||||
|
||||
typedef struct {
|
||||
Service s;
|
||||
} AvmVersionListImporter;
|
||||
|
||||
Result avmInitialize(void);
|
||||
void avmExit(void);
|
||||
|
||||
Service *avmGetServiceSession(void);
|
||||
|
||||
Result avmGetHighestAvailableVersion(u64 id_1, u64 id_2, u32 *version);
|
||||
Result avmGetHighestRequiredVersion(u64 id_1, u64 id_2, u32 *version);
|
||||
Result avmGetVersionListEntry(u64 application_id, AvmVersionListEntry *entry);
|
||||
Result avmGetVersionListImporter(AvmVersionListImporter *out);
|
||||
Result avmGetLaunchRequiredVersion(u64 application_id, u32 *version);
|
||||
Result avmUpgradeLaunchRequiredVersion(u64 application_id, u32 version);
|
||||
Result avmPushLaunchVersion(u64 application_id, u32 version);
|
||||
Result avmListVersionList(AvmVersionListEntry *buffer, size_t count, u32 *out);
|
||||
Result avmListRequiredVersion(AvmRequiredVersionEntry *buffer, size_t count, u32 *out);
|
||||
|
||||
void avmVersionListImporterClose(AvmVersionListImporter *srv);
|
||||
Result avmVersionListImporterSetTimestamp(AvmVersionListImporter *srv, u64 timestamp);
|
||||
Result avmVersionListImporterSetData(AvmVersionListImporter *srv, const AvmVersionListEntry *entries, u32 count);
|
||||
Result avmVersionListImporterFlush(AvmVersionListImporter *srv);
|
@ -24,4 +24,5 @@ Service* bpcGetServiceSession(void);
|
||||
|
||||
Result bpcShutdownSystem(void);
|
||||
Result bpcRebootSystem(void);
|
||||
Result bpcGetSleepButtonState(BpcSleepButtonState *out); ///< [2.0.0+]
|
||||
Result bpcGetSleepButtonState(BpcSleepButtonState *out); ///< [2.0.0-13.2.1]
|
||||
Result bpcGetPowerButton(bool* out_is_pushed); ///< [6.0.0+]
|
||||
|
@ -18,6 +18,9 @@
|
||||
typedef struct {
|
||||
u32 version; ///< Observed 1 on [2.0.0+] LibAppletWeb, 2 on [3.0.0+].
|
||||
|
||||
void *tmem_buffer; ///< User-provided buffer to use as backing for transfer memory. If NULL, a buffer will be allocated automatically. Must be large enough and page-aligned.
|
||||
size_t tmem_buffer_size; ///< Size of the user-provided transfer memory backing buffer. Must be large enough and page-aligned.
|
||||
|
||||
u32 tcp_tx_buf_size; ///< Size of the TCP transfer (send) buffer (initial or fixed).
|
||||
u32 tcp_rx_buf_size; ///< Size of the TCP receive buffer (initial or fixed).
|
||||
u32 tcp_tx_buf_max_size; ///< Maximum size of the TCP transfer (send) buffer. If it is 0, the size of the buffer is fixed to its initial value.
|
||||
|
@ -2,7 +2,7 @@
|
||||
* @file bt.h
|
||||
* @brief Bluetooth user (bt) service IPC wrapper.
|
||||
* @note See also btdev.
|
||||
* @author yellows8
|
||||
* @author yellows8, ndeadly
|
||||
* @copyright libnx Authors
|
||||
*/
|
||||
#pragma once
|
||||
@ -24,93 +24,93 @@ Service* btGetServiceSession(void);
|
||||
* @brief LeClientReadCharacteristic
|
||||
* @note This is essentially the same as \ref btdrvReadGattCharacteristic.
|
||||
* @param[in] connection_handle ConnectionHandle
|
||||
* @param[in] primary_service PrimaryService
|
||||
* @param[in] id0 \ref BtdrvGattId
|
||||
* @param[in] id1 \ref BtdrvGattId
|
||||
* @param[in] unk Unknown
|
||||
* @param[in] is_primary Is a primary service or not
|
||||
* @param[in] serv_id Service GATT ID \ref BtdrvGattId
|
||||
* @param[in] char_id Characteristic GATT ID \ref BtdrvGattId
|
||||
* @param[in] auth_req \ref BtdrvGattAuthReqType
|
||||
*/
|
||||
Result btLeClientReadCharacteristic(u32 connection_handle, bool primary_service, const BtdrvGattId *id0, const BtdrvGattId *id1, u8 unk);
|
||||
Result btLeClientReadCharacteristic(u32 connection_handle, bool is_primary, const BtdrvGattId *serv_id, const BtdrvGattId *char_id, u8 auth_req);
|
||||
|
||||
/**
|
||||
* @brief LeClientReadDescriptor
|
||||
* @note This is essentially the same as \ref btdrvReadGattDescriptor.
|
||||
* @param[in] connection_handle ConnectionHandle
|
||||
* @param[in] primary_service PrimaryService
|
||||
* @param[in] id0 \ref BtdrvGattId
|
||||
* @param[in] id1 \ref BtdrvGattId
|
||||
* @param[in] id2 \ref BtdrvGattId
|
||||
* @param[in] unk Unknown
|
||||
* @param[in] is_primary Is a primary service or not
|
||||
* @param[in] serv_id Service GATT ID \ref BtdrvGattId
|
||||
* @param[in] char_id Characteristic GATT ID \ref BtdrvGattId
|
||||
* @param[in] desc_id Descriptor GATT ID \ref BtdrvGattId
|
||||
* @param[in] auth_req \ref BtdrvGattAuthReqType
|
||||
*/
|
||||
Result btLeClientReadDescriptor(u32 connection_handle, bool primary_service, const BtdrvGattId *id0, const BtdrvGattId *id1, const BtdrvGattId *id2, u8 unk);
|
||||
Result btLeClientReadDescriptor(u32 connection_handle, bool is_primary, const BtdrvGattId *serv_id, const BtdrvGattId *char_id, const BtdrvGattId *desc_id, u8 auth_req);
|
||||
|
||||
/**
|
||||
* @brief LeClientWriteCharacteristic
|
||||
* @note This is essentially the same as \ref btdrvWriteGattCharacteristic.
|
||||
* @param[in] connection_handle ConnectionHandle
|
||||
* @param[in] primary_service PrimaryService
|
||||
* @param[in] id0 \ref BtdrvGattId
|
||||
* @param[in] id1 \ref BtdrvGattId
|
||||
* @param[in] is_primary Is a primary service or not
|
||||
* @param[in] serv_id Service GATT ID \ref BtdrvGattId
|
||||
* @param[in] char_id Characteristic GATT ID \ref BtdrvGattId
|
||||
* @param[in] buffer Input buffer.
|
||||
* @param[in] size Input buffer size, must be <=0x258.
|
||||
* @param[in] unk Unknown
|
||||
* @param[in] flag Flag
|
||||
* @param[in] auth_req \ref BtdrvGattAuthReqType
|
||||
* @param[in] with_response Whether to use Write-With-Response write type or not
|
||||
*/
|
||||
Result btLeClientWriteCharacteristic(u32 connection_handle, bool primary_service, const BtdrvGattId *id0, const BtdrvGattId *id1, const void* buffer, size_t size, u8 unk, bool flag);
|
||||
Result btLeClientWriteCharacteristic(u32 connection_handle, bool is_primary, const BtdrvGattId *serv_id, const BtdrvGattId *char_id, const void* buffer, size_t size, u8 auth_req, bool with_response);
|
||||
|
||||
/**
|
||||
* @brief LeClientWriteDescriptor
|
||||
* @note This is essentially the same as \ref btdrvWriteGattDescriptor.
|
||||
* @param[in] connection_handle ConnectionHandle
|
||||
* @param[in] primary_service PrimaryService
|
||||
* @param[in] id0 \ref BtdrvGattId
|
||||
* @param[in] id1 \ref BtdrvGattId
|
||||
* @param[in] id2 \ref BtdrvGattId
|
||||
* @param[in] is_primary Is a primary service or not
|
||||
* @param[in] serv_id Service GATT ID \ref BtdrvGattId
|
||||
* @param[in] char_id Characteristic GATT ID \ref BtdrvGattId
|
||||
* @param[in] desc_id Descriptor GATT ID \ref BtdrvGattId
|
||||
* @param[in] buffer Input buffer.
|
||||
* @param[in] size Input buffer size, must be <=0x258.
|
||||
* @param[in] unk Unknown
|
||||
* @param[in] auth_req \ref BtdrvGattAuthReqType
|
||||
*/
|
||||
Result btLeClientWriteDescriptor(u32 connection_handle, bool primary_service, const BtdrvGattId *id0, const BtdrvGattId *id1, const BtdrvGattId *id2, const void* buffer, size_t size, u8 unk);
|
||||
Result btLeClientWriteDescriptor(u32 connection_handle, bool is_primary, const BtdrvGattId *serv_id, const BtdrvGattId *char_id, const BtdrvGattId *desc_id, const void* buffer, size_t size, u8 auth_req);
|
||||
|
||||
/**
|
||||
* @brief LeClientRegisterNotification
|
||||
* @note This is essentially the same as \ref btdrvRegisterGattNotification.
|
||||
* @param[in] connection_handle ConnectionHandle
|
||||
* @param[in] primary_service PrimaryService
|
||||
* @param[in] id0 \ref BtdrvGattId
|
||||
* @param[in] id1 \ref BtdrvGattId
|
||||
* @param[in] is_primary Is a primary service or not
|
||||
* @param[in] serv_id Service GATT ID \ref BtdrvGattId
|
||||
* @param[in] char_id Characteristic GATT ID \ref BtdrvGattId
|
||||
*/
|
||||
Result btLeClientRegisterNotification(u32 connection_handle, bool primary_service, const BtdrvGattId *id0, const BtdrvGattId *id1);
|
||||
Result btLeClientRegisterNotification(u32 connection_handle, bool is_primary, const BtdrvGattId *serv_id, const BtdrvGattId *char_id);
|
||||
|
||||
/**
|
||||
* @brief LeClientDeregisterNotification
|
||||
* @note This is essentially the same as \ref btdrvUnregisterGattNotification.
|
||||
* @param[in] connection_handle ConnectionHandle
|
||||
* @param[in] primary_service PrimaryService
|
||||
* @param[in] id0 \ref BtdrvGattId
|
||||
* @param[in] id1 \ref BtdrvGattId
|
||||
* @param[in] is_primary Is a primary service or not
|
||||
* @param[in] serv_id Service GATT ID \ref BtdrvGattId
|
||||
* @param[in] char_id Characteristic GATT ID \ref BtdrvGattId
|
||||
*/
|
||||
Result btLeClientDeregisterNotification(u32 connection_handle, bool primary_service, const BtdrvGattId *id0, const BtdrvGattId *id1);
|
||||
Result btLeClientDeregisterNotification(u32 connection_handle, bool is_primary, const BtdrvGattId *serv_id, const BtdrvGattId *char_id);
|
||||
|
||||
/**
|
||||
* @brief SetLeResponse
|
||||
* @param[in] unk Unknown
|
||||
* @param[in] uuid0 \ref BtdrvGattAttributeUuid
|
||||
* @param[in] uuid1 \ref BtdrvGattAttributeUuid
|
||||
* @param[in] server_if Server interface ID
|
||||
* @param[in] serv_uuid Service UUID \ref BtdrvGattAttributeUuid
|
||||
* @param[in] char_uuid Characteristic UUID \ref BtdrvGattAttributeUuid
|
||||
* @param[in] buffer Input buffer.
|
||||
* @param[in] size Input buffer size, must be <=0x258.
|
||||
*/
|
||||
Result btSetLeResponse(u8 unk, const BtdrvGattAttributeUuid *uuid0, const BtdrvGattAttributeUuid *uuid1, const void* buffer, size_t size);
|
||||
Result btSetLeResponse(u8 server_if, const BtdrvGattAttributeUuid *serv_uuid, const BtdrvGattAttributeUuid *char_uuid, const void* buffer, size_t size);
|
||||
|
||||
/**
|
||||
* @brief LeSendIndication
|
||||
* @param[in] unk Unknown
|
||||
* @param[in] uuid0 \ref BtdrvGattAttributeUuid
|
||||
* @param[in] uuid1 \ref BtdrvGattAttributeUuid
|
||||
* @param[in] server_if Server interface ID
|
||||
* @param[in] serv_uuid Service UUID \ref BtdrvGattAttributeUuid
|
||||
* @param[in] char_uuid Characteristic UUID \ref BtdrvGattAttributeUuid
|
||||
* @param[in] buffer Input buffer.
|
||||
* @param[in] size Input buffer size, clamped to max size 0x258.
|
||||
* @param[in] flag Flag
|
||||
* @param[in] noconfirm Whether no confirmation is required (notification) or not (indication)
|
||||
*/
|
||||
Result btLeSendIndication(u8 unk, const BtdrvGattAttributeUuid *uuid0, const BtdrvGattAttributeUuid *uuid1, const void* buffer, size_t size, bool flag);
|
||||
Result btLeSendIndication(u8 server_if, const BtdrvGattAttributeUuid *serv_uuid, const BtdrvGattAttributeUuid *char_uuid, const void* buffer, size_t size, bool noconfirm);
|
||||
|
||||
/**
|
||||
* @brief GetLeEventInfo
|
||||
@ -118,9 +118,9 @@ Result btLeSendIndication(u8 unk, const BtdrvGattAttributeUuid *uuid0, const Btd
|
||||
* @note The state used by this is reset after writing the data to output.
|
||||
* @param[in] buffer Output buffer. 0x400-bytes from state is written here. See \ref BtdrvLeEventInfo.
|
||||
* @param[in] size Output buffer size.
|
||||
* @param[out] type Output BleEventType.
|
||||
* @param[out] type Output BtdrvBleEventType.
|
||||
*/
|
||||
Result btGetLeEventInfo(void* buffer, size_t size, u32 *type);
|
||||
Result btGetLeEventInfo(void* buffer, size_t size, BtdrvBleEventType *type);
|
||||
|
||||
/**
|
||||
* @brief RegisterBleEvent
|
||||
|
File diff suppressed because it is too large
Load Diff
917
nx/include/switch/services/btdrv_ids.h
Normal file
917
nx/include/switch/services/btdrv_ids.h
Normal file
@ -0,0 +1,917 @@
|
||||
/**
|
||||
* @file btdrv_ids.h
|
||||
* @brief Bluetooth SIG assigned number definitions (see https://www.bluetooth.com/specifications/assigned-numbers/).
|
||||
* @author ndeadly
|
||||
* @copyright libnx Authors
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
/// Extract \ref BtdrvAppearanceCategoryType from \ref BtdrvAppearanceType.
|
||||
#define APPEARANCE_CATEGORY(x) ((x & 0xFFC0) >> 6)
|
||||
|
||||
/// AdType
|
||||
typedef enum {
|
||||
BtdrvAdType_Flags = 0x01, ///< Flags
|
||||
BtdrvAdType_ServiceClassUuid16ListIncomplete = 0x02, ///< Incomplete List of 16-bit Service Class UUIDs
|
||||
BtdrvAdType_ServiceClassUuid16ListComplete = 0x03, ///< Complete List of 16-bit Service Class UUIDs
|
||||
BtdrvAdType_ServiceClassUuid32ListIncomplete = 0x04, ///< Incomplete List of 32-bit Service Class UUIDs
|
||||
BtdrvAdType_ServiceClassUuid32ListComplete = 0x05, ///< Complete List of 32-bit Service Class UUIDs
|
||||
BtdrvAdType_ServiceClassUuid128ListIncomplete = 0x06, ///< Incomplete List of 128-bit Service Class UUIDs
|
||||
BtdrvAdType_ServiceClassUuid128ListComplete = 0x07, ///< Complete List of 128-bit Service Class UUIDs
|
||||
BtdrvAdType_ShortenedLocalName = 0x08, ///< Shortened Local Name
|
||||
BtdrvAdType_CompleteLocalName = 0x09, ///< Complete Local Name
|
||||
BtdrvAdType_TxPowerLevel = 0x0A, ///< Tx Power Level
|
||||
BtdrvAdType_ClassOfDevice = 0x0D, ///< Class of Device
|
||||
BtdrvAdType_SimplePairingHashC192 = 0x0E, ///< Simple Pairing Hash C-192
|
||||
BtdrvAdType_SimplePairingRandomizerR192 = 0x0F, ///< Simple Pairing Randomizer R-192
|
||||
BtdrvAdType_DeviceId = 0x10, ///< Device ID
|
||||
BtdrvAdType_SecurityManagerTkValue = 0x10, ///< Security Manager TK Value
|
||||
BtdrvAdType_SecurityManagerOutOfBandFlags = 0x11, ///< Security Manager Out of Band Flags
|
||||
BtdrvAdType_PeripheralConnectionIntervalRange = 0x12, ///< Peripheral Connection Interval Range
|
||||
BtdrvAdType_ServiceSolicitationUuid16List = 0x14, ///< List of 16-bit Service Solicitation UUIDs
|
||||
BtdrvAdType_ServiceSolicitationUuid128List = 0x15, ///< List of 128-bit Service Solicitation UUIDs
|
||||
BtdrvAdType_ServiceDataUuid16 = 0x16, ///< Service Data - 16-bit UUID
|
||||
BtdrvAdType_PublicTargetAddress = 0x17, ///< Public Target Address
|
||||
BtdrvAdType_RandomTargetAddress = 0x18, ///< Random Target Address
|
||||
BtdrvAdType_Appearance = 0x19, ///< Appearance
|
||||
BtdrvAdType_AdvertisingInterval = 0x1A, ///< Advertising Interval
|
||||
BtdrvAdType_LeBluetoothDeviceAddress = 0x1B, ///< LE Bluetooth Device Address
|
||||
BtdrvAdType_LeRole = 0x1C, ///< LE Role
|
||||
BtdrvAdType_SimplePairingHashC256 = 0x1D, ///< Simple Pairing Hash C-256
|
||||
BtdrvAdType_SimplePairingRandomizerR256 = 0x1E, ///< Simple Pairing Randomizer R-256
|
||||
BtdrvAdType_ServiceSolicitationUuid32List = 0x1F, ///< List of 32-bit Service Solicitation UUIDs
|
||||
BtdrvAdType_ServiceDataUuid32 = 0x20, ///< Service Data - 32-bit UUID
|
||||
BtdrvAdType_ServiceDataUuid128 = 0x21, ///< Service Data - 128-bit UUID
|
||||
BtdrvAdType_LeSecureConnectionsConfirmationValue = 0x22, ///< LE Secure Connections Confirmation Value
|
||||
BtdrvAdType_LeSecureConnectionsRandomValue = 0x23, ///< LE Secure Connections Random Value
|
||||
BtdrvAdType_Uri = 0x24, ///< URI
|
||||
BtdrvAdType_IndoorPositioning = 0x25, ///< Indoor Positioning
|
||||
BtdrvAdType_TransportDiscoveryData = 0x26, ///< Transport Discovery Data
|
||||
BtdrvAdType_LeSupportedFeatures = 0x27, ///< LE Supported Features
|
||||
BtdrvAdType_ChannelMapUpdateIndication = 0x28, ///< Channel Map Update Indication
|
||||
BtdrvAdType_PbAdv = 0x29, ///< PB-ADV
|
||||
BtdrvAdType_MeshMessage = 0x2A, ///< Mesh Message
|
||||
BtdrvAdType_MeshBeacon = 0x2B, ///< Mesh Beacon
|
||||
BtdrvAdType_Biginfo = 0x2C, ///< BIGInfo
|
||||
BtdrvAdType_BroadcastCode = 0x2D, ///< Broadcast_Code
|
||||
BtdrvAdType_ResolvableSetIdentifier = 0x2E, ///< Resolvable Set Identifier
|
||||
BtdrvAdType_AdvertisingIntervalLong = 0x2F, ///< Advertising Interval - long
|
||||
BtdrvAdType_BroadcastName = 0x30, ///< Broadcast_Name
|
||||
BtdrvAdType_EncryptedAdvertisingData = 0x31, ///< Encrypted Advertising Data
|
||||
BtdrvAdType_PeriodicAdvertisingResponseTimingInformation = 0x32, ///< Periodic Advertising Response Timing Information
|
||||
BtdrvAdType_ElectronicShelfLabel = 0x34, ///< Electronic Shelf Label
|
||||
BtdrvAdType_3DInformationData = 0x3D, ///< 3D Information Data
|
||||
BtdrvAdType_ManufacturerSpecificData = 0xFF, ///< Manufacturer Specific Data
|
||||
} BtdrvAdType;
|
||||
|
||||
/// AppearanceCategoryType
|
||||
typedef enum {
|
||||
BtdrvAppearanceCategoryType_Unknown = 0x000, ///< Unknown
|
||||
BtdrvAppearanceCategoryType_Phone = 0x001, ///< Phone
|
||||
BtdrvAppearanceCategoryType_Computer = 0x002, ///< Computer
|
||||
BtdrvAppearanceCategoryType_Watch = 0x003, ///< Watch
|
||||
BtdrvAppearanceCategoryType_Clock = 0x004, ///< Clock
|
||||
BtdrvAppearanceCategoryType_Display = 0x005, ///< Display
|
||||
BtdrvAppearanceCategoryType_RemoteControl = 0x006, ///< Remote Control
|
||||
BtdrvAppearanceCategoryType_EyeGlasses = 0x007, ///< Eye-glasses
|
||||
BtdrvAppearanceCategoryType_Tag = 0x008, ///< Tag
|
||||
BtdrvAppearanceCategoryType_Keyring = 0x009, ///< Keyring
|
||||
BtdrvAppearanceCategoryType_MediaPlayer = 0x00A, ///< Media Player
|
||||
BtdrvAppearanceCategoryType_BarcodeScanner = 0x00B, ///< Barcode Scanner
|
||||
BtdrvAppearanceCategoryType_Thermometer = 0x00C, ///< Thermometer
|
||||
BtdrvAppearanceCategoryType_HeartRateSensor = 0x00D, ///< Heart Rate Sensor
|
||||
BtdrvAppearanceCategoryType_BloodPressure = 0x00E, ///< Blood Pressure
|
||||
BtdrvAppearanceCategoryType_HumanInterfaceDevice = 0x00F, ///< Human Interface Device
|
||||
BtdrvAppearanceCategoryType_GlucoseMeter = 0x010, ///< Glucose Meter
|
||||
BtdrvAppearanceCategoryType_RunningWalkingSensor = 0x011, ///< Running Walking Sensor
|
||||
BtdrvAppearanceCategoryType_Cycling = 0x012, ///< Cycling
|
||||
BtdrvAppearanceCategoryType_ControlDevice = 0x013, ///< Control Device
|
||||
BtdrvAppearanceCategoryType_NetworkDevice = 0x014, ///< Network Device
|
||||
BtdrvAppearanceCategoryType_Sensor = 0x015, ///< Sensor
|
||||
BtdrvAppearanceCategoryType_LightFixtures = 0x016, ///< Light Fixtures
|
||||
BtdrvAppearanceCategoryType_Fan = 0x017, ///< Fan
|
||||
BtdrvAppearanceCategoryType_Hvac = 0x018, ///< HVAC
|
||||
BtdrvAppearanceCategoryType_AirConditioning = 0x019, ///< Air Conditioning
|
||||
BtdrvAppearanceCategoryType_Humidifier = 0x01A, ///< Humidifier
|
||||
BtdrvAppearanceCategoryType_Heating = 0x01B, ///< Heating
|
||||
BtdrvAppearanceCategoryType_AccessControl = 0x01C, ///< Access Control
|
||||
BtdrvAppearanceCategoryType_MotorizedDevice = 0x01D, ///< Motorized Device
|
||||
BtdrvAppearanceCategoryType_PowerDevice = 0x01E, ///< Power Device
|
||||
BtdrvAppearanceCategoryType_LightSource = 0x01F, ///< Light Source
|
||||
BtdrvAppearanceCategoryType_WindowCovering = 0x020, ///< Window Covering
|
||||
BtdrvAppearanceCategoryType_AudioSink = 0x021, ///< Audio Sink
|
||||
BtdrvAppearanceCategoryType_AudioSource = 0x022, ///< Audio Source
|
||||
BtdrvAppearanceCategoryType_MotorizedVehicle = 0x023, ///< Motorized Vehicle
|
||||
BtdrvAppearanceCategoryType_DomesticAppliance = 0x024, ///< Domestic Appliance
|
||||
BtdrvAppearanceCategoryType_WearableAudioDevice = 0x025, ///< Wearable Audio Device
|
||||
BtdrvAppearanceCategoryType_Aircraft = 0x026, ///< Aircraft
|
||||
BtdrvAppearanceCategoryType_AvEquipment = 0x027, ///< AV Equipment
|
||||
BtdrvAppearanceCategoryType_DisplayEquipment = 0x028, ///< Display Equipment
|
||||
BtdrvAppearanceCategoryType_HearingAid = 0x029, ///< Hearing aid
|
||||
BtdrvAppearanceCategoryType_Gaming = 0x02A, ///< Gaming
|
||||
BtdrvAppearanceCategoryType_PulseOximeter = 0x031, ///< Pulse Oximeter
|
||||
BtdrvAppearanceCategoryType_WeightScale = 0x032, ///< Weight Scale
|
||||
BtdrvAppearanceCategoryType_PersonalMobilityDevice = 0x033, ///< Personal Mobility Device
|
||||
BtdrvAppearanceCategoryType_ContinuousGlucoseMonitor = 0x034, ///< Continuous Glucose Monitor
|
||||
BtdrvAppearanceCategoryType_InsulinPump = 0x035, ///< Insulin Pump
|
||||
BtdrvAppearanceCategoryType_MedicationDelivery = 0x036, ///< Medication Delivery
|
||||
BtdrvAppearanceCategoryType_Spirometer = 0x037, ///< Spirometer
|
||||
BtdrvAppearanceCategoryType_OutdoorSportsActivity = 0x051, ///< Outdoor Sports Activity
|
||||
} BtdrvAppearanceCategoryType;
|
||||
|
||||
/// AppearanceType
|
||||
typedef enum {
|
||||
BtdrvAppearanceType_DesktopWorkstation = 0x0081, ///< Desktop Workstation
|
||||
BtdrvAppearanceType_ServerClassComputer = 0x0082, ///< Server-class Computer
|
||||
BtdrvAppearanceType_Laptop = 0x0083, ///< Laptop
|
||||
BtdrvAppearanceType_HandheldPcPdaClamshell = 0x0084, ///< Handheld PC/PDA (clamshell)
|
||||
BtdrvAppearanceType_PalmSizePcPda = 0x0085, ///< Palm-size PC/PDA
|
||||
BtdrvAppearanceType_WearableComputerWatchSize = 0x0086, ///< Wearable computer (watch size)
|
||||
BtdrvAppearanceType_Tablet = 0x0087, ///< Tablet
|
||||
BtdrvAppearanceType_DockingStation = 0x0088, ///< Docking Station
|
||||
BtdrvAppearanceType_AllInOne = 0x0089, ///< All in One
|
||||
BtdrvAppearanceType_BladeServer = 0x008A, ///< Blade Server
|
||||
BtdrvAppearanceType_Convertible = 0x008B, ///< Convertible
|
||||
BtdrvAppearanceType_Detachable = 0x008C, ///< Detachable
|
||||
BtdrvAppearanceType_IotGateway = 0x008D, ///< IoT Gateway
|
||||
BtdrvAppearanceType_MiniPc = 0x008E, ///< Mini PC
|
||||
BtdrvAppearanceType_StickPc = 0x008F, ///< Stick PC
|
||||
BtdrvAppearanceType_SportsWatch = 0x00C1, ///< Sports Watch
|
||||
BtdrvAppearanceType_Smartwatch = 0x00C2, ///< Smartwatch
|
||||
BtdrvAppearanceType_EarThermometer = 0x0301, ///< Ear Thermometer
|
||||
BtdrvAppearanceType_HeartRateBelt = 0x0341, ///< Heart Rate Belt
|
||||
BtdrvAppearanceType_ArmBloodPressure = 0x0381, ///< Arm Blood Pressure
|
||||
BtdrvAppearanceType_WristBloodPressure = 0x0382, ///< Wrist Blood Pressure
|
||||
BtdrvAppearanceType_Keyboard = 0x03C1, ///< Keyboard
|
||||
BtdrvAppearanceType_Mouse = 0x03C2, ///< Mouse
|
||||
BtdrvAppearanceType_Joystick = 0x03C3, ///< Joystick
|
||||
BtdrvAppearanceType_Gamepad = 0x03C4, ///< Gamepad
|
||||
BtdrvAppearanceType_DigitizerTablet = 0x03C5, ///< Digitizer Tablet
|
||||
BtdrvAppearanceType_CardReader = 0x03C6, ///< Card Reader
|
||||
BtdrvAppearanceType_DigitalPen = 0x03C7, ///< Digital Pen
|
||||
BtdrvAppearanceType_BarcodeScanner = 0x03C8, ///< Barcode Scanner
|
||||
BtdrvAppearanceType_Touchpad = 0x03C9, ///< Touchpad
|
||||
BtdrvAppearanceType_PresentationRemote = 0x03CA, ///< Presentation Remote
|
||||
BtdrvAppearanceType_InShoeRunningWalkingSensor = 0x0441, ///< In-Shoe Running Walking Sensor
|
||||
BtdrvAppearanceType_OnShoeRunningWalkingSensor = 0x0442, ///< On-Shoe Running Walking Sensor
|
||||
BtdrvAppearanceType_OnHipRunningWalkingSensor = 0x0443, ///< On-Hip Running Walking Sensor
|
||||
BtdrvAppearanceType_CyclingComputer = 0x0481, ///< Cycling Computer
|
||||
BtdrvAppearanceType_SpeedSensor = 0x0482, ///< Speed Sensor
|
||||
BtdrvAppearanceType_CadenceSensor = 0x0483, ///< Cadence Sensor
|
||||
BtdrvAppearanceType_PowerSensor = 0x0484, ///< Power Sensor
|
||||
BtdrvAppearanceType_SpeedAndCadenceSensor = 0x0485, ///< Speed and Cadence Sensor
|
||||
BtdrvAppearanceType_Switch = 0x04C1, ///< Switch
|
||||
BtdrvAppearanceType_MultiSwitch = 0x04C2, ///< Multi-switch
|
||||
BtdrvAppearanceType_Button = 0x04C3, ///< Button
|
||||
BtdrvAppearanceType_Slider = 0x04C4, ///< Slider
|
||||
BtdrvAppearanceType_RotarySwitch = 0x04C5, ///< Rotary Switch
|
||||
BtdrvAppearanceType_TouchPanel = 0x04C6, ///< Touch Panel
|
||||
BtdrvAppearanceType_SingleSwitch = 0x04C7, ///< Single Switch
|
||||
BtdrvAppearanceType_DoubleSwitch = 0x04C8, ///< Double Switch
|
||||
BtdrvAppearanceType_TripleSwitch = 0x04C9, ///< Triple Switch
|
||||
BtdrvAppearanceType_BatterySwitch = 0x04CA, ///< Battery Switch
|
||||
BtdrvAppearanceType_EnergyHarvestingSwitch = 0x04CB, ///< Energy Harvesting Switch
|
||||
BtdrvAppearanceType_PushButton = 0x04CC, ///< Push Button
|
||||
BtdrvAppearanceType_AccessPoint = 0x0501, ///< Access Point
|
||||
BtdrvAppearanceType_MeshDevice = 0x0502, ///< Mesh Device
|
||||
BtdrvAppearanceType_MeshNetworkProxy = 0x0503, ///< Mesh Network Proxy
|
||||
BtdrvAppearanceType_MotionSensor = 0x0541, ///< Motion Sensor
|
||||
BtdrvAppearanceType_AirQualitySensor = 0x0542, ///< Air quality Sensor
|
||||
BtdrvAppearanceType_TemperatureSensor = 0x0543, ///< Temperature Sensor
|
||||
BtdrvAppearanceType_HumiditySensor = 0x0544, ///< Humidity Sensor
|
||||
BtdrvAppearanceType_LeakSensor = 0x0545, ///< Leak Sensor
|
||||
BtdrvAppearanceType_SmokeSensor = 0x0546, ///< Smoke Sensor
|
||||
BtdrvAppearanceType_OccupancySensor = 0x0547, ///< Occupancy Sensor
|
||||
BtdrvAppearanceType_ContactSensor = 0x0548, ///< Contact Sensor
|
||||
BtdrvAppearanceType_CarbonMonoxideSensor = 0x0549, ///< Carbon Monoxide Sensor
|
||||
BtdrvAppearanceType_CarbonDioxideSensor = 0x054A, ///< Carbon Dioxide Sensor
|
||||
BtdrvAppearanceType_AmbientLightSensor = 0x054B, ///< Ambient Light Sensor
|
||||
BtdrvAppearanceType_EnergySensor = 0x054C, ///< Energy Sensor
|
||||
BtdrvAppearanceType_ColorLightSensor = 0x054D, ///< Color Light Sensor
|
||||
BtdrvAppearanceType_RainSensor = 0x054E, ///< Rain Sensor
|
||||
BtdrvAppearanceType_FireSensor = 0x054F, ///< Fire Sensor
|
||||
BtdrvAppearanceType_WindSensor = 0x0550, ///< Wind Sensor
|
||||
BtdrvAppearanceType_ProximitySensor = 0x0551, ///< Proximity Sensor
|
||||
BtdrvAppearanceType_MultiSensor = 0x0552, ///< Multi-Sensor
|
||||
BtdrvAppearanceType_FlushMountedSensor = 0x0553, ///< Flush Mounted Sensor
|
||||
BtdrvAppearanceType_CeilingMountedSensor = 0x0554, ///< Ceiling Mounted Sensor
|
||||
BtdrvAppearanceType_WallMountedSensor = 0x0555, ///< Wall Mounted Sensor
|
||||
BtdrvAppearanceType_Multisensor = 0x0556, ///< Multisensor
|
||||
BtdrvAppearanceType_EnergyMeter = 0x0557, ///< Energy Meter
|
||||
BtdrvAppearanceType_FlameDetector = 0x0558, ///< Flame Detector
|
||||
BtdrvAppearanceType_VehicleTirePressureSensor = 0x0559, ///< Vehicle Tire Pressure Sensor
|
||||
BtdrvAppearanceType_WallLight = 0x0581, ///< Wall Light
|
||||
BtdrvAppearanceType_CeilingLight = 0x0582, ///< Ceiling Light
|
||||
BtdrvAppearanceType_FloorLight = 0x0583, ///< Floor Light
|
||||
BtdrvAppearanceType_CabinetLight = 0x0584, ///< Cabinet Light
|
||||
BtdrvAppearanceType_DeskLight = 0x0585, ///< Desk Light
|
||||
BtdrvAppearanceType_TrofferLight = 0x0586, ///< Troffer Light
|
||||
BtdrvAppearanceType_PendantLight = 0x0587, ///< Pendant Light
|
||||
BtdrvAppearanceType_InGroundLight = 0x0588, ///< In-ground Light
|
||||
BtdrvAppearanceType_FloodLight = 0x0589, ///< Flood Light
|
||||
BtdrvAppearanceType_UnderwaterLight = 0x058A, ///< Underwater Light
|
||||
BtdrvAppearanceType_BollardWithLight = 0x058B, ///< Bollard with Light
|
||||
BtdrvAppearanceType_PathwayLight = 0x058C, ///< Pathway Light
|
||||
BtdrvAppearanceType_GardenLight = 0x058D, ///< Garden Light
|
||||
BtdrvAppearanceType_PoleTopLight = 0x058E, ///< Pole-top Light
|
||||
BtdrvAppearanceType_Spotlight = 0x058F, ///< Spotlight
|
||||
BtdrvAppearanceType_LinearLight = 0x0590, ///< Linear Light
|
||||
BtdrvAppearanceType_StreetLight = 0x0591, ///< Street Light
|
||||
BtdrvAppearanceType_ShelvesLight = 0x0592, ///< Shelves Light
|
||||
BtdrvAppearanceType_BayLight = 0x0593, ///< Bay Light
|
||||
BtdrvAppearanceType_EmergencyExitLight = 0x0594, ///< Emergency Exit Light
|
||||
BtdrvAppearanceType_LightController = 0x0595, ///< Light Controller
|
||||
BtdrvAppearanceType_LightDriver = 0x0596, ///< Light Driver
|
||||
BtdrvAppearanceType_Bulb = 0x0597, ///< Bulb
|
||||
BtdrvAppearanceType_LowBayLight = 0x0598, ///< Low-bay Light
|
||||
BtdrvAppearanceType_HighBayLight = 0x0599, ///< High-bay Light
|
||||
BtdrvAppearanceType_CeilingFan = 0x05C1, ///< Ceiling Fan
|
||||
BtdrvAppearanceType_AxialFan = 0x05C2, ///< Axial Fan
|
||||
BtdrvAppearanceType_ExhaustFan = 0x05C3, ///< Exhaust Fan
|
||||
BtdrvAppearanceType_PedestalFan = 0x05C4, ///< Pedestal Fan
|
||||
BtdrvAppearanceType_DeskFan = 0x05C5, ///< Desk Fan
|
||||
BtdrvAppearanceType_WallFan = 0x05C6, ///< Wall Fan
|
||||
BtdrvAppearanceType_Thermostat = 0x0601, ///< Thermostat
|
||||
BtdrvAppearanceType_Humidifier = 0x0602, ///< Humidifier
|
||||
BtdrvAppearanceType_DeHumidifier = 0x0603, ///< De-humidifier
|
||||
BtdrvAppearanceType_Heater = 0x0604, ///< Heater
|
||||
BtdrvAppearanceType_HvacRadiator = 0x0605, ///< HVAC Radiator
|
||||
BtdrvAppearanceType_HvacBoiler = 0x0606, ///< HVAC Boiler
|
||||
BtdrvAppearanceType_HvacHeatPump = 0x0607, ///< HVAC Heat Pump
|
||||
BtdrvAppearanceType_HvacInfraredHeater = 0x0608, ///< HVAC Infrared Heater
|
||||
BtdrvAppearanceType_HvacRadiantPanelHeater = 0x0609, ///< HVAC Radiant Panel Heater
|
||||
BtdrvAppearanceType_HvacFanHeater = 0x060A, ///< HVAC Fan Heater
|
||||
BtdrvAppearanceType_HvacAirCurtain = 0x060B, ///< HVAC Air Curtain
|
||||
BtdrvAppearanceType_HeatingRadiator = 0x06C1, ///< Heating Radiator
|
||||
BtdrvAppearanceType_HeatingBoiler = 0x06C2, ///< Heating Boiler
|
||||
BtdrvAppearanceType_HeatingHeatPump = 0x06C3, ///< Heating Heat Pump
|
||||
BtdrvAppearanceType_HeatingInfraredHeater = 0x06C4, ///< Heating Infrared Heater
|
||||
BtdrvAppearanceType_HeatingRadiantPanelHeater = 0x06C5, ///< Heating Radiant Panel Heater
|
||||
BtdrvAppearanceType_HeatingFanHeater = 0x06C6, ///< Heating Fan Heater
|
||||
BtdrvAppearanceType_HeatingAirCurtain = 0x06C7, ///< Heating Air Curtain
|
||||
BtdrvAppearanceType_AccessDoor = 0x0701, ///< Access Door
|
||||
BtdrvAppearanceType_GarageDoor = 0x0702, ///< Garage Door
|
||||
BtdrvAppearanceType_EmergencyExitDoor = 0x0703, ///< Emergency Exit Door
|
||||
BtdrvAppearanceType_AccessLock = 0x0704, ///< Access Lock
|
||||
BtdrvAppearanceType_Elevator = 0x0705, ///< Elevator
|
||||
BtdrvAppearanceType_Window = 0x0706, ///< Window
|
||||
BtdrvAppearanceType_EntranceGate = 0x0707, ///< Entrance Gate
|
||||
BtdrvAppearanceType_DoorLock = 0x0708, ///< Door Lock
|
||||
BtdrvAppearanceType_Locker = 0x0709, ///< Locker
|
||||
BtdrvAppearanceType_MotorizedGate = 0x0741, ///< Motorized Gate
|
||||
BtdrvAppearanceType_Awning = 0x0742, ///< Awning
|
||||
BtdrvAppearanceType_BlindsOrShades = 0x0743, ///< Blinds or Shades
|
||||
BtdrvAppearanceType_Curtains = 0x0744, ///< Curtains
|
||||
BtdrvAppearanceType_Screen = 0x0745, ///< Screen
|
||||
BtdrvAppearanceType_PowerOutlet = 0x0781, ///< Power Outlet
|
||||
BtdrvAppearanceType_PowerStrip = 0x0782, ///< Power Strip
|
||||
BtdrvAppearanceType_Plug = 0x0783, ///< Plug
|
||||
BtdrvAppearanceType_PowerSupply = 0x0784, ///< Power Supply
|
||||
BtdrvAppearanceType_LedDriver = 0x0785, ///< LED Driver
|
||||
BtdrvAppearanceType_FluorescentLampGear = 0x0786, ///< Fluorescent Lamp Gear
|
||||
BtdrvAppearanceType_HidLampGear = 0x0787, ///< HID Lamp Gear
|
||||
BtdrvAppearanceType_ChargeCase = 0x0788, ///< Charge Case
|
||||
BtdrvAppearanceType_PowerBank = 0x0789, ///< Power Bank
|
||||
BtdrvAppearanceType_IncandescentLightBulb = 0x07C1, ///< Incandescent Light Bulb
|
||||
BtdrvAppearanceType_LedLamp = 0x07C2, ///< LED Lamp
|
||||
BtdrvAppearanceType_HidLamp = 0x07C3, ///< HID Lamp
|
||||
BtdrvAppearanceType_FluorescentLamp = 0x07C4, ///< Fluorescent Lamp
|
||||
BtdrvAppearanceType_LedArray = 0x07C5, ///< LED Array
|
||||
BtdrvAppearanceType_MultiColorLedArray = 0x07C6, ///< Multi-Color LED Array
|
||||
BtdrvAppearanceType_LowVoltageHalogen = 0x07C7, ///< Low voltage halogen
|
||||
BtdrvAppearanceType_OrganicLightEmittingDiodeOled = 0x07C8, ///< Organic light emitting diode (OLED)
|
||||
BtdrvAppearanceType_WindowShades = 0x0801, ///< Window Shades
|
||||
BtdrvAppearanceType_WindowBlinds = 0x0802, ///< Window Blinds
|
||||
BtdrvAppearanceType_WindowAwning = 0x0803, ///< Window Awning
|
||||
BtdrvAppearanceType_WindowCurtain = 0x0804, ///< Window Curtain
|
||||
BtdrvAppearanceType_ExteriorShutter = 0x0805, ///< Exterior Shutter
|
||||
BtdrvAppearanceType_ExteriorScreen = 0x0806, ///< Exterior Screen
|
||||
BtdrvAppearanceType_StandaloneSpeaker = 0x0841, ///< Standalone Speaker
|
||||
BtdrvAppearanceType_Soundbar = 0x0842, ///< Soundbar
|
||||
BtdrvAppearanceType_BookshelfSpeaker = 0x0843, ///< Bookshelf Speaker
|
||||
BtdrvAppearanceType_StandmountedSpeaker = 0x0844, ///< Standmounted Speaker
|
||||
BtdrvAppearanceType_Speakerphone = 0x0845, ///< Speakerphone
|
||||
BtdrvAppearanceType_Microphone = 0x0881, ///< Microphone
|
||||
BtdrvAppearanceType_Alarm = 0x0882, ///< Alarm
|
||||
BtdrvAppearanceType_Bell = 0x0883, ///< Bell
|
||||
BtdrvAppearanceType_Horn = 0x0884, ///< Horn
|
||||
BtdrvAppearanceType_BroadcastingDevice = 0x0885, ///< Broadcasting Device
|
||||
BtdrvAppearanceType_ServiceDesk = 0x0886, ///< Service Desk
|
||||
BtdrvAppearanceType_Kiosk = 0x0887, ///< Kiosk
|
||||
BtdrvAppearanceType_BroadcastingRoom = 0x0888, ///< Broadcasting Room
|
||||
BtdrvAppearanceType_Auditorium = 0x0889, ///< Auditorium
|
||||
BtdrvAppearanceType_Car = 0x08C1, ///< Car
|
||||
BtdrvAppearanceType_LargeGoodsVehicle = 0x08C2, ///< Large Goods Vehicle
|
||||
BtdrvAppearanceType_2WheeledVehicle = 0x08C3, ///< 2-Wheeled Vehicle
|
||||
BtdrvAppearanceType_Motorbike = 0x08C4, ///< Motorbike
|
||||
BtdrvAppearanceType_Scooter = 0x08C5, ///< Scooter
|
||||
BtdrvAppearanceType_Moped = 0x08C6, ///< Moped
|
||||
BtdrvAppearanceType_3WheeledVehicle = 0x08C7, ///< 3-Wheeled Vehicle
|
||||
BtdrvAppearanceType_LightVehicle = 0x08C8, ///< Light Vehicle
|
||||
BtdrvAppearanceType_QuadBike = 0x08C9, ///< Quad Bike
|
||||
BtdrvAppearanceType_Minibus = 0x08CA, ///< Minibus
|
||||
BtdrvAppearanceType_Bus = 0x08CB, ///< Bus
|
||||
BtdrvAppearanceType_Trolley = 0x08CC, ///< Trolley
|
||||
BtdrvAppearanceType_AgriculturalVehicle = 0x08CD, ///< Agricultural Vehicle
|
||||
BtdrvAppearanceType_CamperCaravan = 0x08CE, ///< Camper / Caravan
|
||||
BtdrvAppearanceType_RecreationalVehicleMotorHome = 0x08CF, ///< Recreational Vehicle / Motor Home
|
||||
BtdrvAppearanceType_Refrigerator = 0x0901, ///< Refrigerator
|
||||
BtdrvAppearanceType_Freezer = 0x0902, ///< Freezer
|
||||
BtdrvAppearanceType_Oven = 0x0903, ///< Oven
|
||||
BtdrvAppearanceType_Microwave = 0x0904, ///< Microwave
|
||||
BtdrvAppearanceType_Toaster = 0x0905, ///< Toaster
|
||||
BtdrvAppearanceType_WashingMachine = 0x0906, ///< Washing Machine
|
||||
BtdrvAppearanceType_Dryer = 0x0907, ///< Dryer
|
||||
BtdrvAppearanceType_CoffeeMaker = 0x0908, ///< Coffee maker
|
||||
BtdrvAppearanceType_ClothesIron = 0x0909, ///< Clothes iron
|
||||
BtdrvAppearanceType_CurlingIron = 0x090A, ///< Curling iron
|
||||
BtdrvAppearanceType_HairDryer = 0x090B, ///< Hair dryer
|
||||
BtdrvAppearanceType_VacuumCleaner = 0x090C, ///< Vacuum cleaner
|
||||
BtdrvAppearanceType_RoboticVacuumCleaner = 0x090D, ///< Robotic vacuum cleaner
|
||||
BtdrvAppearanceType_RiceCooker = 0x090E, ///< Rice cooker
|
||||
BtdrvAppearanceType_ClothesSteamer = 0x090F, ///< Clothes steamer
|
||||
BtdrvAppearanceType_Earbud = 0x0941, ///< Earbud
|
||||
BtdrvAppearanceType_Headset = 0x0942, ///< Headset
|
||||
BtdrvAppearanceType_Headphones = 0x0943, ///< Headphones
|
||||
BtdrvAppearanceType_NeckBand = 0x0944, ///< Neck Band
|
||||
BtdrvAppearanceType_LightAircraft = 0x0981, ///< Light Aircraft
|
||||
BtdrvAppearanceType_Microlight = 0x0982, ///< Microlight
|
||||
BtdrvAppearanceType_Paraglider = 0x0983, ///< Paraglider
|
||||
BtdrvAppearanceType_LargePassengerAircraft = 0x0984, ///< Large Passenger Aircraft
|
||||
BtdrvAppearanceType_Amplifier = 0x09C1, ///< Amplifier
|
||||
BtdrvAppearanceType_Receiver = 0x09C2, ///< Receiver
|
||||
BtdrvAppearanceType_Radio = 0x09C3, ///< Radio
|
||||
BtdrvAppearanceType_Tuner = 0x09C4, ///< Tuner
|
||||
BtdrvAppearanceType_Turntable = 0x09C5, ///< Turntable
|
||||
BtdrvAppearanceType_CdPlayer = 0x09C6, ///< CD Player
|
||||
BtdrvAppearanceType_DvdPlayer = 0x09C7, ///< DVD Player
|
||||
BtdrvAppearanceType_BlurayPlayer = 0x09C8, ///< Bluray Player
|
||||
BtdrvAppearanceType_OpticalDiscPlayer = 0x09C9, ///< Optical Disc Player
|
||||
BtdrvAppearanceType_SetTopBox = 0x09CA, ///< Set-Top Box
|
||||
BtdrvAppearanceType_Television = 0x0A01, ///< Television
|
||||
BtdrvAppearanceType_Monitor = 0x0A02, ///< Monitor
|
||||
BtdrvAppearanceType_Projector = 0x0A03, ///< Projector
|
||||
BtdrvAppearanceType_InEarHearingAid = 0x0A41, ///< In-ear hearing aid
|
||||
BtdrvAppearanceType_BehindEarHearingAid = 0x0A42, ///< Behind-ear hearing aid
|
||||
BtdrvAppearanceType_CochlearImplant = 0x0A43, ///< Cochlear Implant
|
||||
BtdrvAppearanceType_HomeVideoGameConsole = 0x0A81, ///< Home Video Game Console
|
||||
BtdrvAppearanceType_PortableHandheldConsole = 0x0A82, ///< Portable handheld console
|
||||
BtdrvAppearanceType_FingertipPulseOximeter = 0x0C41, ///< Fingertip Pulse Oximeter
|
||||
BtdrvAppearanceType_WristWornPulseOximeter = 0x0C42, ///< Wrist Worn Pulse Oximeter
|
||||
BtdrvAppearanceType_PoweredWheelchair = 0x0CC1, ///< Powered Wheelchair
|
||||
BtdrvAppearanceType_MobilityScooter = 0x0CC2, ///< Mobility Scooter
|
||||
BtdrvAppearanceType_InsulinPumpDurablePump = 0x0D41, ///< Insulin Pump, durable pump
|
||||
BtdrvAppearanceType_InsulinPumpPatchPump = 0x0D44, ///< Insulin Pump, patch pump
|
||||
BtdrvAppearanceType_InsulinPen = 0x0D48, ///< Insulin Pen
|
||||
BtdrvAppearanceType_HandheldSpirometer = 0x0DC1, ///< Handheld Spirometer
|
||||
BtdrvAppearanceType_LocationDisplay = 0x1441, ///< Location Display
|
||||
BtdrvAppearanceType_LocationAndNavigationDisplay = 0x1442, ///< Location and Navigation Display
|
||||
BtdrvAppearanceType_LocationPod = 0x1443, ///< Location Pod
|
||||
BtdrvAppearanceType_LocationAndNavigationPod = 0x1444, ///< Location and Navigation Pod
|
||||
} BtdrvAppearanceType;
|
||||
|
||||
/// GattServiceUuidType
|
||||
typedef enum {
|
||||
BtdrvGattServiceUuidType_GenericAccess = 0x1800, ///< Generic Access
|
||||
BtdrvGattServiceUuidType_GenericAttribute = 0x1801, ///< Generic Attribute
|
||||
BtdrvGattServiceUuidType_ImmediateAlert = 0x1802, ///< Immediate Alert
|
||||
BtdrvGattServiceUuidType_LinkLoss = 0x1803, ///< Link Loss
|
||||
BtdrvGattServiceUuidType_TxPower = 0x1804, ///< Tx Power
|
||||
BtdrvGattServiceUuidType_CurrentTime = 0x1805, ///< Current Time
|
||||
BtdrvGattServiceUuidType_ReferenceTimeUpdate = 0x1806, ///< Reference Time Update
|
||||
BtdrvGattServiceUuidType_NextDstChange = 0x1807, ///< Next DST Change
|
||||
BtdrvGattServiceUuidType_Glucose = 0x1808, ///< Glucose
|
||||
BtdrvGattServiceUuidType_HealthThermometer = 0x1809, ///< Health Thermometer
|
||||
BtdrvGattServiceUuidType_DeviceInformation = 0x180A, ///< Device Information
|
||||
BtdrvGattServiceUuidType_HeartRate = 0x180D, ///< Heart Rate
|
||||
BtdrvGattServiceUuidType_PhoneAlertStatus = 0x180E, ///< Phone Alert Status
|
||||
BtdrvGattServiceUuidType_Battery = 0x180F, ///< Battery
|
||||
BtdrvGattServiceUuidType_BloodPressure = 0x1810, ///< Blood Pressure
|
||||
BtdrvGattServiceUuidType_AlertNotification = 0x1811, ///< Alert Notification
|
||||
BtdrvGattServiceUuidType_HumanInterfaceDevice = 0x1812, ///< Human Interface Device
|
||||
BtdrvGattServiceUuidType_ScanParameters = 0x1813, ///< Scan Parameters
|
||||
BtdrvGattServiceUuidType_RunningSpeedAndCadence = 0x1814, ///< Running Speed and Cadence
|
||||
BtdrvGattServiceUuidType_AutomationIo = 0x1815, ///< Automation IO
|
||||
BtdrvGattServiceUuidType_CyclingSpeedAndCadence = 0x1816, ///< Cycling Speed and Cadence
|
||||
BtdrvGattServiceUuidType_CyclingPower = 0x1818, ///< Cycling Power
|
||||
BtdrvGattServiceUuidType_LocationAndNavigation = 0x1819, ///< Location and Navigation
|
||||
BtdrvGattServiceUuidType_EnvironmentalSensing = 0x181A, ///< Environmental Sensing
|
||||
BtdrvGattServiceUuidType_BodyComposition = 0x181B, ///< Body Composition
|
||||
BtdrvGattServiceUuidType_UserData = 0x181C, ///< User Data
|
||||
BtdrvGattServiceUuidType_WeightScale = 0x181D, ///< Weight Scale
|
||||
BtdrvGattServiceUuidType_BondManagement = 0x181E, ///< Bond Management
|
||||
BtdrvGattServiceUuidType_ContinuousGlucoseMonitoring = 0x181F, ///< Continuous Glucose Monitoring
|
||||
BtdrvGattServiceUuidType_InternetProtocolSupport = 0x1820, ///< Internet Protocol Support
|
||||
BtdrvGattServiceUuidType_IndoorPositioning = 0x1821, ///< Indoor Positioning
|
||||
BtdrvGattServiceUuidType_PulseOximeter = 0x1822, ///< Pulse Oximeter
|
||||
BtdrvGattServiceUuidType_HttpProxy = 0x1823, ///< HTTP Proxy
|
||||
BtdrvGattServiceUuidType_TransportDiscovery = 0x1824, ///< Transport Discovery
|
||||
BtdrvGattServiceUuidType_ObjectTransfer = 0x1825, ///< Object Transfer
|
||||
BtdrvGattServiceUuidType_FitnessMachine = 0x1826, ///< Fitness Machine
|
||||
BtdrvGattServiceUuidType_MeshProvisioning = 0x1827, ///< Mesh Provisioning
|
||||
BtdrvGattServiceUuidType_MeshProxy = 0x1828, ///< Mesh Proxy
|
||||
BtdrvGattServiceUuidType_ReconnectionConfiguration = 0x1829, ///< Reconnection Configuration
|
||||
BtdrvGattServiceUuidType_InsulinDelivery = 0x183A, ///< Insulin Delivery
|
||||
BtdrvGattServiceUuidType_BinarySensor = 0x183B, ///< Binary Sensor
|
||||
BtdrvGattServiceUuidType_EmergencyConfiguration = 0x183C, ///< Emergency Configuration
|
||||
BtdrvGattServiceUuidType_AuthorizationControl = 0x183D, ///< Authorization Control
|
||||
BtdrvGattServiceUuidType_PhysicalActivityMonitor = 0x183E, ///< Physical Activity Monitor
|
||||
BtdrvGattServiceUuidType_ElapsedTime = 0x183F, ///< Elapsed Time
|
||||
BtdrvGattServiceUuidType_GenericHealthSensor = 0x1840, ///< Generic Health Sensor
|
||||
BtdrvGattServiceUuidType_AudioInputControl = 0x1843, ///< Audio Input Control
|
||||
BtdrvGattServiceUuidType_VolumeControl = 0x1844, ///< Volume Control
|
||||
BtdrvGattServiceUuidType_VolumeOffsetControl = 0x1845, ///< Volume Offset Control
|
||||
BtdrvGattServiceUuidType_CoordinatedSetIdentification = 0x1846, ///< Coordinated Set Identification
|
||||
BtdrvGattServiceUuidType_DeviceTime = 0x1847, ///< Device Time
|
||||
BtdrvGattServiceUuidType_MediaControl = 0x1848, ///< Media Control
|
||||
BtdrvGattServiceUuidType_GenericMediaControl = 0x1849, ///< Generic Media Control
|
||||
BtdrvGattServiceUuidType_ConstantToneExtension = 0x184A, ///< Constant Tone Extension
|
||||
BtdrvGattServiceUuidType_TelephoneBearer = 0x184B, ///< Telephone Bearer
|
||||
BtdrvGattServiceUuidType_GenericTelephoneBearer = 0x184C, ///< Generic Telephone Bearer
|
||||
BtdrvGattServiceUuidType_MicrophoneControl = 0x184D, ///< Microphone Control
|
||||
BtdrvGattServiceUuidType_AudioStreamControl = 0x184E, ///< Audio Stream Control
|
||||
BtdrvGattServiceUuidType_BroadcastAudioScan = 0x184F, ///< Broadcast Audio Scan
|
||||
BtdrvGattServiceUuidType_PublishedAudioCapabilities = 0x1850, ///< Published Audio Capabilities
|
||||
BtdrvGattServiceUuidType_BasicAudioAnnouncement = 0x1851, ///< Basic Audio Announcement
|
||||
BtdrvGattServiceUuidType_BroadcastAudioAnnouncement = 0x1852, ///< Broadcast Audio Announcement
|
||||
BtdrvGattServiceUuidType_CommonAudio = 0x1853, ///< Common Audio
|
||||
BtdrvGattServiceUuidType_HearingAccess = 0x1854, ///< Hearing Access
|
||||
BtdrvGattServiceUuidType_TelephonyAndMediaAudio = 0x1855, ///< Telephony and Media Audio
|
||||
BtdrvGattServiceUuidType_PublicBroadcastAnnouncement = 0x1856, ///< Public Broadcast Announcement
|
||||
BtdrvGattServiceUuidType_ElectronicShelfLabel = 0x1857, ///< Electronic Shelf Label
|
||||
} BtdrvGattServiceUuidType;
|
||||
|
||||
/// GattCharacteristicUuidType
|
||||
typedef enum {
|
||||
BtdrvGattCharacteristicUuidType_DeviceName = 0x2A00, ///< Device Name
|
||||
BtdrvGattCharacteristicUuidType_Appearance = 0x2A01, ///< Appearance
|
||||
BtdrvGattCharacteristicUuidType_PeripheralPrivacyFlag = 0x2A02, ///< Peripheral Privacy Flag
|
||||
BtdrvGattCharacteristicUuidType_ReconnectionAddress = 0x2A03, ///< Reconnection Address
|
||||
BtdrvGattCharacteristicUuidType_PeripheralPreferredConnectionParameters = 0x2A04, ///< Peripheral Preferred Connection Parameters
|
||||
BtdrvGattCharacteristicUuidType_ServiceChanged = 0x2A05, ///< Service Changed
|
||||
BtdrvGattCharacteristicUuidType_AlertLevel = 0x2A06, ///< Alert Level
|
||||
BtdrvGattCharacteristicUuidType_TxPowerLevel = 0x2A07, ///< Tx Power Level
|
||||
BtdrvGattCharacteristicUuidType_DateTime = 0x2A08, ///< Date Time
|
||||
BtdrvGattCharacteristicUuidType_DayOfWeek = 0x2A09, ///< Day of Week
|
||||
BtdrvGattCharacteristicUuidType_DayDateTime = 0x2A0A, ///< Day Date Time
|
||||
BtdrvGattCharacteristicUuidType_ExactTime256 = 0x2A0C, ///< Exact Time 256
|
||||
BtdrvGattCharacteristicUuidType_DstOffset = 0x2A0D, ///< DST Offset
|
||||
BtdrvGattCharacteristicUuidType_TimeZone = 0x2A0E, ///< Time Zone
|
||||
BtdrvGattCharacteristicUuidType_LocalTimeInformation = 0x2A0F, ///< Local Time Information
|
||||
BtdrvGattCharacteristicUuidType_TimeWithDst = 0x2A11, ///< Time with DST
|
||||
BtdrvGattCharacteristicUuidType_TimeAccuracy = 0x2A12, ///< Time Accuracy
|
||||
BtdrvGattCharacteristicUuidType_TimeSource = 0x2A13, ///< Time Source
|
||||
BtdrvGattCharacteristicUuidType_ReferenceTimeInformation = 0x2A14, ///< Reference Time Information
|
||||
BtdrvGattCharacteristicUuidType_TimeUpdateControlPoint = 0x2A16, ///< Time Update Control Point
|
||||
BtdrvGattCharacteristicUuidType_TimeUpdateState = 0x2A17, ///< Time Update State
|
||||
BtdrvGattCharacteristicUuidType_GlucoseMeasurement = 0x2A18, ///< Glucose Measurement
|
||||
BtdrvGattCharacteristicUuidType_BatteryLevel = 0x2A19, ///< Battery Level
|
||||
BtdrvGattCharacteristicUuidType_TemperatureMeasurement = 0x2A1C, ///< Temperature Measurement
|
||||
BtdrvGattCharacteristicUuidType_TemperatureType = 0x2A1D, ///< Temperature Type
|
||||
BtdrvGattCharacteristicUuidType_IntermediateTemperature = 0x2A1E, ///< Intermediate Temperature
|
||||
BtdrvGattCharacteristicUuidType_MeasurementInterval = 0x2A21, ///< Measurement Interval
|
||||
BtdrvGattCharacteristicUuidType_BootKeyboardInputReport = 0x2A22, ///< Boot Keyboard Input Report
|
||||
BtdrvGattCharacteristicUuidType_SystemId = 0x2A23, ///< System ID
|
||||
BtdrvGattCharacteristicUuidType_ModelNumberString = 0x2A24, ///< Model Number String
|
||||
BtdrvGattCharacteristicUuidType_SerialNumberString = 0x2A25, ///< Serial Number String
|
||||
BtdrvGattCharacteristicUuidType_FirmwareRevisionString = 0x2A26, ///< Firmware Revision String
|
||||
BtdrvGattCharacteristicUuidType_HardwareRevisionString = 0x2A27, ///< Hardware Revision String
|
||||
BtdrvGattCharacteristicUuidType_SoftwareRevisionString = 0x2A28, ///< Software Revision String
|
||||
BtdrvGattCharacteristicUuidType_ManufacturerNameString = 0x2A29, ///< Manufacturer Name String
|
||||
BtdrvGattCharacteristicUuidType_IeeeRegulatoryCertificationDataList = 0x2A2A, ///< IEEE 11073-20601 Regulatory Certification Data List
|
||||
BtdrvGattCharacteristicUuidType_CurrentTime = 0x2A2B, ///< Current Time
|
||||
BtdrvGattCharacteristicUuidType_MagneticDeclination = 0x2A2C, ///< Magnetic Declination
|
||||
BtdrvGattCharacteristicUuidType_ScanRefresh = 0x2A31, ///< Scan Refresh
|
||||
BtdrvGattCharacteristicUuidType_BootKeyboardOutputReport = 0x2A32, ///< Boot Keyboard Output Report
|
||||
BtdrvGattCharacteristicUuidType_BootMouseInputReport = 0x2A33, ///< Boot Mouse Input Report
|
||||
BtdrvGattCharacteristicUuidType_GlucoseMeasurementContext = 0x2A34, ///< Glucose Measurement Context
|
||||
BtdrvGattCharacteristicUuidType_BloodPressureMeasurement = 0x2A35, ///< Blood Pressure Measurement
|
||||
BtdrvGattCharacteristicUuidType_IntermediateCuffPressure = 0x2A36, ///< Intermediate Cuff Pressure
|
||||
BtdrvGattCharacteristicUuidType_HeartRateMeasurement = 0x2A37, ///< Heart Rate Measurement
|
||||
BtdrvGattCharacteristicUuidType_BodySensorLocation = 0x2A38, ///< Body Sensor Location
|
||||
BtdrvGattCharacteristicUuidType_HeartRateControlPoint = 0x2A39, ///< Heart Rate Control Point
|
||||
BtdrvGattCharacteristicUuidType_AlertStatus = 0x2A3F, ///< Alert Status
|
||||
BtdrvGattCharacteristicUuidType_RingerControlPoint = 0x2A40, ///< Ringer Control Point
|
||||
BtdrvGattCharacteristicUuidType_RingerSetting = 0x2A41, ///< Ringer Setting
|
||||
BtdrvGattCharacteristicUuidType_AlertCategoryIdBitMask = 0x2A42, ///< Alert Category ID Bit Mask
|
||||
BtdrvGattCharacteristicUuidType_AlertCategoryId = 0x2A43, ///< Alert Category ID
|
||||
BtdrvGattCharacteristicUuidType_AlertNotificationControlPoint = 0x2A44, ///< Alert Notification Control Point
|
||||
BtdrvGattCharacteristicUuidType_UnreadAlertStatus = 0x2A45, ///< Unread Alert Status
|
||||
BtdrvGattCharacteristicUuidType_NewAlert = 0x2A46, ///< New Alert
|
||||
BtdrvGattCharacteristicUuidType_SupportedNewAlertCategory = 0x2A47, ///< Supported New Alert Category
|
||||
BtdrvGattCharacteristicUuidType_SupportedUnreadAlertCategory = 0x2A48, ///< Supported Unread Alert Category
|
||||
BtdrvGattCharacteristicUuidType_BloodPressureFeature = 0x2A49, ///< Blood Pressure Feature
|
||||
BtdrvGattCharacteristicUuidType_HidInformation = 0x2A4A, ///< HID Information
|
||||
BtdrvGattCharacteristicUuidType_ReportMap = 0x2A4B, ///< Report Map
|
||||
BtdrvGattCharacteristicUuidType_HidControlPoint = 0x2A4C, ///< HID Control Point
|
||||
BtdrvGattCharacteristicUuidType_Report = 0x2A4D, ///< Report
|
||||
BtdrvGattCharacteristicUuidType_ProtocolMode = 0x2A4E, ///< Protocol Mode
|
||||
BtdrvGattCharacteristicUuidType_ScanIntervalWindow = 0x2A4F, ///< Scan Interval Window
|
||||
BtdrvGattCharacteristicUuidType_PnpId = 0x2A50, ///< PnP ID
|
||||
BtdrvGattCharacteristicUuidType_GlucoseFeature = 0x2A51, ///< Glucose Feature
|
||||
BtdrvGattCharacteristicUuidType_RecordAccessControlPoint = 0x2A52, ///< Record Access Control Point
|
||||
BtdrvGattCharacteristicUuidType_RscMeasurement = 0x2A53, ///< RSC Measurement
|
||||
BtdrvGattCharacteristicUuidType_RscFeature = 0x2A54, ///< RSC Feature
|
||||
BtdrvGattCharacteristicUuidType_ScControlPoint = 0x2A55, ///< SC Control Point
|
||||
BtdrvGattCharacteristicUuidType_Aggregate = 0x2A5A, ///< Aggregate
|
||||
BtdrvGattCharacteristicUuidType_CscMeasurement = 0x2A5B, ///< CSC Measurement
|
||||
BtdrvGattCharacteristicUuidType_CscFeature = 0x2A5C, ///< CSC Feature
|
||||
BtdrvGattCharacteristicUuidType_SensorLocation = 0x2A5D, ///< Sensor Location
|
||||
BtdrvGattCharacteristicUuidType_PlxSpotCheckMeasurement = 0x2A5E, ///< PLX Spot-Check Measurement
|
||||
BtdrvGattCharacteristicUuidType_PlxContinuousMeasurement = 0x2A5F, ///< PLX Continuous Measurement
|
||||
BtdrvGattCharacteristicUuidType_PlxFeatures = 0x2A60, ///< PLX Features
|
||||
BtdrvGattCharacteristicUuidType_CyclingPowerMeasurement = 0x2A63, ///< Cycling Power Measurement
|
||||
BtdrvGattCharacteristicUuidType_CyclingPowerVector = 0x2A64, ///< Cycling Power Vector
|
||||
BtdrvGattCharacteristicUuidType_CyclingPowerFeature = 0x2A65, ///< Cycling Power Feature
|
||||
BtdrvGattCharacteristicUuidType_CyclingPowerControlPoint = 0x2A66, ///< Cycling Power Control Point
|
||||
BtdrvGattCharacteristicUuidType_LocationAndSpeed = 0x2A67, ///< Location and Speed
|
||||
BtdrvGattCharacteristicUuidType_Navigation = 0x2A68, ///< Navigation
|
||||
BtdrvGattCharacteristicUuidType_PositionQuality = 0x2A69, ///< Position Quality
|
||||
BtdrvGattCharacteristicUuidType_LnFeature = 0x2A6A, ///< LN Feature
|
||||
BtdrvGattCharacteristicUuidType_LnControlPoint = 0x2A6B, ///< LN Control Point
|
||||
BtdrvGattCharacteristicUuidType_Elevation = 0x2A6C, ///< Elevation
|
||||
BtdrvGattCharacteristicUuidType_Pressure = 0x2A6D, ///< Pressure
|
||||
BtdrvGattCharacteristicUuidType_Temperature = 0x2A6E, ///< Temperature
|
||||
BtdrvGattCharacteristicUuidType_Humidity = 0x2A6F, ///< Humidity
|
||||
BtdrvGattCharacteristicUuidType_TrueWindSpeed = 0x2A70, ///< True Wind Speed
|
||||
BtdrvGattCharacteristicUuidType_TrueWindDirection = 0x2A71, ///< True Wind Direction
|
||||
BtdrvGattCharacteristicUuidType_ApparentWindSpeed = 0x2A72, ///< Apparent Wind Speed
|
||||
BtdrvGattCharacteristicUuidType_ApparentWindDirection = 0x2A73, ///< Apparent Wind Direction
|
||||
BtdrvGattCharacteristicUuidType_GustFactor = 0x2A74, ///< Gust Factor
|
||||
BtdrvGattCharacteristicUuidType_PollenConcentration = 0x2A75, ///< Pollen Concentration
|
||||
BtdrvGattCharacteristicUuidType_UvIndex = 0x2A76, ///< UV Index
|
||||
BtdrvGattCharacteristicUuidType_Irradiance = 0x2A77, ///< Irradiance
|
||||
BtdrvGattCharacteristicUuidType_Rainfall = 0x2A78, ///< Rainfall
|
||||
BtdrvGattCharacteristicUuidType_WindChill = 0x2A79, ///< Wind Chill
|
||||
BtdrvGattCharacteristicUuidType_HeatIndex = 0x2A7A, ///< Heat Index
|
||||
BtdrvGattCharacteristicUuidType_DewPoint = 0x2A7B, ///< Dew Point
|
||||
BtdrvGattCharacteristicUuidType_DescriptorValueChanged = 0x2A7D, ///< Descriptor Value Changed
|
||||
BtdrvGattCharacteristicUuidType_AerobicHeartRateLowerLimit = 0x2A7E, ///< Aerobic Heart Rate Lower Limit
|
||||
BtdrvGattCharacteristicUuidType_AerobicThreshold = 0x2A7F, ///< Aerobic Threshold
|
||||
BtdrvGattCharacteristicUuidType_Age = 0x2A80, ///< Age
|
||||
BtdrvGattCharacteristicUuidType_AnaerobicHeartRateLowerLimit = 0x2A81, ///< Anaerobic Heart Rate Lower Limit
|
||||
BtdrvGattCharacteristicUuidType_AnaerobicHeartRateUpperLimit = 0x2A82, ///< Anaerobic Heart Rate Upper Limit
|
||||
BtdrvGattCharacteristicUuidType_AnaerobicThreshold = 0x2A83, ///< Anaerobic Threshold
|
||||
BtdrvGattCharacteristicUuidType_AerobicHeartRateUpperLimit = 0x2A84, ///< Aerobic Heart Rate Upper Limit
|
||||
BtdrvGattCharacteristicUuidType_DateOfBirth = 0x2A85, ///< Date of Birth
|
||||
BtdrvGattCharacteristicUuidType_DateOfThresholdAssessment = 0x2A86, ///< Date of Threshold Assessment
|
||||
BtdrvGattCharacteristicUuidType_EmailAddress = 0x2A87, ///< Email Address
|
||||
BtdrvGattCharacteristicUuidType_FatBurnHeartRateLowerLimit = 0x2A88, ///< Fat Burn Heart Rate Lower Limit
|
||||
BtdrvGattCharacteristicUuidType_FatBurnHeartRateUpperLimit = 0x2A89, ///< Fat Burn Heart Rate Upper Limit
|
||||
BtdrvGattCharacteristicUuidType_FirstName = 0x2A8A, ///< First Name
|
||||
BtdrvGattCharacteristicUuidType_FiveZoneHeartRateLimits = 0x2A8B, ///< Five Zone Heart Rate Limits
|
||||
BtdrvGattCharacteristicUuidType_Gender = 0x2A8C, ///< Gender
|
||||
BtdrvGattCharacteristicUuidType_HeartRateMax = 0x2A8D, ///< Heart Rate Max
|
||||
BtdrvGattCharacteristicUuidType_Height = 0x2A8E, ///< Height
|
||||
BtdrvGattCharacteristicUuidType_HipCircumference = 0x2A8F, ///< Hip Circumference
|
||||
BtdrvGattCharacteristicUuidType_LastName = 0x2A90, ///< Last Name
|
||||
BtdrvGattCharacteristicUuidType_MaximumRecommendedHeartRate = 0x2A91, ///< Maximum Recommended Heart Rate
|
||||
BtdrvGattCharacteristicUuidType_RestingHeartRate = 0x2A92, ///< Resting Heart Rate
|
||||
BtdrvGattCharacteristicUuidType_SportTypeForAerobicAndAnaerobicThresholds = 0x2A93, ///< Sport Type for Aerobic and Anaerobic Thresholds
|
||||
BtdrvGattCharacteristicUuidType_ThreeZoneHeartRateLimits = 0x2A94, ///< Three Zone Heart Rate Limits
|
||||
BtdrvGattCharacteristicUuidType_TwoZoneHeartRateLimits = 0x2A95, ///< Two Zone Heart Rate Limits
|
||||
BtdrvGattCharacteristicUuidType_Vo2Max = 0x2A96, ///< VO2 Max
|
||||
BtdrvGattCharacteristicUuidType_WaistCircumference = 0x2A97, ///< Waist Circumference
|
||||
BtdrvGattCharacteristicUuidType_Weight = 0x2A98, ///< Weight
|
||||
BtdrvGattCharacteristicUuidType_DatabaseChangeIncrement = 0x2A99, ///< Database Change Increment
|
||||
BtdrvGattCharacteristicUuidType_UserIndex = 0x2A9A, ///< User Index
|
||||
BtdrvGattCharacteristicUuidType_BodyCompositionFeature = 0x2A9B, ///< Body Composition Feature
|
||||
BtdrvGattCharacteristicUuidType_BodyCompositionMeasurement = 0x2A9C, ///< Body Composition Measurement
|
||||
BtdrvGattCharacteristicUuidType_WeightMeasurement = 0x2A9D, ///< Weight Measurement
|
||||
BtdrvGattCharacteristicUuidType_WeightScaleFeature = 0x2A9E, ///< Weight Scale Feature
|
||||
BtdrvGattCharacteristicUuidType_UserControlPoint = 0x2A9F, ///< User Control Point
|
||||
BtdrvGattCharacteristicUuidType_MagneticFluxDensity2D = 0x2AA0, ///< Magnetic Flux Density - 2D
|
||||
BtdrvGattCharacteristicUuidType_MagneticFluxDensity3D = 0x2AA1, ///< Magnetic Flux Density - 3D
|
||||
BtdrvGattCharacteristicUuidType_Language = 0x2AA2, ///< Language
|
||||
BtdrvGattCharacteristicUuidType_BarometricPressureTrend = 0x2AA3, ///< Barometric Pressure Trend
|
||||
BtdrvGattCharacteristicUuidType_BondManagementControlPoint = 0x2AA4, ///< Bond Management Control Point
|
||||
BtdrvGattCharacteristicUuidType_BondManagementFeature = 0x2AA5, ///< Bond Management Feature
|
||||
BtdrvGattCharacteristicUuidType_CentralAddressResolution = 0x2AA6, ///< Central Address Resolution
|
||||
BtdrvGattCharacteristicUuidType_CgmMeasurement = 0x2AA7, ///< CGM Measurement
|
||||
BtdrvGattCharacteristicUuidType_CgmFeature = 0x2AA8, ///< CGM Feature
|
||||
BtdrvGattCharacteristicUuidType_CgmStatus = 0x2AA9, ///< CGM Status
|
||||
BtdrvGattCharacteristicUuidType_CgmSessionStartTime = 0x2AAA, ///< CGM Session Start Time
|
||||
BtdrvGattCharacteristicUuidType_CgmSessionRunTime = 0x2AAB, ///< CGM Session Run Time
|
||||
BtdrvGattCharacteristicUuidType_CgmSpecificOpsControlPoint = 0x2AAC, ///< CGM Specific Ops Control Point
|
||||
BtdrvGattCharacteristicUuidType_IndoorPositioningConfiguration = 0x2AAD, ///< Indoor Positioning Configuration
|
||||
BtdrvGattCharacteristicUuidType_Latitude = 0x2AAE, ///< Latitude
|
||||
BtdrvGattCharacteristicUuidType_Longitude = 0x2AAF, ///< Longitude
|
||||
BtdrvGattCharacteristicUuidType_LocalNorthCoordinate = 0x2AB0, ///< Local North Coordinate
|
||||
BtdrvGattCharacteristicUuidType_LocalEastCoordinate = 0x2AB1, ///< Local East Coordinate
|
||||
BtdrvGattCharacteristicUuidType_FloorNumber = 0x2AB2, ///< Floor Number
|
||||
BtdrvGattCharacteristicUuidType_Altitude = 0x2AB3, ///< Altitude
|
||||
BtdrvGattCharacteristicUuidType_Uncertainty = 0x2AB4, ///< Uncertainty
|
||||
BtdrvGattCharacteristicUuidType_LocationName = 0x2AB5, ///< Location Name
|
||||
BtdrvGattCharacteristicUuidType_Uri = 0x2AB6, ///< URI
|
||||
BtdrvGattCharacteristicUuidType_HttpHeaders = 0x2AB7, ///< HTTP Headers
|
||||
BtdrvGattCharacteristicUuidType_HttpStatusCode = 0x2AB8, ///< HTTP Status Code
|
||||
BtdrvGattCharacteristicUuidType_HttpEntityBody = 0x2AB9, ///< HTTP Entity Body
|
||||
BtdrvGattCharacteristicUuidType_HttpControlPoint = 0x2ABA, ///< HTTP Control Point
|
||||
BtdrvGattCharacteristicUuidType_HttpsSecurity = 0x2ABB, ///< HTTPS Security
|
||||
BtdrvGattCharacteristicUuidType_TdsControlPoint = 0x2ABC, ///< TDS Control Point
|
||||
BtdrvGattCharacteristicUuidType_OtsFeature = 0x2ABD, ///< OTS Feature
|
||||
BtdrvGattCharacteristicUuidType_ObjectName = 0x2ABE, ///< Object Name
|
||||
BtdrvGattCharacteristicUuidType_ObjectType = 0x2ABF, ///< Object Type
|
||||
BtdrvGattCharacteristicUuidType_ObjectSize = 0x2AC0, ///< Object Size
|
||||
BtdrvGattCharacteristicUuidType_ObjectFirstCreated = 0x2AC1, ///< Object First-Created
|
||||
BtdrvGattCharacteristicUuidType_ObjectLastModified = 0x2AC2, ///< Object Last-Modified
|
||||
BtdrvGattCharacteristicUuidType_ObjectId = 0x2AC3, ///< Object ID
|
||||
BtdrvGattCharacteristicUuidType_ObjectProperties = 0x2AC4, ///< Object Properties
|
||||
BtdrvGattCharacteristicUuidType_ObjectActionControlPoint = 0x2AC5, ///< Object Action Control Point
|
||||
BtdrvGattCharacteristicUuidType_ObjectListControlPoint = 0x2AC6, ///< Object List Control Point
|
||||
BtdrvGattCharacteristicUuidType_ObjectListFilter = 0x2AC7, ///< Object List Filter
|
||||
BtdrvGattCharacteristicUuidType_ObjectChanged = 0x2AC8, ///< Object Changed
|
||||
BtdrvGattCharacteristicUuidType_ResolvablePrivateAddressOnly = 0x2AC9, ///< Resolvable Private Address Only
|
||||
BtdrvGattCharacteristicUuidType_FitnessMachineFeature = 0x2ACC, ///< Fitness Machine Feature
|
||||
BtdrvGattCharacteristicUuidType_TreadmillData = 0x2ACD, ///< Treadmill Data
|
||||
BtdrvGattCharacteristicUuidType_CrossTrainerData = 0x2ACE, ///< Cross Trainer Data
|
||||
BtdrvGattCharacteristicUuidType_StepClimberData = 0x2ACF, ///< Step Climber Data
|
||||
BtdrvGattCharacteristicUuidType_StairClimberData = 0x2AD0, ///< Stair Climber Data
|
||||
BtdrvGattCharacteristicUuidType_RowerData = 0x2AD1, ///< Rower Data
|
||||
BtdrvGattCharacteristicUuidType_IndoorBikeData = 0x2AD2, ///< Indoor Bike Data
|
||||
BtdrvGattCharacteristicUuidType_TrainingStatus = 0x2AD3, ///< Training Status
|
||||
BtdrvGattCharacteristicUuidType_SupportedSpeedRange = 0x2AD4, ///< Supported Speed Range
|
||||
BtdrvGattCharacteristicUuidType_SupportedInclinationRange = 0x2AD5, ///< Supported Inclination Range
|
||||
BtdrvGattCharacteristicUuidType_SupportedResistanceLevelRange = 0x2AD6, ///< Supported Resistance Level Range
|
||||
BtdrvGattCharacteristicUuidType_SupportedHeartRateRange = 0x2AD7, ///< Supported Heart Rate Range
|
||||
BtdrvGattCharacteristicUuidType_SupportedPowerRange = 0x2AD8, ///< Supported Power Range
|
||||
BtdrvGattCharacteristicUuidType_FitnessMachineControlPoint = 0x2AD9, ///< Fitness Machine Control Point
|
||||
BtdrvGattCharacteristicUuidType_FitnessMachineStatus = 0x2ADA, ///< Fitness Machine Status
|
||||
BtdrvGattCharacteristicUuidType_MeshProvisioningDataIn = 0x2ADB, ///< Mesh Provisioning Data In
|
||||
BtdrvGattCharacteristicUuidType_MeshProvisioningDataOut = 0x2ADC, ///< Mesh Provisioning Data Out
|
||||
BtdrvGattCharacteristicUuidType_MeshProxyDataIn = 0x2ADD, ///< Mesh Proxy Data In
|
||||
BtdrvGattCharacteristicUuidType_MeshProxyDataOut = 0x2ADE, ///< Mesh Proxy Data Out
|
||||
BtdrvGattCharacteristicUuidType_AverageCurrent = 0x2AE0, ///< Average Current
|
||||
BtdrvGattCharacteristicUuidType_AverageVoltage = 0x2AE1, ///< Average Voltage
|
||||
BtdrvGattCharacteristicUuidType_Boolean = 0x2AE2, ///< Boolean
|
||||
BtdrvGattCharacteristicUuidType_ChromaticDistanceFromPlanckian = 0x2AE3, ///< Chromatic Distance from Planckian
|
||||
BtdrvGattCharacteristicUuidType_ChromaticityCoordinates = 0x2AE4, ///< Chromaticity Coordinates
|
||||
BtdrvGattCharacteristicUuidType_ChromaticityInCctAndDuvValues = 0x2AE5, ///< Chromaticity in CCT and Duv Values
|
||||
BtdrvGattCharacteristicUuidType_ChromaticityTolerance = 0x2AE6, ///< Chromaticity Tolerance
|
||||
BtdrvGattCharacteristicUuidType_CieColorRenderingIndex = 0x2AE7, ///< CIE 13.3-1995 Color Rendering Index
|
||||
BtdrvGattCharacteristicUuidType_Coefficient = 0x2AE8, ///< Coefficient
|
||||
BtdrvGattCharacteristicUuidType_CorrelatedColorTemperature = 0x2AE9, ///< Correlated Color Temperature
|
||||
BtdrvGattCharacteristicUuidType_Count16 = 0x2AEA, ///< Count 16
|
||||
BtdrvGattCharacteristicUuidType_Count24 = 0x2AEB, ///< Count 24
|
||||
BtdrvGattCharacteristicUuidType_CountryCode = 0x2AEC, ///< Country Code
|
||||
BtdrvGattCharacteristicUuidType_DateUtc = 0x2AED, ///< Date UTC
|
||||
BtdrvGattCharacteristicUuidType_ElectricCurrent = 0x2AEE, ///< Electric Current
|
||||
BtdrvGattCharacteristicUuidType_ElectricCurrentRange = 0x2AEF, ///< Electric Current Range
|
||||
BtdrvGattCharacteristicUuidType_ElectricCurrentSpecification = 0x2AF0, ///< Electric Current Specification
|
||||
BtdrvGattCharacteristicUuidType_ElectricCurrentStatistics = 0x2AF1, ///< Electric Current Statistics
|
||||
BtdrvGattCharacteristicUuidType_Energy = 0x2AF2, ///< Energy
|
||||
BtdrvGattCharacteristicUuidType_EnergyInAPeriodOfDay = 0x2AF3, ///< Energy in a Period of Day
|
||||
BtdrvGattCharacteristicUuidType_EventStatistics = 0x2AF4, ///< Event Statistics
|
||||
BtdrvGattCharacteristicUuidType_FixedString16 = 0x2AF5, ///< Fixed String 16
|
||||
BtdrvGattCharacteristicUuidType_FixedString24 = 0x2AF6, ///< Fixed String 24
|
||||
BtdrvGattCharacteristicUuidType_FixedString36 = 0x2AF7, ///< Fixed String 36
|
||||
BtdrvGattCharacteristicUuidType_FixedString8 = 0x2AF8, ///< Fixed String 8
|
||||
BtdrvGattCharacteristicUuidType_GenericLevel = 0x2AF9, ///< Generic Level
|
||||
BtdrvGattCharacteristicUuidType_GlobalTradeItemNumber = 0x2AFA, ///< Global Trade Item Number
|
||||
BtdrvGattCharacteristicUuidType_Illuminance = 0x2AFB, ///< Illuminance
|
||||
BtdrvGattCharacteristicUuidType_LuminousEfficacy = 0x2AFC, ///< Luminous Efficacy
|
||||
BtdrvGattCharacteristicUuidType_LuminousEnergy = 0x2AFD, ///< Luminous Energy
|
||||
BtdrvGattCharacteristicUuidType_LuminousExposure = 0x2AFE, ///< Luminous Exposure
|
||||
BtdrvGattCharacteristicUuidType_LuminousFlux = 0x2AFF, ///< Luminous Flux
|
||||
BtdrvGattCharacteristicUuidType_LuminousFluxRange = 0x2B00, ///< Luminous Flux Range
|
||||
BtdrvGattCharacteristicUuidType_LuminousIntensity = 0x2B01, ///< Luminous Intensity
|
||||
BtdrvGattCharacteristicUuidType_MassFlow = 0x2B02, ///< Mass Flow
|
||||
BtdrvGattCharacteristicUuidType_PerceivedLightness = 0x2B03, ///< Perceived Lightness
|
||||
BtdrvGattCharacteristicUuidType_Percentage8 = 0x2B04, ///< Percentage 8
|
||||
BtdrvGattCharacteristicUuidType_Power = 0x2B05, ///< Power
|
||||
BtdrvGattCharacteristicUuidType_PowerSpecification = 0x2B06, ///< Power Specification
|
||||
BtdrvGattCharacteristicUuidType_RelativeRuntimeInACurrentRange = 0x2B07, ///< Relative Runtime in a Current Range
|
||||
BtdrvGattCharacteristicUuidType_RelativeRuntimeInAGenericLevelRange = 0x2B08, ///< Relative Runtime in a Generic Level Range
|
||||
BtdrvGattCharacteristicUuidType_RelativeValueInAVoltageRange = 0x2B09, ///< Relative Value in a Voltage Range
|
||||
BtdrvGattCharacteristicUuidType_RelativeValueInAnIlluminanceRange = 0x2B0A, ///< Relative Value in an Illuminance Range
|
||||
BtdrvGattCharacteristicUuidType_RelativeValueInAPeriodOfDay = 0x2B0B, ///< Relative Value in a Period of Day
|
||||
BtdrvGattCharacteristicUuidType_RelativeValueInATemperatureRange = 0x2B0C, ///< Relative Value in a Temperature Range
|
||||
BtdrvGattCharacteristicUuidType_Temperature8 = 0x2B0D, ///< Temperature 8
|
||||
BtdrvGattCharacteristicUuidType_Temperature8InAPeriodOfDay = 0x2B0E, ///< Temperature 8 in a Period of Day
|
||||
BtdrvGattCharacteristicUuidType_Temperature8Statistics = 0x2B0F, ///< Temperature 8 Statistics
|
||||
BtdrvGattCharacteristicUuidType_TemperatureRange = 0x2B10, ///< Temperature Range
|
||||
BtdrvGattCharacteristicUuidType_TemperatureStatistics = 0x2B11, ///< Temperature Statistics
|
||||
BtdrvGattCharacteristicUuidType_TimeDecihour8 = 0x2B12, ///< Time Decihour 8
|
||||
BtdrvGattCharacteristicUuidType_TimeExponential8 = 0x2B13, ///< Time Exponential 8
|
||||
BtdrvGattCharacteristicUuidType_TimeHour24 = 0x2B14, ///< Time Hour 24
|
||||
BtdrvGattCharacteristicUuidType_TimeMillisecond24 = 0x2B15, ///< Time Millisecond 24
|
||||
BtdrvGattCharacteristicUuidType_TimeSecond16 = 0x2B16, ///< Time Second 16
|
||||
BtdrvGattCharacteristicUuidType_TimeSecond8 = 0x2B17, ///< Time Second 8
|
||||
BtdrvGattCharacteristicUuidType_Voltage = 0x2B18, ///< Voltage
|
||||
BtdrvGattCharacteristicUuidType_VoltageSpecification = 0x2B19, ///< Voltage Specification
|
||||
BtdrvGattCharacteristicUuidType_VoltageStatistics = 0x2B1A, ///< Voltage Statistics
|
||||
BtdrvGattCharacteristicUuidType_VolumeFlow = 0x2B1B, ///< Volume Flow
|
||||
BtdrvGattCharacteristicUuidType_ChromaticityCoordinate = 0x2B1C, ///< Chromaticity Coordinate
|
||||
BtdrvGattCharacteristicUuidType_RcFeature = 0x2B1D, ///< RC Feature
|
||||
BtdrvGattCharacteristicUuidType_RcSettings = 0x2B1E, ///< RC Settings
|
||||
BtdrvGattCharacteristicUuidType_ReconnectionConfigurationControlPoint = 0x2B1F, ///< Reconnection Configuration Control Point
|
||||
BtdrvGattCharacteristicUuidType_IddStatusChanged = 0x2B20, ///< IDD Status Changed
|
||||
BtdrvGattCharacteristicUuidType_IddStatus = 0x2B21, ///< IDD Status
|
||||
BtdrvGattCharacteristicUuidType_IddAnnunciationStatus = 0x2B22, ///< IDD Annunciation Status
|
||||
BtdrvGattCharacteristicUuidType_IddFeatures = 0x2B23, ///< IDD Features
|
||||
BtdrvGattCharacteristicUuidType_IddStatusReaderControlPoint = 0x2B24, ///< IDD Status Reader Control Point
|
||||
BtdrvGattCharacteristicUuidType_IddCommandControlPoint = 0x2B25, ///< IDD Command Control Point
|
||||
BtdrvGattCharacteristicUuidType_IddCommandData = 0x2B26, ///< IDD Command Data
|
||||
BtdrvGattCharacteristicUuidType_IddRecordAccessControlPoint = 0x2B27, ///< IDD Record Access Control Point
|
||||
BtdrvGattCharacteristicUuidType_IddHistoryData = 0x2B28, ///< IDD History Data
|
||||
BtdrvGattCharacteristicUuidType_ClientSupportedFeatures = 0x2B29, ///< Client Supported Features
|
||||
BtdrvGattCharacteristicUuidType_DatabaseHash = 0x2B2A, ///< Database Hash
|
||||
BtdrvGattCharacteristicUuidType_BssControlPoint = 0x2B2B, ///< BSS Control Point
|
||||
BtdrvGattCharacteristicUuidType_BssResponse = 0x2B2C, ///< BSS Response
|
||||
BtdrvGattCharacteristicUuidType_EmergencyId = 0x2B2D, ///< Emergency ID
|
||||
BtdrvGattCharacteristicUuidType_EmergencyText = 0x2B2E, ///< Emergency Text
|
||||
BtdrvGattCharacteristicUuidType_AcsStatus = 0x2B2F, ///< ACS Status
|
||||
BtdrvGattCharacteristicUuidType_AcsDataIn = 0x2B30, ///< ACS Data In
|
||||
BtdrvGattCharacteristicUuidType_AcsDataOutNotify = 0x2B31, ///< ACS Data Out Notify
|
||||
BtdrvGattCharacteristicUuidType_AcsDataOutIndicate = 0x2B32, ///< ACS Data Out Indicate
|
||||
BtdrvGattCharacteristicUuidType_AcsControlPoint = 0x2B33, ///< ACS Control Point
|
||||
BtdrvGattCharacteristicUuidType_EnhancedBloodPressureMeasurement = 0x2B34, ///< Enhanced Blood Pressure Measurement
|
||||
BtdrvGattCharacteristicUuidType_EnhancedIntermediateCuffPressure = 0x2B35, ///< Enhanced Intermediate Cuff Pressure
|
||||
BtdrvGattCharacteristicUuidType_BloodPressureRecord = 0x2B36, ///< Blood Pressure Record
|
||||
BtdrvGattCharacteristicUuidType_RegisteredUser = 0x2B37, ///< Registered User
|
||||
BtdrvGattCharacteristicUuidType_BrEdrHandoverData = 0x2B38, ///< BR-EDR Handover Data
|
||||
BtdrvGattCharacteristicUuidType_BluetoothSigData = 0x2B39, ///< Bluetooth SIG Data
|
||||
BtdrvGattCharacteristicUuidType_ServerSupportedFeatures = 0x2B3A, ///< Server Supported Features
|
||||
BtdrvGattCharacteristicUuidType_PhysicalActivityMonitorFeatures = 0x2B3B, ///< Physical Activity Monitor Features
|
||||
BtdrvGattCharacteristicUuidType_GeneralActivityInstantaneousData = 0x2B3C, ///< General Activity Instantaneous Data
|
||||
BtdrvGattCharacteristicUuidType_GeneralActivitySummaryData = 0x2B3D, ///< General Activity Summary Data
|
||||
BtdrvGattCharacteristicUuidType_CardiorespiratoryActivityInstantaneousData = 0x2B3E, ///< CardioRespiratory Activity Instantaneous Data
|
||||
BtdrvGattCharacteristicUuidType_CardiorespiratoryActivitySummaryData = 0x2B3F, ///< CardioRespiratory Activity Summary Data
|
||||
BtdrvGattCharacteristicUuidType_StepCounterActivitySummaryData = 0x2B40, ///< Step Counter Activity Summary Data
|
||||
BtdrvGattCharacteristicUuidType_SleepActivityInstantaneousData = 0x2B41, ///< Sleep Activity Instantaneous Data
|
||||
BtdrvGattCharacteristicUuidType_SleepActivitySummaryData = 0x2B42, ///< Sleep Activity Summary Data
|
||||
BtdrvGattCharacteristicUuidType_PhysicalActivityMonitorControlPoint = 0x2B43, ///< Physical Activity Monitor Control Point
|
||||
BtdrvGattCharacteristicUuidType_ActivityCurrentSession = 0x2B44, ///< Activity Current Session
|
||||
BtdrvGattCharacteristicUuidType_PhysicalActivitySessionDescriptor = 0x2B45, ///< Physical Activity Session Descriptor
|
||||
BtdrvGattCharacteristicUuidType_PreferredUnits = 0x2B46, ///< Preferred Units
|
||||
BtdrvGattCharacteristicUuidType_HighResolutionHeight = 0x2B47, ///< High Resolution Height
|
||||
BtdrvGattCharacteristicUuidType_MiddleName = 0x2B48, ///< Middle Name
|
||||
BtdrvGattCharacteristicUuidType_StrideLength = 0x2B49, ///< Stride Length
|
||||
BtdrvGattCharacteristicUuidType_Handedness = 0x2B4A, ///< Handedness
|
||||
BtdrvGattCharacteristicUuidType_DeviceWearingPosition = 0x2B4B, ///< Device Wearing Position
|
||||
BtdrvGattCharacteristicUuidType_FourZoneHeartRateLimits = 0x2B4C, ///< Four Zone Heart Rate Limits
|
||||
BtdrvGattCharacteristicUuidType_HighIntensityExerciseThreshold = 0x2B4D, ///< High Intensity Exercise Threshold
|
||||
BtdrvGattCharacteristicUuidType_ActivityGoal = 0x2B4E, ///< Activity Goal
|
||||
BtdrvGattCharacteristicUuidType_SedentaryIntervalNotification = 0x2B4F, ///< Sedentary Interval Notification
|
||||
BtdrvGattCharacteristicUuidType_CaloricIntake = 0x2B50, ///< Caloric Intake
|
||||
BtdrvGattCharacteristicUuidType_TmapRole = 0x2B51, ///< TMAP Role
|
||||
BtdrvGattCharacteristicUuidType_AudioInputState = 0x2B77, ///< Audio Input State
|
||||
BtdrvGattCharacteristicUuidType_GainSettingsAttribute = 0x2B78, ///< Gain Settings Attribute
|
||||
BtdrvGattCharacteristicUuidType_AudioInputType = 0x2B79, ///< Audio Input Type
|
||||
BtdrvGattCharacteristicUuidType_AudioInputStatus = 0x2B7A, ///< Audio Input Status
|
||||
BtdrvGattCharacteristicUuidType_AudioInputControlPoint = 0x2B7B, ///< Audio Input Control Point
|
||||
BtdrvGattCharacteristicUuidType_AudioInputDescription = 0x2B7C, ///< Audio Input Description
|
||||
BtdrvGattCharacteristicUuidType_VolumeState = 0x2B7D, ///< Volume State
|
||||
BtdrvGattCharacteristicUuidType_VolumeControlPoint = 0x2B7E, ///< Volume Control Point
|
||||
BtdrvGattCharacteristicUuidType_VolumeFlags = 0x2B7F, ///< Volume Flags
|
||||
BtdrvGattCharacteristicUuidType_VolumeOffsetState = 0x2B80, ///< Volume Offset State
|
||||
BtdrvGattCharacteristicUuidType_AudioLocation = 0x2B81, ///< Audio Location
|
||||
BtdrvGattCharacteristicUuidType_VolumeOffsetControlPoint = 0x2B82, ///< Volume Offset Control Point
|
||||
BtdrvGattCharacteristicUuidType_AudioOutputDescription = 0x2B83, ///< Audio Output Description
|
||||
BtdrvGattCharacteristicUuidType_SetIdentityResolvingKey = 0x2B84, ///< Set Identity Resolving Key
|
||||
BtdrvGattCharacteristicUuidType_CoordinatedSetSize = 0x2B85, ///< Coordinated Set Size
|
||||
BtdrvGattCharacteristicUuidType_SetMemberLock = 0x2B86, ///< Set Member Lock
|
||||
BtdrvGattCharacteristicUuidType_SetMemberRank = 0x2B87, ///< Set Member Rank
|
||||
BtdrvGattCharacteristicUuidType_EncryptedDataKeyMaterial = 0x2B88, ///< Encrypted Data Key Material
|
||||
BtdrvGattCharacteristicUuidType_ApparentEnergy32 = 0x2B89, ///< Apparent Energy 32
|
||||
BtdrvGattCharacteristicUuidType_ApparentPower = 0x2B8A, ///< Apparent Power
|
||||
BtdrvGattCharacteristicUuidType_LiveHealthObservations = 0x2B8B, ///< Live Health Observations
|
||||
BtdrvGattCharacteristicUuidType_CoTextsubscript2Concentration = 0x2B8C, ///< CO\textsubscript{2} Concentration
|
||||
BtdrvGattCharacteristicUuidType_CosineOfTheAngle = 0x2B8D, ///< Cosine of the Angle
|
||||
BtdrvGattCharacteristicUuidType_DeviceTimeFeature = 0x2B8E, ///< Device Time Feature
|
||||
BtdrvGattCharacteristicUuidType_DeviceTimeParameters = 0x2B8F, ///< Device Time Parameters
|
||||
BtdrvGattCharacteristicUuidType_DeviceTime = 0x2B90, ///< Device Time
|
||||
BtdrvGattCharacteristicUuidType_DeviceTimeControlPoint = 0x2B91, ///< Device Time Control Point
|
||||
BtdrvGattCharacteristicUuidType_TimeChangeLogData = 0x2B92, ///< Time Change Log Data
|
||||
BtdrvGattCharacteristicUuidType_MediaPlayerName = 0x2B93, ///< Media Player Name
|
||||
BtdrvGattCharacteristicUuidType_MediaPlayerIconObjectId = 0x2B94, ///< Media Player Icon Object ID
|
||||
BtdrvGattCharacteristicUuidType_MediaPlayerIconUrl = 0x2B95, ///< Media Player Icon URL
|
||||
BtdrvGattCharacteristicUuidType_TrackChanged = 0x2B96, ///< Track Changed
|
||||
BtdrvGattCharacteristicUuidType_TrackTitle = 0x2B97, ///< Track Title
|
||||
BtdrvGattCharacteristicUuidType_TrackDuration = 0x2B98, ///< Track Duration
|
||||
BtdrvGattCharacteristicUuidType_TrackPosition = 0x2B99, ///< Track Position
|
||||
BtdrvGattCharacteristicUuidType_PlaybackSpeed = 0x2B9A, ///< Playback Speed
|
||||
BtdrvGattCharacteristicUuidType_SeekingSpeed = 0x2B9B, ///< Seeking Speed
|
||||
BtdrvGattCharacteristicUuidType_CurrentTrackSegmentsObjectId = 0x2B9C, ///< Current Track Segments Object ID
|
||||
BtdrvGattCharacteristicUuidType_CurrentTrackObjectId = 0x2B9D, ///< Current Track Object ID
|
||||
BtdrvGattCharacteristicUuidType_NextTrackObjectId = 0x2B9E, ///< Next Track Object ID
|
||||
BtdrvGattCharacteristicUuidType_ParentGroupObjectId = 0x2B9F, ///< Parent Group Object ID
|
||||
BtdrvGattCharacteristicUuidType_CurrentGroupObjectId = 0x2BA0, ///< Current Group Object ID
|
||||
BtdrvGattCharacteristicUuidType_PlayingOrder = 0x2BA1, ///< Playing Order
|
||||
BtdrvGattCharacteristicUuidType_PlayingOrdersSupported = 0x2BA2, ///< Playing Orders Supported
|
||||
BtdrvGattCharacteristicUuidType_MediaState = 0x2BA3, ///< Media State
|
||||
BtdrvGattCharacteristicUuidType_MediaControlPoint = 0x2BA4, ///< Media Control Point
|
||||
BtdrvGattCharacteristicUuidType_MediaControlPointOpcodesSupported = 0x2BA5, ///< Media Control Point Opcodes Supported
|
||||
BtdrvGattCharacteristicUuidType_SearchResultsObjectId = 0x2BA6, ///< Search Results Object ID
|
||||
BtdrvGattCharacteristicUuidType_SearchControlPoint = 0x2BA7, ///< Search Control Point
|
||||
BtdrvGattCharacteristicUuidType_Energy32 = 0x2BA8, ///< Energy 32
|
||||
BtdrvGattCharacteristicUuidType_MediaPlayerIconObjectType = 0x2BA9, ///< Media Player Icon Object Type
|
||||
BtdrvGattCharacteristicUuidType_TrackSegmentsObjectType = 0x2BAA, ///< Track Segments Object Type
|
||||
BtdrvGattCharacteristicUuidType_TrackObjectType = 0x2BAB, ///< Track Object Type
|
||||
BtdrvGattCharacteristicUuidType_GroupObjectType = 0x2BAC, ///< Group Object Type
|
||||
BtdrvGattCharacteristicUuidType_ConstantToneExtensionEnable = 0x2BAD, ///< Constant Tone Extension Enable
|
||||
BtdrvGattCharacteristicUuidType_AdvertisingConstantToneExtensionMinimumLength = 0x2BAE, ///< Advertising Constant Tone Extension Minimum Length
|
||||
BtdrvGattCharacteristicUuidType_AdvertisingConstantToneExtensionMinimumTransmitCount = 0x2BAF, ///< Advertising Constant Tone Extension Minimum Transmit Count
|
||||
BtdrvGattCharacteristicUuidType_AdvertisingConstantToneExtensionTransmitDuration = 0x2BB0, ///< Advertising Constant Tone Extension Transmit Duration
|
||||
BtdrvGattCharacteristicUuidType_AdvertisingConstantToneExtensionInterval = 0x2BB1, ///< Advertising Constant Tone Extension Interval
|
||||
BtdrvGattCharacteristicUuidType_AdvertisingConstantToneExtensionPhy = 0x2BB2, ///< Advertising Constant Tone Extension PHY
|
||||
BtdrvGattCharacteristicUuidType_BearerProviderName = 0x2BB3, ///< Bearer Provider Name
|
||||
BtdrvGattCharacteristicUuidType_BearerUci = 0x2BB4, ///< Bearer UCI
|
||||
BtdrvGattCharacteristicUuidType_BearerTechnology = 0x2BB5, ///< Bearer Technology
|
||||
BtdrvGattCharacteristicUuidType_BearerUriSchemesSupportedList = 0x2BB6, ///< Bearer URI Schemes Supported List
|
||||
BtdrvGattCharacteristicUuidType_BearerSignalStrength = 0x2BB7, ///< Bearer Signal Strength
|
||||
BtdrvGattCharacteristicUuidType_BearerSignalStrengthReportingInterval = 0x2BB8, ///< Bearer Signal Strength Reporting Interval
|
||||
BtdrvGattCharacteristicUuidType_BearerListCurrentCalls = 0x2BB9, ///< Bearer List Current Calls
|
||||
BtdrvGattCharacteristicUuidType_ContentControlId = 0x2BBA, ///< Content Control ID
|
||||
BtdrvGattCharacteristicUuidType_StatusFlags = 0x2BBB, ///< Status Flags
|
||||
BtdrvGattCharacteristicUuidType_IncomingCallTargetBearerUri = 0x2BBC, ///< Incoming Call Target Bearer URI
|
||||
BtdrvGattCharacteristicUuidType_CallState = 0x2BBD, ///< Call State
|
||||
BtdrvGattCharacteristicUuidType_CallControlPoint = 0x2BBE, ///< Call Control Point
|
||||
BtdrvGattCharacteristicUuidType_CallControlPointOptionalOpcodes = 0x2BBF, ///< Call Control Point Optional Opcodes
|
||||
BtdrvGattCharacteristicUuidType_TerminationReason = 0x2BC0, ///< Termination Reason
|
||||
BtdrvGattCharacteristicUuidType_IncomingCall = 0x2BC1, ///< Incoming Call
|
||||
BtdrvGattCharacteristicUuidType_CallFriendlyName = 0x2BC2, ///< Call Friendly Name
|
||||
BtdrvGattCharacteristicUuidType_Mute = 0x2BC3, ///< Mute
|
||||
BtdrvGattCharacteristicUuidType_SinkAse = 0x2BC4, ///< Sink ASE
|
||||
BtdrvGattCharacteristicUuidType_SourceAse = 0x2BC5, ///< Source ASE
|
||||
BtdrvGattCharacteristicUuidType_AseControlPoint = 0x2BC6, ///< ASE Control Point
|
||||
BtdrvGattCharacteristicUuidType_BroadcastAudioScanControlPoint = 0x2BC7, ///< Broadcast Audio Scan Control Point
|
||||
BtdrvGattCharacteristicUuidType_BroadcastReceiveState = 0x2BC8, ///< Broadcast Receive State
|
||||
BtdrvGattCharacteristicUuidType_SinkPac = 0x2BC9, ///< Sink PAC
|
||||
BtdrvGattCharacteristicUuidType_SinkAudioLocations = 0x2BCA, ///< Sink Audio Locations
|
||||
BtdrvGattCharacteristicUuidType_SourcePac = 0x2BCB, ///< Source PAC
|
||||
BtdrvGattCharacteristicUuidType_SourceAudioLocations = 0x2BCC, ///< Source Audio Locations
|
||||
BtdrvGattCharacteristicUuidType_AvailableAudioContexts = 0x2BCD, ///< Available Audio Contexts
|
||||
BtdrvGattCharacteristicUuidType_SupportedAudioContexts = 0x2BCE, ///< Supported Audio Contexts
|
||||
BtdrvGattCharacteristicUuidType_AmmoniaConcentration = 0x2BCF, ///< Ammonia Concentration
|
||||
BtdrvGattCharacteristicUuidType_CarbonMonoxideConcentration = 0x2BD0, ///< Carbon Monoxide Concentration
|
||||
BtdrvGattCharacteristicUuidType_MethaneConcentration = 0x2BD1, ///< Methane Concentration
|
||||
BtdrvGattCharacteristicUuidType_NitrogenDioxideConcentration = 0x2BD2, ///< Nitrogen Dioxide Concentration
|
||||
BtdrvGattCharacteristicUuidType_NonMethaneVolatileOrganicCompoundsConcentration = 0x2BD3, ///< Non-Methane Volatile Organic Compounds Concentration
|
||||
BtdrvGattCharacteristicUuidType_OzoneConcentration = 0x2BD4, ///< Ozone Concentration
|
||||
BtdrvGattCharacteristicUuidType_ParticulateMatterPm1Concentration = 0x2BD5, ///< Particulate Matter - PM1 Concentration
|
||||
BtdrvGattCharacteristicUuidType_ParticulateMatterPm25Concentration = 0x2BD6, ///< Particulate Matter - PM2.5 Concentration
|
||||
BtdrvGattCharacteristicUuidType_ParticulateMatterPm10Concentration = 0x2BD7, ///< Particulate Matter - PM10 Concentration
|
||||
BtdrvGattCharacteristicUuidType_SulfurDioxideConcentration = 0x2BD8, ///< Sulfur Dioxide Concentration
|
||||
BtdrvGattCharacteristicUuidType_SulfurHexafluorideConcentration = 0x2BD9, ///< Sulfur Hexafluoride Concentration
|
||||
BtdrvGattCharacteristicUuidType_HearingAidFeatures = 0x2BDA, ///< Hearing Aid Features
|
||||
BtdrvGattCharacteristicUuidType_HearingAidPresetControlPoint = 0x2BDB, ///< Hearing Aid Preset Control Point
|
||||
BtdrvGattCharacteristicUuidType_ActivePresetIndex = 0x2BDC, ///< Active Preset Index
|
||||
BtdrvGattCharacteristicUuidType_StoredHealthObservations = 0x2BDD, ///< Stored Health Observations
|
||||
BtdrvGattCharacteristicUuidType_FixedString64 = 0x2BDE, ///< Fixed String 64
|
||||
BtdrvGattCharacteristicUuidType_HighTemperature = 0x2BDF, ///< High Temperature
|
||||
BtdrvGattCharacteristicUuidType_HighVoltage = 0x2BE0, ///< High Voltage
|
||||
BtdrvGattCharacteristicUuidType_LightDistribution = 0x2BE1, ///< Light Distribution
|
||||
BtdrvGattCharacteristicUuidType_LightOutput = 0x2BE2, ///< Light Output
|
||||
BtdrvGattCharacteristicUuidType_LightSourceType = 0x2BE3, ///< Light Source Type
|
||||
BtdrvGattCharacteristicUuidType_Noise = 0x2BE4, ///< Noise
|
||||
BtdrvGattCharacteristicUuidType_RelativeRuntimeInACorrelatedColorTemperatureRange = 0x2BE5, ///< Relative Runtime in a Correlated Color Temperature Range
|
||||
BtdrvGattCharacteristicUuidType_TimeSecond32 = 0x2BE6, ///< Time Second 32
|
||||
BtdrvGattCharacteristicUuidType_VocConcentration = 0x2BE7, ///< VOC Concentration
|
||||
BtdrvGattCharacteristicUuidType_VoltageFrequency = 0x2BE8, ///< Voltage Frequency
|
||||
BtdrvGattCharacteristicUuidType_BatteryCriticalStatus = 0x2BE9, ///< Battery Critical Status
|
||||
BtdrvGattCharacteristicUuidType_BatteryHealthStatus = 0x2BEA, ///< Battery Health Status
|
||||
BtdrvGattCharacteristicUuidType_BatteryHealthInformation = 0x2BEB, ///< Battery Health Information
|
||||
BtdrvGattCharacteristicUuidType_BatteryInformation = 0x2BEC, ///< Battery Information
|
||||
BtdrvGattCharacteristicUuidType_BatteryLevelStatus = 0x2BED, ///< Battery Level Status
|
||||
BtdrvGattCharacteristicUuidType_BatteryTimeStatus = 0x2BEE, ///< Battery Time Status
|
||||
BtdrvGattCharacteristicUuidType_EstimatedServiceDate = 0x2BEF, ///< Estimated Service Date
|
||||
BtdrvGattCharacteristicUuidType_BatteryEnergyStatus = 0x2BF0, ///< Battery Energy Status
|
||||
BtdrvGattCharacteristicUuidType_ObservationScheduleChanged = 0x2BF1, ///< Observation Schedule Changed
|
||||
BtdrvGattCharacteristicUuidType_CurrentElapsedTime = 0x2BF2, ///< Current Elapsed Time
|
||||
BtdrvGattCharacteristicUuidType_HealthSensorFeatures = 0x2BF3, ///< Health Sensor Features
|
||||
BtdrvGattCharacteristicUuidType_GhsControlPoint = 0x2BF4, ///< GHS Control Point
|
||||
BtdrvGattCharacteristicUuidType_LeGattSecurityLevels = 0x2BF5, ///< LE GATT Security Levels
|
||||
BtdrvGattCharacteristicUuidType_EslAddress = 0x2BF6, ///< ESL Address
|
||||
BtdrvGattCharacteristicUuidType_ApSyncKeyMaterial = 0x2BF7, ///< AP Sync Key Material
|
||||
BtdrvGattCharacteristicUuidType_EslResponseKeyMaterial = 0x2BF8, ///< ESL Response Key Material
|
||||
BtdrvGattCharacteristicUuidType_EslCurrentAbsoluteTime = 0x2BF9, ///< ESL Current Absolute Time
|
||||
BtdrvGattCharacteristicUuidType_EslDisplayInformation = 0x2BFA, ///< ESL Display Information
|
||||
BtdrvGattCharacteristicUuidType_EslImageInformation = 0x2BFB, ///< ESL Image Information
|
||||
BtdrvGattCharacteristicUuidType_EslSensorInformation = 0x2BFC, ///< ESL Sensor Information
|
||||
BtdrvGattCharacteristicUuidType_EslLedInformation = 0x2BFD, ///< ESL LED Information
|
||||
BtdrvGattCharacteristicUuidType_EslControlPoint = 0x2BFE, ///< ESL Control Point
|
||||
BtdrvGattCharacteristicUuidType_UdiForMedicalDevices = 0x2BFF, ///< UDI for Medical Devices
|
||||
} BtdrvGattCharacteristicUuidType;
|
||||
|
||||
/// GattDescriptorUuidType
|
||||
typedef enum {
|
||||
BtdrvGattDescriptorUuidType_CharacteristicExtendedProperties = 0x2900, ///< Characteristic Extended Properties
|
||||
BtdrvGattDescriptorUuidType_CharacteristicUserDescription = 0x2901, ///< Characteristic User Description
|
||||
BtdrvGattDescriptorUuidType_ClientCharacteristicConfiguration = 0x2902, ///< Client Characteristic Configuration
|
||||
BtdrvGattDescriptorUuidType_ServerCharacteristicConfiguration = 0x2903, ///< Server Characteristic Configuration
|
||||
BtdrvGattDescriptorUuidType_CharacteristicPresentationFormat = 0x2904, ///< Characteristic Presentation Format
|
||||
BtdrvGattDescriptorUuidType_CharacteristicAggregateFormat = 0x2905, ///< Characteristic Aggregate Format
|
||||
BtdrvGattDescriptorUuidType_ValidRange = 0x2906, ///< Valid Range
|
||||
BtdrvGattDescriptorUuidType_ExternalReportReference = 0x2907, ///< External Report Reference
|
||||
BtdrvGattDescriptorUuidType_ReportReference = 0x2908, ///< Report Reference
|
||||
BtdrvGattDescriptorUuidType_NumberOfDigitals = 0x2909, ///< Number of Digitals
|
||||
BtdrvGattDescriptorUuidType_ValueTriggerSetting = 0x290A, ///< Value Trigger Setting
|
||||
BtdrvGattDescriptorUuidType_EnvironmentalSensingConfiguration = 0x290B, ///< Environmental Sensing Configuration
|
||||
BtdrvGattDescriptorUuidType_EnvironmentalSensingMeasurement = 0x290C, ///< Environmental Sensing Measurement
|
||||
BtdrvGattDescriptorUuidType_EnvironmentalSensingTriggerSetting = 0x290D, ///< Environmental Sensing Trigger Setting
|
||||
BtdrvGattDescriptorUuidType_TimeTriggerSetting = 0x290E, ///< Time Trigger Setting
|
||||
BtdrvGattDescriptorUuidType_CompleteBrEdrTransportBlockData = 0x290F, ///< Complete BR-EDR Transport Block Data
|
||||
BtdrvGattDescriptorUuidType_ObservationSchedule = 0x2910, ///< Observation Schedule
|
||||
BtdrvGattDescriptorUuidType_ValidRangeAndAccuracy = 0x2911, ///< Valid Range and Accuracy
|
||||
} BtdrvGattDescriptorUuidType;
|
@ -1,21 +1,79 @@
|
||||
/**
|
||||
* @file btdrv_types.h
|
||||
* @brief Bluetooth driver (btdrv) service types (see btdrv.h for the rest).
|
||||
* @author yellows8
|
||||
* @author yellows8, ndeadly
|
||||
* @copyright libnx Authors
|
||||
*/
|
||||
#pragma once
|
||||
#include "../types.h"
|
||||
#include "btdrv_ids.h"
|
||||
|
||||
/// BluetoothPropertyType
|
||||
/// BluetoothPropertyType [1.0.0-11.0.1]
|
||||
typedef enum {
|
||||
BtdrvBluetoothPropertyType_Name = 1, ///< Name. String, max length 0xF8 excluding NUL-terminator.
|
||||
BtdrvBluetoothPropertyType_Address = 2, ///< \ref BtdrvAddress
|
||||
BtdrvBluetoothPropertyType_Unknown3 = 3, ///< Only available with \ref btdrvSetAdapterProperty. Unknown, \ref BtdrvAddress.
|
||||
BtdrvBluetoothPropertyType_Unknown5 = 5, ///< Unknown. 3-bytes.
|
||||
BtdrvBluetoothPropertyType_Unknown6 = 6, ///< Unknown. 1-byte. The default is value 0x68.
|
||||
BtdrvBluetoothPropertyType_ClassOfDevice = 5, ///< 3-bytes, Class of Device.
|
||||
BtdrvBluetoothPropertyType_FeatureSet = 6, ///< 1-byte, FeatureSet. The default is value 0x68.
|
||||
} BtdrvBluetoothPropertyType;
|
||||
|
||||
/// AdapterPropertyType [12.0.0+]
|
||||
typedef enum {
|
||||
BtdrvAdapterPropertyType_Address = 0, ///< \ref BtdrvAddress
|
||||
BtdrvAdapterPropertyType_Name = 1, ///< Name. String, max length 0xF8 excluding NUL-terminator.
|
||||
BtdrvAdapterPropertyType_ClassOfDevice = 2, ///< 3-bytes, Class of Device.
|
||||
BtdrvAdapterPropertyType_Unknown3 = 3, ///< Only available with \ref btdrvSetAdapterProperty. Unknown, \ref BtdrvAddress.
|
||||
} BtdrvAdapterPropertyType;
|
||||
|
||||
/// EventType
|
||||
typedef enum {
|
||||
///< BtdrvEventType_* should be used on [12.0.0+]
|
||||
BtdrvEventType_InquiryDevice = 0, ///< Device found during Inquiry.
|
||||
BtdrvEventType_InquiryStatus = 1, ///< Inquiry status changed.
|
||||
BtdrvEventType_PairingPinCodeRequest = 2, ///< Pairing PIN code request.
|
||||
BtdrvEventType_SspRequest = 3, ///< SSP confirm request / SSP passkey notification.
|
||||
BtdrvEventType_Connection = 4, ///< Connection
|
||||
BtdrvEventType_Tsi = 5, ///< SetTsi (\ref btdrvSetTsi)
|
||||
BtdrvEventType_BurstMode = 6, ///< SetBurstMode (\ref btdrvEnableBurstMode)
|
||||
BtdrvEventType_SetZeroRetransmission = 7, ///< \ref btdrvSetZeroRetransmission
|
||||
BtdrvEventType_PendingConnections = 8, ///< \ref btdrvGetPendingConnections
|
||||
BtdrvEventType_MoveToSecondaryPiconet = 9, ///< \ref btdrvMoveToSecondaryPiconet
|
||||
BtdrvEventType_BluetoothCrash = 10, ///< BluetoothCrash
|
||||
|
||||
///< BtdrvEventTypeOld_* should be used on [1.0.0-11.0.1]
|
||||
BtdrvEventTypeOld_Unknown0 = 0, ///< Unused
|
||||
BtdrvEventTypeOld_InquiryDevice = 3, ///< Device found during Inquiry.
|
||||
BtdrvEventTypeOld_InquiryStatus = 4, ///< Inquiry status changed.
|
||||
BtdrvEventTypeOld_PairingPinCodeRequest = 5, ///< Pairing PIN code request.
|
||||
BtdrvEventTypeOld_SspRequest = 6, ///< SSP confirm request / SSP passkey notification.
|
||||
BtdrvEventTypeOld_Connection = 7, ///< Connection
|
||||
BtdrvEventTypeOld_BluetoothCrash = 13, ///< BluetoothCrash
|
||||
} BtdrvEventType;
|
||||
|
||||
/// BtdrvInquiryStatus
|
||||
typedef enum {
|
||||
BtdrvInquiryStatus_Stopped = 0, ///< Inquiry stopped.
|
||||
BtdrvInquiryStatus_Started = 1, ///< Inquiry started.
|
||||
} BtdrvInquiryStatus;
|
||||
|
||||
/// ConnectionEventType
|
||||
typedef enum {
|
||||
BtdrvConnectionEventType_Status = 0, ///< BtdrvEventInfo::connection::status
|
||||
BtdrvConnectionEventType_SspConfirmRequest = 1, ///< SSP confirm request.
|
||||
BtdrvConnectionEventType_Suspended = 2, ///< ACL Link is now Suspended.
|
||||
} BtdrvConnectionEventType;
|
||||
|
||||
/// ExtEventType [1.0.0-11.0.1]
|
||||
typedef enum {
|
||||
BtdrvExtEventType_SetTsi = 0, ///< SetTsi (\ref btdrvSetTsi)
|
||||
BtdrvExtEventType_ExitTsi = 1, ///< ExitTsi (\ref btdrvSetTsi)
|
||||
BtdrvExtEventType_SetBurstMode = 2, ///< SetBurstMode (\ref btdrvEnableBurstMode)
|
||||
BtdrvExtEventType_ExitBurstMode = 3, ///< ExitBurstMode (\ref btdrvEnableBurstMode)
|
||||
BtdrvExtEventType_SetZeroRetransmission = 4, ///< \ref btdrvSetZeroRetransmission
|
||||
BtdrvExtEventType_PendingConnections = 5, ///< \ref btdrvGetPendingConnections
|
||||
BtdrvExtEventType_MoveToSecondaryPiconet = 6, ///< \ref btdrvMoveToSecondaryPiconet
|
||||
} BtdrvExtEventType;
|
||||
|
||||
/// BluetoothHhReportType
|
||||
/// Bit0-1 directly control the HID bluetooth transaction report-type value.
|
||||
/// Bit2-3: these directly control the Parameter Reserved field for SetReport, for GetReport these control the Parameter Reserved and Size bits.
|
||||
@ -28,45 +86,211 @@ typedef enum {
|
||||
|
||||
/// HidEventType
|
||||
typedef enum {
|
||||
BtdrvHidEventType_Unknown0 = 0, ///< Unknown. Only used with \ref btdrvGetHidEventInfo.
|
||||
BtdrvHidEventType_Unknown4 = 4, ///< Unknown.
|
||||
BtdrvHidEventType_Unknown7 = 7, ///< Unknown. Only used with \ref btdrvGetHidEventInfo.
|
||||
BtdrvHidEventType_Unknown8 = 8, ///< Unknown.
|
||||
BtdrvHidEventType_Unknown9 = 9, ///< Unknown.
|
||||
///< BtdrvHidEventType_* should be used on [12.0.0+]
|
||||
BtdrvHidEventType_Connection = 0, ///< Connection. Only used with \ref btdrvGetHidEventInfo.
|
||||
BtdrvHidEventType_Data = 1, ///< DATA report on the Interrupt channel.
|
||||
BtdrvHidEventType_SetReport = 2, ///< Response to SET_REPORT.
|
||||
BtdrvHidEventType_GetReport = 3, ///< Response to GET_REPORT.
|
||||
|
||||
///< BtdrvHidEventTypeOld_* should be used on [1.0.0-11.0.1]
|
||||
BtdrvHidEventTypeOld_Connection = 0, ///< Connection. Only used with \ref btdrvGetHidEventInfo.
|
||||
BtdrvHidEventTypeOld_Data = 4, ///< DATA report on the Interrupt channel.
|
||||
BtdrvHidEventTypeOld_Ext = 7, ///< Response for extensions. Only used with \ref btdrvGetHidEventInfo.
|
||||
BtdrvHidEventTypeOld_SetReport = 8, ///< Response to SET_REPORT.
|
||||
BtdrvHidEventTypeOld_GetReport = 9, ///< Response to GET_REPORT.
|
||||
} BtdrvHidEventType;
|
||||
|
||||
/// This determines the u16 data to write into the CircularBuffer (name "BLE CORE").
|
||||
/// HidConnectionStatus [12.0.0+]
|
||||
typedef enum {
|
||||
BtdrvFatalReason_Unknown1 = 1, ///< u16 data = 0x850.
|
||||
BtdrvFatalReason_Unknown2 = 2, ///< u16 data = 0x851.
|
||||
BtdrvFatalReason_Unknown3 = 3, ///< Reason values which aren't 1/2: u16 data = 0x852.
|
||||
///< BtdrvHidConnectionStatus_* should be used on [12.0.0+]
|
||||
BtdrvHidConnectionStatus_Closed = 0,
|
||||
BtdrvHidConnectionStatus_Opened = 1,
|
||||
BtdrvHidConnectionStatus_Failed = 2,
|
||||
|
||||
///< BtdrvHidConnectionStatusOld_* should be used on [1.0.0-11.0.1]
|
||||
BtdrvHidConnectionStatusOld_Opened = 0,
|
||||
BtdrvHidConnectionStatusOld_Closed = 2,
|
||||
BtdrvHidConnectionStatusOld_Failed = 8,
|
||||
} BtdrvHidConnectionStatus;
|
||||
|
||||
/// This determines the u16 data to write into a CircularBuffer.
|
||||
typedef enum {
|
||||
BtdrvFatalReason_Invalid = 0, ///< Only for \ref BtdrvEventInfo: invalid.
|
||||
BtdrvFatalReason_Unknown1 = 1, ///< Can only be triggered by \ref btdrvEmulateBluetoothCrash, not triggered by the sysmodule otherwise.
|
||||
BtdrvFatalReason_CommandTimeout = 2, ///< HCI command timeout.
|
||||
BtdrvFatalReason_HardwareError = 3, ///< HCI event HCI_Hardware_Error occurred.
|
||||
BtdrvFatalReason_Enable = 7, ///< Only for \ref BtdrvEventInfo: triggered after enabling bluetooth, depending on the value of a global state field.
|
||||
BtdrvFatalReason_Audio = 9, ///< [12.0.0+] Only for \ref BtdrvEventInfo: triggered by Audio cmds in some cases.
|
||||
} BtdrvFatalReason;
|
||||
|
||||
/// BleEventType
|
||||
typedef enum {
|
||||
BtdrvBleEventType_ClientRegistration = 0, ///< GATT client registration.
|
||||
BtdrvBleEventType_ServerRegistration = 1, ///< GATT server registration.
|
||||
BtdrvBleEventType_ConnectionUpdate = 2, ///< Connection update.
|
||||
BtdrvBleEventType_PreferredConnectionParameters = 3, ///< Preferred connection parameters.
|
||||
BtdrvBleEventType_ClientConnection = 4, ///< GATT client connection.
|
||||
BtdrvBleEventType_ServerConnection = 5, ///< GATT server connection.
|
||||
BtdrvBleEventType_ScanResult = 6, ///< Scan result.
|
||||
BtdrvBleEventType_ScanFilter = 7, ///< Scan filter status.
|
||||
BtdrvBleEventType_ClientNotify = 8, ///< GATT client notify.
|
||||
BtdrvBleEventType_ClientCacheSave = 9, ///< GATT client cache save.
|
||||
BtdrvBleEventType_ClientCacheLoad = 10, ///< GATT client cache load.
|
||||
BtdrvBleEventType_ClientConfigureMtu = 11, ///< GATT client configure MTU.
|
||||
BtdrvBleEventType_ServerAddAttribute = 12, ///< GATT server add attribute.
|
||||
BtdrvBleEventType_ServerAttributeOperation = 13, ///< GATT server attribute operation.
|
||||
} BtdrvBleEventType;
|
||||
|
||||
/// GattAttributeType
|
||||
typedef enum {
|
||||
BtdrvGattAttributeType_IncludedService = 0, ///< Included service
|
||||
BtdrvGattAttributeType_Characteristic = 1, ///< Characteristic
|
||||
BtdrvGattAttributeType_Descriptor = 2, ///< Descriptor
|
||||
BtdrvGattAttributeType_Service = 3, ///< Service
|
||||
} BtdrvGattAttributeType;
|
||||
|
||||
/// GattAttributePermission
|
||||
typedef enum {
|
||||
BtdrvGattAttributePermission_Read = BIT(0),
|
||||
BtdrvGattAttributePermission_ReadEncrypted = BIT(1),
|
||||
BtdrvGattAttributePermission_ReadEncryptedMitm = BIT(2),
|
||||
BtdrvGattAttributePermission_Write = BIT(4),
|
||||
BtdrvGattAttributePermission_WriteEncrypted = BIT(5),
|
||||
BtdrvGattAttributePermission_WriteEncryptedMitm = BIT(6),
|
||||
BtdrvGattAttributePermission_WriteSigned = BIT(7),
|
||||
BtdrvGattAttributePermission_WriteSignedMitm = BIT(8),
|
||||
|
||||
BtdrvGattAttributePermission_ReadAllowed = BtdrvGattAttributePermission_Read | BtdrvGattAttributePermission_ReadEncrypted | BtdrvGattAttributePermission_ReadEncryptedMitm,
|
||||
BtdrvGattAttributePermission_ReadAuthRequired = BtdrvGattAttributePermission_ReadEncrypted,
|
||||
BtdrvGattAttributePermission_ReadMitmRequired = BtdrvGattAttributePermission_ReadEncryptedMitm,
|
||||
BtdrvGattAttributePermission_ReadEncryptedRequired = BtdrvGattAttributePermission_ReadEncrypted | BtdrvGattAttributePermission_ReadEncryptedMitm,
|
||||
|
||||
BtdrvGattAttributePermission_WriteAllowed = BtdrvGattAttributePermission_Write | BtdrvGattAttributePermission_WriteEncrypted | BtdrvGattAttributePermission_WriteEncryptedMitm | BtdrvGattAttributePermission_WriteSigned | BtdrvGattAttributePermission_WriteSignedMitm,
|
||||
BtdrvGattAttributePermission_WriteAuthRequired = BtdrvGattAttributePermission_WriteEncrypted | BtdrvGattAttributePermission_WriteSigned,
|
||||
BtdrvGattAttributePermission_WriteMitmRequired = BtdrvGattAttributePermission_WriteEncryptedMitm | BtdrvGattAttributePermission_WriteSignedMitm,
|
||||
BtdrvGattAttributePermission_WriteEncryptedRequired = BtdrvGattAttributePermission_WriteEncrypted | BtdrvGattAttributePermission_WriteEncryptedMitm,
|
||||
BtdrvGattAttributePermission_WriteSignedRequired = BtdrvGattAttributePermission_WriteSigned | BtdrvGattAttributePermission_WriteSignedMitm,
|
||||
} BtdrvGattAttributePermission;
|
||||
|
||||
/// GattCharacteristicProperty
|
||||
typedef enum {
|
||||
BtdrvGattCharacteristicProperty_Broadcast = BIT(0),
|
||||
BtdrvGattCharacteristicProperty_Read = BIT(1),
|
||||
BtdrvGattCharacteristicProperty_WriteNoResponse = BIT(2),
|
||||
BtdrvGattCharacteristicProperty_Write = BIT(3),
|
||||
BtdrvGattCharacteristicProperty_Notify = BIT(4),
|
||||
BtdrvGattCharacteristicProperty_Indicate = BIT(5),
|
||||
BtdrvGattCharacteristicProperty_Authentication = BIT(6),
|
||||
BtdrvGattCharacteristicProperty_ExtendedProperties = BIT(7),
|
||||
} BtdrvGattCharacteristicProperty;
|
||||
|
||||
/// GattAuthReqType
|
||||
typedef enum {
|
||||
BtdrvGattAuthReqType_None = 0,
|
||||
BtdrvGattAuthReqType_NoMitm = 1,
|
||||
BtdrvGattAuthReqType_Mitm = 2,
|
||||
BtdrvGattAuthReqType_SignedNoMitm = 3,
|
||||
BtdrvGattAuthReqType_SignedMitm = 4,
|
||||
} BtdrvGattAuthReqType;
|
||||
|
||||
/// BtdrvBleAdBit
|
||||
typedef enum {
|
||||
BtdrvBleAdBit_DeviceName = BIT(0),
|
||||
BtdrvBleAdBit_Flags = BIT(1),
|
||||
BtdrvBleAdBit_Manufacturer = BIT(2),
|
||||
BtdrvBleAdBit_TxPower = BIT(3),
|
||||
BtdrvBleAdBit_Service32 = BIT(4),
|
||||
BtdrvBleAdBit_IntRange = BIT(5),
|
||||
BtdrvBleAdBit_Service = BIT(6),
|
||||
BtdrvBleAdBit_ServiceSol = BIT(7),
|
||||
BtdrvBleAdBit_ServiceData = BIT(8),
|
||||
BtdrvBleAdBit_SignData = BIT(9),
|
||||
BtdrvBleAdBit_Service128Sol = BIT(10),
|
||||
BtdrvBleAdBit_Appearance = BIT(11),
|
||||
BtdrvBleAdBit_PublicAddress = BIT(12),
|
||||
BtdrvBleAdBit_RandomAddress = BIT(13),
|
||||
BtdrvBleAdBit_Service32Sol = BIT(14),
|
||||
BtdrvBleAdBit_Proprietary = BIT(15),
|
||||
BtdrvBleAdBit_Service128 = BIT(16),
|
||||
} BtdrvBleAdBit;
|
||||
|
||||
/// BtdrvBleAdFlag
|
||||
typedef enum {
|
||||
BtdrvBleAdFlag_None = 0,
|
||||
BtdrvBleAdFlag_LimitedDiscovery = BIT(0),
|
||||
BtdrvBleAdFlag_GeneralDiscovery = BIT(1),
|
||||
BtdrvBleAdFlag_BrEdrNotSupported = BIT(2),
|
||||
BtdrvBleAdFlag_DualModeControllerSupport = BIT(3),
|
||||
BtdrvBleAdFlag_DualModeHostSupport = BIT(4),
|
||||
} BtdrvBleAdFlag;
|
||||
|
||||
/// AudioEventType
|
||||
typedef enum {
|
||||
BtdrvAudioEventType_None = 0, ///< None
|
||||
BtdrvAudioEventType_Connection = 1, ///< Connection
|
||||
} BtdrvAudioEventType;
|
||||
|
||||
/// AudioOutState
|
||||
typedef enum {
|
||||
BtdrvAudioOutState_Stopped = 0, ///< Stopped
|
||||
BtdrvAudioOutState_Started = 1, ///< Started
|
||||
} BtdrvAudioOutState;
|
||||
|
||||
/// AudioCodec
|
||||
typedef enum {
|
||||
BtdrvAudioCodec_Pcm = 0, ///< Raw PCM
|
||||
} BtdrvAudioCodec;
|
||||
|
||||
/// Address
|
||||
typedef struct {
|
||||
u8 address[0x6]; ///< Address
|
||||
} BtdrvAddress;
|
||||
|
||||
/// AdapterProperty
|
||||
/// ClassOfDevice
|
||||
typedef struct {
|
||||
u8 class_of_device[0x3]; ///< ClassOfDevice
|
||||
} BtdrvClassOfDevice;
|
||||
|
||||
/// AdapterProperty [1.0.0-11.0.1]
|
||||
typedef struct {
|
||||
BtdrvAddress addr; ///< Same as the data for ::BtdrvBluetoothPropertyType_Address.
|
||||
u8 type5[0x3]; ///< Same as the data for ::BtdrvBluetoothPropertyType_Unknown5.
|
||||
BtdrvClassOfDevice class_of_device; ///< Same as the data for ::BtdrvBluetoothPropertyType_ClassOfDevice.
|
||||
char name[0xF9]; ///< Same as the data for ::BtdrvBluetoothPropertyType_Name (last byte is not initialized).
|
||||
u8 type6; ///< Set to hard-coded value 0x68 (same as the data for ::BtdrvBluetoothPropertyType_Unknown6).
|
||||
u8 feature_set; ///< Set to hard-coded value 0x68 (same as the data for ::BtdrvBluetoothPropertyType_FeatureSet).
|
||||
} BtdrvAdapterPropertyOld;
|
||||
|
||||
/// AdapterProperty [12.0.0+]
|
||||
typedef struct {
|
||||
u8 type; ///< \ref BtdrvAdapterPropertyType
|
||||
u8 size; ///< Data size.
|
||||
u8 data[0x100]; ///< Data (above size), as specified by the type.
|
||||
} BtdrvAdapterProperty;
|
||||
|
||||
/// BluetoothPinCode
|
||||
/// AdapterPropertySet [12.0.0+]
|
||||
typedef struct {
|
||||
BtdrvAddress addr; ///< Same as the data for ::BtdrvBluetoothPropertyType_Address.
|
||||
BtdrvClassOfDevice class_of_device; ///< Same as the data for ::BtdrvBluetoothPropertyType_ClassOfDevice.
|
||||
char name[0xF9]; ///< Same as the data for ::BtdrvBluetoothPropertyType_Name.
|
||||
} BtdrvAdapterPropertySet;
|
||||
|
||||
/// BluetoothPinCode [1.0.0-11.0.1]
|
||||
typedef struct {
|
||||
char code[0x10]; ///< PinCode
|
||||
} BtdrvBluetoothPinCode;
|
||||
|
||||
/// HidData, for pre-9.0.0.
|
||||
/// BtdrvPinCode [12.0.0+]
|
||||
typedef struct {
|
||||
char code[0x10]; ///< PinCode
|
||||
u8 length; ///< Length
|
||||
} BtdrvPinCode;
|
||||
|
||||
/// HidData [1.0.0-8.1.1]
|
||||
typedef struct {
|
||||
u16 size; ///< Size of data.
|
||||
u8 data[0x280]; ///< Data
|
||||
} BtdrvHidData;
|
||||
|
||||
/// HidReport, for [9.0.0+].
|
||||
/// HidReport [9.0.0+].
|
||||
typedef struct {
|
||||
u16 size; ///< Size of data.
|
||||
u8 data[0x2BC]; ///< Data
|
||||
@ -87,68 +311,6 @@ typedef struct {
|
||||
u8 unk_x0[0x88]; ///< Unknown
|
||||
} BtdrvChannelMapList;
|
||||
|
||||
/// LeConnectionParams
|
||||
typedef struct {
|
||||
u8 unk_x0[0x14]; ///< Unknown
|
||||
} BtdrvLeConnectionParams;
|
||||
|
||||
/// BleConnectionParameter
|
||||
typedef struct {
|
||||
u8 unk_x0[0xC]; ///< Unknown
|
||||
} BtdrvBleConnectionParameter;
|
||||
|
||||
/// BtdrvBleAdvertisePacketDataEntry
|
||||
typedef struct {
|
||||
u16 unk_x0; ///< Unknown
|
||||
u8 unused[0x12]; ///< Unused
|
||||
} BtdrvBleAdvertisePacketDataEntry;
|
||||
|
||||
/// BleAdvertisePacketData
|
||||
typedef struct {
|
||||
u32 unk_x0; ///< Unknown
|
||||
u8 unk_x4; ///< Unknown
|
||||
u8 size0; ///< Size of the data at unk_x6.
|
||||
u8 unk_x6[0x1F]; ///< Unknown, see size0.
|
||||
u8 pad[3]; ///< Padding
|
||||
u8 count; ///< Total array entries, see entries.
|
||||
u8 pad2[7]; ///< Padding
|
||||
BtdrvBleAdvertisePacketDataEntry entries[0x5]; ///< \ref BtdrvBleAdvertisePacketDataEntry
|
||||
u8 pad3[0x10]; ///< Padding
|
||||
u8 size2; ///< Size of the data at unk_xA8.
|
||||
u8 unk_xA5; ///< Unknown
|
||||
u8 pad4[2]; ///< Padding
|
||||
u8 unk_xA8[0x1F]; ///< Unknown, see size2.
|
||||
u8 unk_xC7; ///< Unknown
|
||||
u8 unk_xC8; ///< Unknown
|
||||
u8 pad5[3]; ///< Padding
|
||||
} BtdrvBleAdvertisePacketData;
|
||||
|
||||
/// BleAdvertiseFilter
|
||||
typedef struct {
|
||||
u8 unk_x0[0x3E]; ///< Unknown
|
||||
} BtdrvBleAdvertiseFilter;
|
||||
|
||||
/// BleAdvertisePacketParameter
|
||||
typedef struct {
|
||||
u8 data[0x8]; ///< Unknown
|
||||
} BtdrvBleAdvertisePacketParameter;
|
||||
|
||||
/// BleScanResult
|
||||
typedef struct {
|
||||
u8 unk_x0; ///< Unknown
|
||||
BtdrvAddress addr; ///< \ref BtdrvAddress
|
||||
u8 unk_x7[0x139]; ///< Unknown
|
||||
s32 unk_x140; ///< Unknown
|
||||
s32 unk_x144; ///< Unknown
|
||||
} BtdrvBleScanResult;
|
||||
|
||||
/// BleConnectionInfo
|
||||
typedef struct {
|
||||
u32 connection_handle; ///< ConnectionHandle, 0xFFFFFFFF ([5.0.0-5.0.2] 0xFFFF) is invalid.
|
||||
BtdrvAddress addr; ///< \ref BtdrvAddress
|
||||
u8 pad[2]; ///< Padding
|
||||
} BtdrvBleConnectionInfo;
|
||||
|
||||
/// GattAttributeUuid
|
||||
typedef struct {
|
||||
u32 size; ///< UUID size, must be 0x2, 0x4, or 0x10.
|
||||
@ -162,6 +324,96 @@ typedef struct {
|
||||
BtdrvGattAttributeUuid uuid; ///< \ref BtdrvGattAttributeUuid
|
||||
} BtdrvGattId;
|
||||
|
||||
/// GattAttribute
|
||||
typedef struct {
|
||||
BtdrvGattId id; ///< \ref BtdrvGattId
|
||||
u16 type; ///< \ref BtdrvGattAttributeType
|
||||
u16 handle;
|
||||
u16 group_end_handle;
|
||||
u8 property; ///< Only used when type is characteristic. \ref BtdrvGattCharacteristicProperty
|
||||
bool is_primary; ///< Only used when type is service
|
||||
} BtdrvGattAttribute;
|
||||
|
||||
/// LeConnectionParams [5.0.0-8.1.1]
|
||||
typedef struct {
|
||||
BtdrvAddress addr; ///< \ref BtdrvAddress
|
||||
u16 min_conn_interval; ///< Minimum connection interval
|
||||
u16 max_conn_interval; ///< Maximum connection interval
|
||||
u16 scan_interval; ///< Scan interval
|
||||
u16 scan_window; ///< Scan window
|
||||
u16 slave_latency; ///< Slave latency
|
||||
u16 supervision_tout; ///< Connection supervision timeout multiplier
|
||||
u8 preference; ///< Unused
|
||||
u8 pad; ///< Padding
|
||||
} BtdrvLeConnectionParams;
|
||||
|
||||
/// BleConnectionParameter [9.0.0+]
|
||||
typedef struct {
|
||||
u16 min_conn_interval; ///< Minimum connection interval
|
||||
u16 max_conn_interval; ///< Maximum connection interval
|
||||
u16 scan_interval; ///< Scan interval
|
||||
u16 scan_window; ///< Scan window
|
||||
u16 slave_latency; ///< Slave latency
|
||||
u16 supervision_tout; ///< Connection supervision timeout multiplier
|
||||
} BtdrvBleConnectionParameter;
|
||||
|
||||
/// BtdrvBleAdvertisePacketData
|
||||
typedef struct {
|
||||
u32 adv_data_mask; ///< Bitmask of following AD data to be included in advertising packets \ref BtdrvBleAdBit
|
||||
u8 flag; ///< AD flag value to be advertised \ref BtdrvBleAdFlag. Included with BtdrvBleAdBit_Flags
|
||||
u8 manu_data_len; ///< Size of manu_data below
|
||||
u8 manu_data[0x1F]; ///< Manufacturer-specific data to be advertised. Included with BtdrvBleAdBit_Manufacturer
|
||||
u8 pad[1]; ///< Padding
|
||||
u16 appearance_data; ///< Device appearance data to be advertised \ref BtdrvAppearanceType. Included with BtdrvBleAdBit_Appearance
|
||||
u8 num_service; ///< Number of services in uuid_val array below
|
||||
u8 pad2[3]; ///< Padding
|
||||
BtdrvGattAttributeUuid uuid_val[0x6]; ///< Array of 16-bit UUIDs to be advertised \ref BtdrvGattAttributeUuid. Included with BtdrvBleAdBit_Service
|
||||
u8 service_data_len; ///< Size of service_data below
|
||||
u8 pad3[1]; ///< Padding
|
||||
u16 service_data_uuid; ///< 16-bit UUID of service_data below
|
||||
u8 service_data[0x1F]; ///< Service data to be advertised. Included with BtdrvBleAdBit_ServiceData
|
||||
bool is_scan_rsp; ///< Whether this is an inquiry scan response or advertising data
|
||||
u8 tx_power; ///< Inquiry transmit power to be advertised. Included with BtdrvBleAdBit_TxPower
|
||||
u8 pad4[3]; ///< Padding
|
||||
} BtdrvBleAdvertisePacketData;
|
||||
|
||||
/// BleAdvertisement
|
||||
typedef struct {
|
||||
u8 size; ///< Size of data below.
|
||||
u8 type; ///< \ref BtdrvAdType
|
||||
u8 data[0x1D]; ///< Advertisement data
|
||||
} BtdrvBleAdvertisement;
|
||||
|
||||
/// BleAdvertiseFilter
|
||||
typedef struct {
|
||||
u8 index; ///< Filter index
|
||||
BtdrvBleAdvertisement adv; ///< \ref BtdrvBleAdvertisement
|
||||
u8 mask[0x1D]; ///< Mask for advertisement data above
|
||||
u8 mask_size; ///< Size of mask above.
|
||||
} BtdrvBleAdvertiseFilter;
|
||||
|
||||
/// BleAdvertisePacketParameter
|
||||
typedef struct {
|
||||
u16 company_id;
|
||||
u8 pattern_data[6];
|
||||
} BtdrvBleAdvertisePacketParameter;
|
||||
|
||||
/// BleScanResult
|
||||
typedef struct {
|
||||
u8 unk_x0; ///< Unknown
|
||||
BtdrvAddress addr; ///< \ref BtdrvAddress
|
||||
u8 unk_x7[0x139]; ///< Unknown
|
||||
s32 count; ///< Unknown
|
||||
s32 unk_x144; ///< Unknown
|
||||
} BtdrvBleScanResult;
|
||||
|
||||
/// BleConnectionInfo
|
||||
typedef struct {
|
||||
u32 connection_handle; ///< ConnectionHandle, 0xFFFFFFFF ([5.0.0-5.0.2] 0xFFFF) is invalid.
|
||||
BtdrvAddress addr; ///< \ref BtdrvAddress
|
||||
u8 pad[2]; ///< Padding
|
||||
} BtdrvBleConnectionInfo;
|
||||
|
||||
/// LeEventInfo
|
||||
typedef struct {
|
||||
u32 unk_x0; ///< Unknown
|
||||
@ -189,3 +441,15 @@ typedef struct {
|
||||
u8 data[0x200]; ///< BtdrvLeEventInfo::data
|
||||
} BtdrvBleClientGattOperationInfo;
|
||||
|
||||
/// PcmParameter
|
||||
typedef struct {
|
||||
u32 unk_x0; ///< Must be 0-3. Controls number of channels: 0 = mono, non-zero = stereo.
|
||||
s32 sample_rate; ///< Sample rate. Must be one of the following: 16000, 32000, 44100, 48000.
|
||||
u32 bits_per_sample; ///< Bits per sample. Must be 8 or 16.
|
||||
} BtdrvPcmParameter;
|
||||
|
||||
/// AudioControlButtonState
|
||||
typedef struct {
|
||||
u8 unk_x0[0x10]; ///< Unknown
|
||||
} BtdrvAudioControlButtonState;
|
||||
|
||||
|
@ -8,91 +8,9 @@
|
||||
#include "../types.h"
|
||||
#include "../kernel/event.h"
|
||||
#include "../services/btdrv_types.h"
|
||||
#include "../services/btm_types.h"
|
||||
#include "../sf/service.h"
|
||||
|
||||
/// HostDeviceProperty
|
||||
typedef struct {
|
||||
BtdrvAddress addr; ///< Same as BtdrvAdapterProperty::addr.
|
||||
u8 type5[0x3]; ///< Same as BtdrvAdapterProperty::type5.
|
||||
char name[0x20]; ///< Same as BtdrvAdapterProperty::name (except the last byte which is always zero).
|
||||
u8 type6; ///< Same as BtdrvAdapterProperty::type6.
|
||||
} BtmHostDeviceProperty;
|
||||
|
||||
/// DeviceCondition
|
||||
typedef struct {
|
||||
u8 unk_x0[0x368]; ///< Unknown
|
||||
} BtmDeviceCondition;
|
||||
|
||||
/// DeviceSlotModeList
|
||||
typedef struct {
|
||||
u8 unk_x0[0x64]; ///< Unknown
|
||||
} BtmDeviceSlotModeList;
|
||||
|
||||
/// DeviceInfo
|
||||
typedef struct {
|
||||
u8 unk_x0[0x60]; ///< Unknown
|
||||
} BtmDeviceInfo;
|
||||
|
||||
/// DeviceInfoList
|
||||
typedef struct {
|
||||
u8 total_entries; ///< Total entries.
|
||||
u8 pad[3]; ///< Padding
|
||||
BtmDeviceInfo devices[10]; ///< Array of \ref BtmDeviceInfo with the above entry total.
|
||||
} BtmDeviceInfoList;
|
||||
|
||||
/// DevicePropertyList
|
||||
typedef struct {
|
||||
u8 unk_x0[0x268]; ///< Unknown
|
||||
} BtmDevicePropertyList;
|
||||
|
||||
/// ZeroRetransmissionList
|
||||
typedef struct {
|
||||
u8 unk_x0[0x11]; ///< Unknown
|
||||
} BtmZeroRetransmissionList;
|
||||
|
||||
/// GattClientConditionList
|
||||
typedef struct {
|
||||
u8 unk_x0[0x74]; ///< Unknown
|
||||
} BtmGattClientConditionList;
|
||||
|
||||
/// GattService
|
||||
typedef struct {
|
||||
u8 unk_x0[0x4]; ///< Unknown
|
||||
BtdrvGattAttributeUuid uuid; ///< \ref BtdrvGattAttributeUuid
|
||||
u16 handle; ///< Handle
|
||||
u8 unk_x1A[0x2]; ///< Unknown
|
||||
u16 instance_id; ///< InstanceId
|
||||
u16 end_group_handle; ///< EndGroupHandle
|
||||
u8 primary_service; ///< PrimaryService
|
||||
u8 pad[3]; ///< Padding
|
||||
} BtmGattService;
|
||||
|
||||
/// GattCharacteristic
|
||||
typedef struct {
|
||||
u8 unk_x0[0x4]; ///< Unknown
|
||||
BtdrvGattAttributeUuid uuid; ///< \ref BtdrvGattAttributeUuid
|
||||
u16 handle; ///< Handle
|
||||
u8 unk_x1A[0x2]; ///< Unknown
|
||||
u16 instance_id; ///< InstanceId
|
||||
u8 properties; ///< Properties
|
||||
u8 unk_x1F[0x5]; ///< Unknown
|
||||
} BtmGattCharacteristic;
|
||||
|
||||
/// GattDescriptor
|
||||
typedef struct {
|
||||
u8 unk_x0[0x4]; ///< Unknown
|
||||
BtdrvGattAttributeUuid uuid; ///< \ref BtdrvGattAttributeUuid
|
||||
u16 handle; ///< Handle
|
||||
u8 unk_x1A[0x6]; ///< Unknown
|
||||
} BtmGattDescriptor;
|
||||
|
||||
/// BleDataPath
|
||||
typedef struct {
|
||||
u8 unk_x0; ///< Unknown
|
||||
u8 pad[3]; ///< Padding
|
||||
BtdrvGattAttributeUuid uuid; ///< \ref BtdrvGattAttributeUuid
|
||||
} BtmBleDataPath;
|
||||
|
||||
/// Initialize btm.
|
||||
Result btmInitialize(void);
|
||||
|
||||
@ -104,9 +22,9 @@ Service* btmGetServiceSession(void);
|
||||
|
||||
/**
|
||||
* @brief GetState
|
||||
* @param[out] out Output BtmState.
|
||||
* @param[out] out \ref BtmState
|
||||
*/
|
||||
Result btmGetState(u32 *out);
|
||||
Result btmGetState(BtmState *out);
|
||||
|
||||
/**
|
||||
* @brief GetHostDeviceProperty
|
||||
@ -122,10 +40,19 @@ Result btmGetHostDeviceProperty(BtmHostDeviceProperty *out);
|
||||
Result btmAcquireDeviceConditionEvent(Event* out_event);
|
||||
|
||||
/**
|
||||
* @brief GetDeviceCondition
|
||||
* @brief GetDeviceCondition [1.0.0-12.1.0]
|
||||
* @param[out] out \ref BtmDeviceCondition
|
||||
*/
|
||||
Result btmGetDeviceCondition(BtmDeviceCondition *out);
|
||||
Result btmLegacyGetDeviceCondition(BtmDeviceCondition *out);
|
||||
|
||||
/**
|
||||
* @brief GetDeviceCondition [13.0.0+]
|
||||
* @param[in] profile \ref BtmProfile, when not ::BtmProfile_None entries are only returned which match this profile.
|
||||
* @param[out] out \ref BtmConnectedDeviceV13
|
||||
* @param[in] count Size of the out array in entries.
|
||||
* @param[out] total_out Total output entries.
|
||||
*/
|
||||
Result btmGetDeviceCondition(BtmProfile profile, BtmConnectedDeviceV13 *out, size_t count, s32 *total_out);
|
||||
|
||||
/**
|
||||
* @brief SetBurstMode
|
||||
@ -143,15 +70,15 @@ Result btmSetSlotMode(const BtmDeviceSlotModeList *list);
|
||||
/**
|
||||
* @brief SetBluetoothMode
|
||||
* @note Only available on pre-9.0.0.
|
||||
* @param[in] mode BluetoothMode
|
||||
* @param[in] mode \ref BtmBluetoothMode
|
||||
*/
|
||||
Result btmSetBluetoothMode(u32 mode);
|
||||
Result btmSetBluetoothMode(BtmBluetoothMode mode);
|
||||
|
||||
/**
|
||||
* @brief SetWlanMode
|
||||
* @param[in] mode WlanMode
|
||||
* @param[in] mode \ref BtmWlanMode
|
||||
*/
|
||||
Result btmSetWlanMode(u32 mode);
|
||||
Result btmSetWlanMode(BtmWlanMode mode);
|
||||
|
||||
/**
|
||||
* @brief AcquireDeviceInfoEvent
|
||||
@ -161,10 +88,19 @@ Result btmSetWlanMode(u32 mode);
|
||||
Result btmAcquireDeviceInfoEvent(Event* out_event);
|
||||
|
||||
/**
|
||||
* @brief GetDeviceInfo
|
||||
* @brief GetDeviceInfo [1.0.0-12.1.0]
|
||||
* @param[out] out \ref BtmDeviceInfoList
|
||||
*/
|
||||
Result btmGetDeviceInfo(BtmDeviceInfoList *out);
|
||||
Result btmLegacyGetDeviceInfo(BtmDeviceInfoList *out);
|
||||
|
||||
/**
|
||||
* @brief GetDeviceInfo [13.0.0+]
|
||||
* @param[in] profile \ref BtmProfile, when not ::BtmProfile_None entries are only returned which match this profile.
|
||||
* @param[out] out \ref BtmDeviceInfoV13
|
||||
* @param[in] count Size of the out array in entries.
|
||||
* @param[out] total_out Total output entries.
|
||||
*/
|
||||
Result btmGetDeviceInfo(BtmProfile profile, BtmDeviceInfoV13 *out, size_t count, s32 *total_out);
|
||||
|
||||
/**
|
||||
* @brief AddDeviceInfo
|
||||
@ -264,18 +200,18 @@ Result btmAcquireBleScanEvent(Event* out_event);
|
||||
/**
|
||||
* @brief GetBleScanParameterGeneral
|
||||
* @note Only available on [5.1.0+].
|
||||
* @param[in] unk Must be value 0x1 or 0xFFFF.
|
||||
* @param[in] parameter_id Must be value 0x1 or 0xFFFF.
|
||||
* @param[out] out \ref BtdrvBleAdvertisePacketParameter
|
||||
*/
|
||||
Result btmGetBleScanParameterGeneral(u16 unk, BtdrvBleAdvertisePacketParameter *out);
|
||||
Result btmGetBleScanParameterGeneral(u16 parameter_id, BtdrvBleAdvertisePacketParameter *out);
|
||||
|
||||
/**
|
||||
* @brief GetBleScanParameterSmartDevice
|
||||
* @note Only available on [5.1.0+].
|
||||
* @param[in] unk Must be value 0x2.
|
||||
* @param[in] parameter_id Must be value 0x2.
|
||||
* @param[out] out \ref BtdrvGattAttributeUuid. The first 4-bytes is always 0.
|
||||
*/
|
||||
Result btmGetBleScanParameterSmartDevice(u16 unk, BtdrvGattAttributeUuid *out);
|
||||
Result btmGetBleScanParameterSmartDevice(u16 parameter_id, BtdrvGattAttributeUuid *out);
|
||||
|
||||
/**
|
||||
* @brief StartBleScanForGeneral
|
||||
@ -454,44 +390,44 @@ Result btmGetGattService(u32 connection_handle, const BtdrvGattAttributeUuid *uu
|
||||
* @brief Same as \ref btmGetGattServices except this only returns \ref BtmGattService entries where various checks pass with u16 fields.
|
||||
* @note Only available on [5.0.0+].
|
||||
* @param[in] connection_handle Same as \ref btmBleDisconnect.
|
||||
* @param[in] handle Handle
|
||||
* @param[in] service_handle ServiceHandle
|
||||
* @param[out] services \ref BtmGattService
|
||||
* @param[in] count Size of the services array in entries. The max is 100.
|
||||
* @param[out] out Output value.
|
||||
*/
|
||||
Result btmGetGattIncludedServices(u32 connection_handle, u16 handle, BtmGattService *services, u8 count, u8 *out);
|
||||
Result btmGetGattIncludedServices(u32 connection_handle, u16 service_handle, BtmGattService *services, u8 count, u8 *out);
|
||||
|
||||
/**
|
||||
* @brief This is similar to \ref btmGetGattIncludedServices except this only returns 1 \ref BtmGattService.
|
||||
* @note Only available on [5.0.0+].
|
||||
* @param[in] connection_handle Same as \ref btmBleDisconnect.
|
||||
* @param[in] handle Handle
|
||||
* @param[in] attribute_handle AttributeHandle
|
||||
* @param[out] service \ref BtmGattService
|
||||
* @param[out] flag Whether a \ref BtmGattService was returned.
|
||||
*/
|
||||
Result btmGetBelongingService(u32 connection_handle, u16 handle, BtmGattService *service, bool *flag);
|
||||
Result btmGetBelongingService(u32 connection_handle, u16 attribute_handle, BtmGattService *service, bool *flag);
|
||||
|
||||
/**
|
||||
* @brief GetGattCharacteristics
|
||||
* @note Only available on [5.0.0+].
|
||||
* @param[in] connection_handle Same as \ref btmBleDisconnect.
|
||||
* @param[in] handle This controls which \ref BtmGattCharacteristic entries to return.
|
||||
* @param[in] service_handle This controls which \ref BtmGattCharacteristic entries to return.
|
||||
* @param[out] characteristics \ref BtmGattCharacteristic
|
||||
* @param[in] count Size of the characteristics array in entries. The max is 100.
|
||||
* @param[out] total_out Total output entries.
|
||||
*/
|
||||
Result btmGetGattCharacteristics(u32 connection_handle, u16 handle, BtmGattCharacteristic *characteristics, u8 count, u8 *total_out);
|
||||
Result btmGetGattCharacteristics(u32 connection_handle, u16 service_handle, BtmGattCharacteristic *characteristics, u8 count, u8 *total_out);
|
||||
|
||||
/**
|
||||
* @brief GetGattDescriptors
|
||||
* @note Only available on [5.0.0+].
|
||||
* @param[in] connection_handle Same as \ref btmBleDisconnect.
|
||||
* @param[in] handle This controls which \ref BtmGattDescriptor entries to return.
|
||||
* @param[in] char_handle Characteristic handle. This controls which \ref BtmGattDescriptor entries to return.
|
||||
* @param[out] descriptors \ref BtmGattDescriptor
|
||||
* @param[in] count Size of the descriptors array in entries. The max is 100.
|
||||
* @param[out] total_out Total output entries.
|
||||
*/
|
||||
Result btmGetGattDescriptors(u32 connection_handle, u16 handle, BtmGattDescriptor *descriptors, u8 count, u8 *total_out);
|
||||
Result btmGetGattDescriptors(u32 connection_handle, u16 char_handle, BtmGattDescriptor *descriptors, u8 count, u8 *total_out);
|
||||
|
||||
/**
|
||||
* @brief AcquireBleMtuConfigEvent
|
||||
|
305
nx/include/switch/services/btm_types.h
Normal file
305
nx/include/switch/services/btm_types.h
Normal file
@ -0,0 +1,305 @@
|
||||
/**
|
||||
* @file btm_types.h
|
||||
* @brief btm service types.
|
||||
* @author yellows8
|
||||
* @copyright libnx Authors
|
||||
*/
|
||||
#pragma once
|
||||
#include "../types.h"
|
||||
|
||||
/// BtmState
|
||||
typedef enum {
|
||||
BtmState_NotInitialized = 0, ///< NotInitialized
|
||||
BtmState_RadioOff = 1, ///< RadioOff
|
||||
BtmState_MinorSlept = 2, ///< MinorSlept
|
||||
BtmState_RadioOffMinorSlept = 3, ///< RadioOffMinorSlept
|
||||
BtmState_Slept = 4, ///< Slept
|
||||
BtmState_RadioOffSlept = 5, ///< RadioOffSlept
|
||||
BtmState_Initialized = 6, ///< Initialized
|
||||
BtmState_Working = 7, ///< Working
|
||||
} BtmState;
|
||||
|
||||
/// BluetoothMode
|
||||
typedef enum {
|
||||
BtmBluetoothMode_Dynamic2Slot = 0, ///< Dynamic2Slot
|
||||
BtmBluetoothMode_StaticJoy = 1, ///< StaticJoy
|
||||
} BtmBluetoothMode;
|
||||
|
||||
/// WlanMode
|
||||
typedef enum {
|
||||
BtmWlanMode_Local4 = 0, ///< Local4
|
||||
BtmWlanMode_Local8 = 1, ///< Local8
|
||||
BtmWlanMode_None = 2, ///< None
|
||||
} BtmWlanMode;
|
||||
|
||||
/// TsiMode
|
||||
typedef enum {
|
||||
BtmTsiMode_0Fd3Td3Si10 = 0, ///< 0Fd3Td3Si10
|
||||
BtmTsiMode_1Fd1Td1Si5 = 1, ///< 1Fd1Td1Si5
|
||||
BtmTsiMode_2Fd1Td3Si10 = 2, ///< 2Fd1Td3Si10
|
||||
BtmTsiMode_3Fd1Td5Si15 = 3, ///< 3Fd1Td5Si15
|
||||
BtmTsiMode_4Fd3Td1Si10 = 4, ///< 4Fd3Td1Si10
|
||||
BtmTsiMode_5Fd3Td3Si15 = 5, ///< 5Fd3Td3Si15
|
||||
BtmTsiMode_6Fd5Td1Si15 = 6, ///< 6Fd5Td1Si15
|
||||
BtmTsiMode_7Fd1Td3Si15 = 7, ///< 7Fd1Td3Si15
|
||||
BtmTsiMode_8Fd3Td1Si15 = 8, ///< 8Fd3Td1Si15
|
||||
BtmTsiMode_9Fd1Td1Si10 = 9, ///< 9Fd1Td1Si10
|
||||
BtmTsiMode_10Fd1Td1Si15 = 10, ///< 10Fd1Td1Si15
|
||||
BtmTsiMode_Active = 255, ///< Active
|
||||
} BtmTsiMode;
|
||||
|
||||
/// SlotMode
|
||||
typedef enum {
|
||||
BtmSlotMode_2 = 0, ///< 2
|
||||
BtmSlotMode_4 = 1, ///< 4
|
||||
BtmSlotMode_6 = 2, ///< 6
|
||||
BtmSlotMode_Active = 3, ///< Active
|
||||
} BtmSlotMode;
|
||||
|
||||
/// Profile
|
||||
typedef enum {
|
||||
BtmProfile_None = 0, ///< None
|
||||
BtmProfile_Hid = 1, ///< Hid
|
||||
BtmProfile_Audio = 2, ///< [13.0.0+] Audio
|
||||
} BtmProfile;
|
||||
|
||||
/// BdName
|
||||
typedef struct {
|
||||
char name[0x20]; ///< Name string.
|
||||
} BtmBdName;
|
||||
|
||||
/// ClassOfDevice
|
||||
typedef struct {
|
||||
u8 class_of_device[0x3]; ///< ClassOfDevice
|
||||
} BtmClassOfDevice;
|
||||
|
||||
/// LinkKey
|
||||
typedef struct {
|
||||
u8 link_key[0x10]; ///< LinkKey
|
||||
} BtmLinkKey;
|
||||
|
||||
/// HidDeviceInfo
|
||||
typedef struct {
|
||||
u16 vid; ///< Vid
|
||||
u16 pid; ///< Pid
|
||||
} BtmHidDeviceInfo;
|
||||
|
||||
/// HostDeviceProperty
|
||||
typedef struct {
|
||||
union {
|
||||
struct {
|
||||
BtdrvAddress addr; ///< Same as BtdrvAdapterProperty::addr.
|
||||
BtmClassOfDevice class_of_device; ///< Same as BtdrvAdapterProperty::class_of_device.
|
||||
BtmBdName name; ///< Same as BtdrvAdapterProperty::name (except the last byte which is always zero).
|
||||
u8 feature_set; ///< Same as BtdrvAdapterProperty::feature_set.
|
||||
} v1; ///< [1.0.0-12.1.0]
|
||||
|
||||
struct {
|
||||
BtdrvAddress addr; ///< Same as BtdrvAdapterProperty::addr.
|
||||
BtmClassOfDevice class_of_device; ///< Same as BtdrvAdapterProperty::class_of_device.
|
||||
char name[0xF9]; ///< Same as BtdrvAdapterProperty::name (except the last byte which is always zero).
|
||||
u8 feature_set; ///< Same as BtdrvAdapterProperty::feature_set.
|
||||
} v13; ///< [13.0.0+]
|
||||
};
|
||||
} BtmHostDeviceProperty;
|
||||
|
||||
/// BtmConnectedDevice [1.0.0-12.1.0]
|
||||
typedef struct {
|
||||
BtdrvAddress address;
|
||||
u8 pad[2];
|
||||
u32 unk_x8;
|
||||
char name[0x20];
|
||||
u8 unk_x2C[0x1C];
|
||||
u16 vid;
|
||||
u16 pid;
|
||||
u8 unk_x4C[0x20];
|
||||
} BtmConnectedDeviceV1;
|
||||
|
||||
/// BtmConnectedDevice [13.0.0+]
|
||||
typedef struct {
|
||||
BtdrvAddress address;
|
||||
u8 pad[2];
|
||||
u32 profile; ///< \ref BtmProfile
|
||||
u8 unk_xC[0x40];
|
||||
char name[0x20];
|
||||
u8 unk_x6C[0xD9];
|
||||
u8 pad2[3];
|
||||
} BtmConnectedDeviceV13;
|
||||
|
||||
/// DeviceCondition [1.0.0-5.0.2]
|
||||
typedef struct {
|
||||
u32 unk_x0;
|
||||
u32 unk_x4;
|
||||
u8 unk_x8;
|
||||
u8 unk_x9;
|
||||
u8 max_count;
|
||||
u8 connected_count;
|
||||
BtmConnectedDeviceV1 devices[8];
|
||||
} BtmDeviceConditionV100;
|
||||
|
||||
/// DeviceCondition [5.1.0-7.0.1]
|
||||
typedef struct {
|
||||
u32 unk_x0;
|
||||
u32 unk_x4;
|
||||
u8 unk_x8;
|
||||
u8 unk_x9[2];
|
||||
u8 max_count;
|
||||
u8 connected_count;
|
||||
u8 pad[3];
|
||||
BtmConnectedDeviceV1 devices[8];
|
||||
} BtmDeviceConditionV510;
|
||||
|
||||
/// DeviceCondition [8.0.0-8.1.1]
|
||||
typedef struct {
|
||||
u32 unk_x0;
|
||||
u32 unk_x4;
|
||||
u8 unk_x8;
|
||||
u8 unk_x9;
|
||||
u8 max_count;
|
||||
u8 connected_count;
|
||||
BtmConnectedDeviceV1 devices[8];
|
||||
} BtmDeviceConditionV800;
|
||||
|
||||
/// DeviceCondition [9.0.0-12.1.0]
|
||||
typedef struct {
|
||||
u32 unk_x0;
|
||||
u8 unk_x4;
|
||||
u8 unk_x5;
|
||||
u8 max_count;
|
||||
u8 connected_count;
|
||||
BtmConnectedDeviceV1 devices[8];
|
||||
} BtmDeviceConditionV900;
|
||||
|
||||
/// DeviceCondition [1.0.0-12.1.0]
|
||||
typedef union {
|
||||
BtmDeviceConditionV100 v100;
|
||||
BtmDeviceConditionV510 v510;
|
||||
BtmDeviceConditionV800 v800;
|
||||
BtmDeviceConditionV900 v900;
|
||||
} BtmDeviceCondition;
|
||||
|
||||
/// DeviceSlotMode
|
||||
typedef struct {
|
||||
BtdrvAddress addr; ///< \ref BtdrvAddress
|
||||
u8 reserved[2]; ///< Reserved
|
||||
u32 slot_mode; ///< \ref BtmSlotMode
|
||||
} BtmDeviceSlotMode;
|
||||
|
||||
/// DeviceSlotModeList
|
||||
typedef struct {
|
||||
u8 device_count; ///< DeviceCount
|
||||
u8 reserved[3]; ///< Reserved
|
||||
BtmDeviceSlotMode devices[8]; ///< Array of \ref BtmDeviceSlotMode with the above count.
|
||||
} BtmDeviceSlotModeList;
|
||||
|
||||
/// DeviceInfo [1.0.0-12.1.0]
|
||||
typedef struct {
|
||||
BtdrvAddress addr; ///< \ref BtdrvAddress
|
||||
BtmClassOfDevice class_of_device; ///< ClassOfDevice
|
||||
BtmBdName name; ///< BdName
|
||||
BtmLinkKey link_key; ///< LinkKey
|
||||
u8 reserved[3]; ///< Reserved
|
||||
u32 profile; ///< \ref BtmProfile
|
||||
union {
|
||||
u8 data[0x4]; ///< Empty (Profile = None)
|
||||
BtmHidDeviceInfo hid_device_info; ///< \ref BtmHidDeviceInfo (Profile = Hid)
|
||||
} profile_info;
|
||||
u8 reserved2[0x1C]; ///< Reserved
|
||||
} BtmDeviceInfoV1;
|
||||
|
||||
/// DeviceInfo [13.0.0+]
|
||||
typedef struct {
|
||||
BtdrvAddress addr; ///< \ref BtdrvAddress
|
||||
BtmClassOfDevice class_of_device; ///< ClassOfDevice
|
||||
BtmLinkKey link_key; ///< LinkKey
|
||||
u8 reserved[3]; ///< Reserved
|
||||
u32 profile; ///< \ref BtmProfile
|
||||
union {
|
||||
u8 data[0x4]; ///< Empty (Profile = None)
|
||||
BtmHidDeviceInfo hid_device_info; ///< \ref BtmHidDeviceInfo (Profile = Hid)
|
||||
} profile_info;
|
||||
u8 reserved2[0x1C]; ///< Reserved
|
||||
char name[0xF9]; ///< Name
|
||||
u8 pad[3]; ///< Padding
|
||||
} BtmDeviceInfoV13;
|
||||
|
||||
/// DeviceInfo [1.0.0-13.0.0]
|
||||
typedef union {
|
||||
BtmDeviceInfoV1 v1;
|
||||
BtmDeviceInfoV13 v13;
|
||||
} BtmDeviceInfo;
|
||||
|
||||
/// DeviceInfoList
|
||||
typedef struct {
|
||||
u8 device_count; ///< DeviceCount
|
||||
u8 reserved[3]; ///< Reserved
|
||||
BtmDeviceInfoV1 devices[10]; ///< Array of \ref BtmDeviceInfoV1 with the above count.
|
||||
} BtmDeviceInfoList;
|
||||
|
||||
/// DeviceProperty
|
||||
typedef struct {
|
||||
BtdrvAddress addr; ///< \ref BtdrvAddress
|
||||
BtmClassOfDevice class_of_device; ///< ClassOfDevice
|
||||
BtmBdName name; ///< BdName
|
||||
} BtmDeviceProperty;
|
||||
|
||||
/// DevicePropertyList
|
||||
typedef struct {
|
||||
u8 device_count; ///< DeviceCount
|
||||
BtmDeviceProperty devices[15]; ///< Array of \ref BtmDeviceProperty.
|
||||
} BtmDevicePropertyList;
|
||||
|
||||
/// ZeroRetransmissionList
|
||||
typedef struct {
|
||||
u8 enabled_report_id_count; ///< EnabledReportIdCount
|
||||
u8 enabled_report_id[0x10]; ///< Array of EnabledReportId.
|
||||
} BtmZeroRetransmissionList;
|
||||
|
||||
/// GattClientConditionList
|
||||
typedef struct {
|
||||
u8 unk_x0[0x74]; ///< Unknown
|
||||
} BtmGattClientConditionList;
|
||||
|
||||
/// GattService
|
||||
typedef struct {
|
||||
u8 unk_x0[0x4]; ///< Unknown
|
||||
BtdrvGattAttributeUuid uuid; ///< \ref BtdrvGattAttributeUuid
|
||||
u16 handle; ///< Handle
|
||||
u8 unk_x1A[0x2]; ///< Unknown
|
||||
u16 instance_id; ///< InstanceId
|
||||
u16 end_group_handle; ///< EndGroupHandle
|
||||
u8 primary_service; ///< PrimaryService
|
||||
u8 pad[3]; ///< Padding
|
||||
} BtmGattService;
|
||||
|
||||
/// GattCharacteristic
|
||||
typedef struct {
|
||||
u8 unk_x0[0x4]; ///< Unknown
|
||||
BtdrvGattAttributeUuid uuid; ///< \ref BtdrvGattAttributeUuid
|
||||
u16 handle; ///< Handle
|
||||
u8 unk_x1A[0x2]; ///< Unknown
|
||||
u16 instance_id; ///< InstanceId
|
||||
u8 properties; ///< Properties
|
||||
u8 unk_x1F[0x5]; ///< Unknown
|
||||
} BtmGattCharacteristic;
|
||||
|
||||
/// GattDescriptor
|
||||
typedef struct {
|
||||
u8 unk_x0[0x4]; ///< Unknown
|
||||
BtdrvGattAttributeUuid uuid; ///< \ref BtdrvGattAttributeUuid
|
||||
u16 handle; ///< Handle
|
||||
u8 unk_x1A[0x6]; ///< Unknown
|
||||
} BtmGattDescriptor;
|
||||
|
||||
/// BleDataPath
|
||||
typedef struct {
|
||||
u8 unk_x0; ///< Unknown
|
||||
u8 pad[3]; ///< Padding
|
||||
BtdrvGattAttributeUuid uuid; ///< \ref BtdrvGattAttributeUuid
|
||||
} BtmBleDataPath;
|
||||
|
||||
/// AudioDevice
|
||||
typedef struct {
|
||||
BtdrvAddress addr; ///< Device address
|
||||
char name[0xF9]; ///< Device name
|
||||
} BtmAudioDevice;
|
@ -6,6 +6,8 @@
|
||||
#pragma once
|
||||
#include "../types.h"
|
||||
#include "../kernel/event.h"
|
||||
#include "../services/btdrv_types.h"
|
||||
#include "../services/btm_types.h"
|
||||
#include "../sf/service.h"
|
||||
|
||||
/// Initialize btm:sys.
|
||||
@ -80,3 +82,104 @@ Result btmsysAcquireGamepadPairingEvent(Event* out_event);
|
||||
*/
|
||||
Result btmsysIsGamepadPairingStarted(bool *out);
|
||||
|
||||
/**
|
||||
* @brief StartAudioDeviceDiscovery
|
||||
* @note Only available on [13.0.0+].
|
||||
*/
|
||||
Result btmsysStartAudioDeviceDiscovery(void);
|
||||
|
||||
/**
|
||||
* @brief StopAudioDeviceDiscovery
|
||||
* @note Only available on [13.0.0+].
|
||||
*/
|
||||
Result btmsysStopAudioDeviceDiscovery(void);
|
||||
|
||||
/**
|
||||
* @brief IsDiscoveryingAudioDevice
|
||||
* @note Only available on [13.0.0+].
|
||||
* @param[out] out Output flag.
|
||||
*/
|
||||
Result btmsysIsDiscoveryingAudioDevice(bool *out);
|
||||
|
||||
/**
|
||||
* @brief GetDiscoveredAudioDevice
|
||||
* @note Only available on [13.0.0+].
|
||||
* @param[out] out Output array of \ref BtmAudioDevice.
|
||||
* @param[in] count Size of the out array in entries. The max is 15.
|
||||
* @param[out] total_out Total output entries.
|
||||
*/
|
||||
Result btmsysGetDiscoveredAudioDevice(BtmAudioDevice *out, s32 count, s32 *total_out);
|
||||
|
||||
/**
|
||||
* @brief AcquireAudioDeviceConnectionEvent
|
||||
* @note Only available on [13.0.0+].
|
||||
* @note The Event must be closed by the user once finished with it.
|
||||
* @param[out] out_event Output Event with autoclear=true.
|
||||
*/
|
||||
Result btmsysAcquireAudioDeviceConnectionEvent(Event* out_event);
|
||||
|
||||
/**
|
||||
* @brief ConnectAudioDevice
|
||||
* @note Only available on [13.0.0+].
|
||||
* @param[in] addr \ref BtdrvAddress
|
||||
*/
|
||||
Result btmsysConnectAudioDevice(BtdrvAddress addr);
|
||||
|
||||
/**
|
||||
* @brief IsConnectingAudioDevice
|
||||
* @note Only available on [13.0.0+].
|
||||
* @param[out] out Output flag.
|
||||
*/
|
||||
Result btmsysIsConnectingAudioDevice(bool *out);
|
||||
|
||||
/**
|
||||
* @brief GetConnectedAudioDevices
|
||||
* @note Only available on [13.0.0+].
|
||||
* @param[out] out Output array of \ref BtmAudioDevice.
|
||||
* @param[in] count Size of the out array in entries. The max is 8.
|
||||
* @param[out] total_out Total output entries.
|
||||
*/
|
||||
Result btmsysGetConnectedAudioDevices(BtmAudioDevice *out, s32 count, s32 *total_out);
|
||||
|
||||
/**
|
||||
* @brief DisconnectAudioDevice
|
||||
* @note Only available on [13.0.0+].
|
||||
* @param[in] addr \ref BtdrvAddress
|
||||
*/
|
||||
Result btmsysDisconnectAudioDevice(BtdrvAddress addr);
|
||||
|
||||
/**
|
||||
* @brief AcquirePairedAudioDeviceInfoChangedEvent
|
||||
* @note Only available on [13.0.0+].
|
||||
* @note The Event must be closed by the user once finished with it.
|
||||
* @param[out] out_event Output Event with autoclear=true.
|
||||
*/
|
||||
Result btmsysAcquirePairedAudioDeviceInfoChangedEvent(Event* out_event);
|
||||
|
||||
/**
|
||||
* @brief GetPairedAudioDevices
|
||||
* @note Only available on [13.0.0+].
|
||||
* @param[out] out Output array of \ref BtmAudioDevice.
|
||||
* @param[in] count Size of the out array in entries. The max is 10.
|
||||
* @param[out] total_out Total output entries.
|
||||
*/
|
||||
Result btmsysGetPairedAudioDevices(BtmAudioDevice *out, s32 count, s32 *total_out);
|
||||
|
||||
/**
|
||||
* @brief RemoveAudioDevicePairing
|
||||
* @note Only available on [13.0.0+].
|
||||
* @param[in] addr \ref BtdrvAddress
|
||||
*/
|
||||
Result btmsysRemoveAudioDevicePairing(BtdrvAddress addr);
|
||||
|
||||
/**
|
||||
* @brief RequestAudioDeviceConnectionRejection
|
||||
* @note Only available on [13.0.0+].
|
||||
*/
|
||||
Result btmsysRequestAudioDeviceConnectionRejection(void);
|
||||
|
||||
/**
|
||||
* @brief CancelAudioDeviceConnectionRejection
|
||||
* @note Only available on [13.0.0+].
|
||||
*/
|
||||
Result btmsysCancelAudioDeviceConnectionRejection(void);
|
||||
|
@ -36,18 +36,18 @@ Result btmuAcquireBleScanEvent(Event* out_event);
|
||||
/**
|
||||
* @brief GetBleScanFilterParameter
|
||||
* @note This is the same as \ref btmGetBleScanParameterGeneral.
|
||||
* @param[in] unk Must be value 0x1 or 0xFFFF.
|
||||
* @param[in] parameter_id Must be value 0x1 or 0xFFFF.
|
||||
* @param[out] out \ref BtdrvBleAdvertisePacketParameter
|
||||
*/
|
||||
Result btmuGetBleScanFilterParameter(u16 unk, BtdrvBleAdvertisePacketParameter *out);
|
||||
Result btmuGetBleScanFilterParameter(u16 parameter_id, BtdrvBleAdvertisePacketParameter *out);
|
||||
|
||||
/**
|
||||
* @brief GetBleScanFilterParameter2
|
||||
* @note This is the same as \ref btmGetBleScanParameterSmartDevice.
|
||||
* @param[in] unk Must be value 0x2.
|
||||
* @param[in] parameter_id Must be value 0x2.
|
||||
* @param[out] out \ref BtdrvGattAttributeUuid. The first 4-bytes is always 0.
|
||||
*/
|
||||
Result btmuGetBleScanFilterParameter2(u16 unk, BtdrvGattAttributeUuid *out);
|
||||
Result btmuGetBleScanFilterParameter2(u16 parameter_id, BtdrvGattAttributeUuid *out);
|
||||
|
||||
/**
|
||||
* @brief StartBleScanForGeneral
|
||||
@ -211,44 +211,44 @@ Result btmuGetGattService(u32 connection_handle, const BtdrvGattAttributeUuid *u
|
||||
* @brief Same as \ref btmuGetGattServices except this only returns \ref BtmGattService entries where various checks pass with u16 fields.
|
||||
* @note This is similar to \ref btmGetGattIncludedServices.
|
||||
* @param[in] connection_handle Same as \ref btmuBleDisconnect.
|
||||
* @param[in] handle Handle
|
||||
* @param[in] service_handle ServiceHandle
|
||||
* @param[out] services \ref BtmGattService
|
||||
* @param[in] count Size of the services array in entries. The max is 100.
|
||||
* @param[out] out Output value.
|
||||
*/
|
||||
Result btmuGetGattIncludedServices(u32 connection_handle, u16 handle, BtmGattService *services, u8 count, u8 *out);
|
||||
Result btmuGetGattIncludedServices(u32 connection_handle, u16 service_handle, BtmGattService *services, u8 count, u8 *out);
|
||||
|
||||
/**
|
||||
* @brief This is similar to \ref btmuGetGattIncludedServices except this only returns 1 \ref BtmGattService.
|
||||
* @note This is similar to \ref btmGetBelongingService.
|
||||
* @param[in] connection_handle Same as \ref btmuBleDisconnect.
|
||||
* @param[in] handle Handle
|
||||
* @param[in] attribute_handle AttributeHandle
|
||||
* @param[out] service \ref BtmGattService
|
||||
* @param[out] flag Whether a \ref BtmGattService was returned.
|
||||
*/
|
||||
Result btmuGetBelongingGattService(u32 connection_handle, u16 handle, BtmGattService *service, bool *flag);
|
||||
Result btmuGetBelongingGattService(u32 connection_handle, u16 attribute_handle, BtmGattService *service, bool *flag);
|
||||
|
||||
/**
|
||||
* @brief GetGattCharacteristics
|
||||
* @note This is similar to \ref btmGetGattCharacteristics.
|
||||
* @param[in] connection_handle Same as \ref btmuBleDisconnect.
|
||||
* @param[in] handle This controls which \ref BtmGattCharacteristic entries to return.
|
||||
* @param[in] service_handle This controls which \ref BtmGattCharacteristic entries to return.
|
||||
* @param[out] characteristics \ref BtmGattCharacteristic
|
||||
* @param[in] count Size of the characteristics array in entries. The max is 100.
|
||||
* @param[out] total_out Total output entries.
|
||||
*/
|
||||
Result btmuGetGattCharacteristics(u32 connection_handle, u16 handle, BtmGattCharacteristic *characteristics, u8 count, u8 *total_out);
|
||||
Result btmuGetGattCharacteristics(u32 connection_handle, u16 service_handle, BtmGattCharacteristic *characteristics, u8 count, u8 *total_out);
|
||||
|
||||
/**
|
||||
* @brief GetGattDescriptors
|
||||
* @note This is similar to \ref btmGetGattDescriptors.
|
||||
* @param[in] connection_handle Same as \ref btmuBleDisconnect.
|
||||
* @param[in] handle This controls which \ref BtmGattDescriptor entries to return.
|
||||
* @param[in] char_handle Characteristic handle. This controls which \ref BtmGattDescriptor entries to return.
|
||||
* @param[out] descriptors \ref BtmGattDescriptor
|
||||
* @param[in] count Size of the descriptors array in entries. The max is 100.
|
||||
* @param[out] total_out Total output entries.
|
||||
*/
|
||||
Result btmuGetGattDescriptors(u32 connection_handle, u16 handle, BtmGattDescriptor *descriptors, u8 count, u8 *total_out);
|
||||
Result btmuGetGattDescriptors(u32 connection_handle, u16 char_handle, BtmGattDescriptor *descriptors, u8 count, u8 *total_out);
|
||||
|
||||
/**
|
||||
* @brief AcquireBleMtuConfigEvent
|
||||
|
@ -93,7 +93,9 @@ typedef struct {
|
||||
CapsAlbumFileDateTime datetime; ///< \ref CapsAlbumFileDateTime
|
||||
u8 storage; ///< \ref CapsAlbumStorage
|
||||
u8 content; ///< \ref CapsAlbumFileContents
|
||||
u8 pad_x12[0x6]; ///< padding
|
||||
u8 unknown_12; ///< [19.0.0+]
|
||||
u8 unknown_13; ///< [19.0.0+]
|
||||
u8 pad_x14[0x4]; ///< padding
|
||||
} CapsAlbumFileId;
|
||||
|
||||
/// AlbumEntry
|
||||
|
@ -9,6 +9,13 @@
|
||||
#include "../sf/service.h"
|
||||
#include "../services/caps.h"
|
||||
|
||||
typedef struct {
|
||||
u64 application_id;
|
||||
u8 unknown_08;
|
||||
u8 unknown_09;
|
||||
u8 reserved[6];
|
||||
} CapsApplicationId;
|
||||
|
||||
/// Initialize caps:c
|
||||
Result capscInitialize(void);
|
||||
|
||||
@ -40,7 +47,7 @@ Result capscNotifyAlbumStorageIsUnAvailable(CapsAlbumStorage storage);
|
||||
* @param[in] appletResourceUserId AppletResourceUserId.
|
||||
* @param[in] application_id ApplicationId.
|
||||
*/
|
||||
Result capscRegisterAppletResourceUserId(u64 appletResourceUserId, u64 application_id);
|
||||
Result capscRegisterAppletResourceUserId(u64 appletResourceUserId, const CapsApplicationId *application_id);
|
||||
|
||||
/**
|
||||
* @brief Unregister an applet.
|
||||
@ -49,7 +56,7 @@ Result capscRegisterAppletResourceUserId(u64 appletResourceUserId, u64 applicati
|
||||
* @param[in] appletResourceUserId AppletResourceUserId.
|
||||
* @param[in] application_id ApplicationId.
|
||||
*/
|
||||
Result capscUnregisterAppletResourceUserId(u64 appletResourceUserId, u64 application_id);
|
||||
Result capscUnregisterAppletResourceUserId(u64 appletResourceUserId, const CapsApplicationId *application_id);
|
||||
|
||||
/**
|
||||
* @brief Get an ApplicationId that corresponds to an AppletResourceUserId.
|
||||
@ -58,7 +65,7 @@ Result capscUnregisterAppletResourceUserId(u64 appletResourceUserId, u64 applica
|
||||
* @param[out] application_id ApplicationId.
|
||||
* @param[in] appletResourceUserId AppletResourceUserId.
|
||||
*/
|
||||
Result capscGetApplicationIdFromAruid(u64 *application_id, u64 aruid);
|
||||
Result capscGetApplicationIdFromAruid(CapsApplicationId *application_id, u64 aruid);
|
||||
|
||||
/**
|
||||
* @brief Checks whether an ApplicationId is registered.
|
||||
@ -74,7 +81,7 @@ Result capscCheckApplicationIdRegistered(u64 application_id);
|
||||
* @param[in] contents \ref CapsAlbumFileContents
|
||||
* @param[out] file_id \ref CapsAlbumFileId
|
||||
*/
|
||||
Result capscGenerateCurrentAlbumFileId(u64 application_id, CapsAlbumFileContents contents, CapsAlbumFileId *file_id);
|
||||
Result capscGenerateCurrentAlbumFileId(const CapsApplicationId *application_id, CapsAlbumFileContents contents, CapsAlbumFileId *file_id);
|
||||
|
||||
/**
|
||||
* @brief Generate an ApplicationAlbumEntry based on parameters.
|
||||
|
@ -30,3 +30,34 @@ Service* capsdcGetServiceSession(void);
|
||||
* @param[in] out_image_size Output image buffer size, should be at least large enough for RGBA8 width x height.
|
||||
*/
|
||||
Result capsdcDecodeJpeg(u32 width, u32 height, const CapsScreenShotDecodeOption *opts, const void* jpeg, size_t jpeg_size, void* out_image, size_t out_image_size);
|
||||
|
||||
/**
|
||||
* @brief Shrinks a jpeg's dimensions by 2.
|
||||
* @note Tries to compress with jpeg quality in this order: 98, 95, 90, 80, 70, 60, 50, 40, 30, 20, 10, 0.
|
||||
* @note Only available on [17.0.0+].
|
||||
* @param[in] width Input image width.
|
||||
* @param[in] height Input image width.
|
||||
* @param[in] opts \ref CapsScreenShotDecodeOption.
|
||||
* @param[in] jpeg Jpeg image input buffer.
|
||||
* @param[in] jpeg_size Input image buffer size.
|
||||
* @param[out] out_jpeg Jpeg image output buffer
|
||||
* @param[in] out_jpeg_size Output image buffer size.
|
||||
* @param[out] out_result_size size of the resulting JPEG.
|
||||
*/
|
||||
Result capsdcShrinkJpeg(u32 width, u32 height, const CapsScreenShotDecodeOption *opts, const void* jpeg, size_t jpeg_size, void* out_jpeg, size_t out_jpeg_size, u64 *out_result_size);
|
||||
|
||||
/**
|
||||
* @brief Shrinks a jpeg.
|
||||
* @note Fails if the scaled size is larger than the original or the output buffer isn't large enough.
|
||||
* @note Only available on [19.0.0+].
|
||||
* @param[in] scaled_width Wanted image width.
|
||||
* @param[in] scaled_height Wanted image width.
|
||||
* @param[in] jpeg_quality has to be in range 0-100.
|
||||
* @param[in] opts \ref CapsScreenShotDecodeOption.
|
||||
* @param[in] jpeg Jpeg image input buffer.
|
||||
* @param[in] jpeg_size Input image buffer size.
|
||||
* @param[out] out_jpeg Jpeg image output buffer
|
||||
* @param[in] out_jpeg_size Output image buffer size.
|
||||
* @param[out] out_result_size size of the resulting jpeg.
|
||||
*/
|
||||
Result capsdcShrinkJpegEx(u32 scaled_width, u32 scaled_height, u32 jpeg_quality, const CapsScreenShotDecodeOption *opts, const void* jpeg, size_t jpeg_size, void* out_jpeg, size_t out_jpeg_size, u64 *out_result_size);
|
||||
|
@ -27,3 +27,4 @@ Result clkrstOpenSession(ClkrstSession* session_out, PcvModuleId module_id, u32
|
||||
void clkrstCloseSession(ClkrstSession* session);
|
||||
Result clkrstSetClockRate(ClkrstSession* session, u32 hz);
|
||||
Result clkrstGetClockRate(ClkrstSession* session, u32 *out_hz);
|
||||
Result clkrstGetPossibleClockRates(ClkrstSession *session, u32 *rates, s32 max_count, PcvClockRatesListType *out_type, s32 *out_count);
|
||||
|
@ -79,7 +79,7 @@ typedef struct {
|
||||
* @note This function does not return.
|
||||
* @note This uses \ref fatalThrowWithPolicy with \ref FatalPolicy_ErrorScreen internally.
|
||||
*/
|
||||
void NORETURN fatalThrow(Result err);
|
||||
void NX_NORETURN fatalThrow(Result err);
|
||||
|
||||
/**
|
||||
* @brief Triggers a system fatal error with a custom \ref FatalPolicy.
|
||||
|
@ -11,6 +11,14 @@
|
||||
#include "../services/acc.h"
|
||||
#include "../sf/service.h"
|
||||
|
||||
typedef enum {
|
||||
FriendsServiceType_User = 0, ///< Initializes friend:u
|
||||
FriendsServiceType_Viewer = 1, ///< Initializes friend:v
|
||||
FriendsServiceType_Manager = 2, ///< Initializes friend:m
|
||||
FriendsServiceType_System = 3, ///< Initializes friend:s
|
||||
FriendsServiceType_Administrator = 4, ///< Initializes friend:a
|
||||
} FriendsServiceType;
|
||||
|
||||
/// InAppScreenName
|
||||
typedef struct {
|
||||
char name[0x40]; ///< UTF-8 string, NUL-terminated.
|
||||
@ -32,6 +40,36 @@ typedef struct {
|
||||
u64 id; ///< Id.
|
||||
} FriendsFriendInvitationGroupId;
|
||||
|
||||
/// FriendsUserSetting
|
||||
typedef struct {
|
||||
AccountUid uid; ///< User ID
|
||||
u32 presence_permission; ///< Presence permission
|
||||
u32 play_log_permission; ///< Play log permission
|
||||
u64 friend_request_reception; ///< Unknown
|
||||
char friend_code[0x20]; ///< Friend Code
|
||||
u64 friend_code_next_issuable_time; ///< Unknown
|
||||
u8 unk_x48[0x7C8]; ///< Unknown
|
||||
} FriendsUserSetting;
|
||||
|
||||
/// Initialize friends
|
||||
Result friendsInitialize(FriendsServiceType service_type);
|
||||
|
||||
/// Exit friends
|
||||
void friendsExit(void);
|
||||
|
||||
/// Gets the Service object for the friends service session.
|
||||
Service* friendsGetServiceSession(void);
|
||||
|
||||
/// Gets the Service object for the actual IFriendsService service session.
|
||||
Service* friendsGetServiceSession_IFriendsService(void);
|
||||
|
||||
/**
|
||||
* @brief Gets the \ref FriendsUserSetting details
|
||||
* @param[in] uid \ref User AccountUid.
|
||||
* @param[out] user_setting \ref FriendsUserSetting
|
||||
*/
|
||||
Result friendsGetUserSetting(AccountUid uid, FriendsUserSetting *user_setting);
|
||||
|
||||
/**
|
||||
* @brief Gets an Event which is signaled when data is available with \ref friendsTryPopFriendInvitationNotificationInfo.
|
||||
* @note This is a wrapper for \ref appletGetFriendInvitationStorageChannelEvent, see that for the usage requirements.
|
||||
@ -51,4 +89,3 @@ NX_INLINE Result friendsGetFriendInvitationNotificationEvent(Event *out_event) {
|
||||
* @param[out] out_size Size of the data which was written into the output buffer. Optional, can be NULL.
|
||||
*/
|
||||
Result friendsTryPopFriendInvitationNotificationInfo(AccountUid *uid, void* buffer, u64 size, u64 *out_size);
|
||||
|
||||
|
@ -122,6 +122,18 @@ typedef struct {
|
||||
u8 unk_x3b[0x25]; ///< Unknown. Usually zeros?
|
||||
} FsSaveDataInfo;
|
||||
|
||||
/// SaveDataFilter
|
||||
typedef struct {
|
||||
bool filter_by_application_id; ///< Filter by \ref FsSaveDataAttribute::application_id
|
||||
bool filter_by_save_data_type; ///< Filter by \ref FsSaveDataAttribute::save_data_type
|
||||
bool filter_by_user_id; ///< Filter by \ref FsSaveDataAttribute::uid
|
||||
bool filter_by_system_save_data_id; ///< Filter by \ref FsSaveDataAttribute::system_save_data_id
|
||||
bool filter_by_index; ///< Filter by \ref FsSaveDataAttribute::save_data_index
|
||||
u8 save_data_rank; ///< \ref FsSaveDataRank
|
||||
u8 padding[0x2]; ///< Padding
|
||||
FsSaveDataAttribute attr; ///< \ref FsSaveDataAttribute
|
||||
} FsSaveDataFilter;
|
||||
|
||||
typedef struct {
|
||||
u64 created; ///< POSIX timestamp.
|
||||
u64 modified; ///< POSIX timestamp.
|
||||
@ -172,9 +184,10 @@ typedef enum {
|
||||
} FsWriteOption;
|
||||
|
||||
typedef enum {
|
||||
FsContentStorageId_System = 0,
|
||||
FsContentStorageId_User = 1,
|
||||
FsContentStorageId_SdCard = 2,
|
||||
FsContentStorageId_System = 0, ///< System
|
||||
FsContentStorageId_User = 1, ///< User
|
||||
FsContentStorageId_SdCard = 2, ///< SdCard
|
||||
FsContentStorageId_System0 = 3, ///< [16.0.0+] System0
|
||||
} FsContentStorageId;
|
||||
|
||||
typedef enum {
|
||||
@ -252,6 +265,12 @@ typedef struct {
|
||||
u32 value;
|
||||
} FsGameCardHandle;
|
||||
|
||||
typedef struct {
|
||||
u32 version;
|
||||
u8 pad[0x4];
|
||||
u64 id;
|
||||
} FsGameCardUpdatePartitionInfo;
|
||||
|
||||
typedef struct {
|
||||
u32 aes_ctr_key_type; ///< Contains bitflags describing how data is AES encrypted.
|
||||
u32 speed_emulation_type; ///< Contains bitflags describing how data is emulated.
|
||||
@ -286,6 +305,8 @@ typedef enum {
|
||||
FsBisPartitionId_SystemProperEncryption = 32,
|
||||
FsBisPartitionId_SystemProperPartition = 33,
|
||||
FsBisPartitionId_SignedSystemPartitionOnSafeMode = 34,
|
||||
FsBisPartitionId_DeviceTreeBlob = 35,
|
||||
FsBisPartitionId_System0 = 36,
|
||||
} FsBisPartitionId;
|
||||
|
||||
/// FileSystemType
|
||||
@ -305,6 +326,38 @@ typedef enum {
|
||||
FsFileSystemQueryId_IsValidSignedSystemPartitionOnSdCard = 2, ///< [8.0.0+]
|
||||
} FsFileSystemQueryId;
|
||||
|
||||
/// FileSystemAttribute
|
||||
typedef struct {
|
||||
bool directory_name_length_max_has_value;
|
||||
bool file_name_length_max_has_value;
|
||||
bool directory_path_length_max_has_value;
|
||||
bool file_path_length_max_has_value;
|
||||
bool utf16_create_directory_path_length_max_has_value;
|
||||
bool utf16_delete_directory_path_length_max_has_value;
|
||||
bool utf16_rename_source_directory_path_length_max_has_value;
|
||||
bool utf16_rename_destination_directory_path_length_max_has_value;
|
||||
bool utf16_open_directory_path_length_max_has_value;
|
||||
bool utf16_directory_name_length_max_has_value;
|
||||
bool utf16_file_name_length_max_has_value;
|
||||
bool utf16_directory_path_length_max_has_value;
|
||||
bool utf16_file_path_length_max_has_value;
|
||||
u8 reserved1[0x1B];
|
||||
s32 directory_name_length_max;
|
||||
s32 file_name_length_max;
|
||||
s32 directory_path_length_max;
|
||||
s32 file_path_length_max;
|
||||
s32 utf16_create_directory_path_length_max;
|
||||
s32 utf16_delete_directory_path_length_max;
|
||||
s32 utf16_rename_source_directory_path_length_max;
|
||||
s32 utf16_rename_destination_directory_path_length_max;
|
||||
s32 utf16_open_directory_path_length_max;
|
||||
s32 utf16_directory_name_length_max;
|
||||
s32 utf16_file_name_length_max;
|
||||
s32 utf16_directory_path_length_max;
|
||||
s32 utf16_file_path_length_max;
|
||||
u8 reserved2[0x64];
|
||||
} FsFileSystemAttribute;
|
||||
|
||||
/// FsPriority
|
||||
typedef enum {
|
||||
FsPriority_Normal = 0,
|
||||
@ -313,6 +366,120 @@ typedef enum {
|
||||
FsPriority_Background = 3,
|
||||
} FsPriority;
|
||||
|
||||
/// FsContentAttributes
|
||||
typedef enum {
|
||||
FsContentAttributes_None = 0x0,
|
||||
FsContentAttributes_All = 0xF,
|
||||
} FsContentAttributes;
|
||||
|
||||
/// For use with fsOpenHostFileSystemWithOption
|
||||
typedef enum {
|
||||
FsMountHostOptionFlag_None = 0, ///< Host filesystem will be case insensitive.
|
||||
FsMountHostOptionFlag_PseudoCaseSensitive = BIT(0), ///< Host filesystem will be pseudo case sensitive.
|
||||
} FsMountHostOption;
|
||||
|
||||
/// FsStorageErrorInfo
|
||||
typedef struct {
|
||||
u32 num_activation_failures;
|
||||
u32 num_activation_error_corrections;
|
||||
u32 num_read_write_failures;
|
||||
u32 num_read_write_error_corrections;
|
||||
} FsStorageErrorInfo;
|
||||
|
||||
/// FatFatError
|
||||
typedef struct {
|
||||
s32 error;
|
||||
s32 extra_error;
|
||||
s32 drive_id;
|
||||
char name[16];
|
||||
u8 reserved[4];
|
||||
} FatFatError;
|
||||
|
||||
/// FatFatReportInfo1
|
||||
typedef struct {
|
||||
u16 open_file_peak_count;
|
||||
u16 open_directory_peak_count;
|
||||
} FatFatReportInfo1;
|
||||
|
||||
/// FatFatReportInfo2
|
||||
typedef struct {
|
||||
u16 open_unique_file_entry_peak_count;
|
||||
u16 open_unique_directory_entry_peak_count;
|
||||
} FatFatReportInfo2;
|
||||
|
||||
/// FatFatSafeInfo
|
||||
typedef struct {
|
||||
u32 result;
|
||||
u32 error_number;
|
||||
u32 safe_error_number;
|
||||
} FatFatSafeInfo;
|
||||
|
||||
/// FsFileSystemProxyErrorInfo
|
||||
typedef struct {
|
||||
u32 rom_fs_remount_for_data_corruption_count;
|
||||
u32 rom_fs_unrecoverable_data_corruption_by_remount_count;
|
||||
FatFatError fat_fs_error;
|
||||
u32 rom_fs_recovered_by_invalidate_cache_count;
|
||||
u32 save_data_index_count;
|
||||
FatFatReportInfo1 bis_system_fat_report_info_1;
|
||||
FatFatReportInfo1 bis_user_fat_report_info_1;
|
||||
FatFatReportInfo1 sd_card_fat_report_info_1;
|
||||
FatFatReportInfo2 bis_system_fat_report_info_2;
|
||||
FatFatReportInfo2 bis_user_fat_report_info_2;
|
||||
FatFatReportInfo2 sd_card_fat_report_info_2;
|
||||
u32 rom_fs_deep_retry_start_count;
|
||||
u32 rom_fs_unrecoverable_by_game_card_access_failed_count;
|
||||
FatFatSafeInfo bis_system_fat_safe_info;
|
||||
FatFatSafeInfo bis_user_fat_safe_info;
|
||||
|
||||
u8 reserved[0x18];
|
||||
} FsFileSystemProxyErrorInfo;
|
||||
|
||||
/// FsMemoryReportInfo
|
||||
typedef struct {
|
||||
u64 pooled_buffer_peak_free_size;
|
||||
u64 pooled_buffer_retried_count;
|
||||
u64 pooled_buffer_reduce_allocation_count;
|
||||
u64 buffer_manager_peak_free_size;
|
||||
u64 buffer_manager_retried_count;
|
||||
u64 exp_heap_peak_free_size;
|
||||
u64 buffer_pool_peak_free_size;
|
||||
u64 patrol_read_allocate_buffer_success_count;
|
||||
u64 patrol_read_allocate_buffer_failure_count;
|
||||
u64 buffer_manager_peak_total_allocatable_size;
|
||||
u64 buffer_pool_max_allocate_size;
|
||||
u64 pooled_buffer_failed_ideal_allocation_count_on_async_access;
|
||||
|
||||
u8 reserved[0x20];
|
||||
} FsMemoryReportInfo;
|
||||
|
||||
/// FsGameCardErrorReportInfo
|
||||
typedef struct {
|
||||
u16 game_card_crc_error_num;
|
||||
u16 reserved1;
|
||||
u16 asic_crc_error_num;
|
||||
u16 reserved2;
|
||||
u16 refresh_num;
|
||||
u16 reserved3;
|
||||
u16 retry_limit_out_num;
|
||||
u16 timeout_retry_num;
|
||||
u16 asic_reinitialize_failure_detail;
|
||||
u16 insertion_count;
|
||||
u16 removal_count;
|
||||
u16 asic_reinitialize_num;
|
||||
u32 initialize_count;
|
||||
u16 asic_reinitialize_failure_num;
|
||||
u16 awaken_failure_num;
|
||||
u16 reserved4;
|
||||
u16 refresh_succeeded_count;
|
||||
u32 last_read_error_page_address;
|
||||
u32 last_read_error_page_count;
|
||||
u32 awaken_count;
|
||||
u32 read_count_from_insert;
|
||||
u32 read_count_from_awaken;
|
||||
u8 reserved5[8];
|
||||
} FsGameCardErrorReportInfo;
|
||||
|
||||
/// Initialize fsp-srv. Used automatically during app startup.
|
||||
Result fsInitialize(void);
|
||||
|
||||
@ -329,7 +496,7 @@ void fsSetPriority(FsPriority prio);
|
||||
Result fsOpenFileSystem(FsFileSystem* out, FsFileSystemType fsType, const char* contentPath); ///< same as calling fsOpenFileSystemWithId with 0 as id
|
||||
Result fsOpenDataFileSystemByCurrentProcess(FsFileSystem *out);
|
||||
Result fsOpenFileSystemWithPatch(FsFileSystem* out, u64 id, FsFileSystemType fsType); ///< [2.0.0+], like OpenFileSystemWithId but without content path.
|
||||
Result fsOpenFileSystemWithId(FsFileSystem* out, u64 id, FsFileSystemType fsType, const char* contentPath); ///< works on all firmwares, id is ignored on [1.0.0]
|
||||
Result fsOpenFileSystemWithId(FsFileSystem* out, u64 id, FsFileSystemType fsType, const char* contentPath, FsContentAttributes attr); ///< works on all firmwares, id is ignored on [1.0.0], attr is ignored before [16.0.0]
|
||||
Result fsOpenDataFileSystemByProgramId(FsFileSystem *out, u64 program_id); ///< [3.0.0+]
|
||||
Result fsOpenBisFileSystem(FsFileSystem* out, FsBisPartitionId partitionId, const char* string);
|
||||
Result fsOpenBisStorage(FsStorage* out, FsBisPartitionId partitionId);
|
||||
@ -337,6 +504,9 @@ Result fsOpenBisStorage(FsStorage* out, FsBisPartitionId partitionId);
|
||||
/// Do not call this directly, see fs_dev.h.
|
||||
Result fsOpenSdCardFileSystem(FsFileSystem* out);
|
||||
|
||||
Result fsOpenHostFileSystem(FsFileSystem* out, const char *path);
|
||||
Result fsOpenHostFileSystemWithOption(FsFileSystem* out, const char *path, u32 flags); ///< [9.0.0+]
|
||||
|
||||
Result fsDeleteSaveDataFileSystem(u64 application_id);
|
||||
Result fsCreateSaveDataFileSystem(const FsSaveDataAttribute* attr, const FsSaveDataCreationInfo* creation_info, const FsSaveDataMetaInfo* meta);
|
||||
Result fsCreateSaveDataFileSystemBySystemSaveDataId(const FsSaveDataAttribute* attr, const FsSaveDataCreationInfo* creation_info);
|
||||
@ -359,6 +529,8 @@ Result fsWriteSaveDataFileSystemExtraData(const void* buf, size_t len, FsSaveDat
|
||||
|
||||
Result fsOpenSaveDataInfoReader(FsSaveDataInfoReader* out, FsSaveDataSpaceId save_data_space_id);
|
||||
|
||||
Result fsOpenSaveDataInfoReaderWithFilter(FsSaveDataInfoReader* out, FsSaveDataSpaceId save_data_space_id, const FsSaveDataFilter *save_data_filter); ///< [6.0.0+]
|
||||
|
||||
Result fsOpenImageDirectoryFileSystem(FsFileSystem* out, FsImageDirectoryId image_directory_id);
|
||||
Result fsOpenContentStorageFileSystem(FsFileSystem* out, FsContentStorageId content_storage_id);
|
||||
Result fsOpenCustomStorageFileSystem(FsFileSystem* out, FsCustomStorageId custom_storage_id); ///< [7.0.0+]
|
||||
@ -373,11 +545,15 @@ Result fsOpenSdCardDetectionEventNotifier(FsEventNotifier* out);
|
||||
|
||||
Result fsIsSignedSystemPartitionOnSdCardValid(bool *out);
|
||||
|
||||
/// Retrieves the rights id corresponding to the content path. Only available on [2.0.0+].
|
||||
Result fsGetProgramId(u64* out, const char *path, FsContentAttributes attr); ///< [17.0.0+]
|
||||
|
||||
/// Retrieves the rights id corresponding to the content path. Only available on [2.0.0-15.0.1].
|
||||
Result fsGetRightsIdByPath(const char* path, FsRightsId* out_rights_id);
|
||||
|
||||
/// Retrieves the rights id and key generation corresponding to the content path. Only available on [3.0.0+].
|
||||
Result fsGetRightsIdAndKeyGenerationByPath(const char* path, u8* out_key_generation, FsRightsId* out_rights_id);
|
||||
/// Retrieves the rights id and key generation corresponding to the content path. Only available on [3.0.0+], attr is ignored before [16.0.0].
|
||||
Result fsGetRightsIdAndKeyGenerationByPath(const char* path, FsContentAttributes attr, u8* out_key_generation, FsRightsId* out_rights_id);
|
||||
|
||||
Result fsGetContentStorageInfoIndex(s32 *out); ///< [19.0.0+]
|
||||
|
||||
Result fsDisableAutoSaveDataCreation(void);
|
||||
|
||||
@ -385,9 +561,16 @@ Result fsSetGlobalAccessLogMode(u32 mode);
|
||||
Result fsGetGlobalAccessLogMode(u32* out_mode);
|
||||
Result fsOutputAccessLogToSdCard(const char *log, size_t size);
|
||||
|
||||
Result fsGetAndClearErrorInfo(FsFileSystemProxyErrorInfo *out); ///< [2.0.0+]
|
||||
|
||||
Result fsGetAndClearMemoryReportInfo(FsMemoryReportInfo* out); ///< [4.0.0+]
|
||||
|
||||
/// Only available on [7.0.0+].
|
||||
Result fsGetProgramIndexForAccessLog(u32 *out_program_index, u32 *out_program_count);
|
||||
|
||||
// Wrapper(s) for fsCreateSaveDataFileSystem.
|
||||
Result fsCreate_TemporaryStorage(u64 application_id, u64 owner_id, s64 size, u32 flags);
|
||||
|
||||
// Wrapper(s) for fsCreateSaveDataFileSystemBySystemSaveDataId.
|
||||
Result fsCreate_SystemSaveDataWithOwner(FsSaveDataSpaceId save_data_space_id, u64 system_save_data_id, AccountUid uid, u64 owner_id, s64 size, s64 journal_size, u32 flags);
|
||||
Result fsCreate_SystemSaveData(FsSaveDataSpaceId save_data_space_id, u64 system_save_data_id, s64 size, s64 journal_size, u32 flags);
|
||||
@ -442,6 +625,7 @@ Result fsFsGetTotalSpace(FsFileSystem* fs, const char* path, s64* out);
|
||||
Result fsFsGetFileTimeStampRaw(FsFileSystem* fs, const char* path, FsTimeStampRaw *out); ///< [3.0.0+]
|
||||
Result fsFsCleanDirectoryRecursively(FsFileSystem* fs, const char* path); ///< [3.0.0+]
|
||||
Result fsFsQueryEntry(FsFileSystem* fs, void *out, size_t out_size, const void *in, size_t in_size, const char* path, FsFileSystemQueryId query_id); ///< [4.0.0+]
|
||||
Result fsFsGetFileSystemAttribute(FsFileSystem* fs, FsFileSystemAttribute *out); ///< [15.0.0+]
|
||||
void fsFsClose(FsFileSystem* fs);
|
||||
|
||||
/// Uses \ref fsFsQueryEntry to set the archive bit on the specified absolute directory path.
|
||||
@ -487,7 +671,23 @@ void fsEventNotifierClose(FsEventNotifier* e);
|
||||
|
||||
// IDeviceOperator
|
||||
Result fsDeviceOperatorIsSdCardInserted(FsDeviceOperator* d, bool* out);
|
||||
Result fsDeviceOperatorGetSdCardSpeedMode(FsDeviceOperator* d, s64* out);
|
||||
Result fsDeviceOperatorGetSdCardCid(FsDeviceOperator* d, void* dst, size_t dst_size, s64 size);
|
||||
Result fsDeviceOperatorGetSdCardUserAreaSize(FsDeviceOperator* d, s64* out);
|
||||
Result fsDeviceOperatorGetSdCardProtectedAreaSize(FsDeviceOperator* d, s64* out);
|
||||
Result fsDeviceOperatorGetAndClearSdCardErrorInfo(FsDeviceOperator* d, FsStorageErrorInfo* out, s64 *out_log_size, void *dst, size_t dst_size, s64 size);
|
||||
Result fsDeviceOperatorGetMmcCid(FsDeviceOperator* d, void* dst, size_t dst_size, s64 size);
|
||||
Result fsDeviceOperatorGetMmcSpeedMode(FsDeviceOperator* d, s64* out);
|
||||
Result fsDeviceOperatorGetMmcPatrolCount(FsDeviceOperator* d, u32* out);
|
||||
Result fsDeviceOperatorGetAndClearMmcErrorInfo(FsDeviceOperator* d, FsStorageErrorInfo* out, s64 *out_log_size, void *dst, size_t dst_size, s64 size);
|
||||
Result fsDeviceOperatorGetMmcExtendedCsd(FsDeviceOperator* d, void* dst, size_t dst_size, s64 size);
|
||||
Result fsDeviceOperatorIsGameCardInserted(FsDeviceOperator* d, bool* out);
|
||||
Result fsDeviceOperatorGetGameCardHandle(FsDeviceOperator* d, FsGameCardHandle* out);
|
||||
Result fsDeviceOperatorGetGameCardUpdatePartitionInfo(FsDeviceOperator* d, const FsGameCardHandle* handle, FsGameCardUpdatePartitionInfo* out);
|
||||
Result fsDeviceOperatorGetGameCardAttribute(FsDeviceOperator* d, const FsGameCardHandle* handle, u8 *out);
|
||||
Result fsDeviceOperatorGetGameCardDeviceCertificate(FsDeviceOperator* d, const FsGameCardHandle* handle, void* dst, size_t dst_size, s64* out_size, s64 size);
|
||||
Result fsDeviceOperatorGetGameCardIdSet(FsDeviceOperator* d, void* dst, size_t dst_size, s64 size);
|
||||
Result fsDeviceOperatorGetGameCardErrorReportInfo(FsDeviceOperator* d, FsGameCardErrorReportInfo* out);
|
||||
Result fsDeviceOperatorGetGameCardDeviceId(FsDeviceOperator* d, void* dst, size_t dst_size, s64 size);
|
||||
Result fsDeviceOperatorChallengeCardExistence(FsDeviceOperator* d, const FsGameCardHandle* handle, void* dst, size_t dst_size, void* seed, size_t seed_size, void* value, size_t value_size);
|
||||
void fsDeviceOperatorClose(FsDeviceOperator* d);
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include "../sf/service.h"
|
||||
#include "../services/fs.h"
|
||||
#include "../crypto/sha256.h"
|
||||
#include "../services/ncm_types.h"
|
||||
|
||||
typedef struct {
|
||||
u8 signature[0x100];
|
||||
@ -26,5 +27,5 @@ void fsldrExit(void);
|
||||
/// Gets the Service object for the actual fsp-ldr service session.
|
||||
Service* fsldrGetServiceSession(void);
|
||||
|
||||
Result fsldrOpenCodeFileSystem(FsCodeInfo* out_code_info, u64 tid, const char *path, FsFileSystem* out);
|
||||
Result fsldrOpenCodeFileSystem(FsCodeInfo* out_code_info, u64 tid, NcmStorageId storage_id, const char *path, FsContentAttributes attr, FsFileSystem* out);
|
||||
Result fsldrIsArchivedProgram(u64 pid, bool *out);
|
||||
|
@ -18,7 +18,7 @@ void fsprExit(void);
|
||||
/// Gets the Service object for the actual fsp-pr service session.
|
||||
Service* fsprGetServiceSession(void);
|
||||
|
||||
Result fsprRegisterProgram(u64 pid, u64 tid, NcmStorageId sid, const void *fs_access_header, size_t fah_size, const void *fs_access_control, size_t fac_size);
|
||||
Result fsprRegisterProgram(u64 pid, u64 tid, NcmStorageId sid, const void *fs_access_header, size_t fah_size, const void *fs_access_control, size_t fac_size, u8 fs_access_control_restriction_mode);
|
||||
Result fsprUnregisterProgram(u64 pid);
|
||||
Result fsprSetCurrentProcess(void);
|
||||
Result fsprSetEnabledProgramVerification(bool enabled);
|
||||
|
@ -64,8 +64,8 @@ Result gpioPadSetInterruptMode(GpioPadSession *p, GpioInterruptMode mode);
|
||||
Result gpioPadGetInterruptMode(GpioPadSession *p, GpioInterruptMode *out);
|
||||
Result gpioPadSetInterruptEnable(GpioPadSession *p, bool en);
|
||||
Result gpioPadGetInterruptEnable(GpioPadSession *p, bool *out);
|
||||
Result gpioPadGetInterruptStatus(GpioPadSession *p, GpioInterruptStatus *out);
|
||||
Result gpioPadClearInterruptStatus(GpioPadSession *p);
|
||||
Result gpioPadGetInterruptStatus(GpioPadSession *p, GpioInterruptStatus *out); ///< [1.0.0-16.1.0]
|
||||
Result gpioPadClearInterruptStatus(GpioPadSession *p); ///< [1.0.0-16.1.0]
|
||||
Result gpioPadSetValue(GpioPadSession *p, GpioValue val);
|
||||
Result gpioPadGetValue(GpioPadSession *p, GpioValue *out);
|
||||
Result gpioPadBindInterrupt(GpioPadSession *p, Event *out);
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -15,6 +15,12 @@ typedef enum {
|
||||
HiddbgNpadButton_Capture = BIT(19), ///< Capture button
|
||||
} HiddbgNpadButton;
|
||||
|
||||
/// HdlsAttribute
|
||||
typedef enum {
|
||||
HiddbgHdlsAttribute_HasVirtualSixAxisSensorAcceleration = BIT(0), ///< HasVirtualSixAxisSensorAcceleration
|
||||
HiddbgHdlsAttribute_HasVirtualSixAxisSensorAngle = BIT(1), ///< HasVirtualSixAxisSensorAngle
|
||||
} HiddbgHdlsAttribute;
|
||||
|
||||
/// State for overriding \ref HidDebugPadState.
|
||||
typedef struct {
|
||||
u32 attributes; ///< Bitfield of \ref HidDebugPadAttribute.
|
||||
@ -40,11 +46,21 @@ typedef struct {
|
||||
u64 keys[4];
|
||||
} HiddbgKeyboardAutoPilotState;
|
||||
|
||||
/// State for overriding SleepButtonState.
|
||||
typedef struct {
|
||||
u64 buttons; ///< Bitfield of buttons, only bit0 is used.
|
||||
} HiddbgSleepButtonAutoPilotState;
|
||||
|
||||
/// HdlsHandle
|
||||
typedef struct {
|
||||
u64 handle; ///< Handle
|
||||
} HiddbgHdlsHandle;
|
||||
|
||||
/// HdlsSessionId, returned by \ref hiddbgAttachHdlsWorkBuffer.
|
||||
typedef struct {
|
||||
u64 id; ///< Id
|
||||
} HiddbgHdlsSessionId;
|
||||
|
||||
/// HdlsDeviceInfo, for [7.0.0-8.1.0].
|
||||
typedef struct {
|
||||
u32 deviceTypeInternal; ///< Only one bit can be set. BIT(N*4+0) = Pro-Controller, BIT(N*4+1) = Joy-Con Left, BIT(N*4+2) = Joy-Con Right, BIT(N*4+3) = invalid. Where N is 0-1. BIT(8-10) = Pro-Controller, BIT(11) = Famicom-Controller, BIT(12) = Famicom-Controller II with microphone, BIT(13) = NES-Controller(DeviceType=0x200), BIT(14) = NES-Controller(DeviceType=0x400), BIT(15-16) = invalid, BIT(17) = unknown(DeviceType=0x8000), BIT(18-20) = invalid, BIT(21-23) = unknown(DeviceType=0x80000000).
|
||||
@ -74,18 +90,32 @@ typedef struct {
|
||||
u32 buttons; ///< See \ref HiddbgNpadButton.
|
||||
HidAnalogStickState analog_stick_l; ///< AnalogStickL
|
||||
HidAnalogStickState analog_stick_r; ///< AnalogStickR
|
||||
u8 unk_x20; ///< Unused for input. Set with output from \ref hiddbgDumpHdlsStates. Not set by \ref hiddbgGetAbstractedPadsState.
|
||||
u8 indicator; ///< Indicator. Unused for input. Set with output from \ref hiddbgDumpHdlsStates. Not set by \ref hiddbgGetAbstractedPadsState.
|
||||
u8 padding[0x3]; ///< Padding
|
||||
} HiddbgHdlsStateV7;
|
||||
|
||||
/// HdlsState, for [9.0.0+]. Converted to/from \ref HiddbgHdlsStateV7 on prior sysvers.
|
||||
/// HdlsState, for [9.0.0-11.0.1].
|
||||
typedef struct {
|
||||
u32 battery_level; ///< BatteryLevel for the main PowerInfo, see \ref HidPowerInfo.
|
||||
u32 flags; ///< Used to set the main PowerInfo for \ref HidNpadSystemProperties. BIT(0) -> IsPowered, BIT(1) -> IsCharging.
|
||||
u64 buttons; ///< See \ref HiddbgNpadButton. [9.0.0+] Masked with 0xfffffffff00fffff.
|
||||
HidAnalogStickState analog_stick_l; ///< AnalogStickL
|
||||
HidAnalogStickState analog_stick_r; ///< AnalogStickR
|
||||
u8 unk_x20; ///< Unused for input. Set with output from \ref hiddbgDumpHdlsStates.
|
||||
u8 indicator; ///< Indicator. Unused for input. Set with output from \ref hiddbgDumpHdlsStates.
|
||||
u8 padding[0x3]; ///< Padding
|
||||
} HiddbgHdlsStateV9;
|
||||
|
||||
/// HdlsState, for [12.0.0+].
|
||||
typedef struct {
|
||||
u32 battery_level; ///< BatteryLevel for the main PowerInfo, see \ref HidPowerInfo.
|
||||
u32 flags; ///< Used to set the main PowerInfo for \ref HidNpadSystemProperties. BIT(0) -> IsPowered, BIT(1) -> IsCharging.
|
||||
u64 buttons; ///< See \ref HiddbgNpadButton. [9.0.0+] Masked with 0xfffffffff00fffff.
|
||||
HidAnalogStickState analog_stick_l; ///< AnalogStickL
|
||||
HidAnalogStickState analog_stick_r; ///< AnalogStickR
|
||||
HidVector six_axis_sensor_acceleration; ///< VirtualSixAxisSensorAcceleration
|
||||
HidVector six_axis_sensor_angle; ///< VirtualSixAxisSensorAngle
|
||||
u32 attribute; ///< Bitfield of \ref HiddbgHdlsAttribute.
|
||||
u8 indicator; ///< Indicator. Unused for input.
|
||||
u8 padding[0x3]; ///< Padding
|
||||
} HiddbgHdlsState;
|
||||
|
||||
@ -110,7 +140,7 @@ typedef struct {
|
||||
typedef struct {
|
||||
HiddbgHdlsHandle handle; ///< \ref HiddbgHdlsHandle
|
||||
HiddbgHdlsDeviceInfoV7 device; ///< \ref HiddbgHdlsDeviceInfoV7. With \ref hiddbgApplyHdlsStateList this is only used when creating new devices.
|
||||
HiddbgHdlsStateV7 state; ///< \ref HiddbgHdlsState
|
||||
HiddbgHdlsStateV7 state; ///< \ref HiddbgHdlsStateV7
|
||||
} HiddbgHdlsStateListEntryV7;
|
||||
|
||||
/// HdlsStateListV7, for [7.0.0-8.1.0]. This contains a list of all controllers, including non-virtual controllers.
|
||||
@ -120,14 +150,28 @@ typedef struct {
|
||||
HiddbgHdlsStateListEntryV7 entries[0x10]; ///< \ref HiddbgHdlsStateListEntryV7
|
||||
} HiddbgHdlsStateListV7;
|
||||
|
||||
/// HdlsStateListEntry, for [9.0.0+]. Converted to/from \ref HiddbgHdlsStateListEntryV7 on prior sysvers.
|
||||
/// HdlsStateListEntry, for [9.0.0-11.0.1].
|
||||
typedef struct {
|
||||
HiddbgHdlsHandle handle; ///< \ref HiddbgHdlsHandle
|
||||
HiddbgHdlsDeviceInfo device; ///< \ref HiddbgHdlsDeviceInfo. With \ref hiddbgApplyHdlsStateList this is only used when creating new devices.
|
||||
alignas(8) HiddbgHdlsStateV9 state; ///< \ref HiddbgHdlsStateV9
|
||||
} HiddbgHdlsStateListEntryV9;
|
||||
|
||||
/// HdlsStateList, for [9.0.0-11.0.1].
|
||||
typedef struct {
|
||||
s32 total_entries; ///< Total entries for the below entries.
|
||||
u32 pad; ///< Padding
|
||||
HiddbgHdlsStateListEntryV9 entries[0x10]; ///< \ref HiddbgHdlsStateListEntryV9
|
||||
} HiddbgHdlsStateListV9;
|
||||
|
||||
/// HdlsStateListEntry, for [12.0.0+].
|
||||
typedef struct {
|
||||
HiddbgHdlsHandle handle; ///< \ref HiddbgHdlsHandle
|
||||
HiddbgHdlsDeviceInfo device; ///< \ref HiddbgHdlsDeviceInfo. With \ref hiddbgApplyHdlsStateList this is only used when creating new devices.
|
||||
alignas(8) HiddbgHdlsState state; ///< \ref HiddbgHdlsState
|
||||
} HiddbgHdlsStateListEntry;
|
||||
|
||||
/// HdlsStateList, for [9.0.0+]. Converted to/from \ref HiddbgHdlsStateListV7 on prior sysvers.
|
||||
/// HdlsStateList, for [12.0.0+].
|
||||
/// This contains a list of all controllers, including non-virtual controllers.
|
||||
typedef struct {
|
||||
s32 total_entries; ///< Total entries for the below entries.
|
||||
@ -215,6 +259,17 @@ Result hiddbgUnsetKeyboardAutoPilotState(void);
|
||||
*/
|
||||
Result hiddbgDeactivateHomeButton(void);
|
||||
|
||||
/**
|
||||
* @brief SetSleepButtonAutoPilotState
|
||||
* @param[in] state \ref HiddbgSleepButtonAutoPilotState
|
||||
*/
|
||||
Result hiddbgSetSleepButtonAutoPilotState(const HiddbgSleepButtonAutoPilotState *state);
|
||||
|
||||
/**
|
||||
* @brief UnsetSleepButtonAutoPilotState
|
||||
*/
|
||||
Result hiddbgUnsetSleepButtonAutoPilotState(void);
|
||||
|
||||
/**
|
||||
* @brief Writes the input RGB colors to the spi-flash for the specified UniquePad (offset 0x6050 size 0x6).
|
||||
* @note Only available with [3.0.0+].
|
||||
@ -346,52 +401,61 @@ Result hiddbgUnsetAllAutoPilotVirtualPadState(void);
|
||||
/**
|
||||
* @brief Initialize Hdls.
|
||||
* @note Only available with [7.0.0+].
|
||||
* @param[out] session_id [13.0.0+] \ref HiddbgHdlsSessionId
|
||||
* @param[in] buffer An existing buffer to be used as transfer memory.
|
||||
* @param[in] size Size of the supplied buffer.
|
||||
*/
|
||||
Result hiddbgAttachHdlsWorkBuffer(void);
|
||||
Result hiddbgAttachHdlsWorkBuffer(HiddbgHdlsSessionId *session_id, void *buffer, size_t size);
|
||||
|
||||
/**
|
||||
* @brief Exit Hdls, must be called at some point prior to \ref hiddbgExit.
|
||||
* @note Only available with [7.0.0+].
|
||||
* @param[in] session_id [13.0.0+] \ref HiddbgHdlsSessionId
|
||||
*/
|
||||
Result hiddbgReleaseHdlsWorkBuffer(void);
|
||||
Result hiddbgReleaseHdlsWorkBuffer(HiddbgHdlsSessionId session_id);
|
||||
|
||||
/**
|
||||
* @brief Checks if the given device is still attached.
|
||||
* @note Only available with [7.0.0+].
|
||||
* @param[in] session_id [13.0.0+] \ref HiddbgHdlsSessionId
|
||||
* @param[in] handle \ref HiddbgHdlsHandle
|
||||
* @param[out] out Whether the device is attached.
|
||||
*/
|
||||
Result hiddbgIsHdlsVirtualDeviceAttached(HiddbgHdlsHandle handle, bool *out);
|
||||
Result hiddbgIsHdlsVirtualDeviceAttached(HiddbgHdlsSessionId session_id, HiddbgHdlsHandle handle, bool *out);
|
||||
|
||||
/**
|
||||
* @brief Gets state for \ref HiddbgHdlsNpadAssignment.
|
||||
* @note Only available with [7.0.0+].
|
||||
* @param[in] session_id [13.0.0+] \ref HiddbgHdlsSessionId
|
||||
* @param[out] state \ref HiddbgHdlsNpadAssignment
|
||||
*/
|
||||
Result hiddbgDumpHdlsNpadAssignmentState(HiddbgHdlsNpadAssignment *state);
|
||||
Result hiddbgDumpHdlsNpadAssignmentState(HiddbgHdlsSessionId session_id, HiddbgHdlsNpadAssignment *state);
|
||||
|
||||
/**
|
||||
* @brief Gets state for \ref HiddbgHdlsStateList.
|
||||
* @note Only available with [7.0.0+].
|
||||
* @param[in] session_id [13.0.0+] \ref HiddbgHdlsSessionId
|
||||
* @param[out] state \ref HiddbgHdlsStateList
|
||||
*/
|
||||
Result hiddbgDumpHdlsStates(HiddbgHdlsStateList *state);
|
||||
Result hiddbgDumpHdlsStates(HiddbgHdlsSessionId session_id, HiddbgHdlsStateList *state);
|
||||
|
||||
/**
|
||||
* @brief Sets state for \ref HiddbgHdlsNpadAssignment.
|
||||
* @note Only available with [7.0.0+].
|
||||
* @param[in] session_id [13.0.0+] \ref HiddbgHdlsSessionId
|
||||
* @param[in] state \ref HiddbgHdlsNpadAssignment
|
||||
* @param[in] flag Flag
|
||||
*/
|
||||
Result hiddbgApplyHdlsNpadAssignmentState(const HiddbgHdlsNpadAssignment *state, bool flag);
|
||||
Result hiddbgApplyHdlsNpadAssignmentState(HiddbgHdlsSessionId session_id, const HiddbgHdlsNpadAssignment *state, bool flag);
|
||||
|
||||
/**
|
||||
* @brief Sets state for \ref HiddbgHdlsStateList.
|
||||
* @note The \ref HiddbgHdlsState will be applied for each \ref HiddbgHdlsHandle. If a \ref HiddbgHdlsHandle is not found, code similar to \ref hiddbgAttachHdlsVirtualDevice will run with the \ref HiddbgHdlsDeviceInfo, then it will continue with applying state with the new device.
|
||||
* @note Only available with [7.0.0+].
|
||||
* @param[in] session_id [13.0.0+] \ref HiddbgHdlsSessionId
|
||||
* @param[in] state \ref HiddbgHdlsStateList
|
||||
*/
|
||||
Result hiddbgApplyHdlsStateList(const HiddbgHdlsStateList *state);
|
||||
Result hiddbgApplyHdlsStateList(HiddbgHdlsSessionId session_id, const HiddbgHdlsStateList *state);
|
||||
|
||||
/**
|
||||
* @brief Attach a device with the input info.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* @file hidsys.h
|
||||
* @brief hid:sys service IPC wrapper.
|
||||
* @author exelix, yellows8
|
||||
* @author exelix, yellows8, ndeadly
|
||||
*/
|
||||
#pragma once
|
||||
#include "../types.h"
|
||||
@ -44,6 +44,15 @@ typedef enum {
|
||||
HidcfgAnalogStickRotation_Anticlockwise90 = 2, ///< Anticlockwise90
|
||||
} HidcfgAnalogStickRotation;
|
||||
|
||||
/// UniquePadType
|
||||
typedef enum {
|
||||
HidsysUniquePadType_Embedded = 0, ///< Embedded
|
||||
HidsysUniquePadType_FullKeyController = 1, ///< FullKeyController
|
||||
HidsysUniquePadType_RightController = 2, ///< RightController
|
||||
HidsysUniquePadType_LeftController = 3, ///< LeftController
|
||||
HidsysUniquePadType_DebugPadController = 4, ///< DebugPadController
|
||||
} HidsysUniquePadType;
|
||||
|
||||
/// UniquePadId for a controller.
|
||||
typedef struct {
|
||||
u64 id; ///< UniquePadId
|
||||
@ -246,6 +255,17 @@ Result hidsysAcquireCaptureButtonEventHandle(Event* out_event, bool autoclear);
|
||||
**/
|
||||
Result hidsysActivateCaptureButton(void);
|
||||
|
||||
/**
|
||||
* @brief Applies npad system common policy.
|
||||
*/
|
||||
Result hidsysApplyNpadSystemCommonPolicy(void);
|
||||
|
||||
/**
|
||||
* @brief Gets the npad id type of the last controller that was active.
|
||||
* @param[out] out of \ref HidNpadIdType.
|
||||
*/
|
||||
Result hidsysGetLastActiveNpad(u32 *out);
|
||||
|
||||
/**
|
||||
* @brief Gets the SupportedNpadStyleSet for the CallerApplet. applet must be initialized in order to use this (uses \ref appletGetAppletResourceUserIdOfCallerApplet).
|
||||
* @note Only available on [6.0.0+].
|
||||
@ -303,6 +323,57 @@ Result hidsysGetUniquePadsFromNpad(HidNpadIdType id, HidsysUniquePadId *unique_p
|
||||
**/
|
||||
Result hidsysEnableAppletToGetInput(bool enable);
|
||||
|
||||
/**
|
||||
* @brief EnableHandheldHids
|
||||
**/
|
||||
Result hidsysEnableHandheldHids(void);
|
||||
|
||||
/**
|
||||
* @brief DisableHandheldHids
|
||||
**/
|
||||
Result hidsysDisableHandheldHids(void);
|
||||
|
||||
/**
|
||||
* @brief SetJoyConRailEnabled
|
||||
* @note Only available on [9.0.0+].
|
||||
* @param[in] enable Input flag.
|
||||
**/
|
||||
Result hidsysSetJoyConRailEnabled(bool enable);
|
||||
|
||||
/**
|
||||
* @brief IsJoyConRailEnabled
|
||||
* @note Only available on [9.0.0+].
|
||||
* @param[out] out Output flag.
|
||||
**/
|
||||
Result hidsysIsJoyConRailEnabled(bool *out);
|
||||
|
||||
/**
|
||||
* @brief IsHandheldHidsEnabled
|
||||
* @note Only available on [10.0.0+].
|
||||
* @param[out] out Output flag.
|
||||
**/
|
||||
Result hidsysIsHandheldHidsEnabled(bool *out);
|
||||
|
||||
/**
|
||||
* @brief IsJoyConAttachedOnAllRail
|
||||
* @note Only available on [11.0.0+].
|
||||
* @param[out] out Output flag.
|
||||
**/
|
||||
Result hidsysIsJoyConAttachedOnAllRail(bool *out);
|
||||
|
||||
/**
|
||||
* @brief IsInvertedControllerConnectedOnRail
|
||||
* @note Only available on [19.0.0+].
|
||||
* @param[out] out Output flag.
|
||||
**/
|
||||
Result hidsysIsInvertedControllerConnectedOnRail(bool *out);
|
||||
|
||||
/**
|
||||
* @brief AcquireUniquePadConnectionEventHandle
|
||||
* @param[out] out_event Output Event.
|
||||
*/
|
||||
Result hidsysAcquireUniquePadConnectionEventHandle(Event *out_event);
|
||||
|
||||
/**
|
||||
* @brief Gets a list of all UniquePadIds.
|
||||
* @param[out] unique_pad_ids Output array of \ref HidsysUniquePadId.
|
||||
@ -311,6 +382,44 @@ Result hidsysEnableAppletToGetInput(bool enable);
|
||||
*/
|
||||
Result hidsysGetUniquePadIds(HidsysUniquePadId *unique_pad_ids, s32 count, s32 *total_out);
|
||||
|
||||
/**
|
||||
* @brief AcquireJoyDetachOnBluetoothOffEventHandle
|
||||
* @param[out] out_event Output Event.
|
||||
* @param[in] Event autoclear.
|
||||
*/
|
||||
Result hidsysAcquireJoyDetachOnBluetoothOffEventHandle(Event *out_event, bool autoclear);
|
||||
|
||||
/**
|
||||
* @brief GetUniquePadBluetoothAddress
|
||||
* @note Only available on [3.0.0+].
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
* @param[out] address \ref BtdrvAddress
|
||||
*/
|
||||
Result hidsysGetUniquePadBluetoothAddress(HidsysUniquePadId unique_pad_id, BtdrvAddress *address);
|
||||
|
||||
/**
|
||||
* @brief DisconnectUniquePad
|
||||
* @note Only available on [3.0.0+].
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
*/
|
||||
Result hidsysDisconnectUniquePad(HidsysUniquePadId unique_pad_id);
|
||||
|
||||
/**
|
||||
* @brief GetUniquePadType
|
||||
* @note Only available on [5.0.0+].
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
* @param[out] pad_type \ref HidsysUniquePadType
|
||||
*/
|
||||
Result hidsysGetUniquePadType(HidsysUniquePadId unique_pad_id, HidsysUniquePadType *pad_type);
|
||||
|
||||
/**
|
||||
* @brief GetUniquePadInterface
|
||||
* @note Only available on [5.0.0+].
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
* @param[out] interface \ref HidNpadInterfaceType
|
||||
*/
|
||||
Result hidsysGetUniquePadInterface(HidsysUniquePadId unique_pad_id, HidNpadInterfaceType *interface);
|
||||
|
||||
/**
|
||||
* @brief Gets the \ref HidsysUniquePadSerialNumber.
|
||||
* @note Only available on [5.0.0+].
|
||||
@ -319,6 +428,14 @@ Result hidsysGetUniquePadIds(HidsysUniquePadId *unique_pad_ids, s32 count, s32 *
|
||||
*/
|
||||
Result hidsysGetUniquePadSerialNumber(HidsysUniquePadId unique_pad_id, HidsysUniquePadSerialNumber *serial);
|
||||
|
||||
/**
|
||||
* @brief GetUniquePadControllerNumber
|
||||
* @note Only available on [5.0.0+].
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
* @param[out] number Controller number.
|
||||
*/
|
||||
Result hidsysGetUniquePadControllerNumber(HidsysUniquePadId unique_pad_id, u64 *number);
|
||||
|
||||
/**
|
||||
* @brief Sets the HOME-button notification LED pattern, for the specified controller.
|
||||
* @note Generally this should only be used if \ref hidsysSetNotificationLedPatternWithTimeout is not usable.
|
||||
@ -359,6 +476,13 @@ Result hidsysEnableUsbFullKeyController(bool flag);
|
||||
*/
|
||||
Result hidsysIsUsbConnected(HidsysUniquePadId unique_pad_id, bool *out);
|
||||
|
||||
/**
|
||||
* @brief GetTouchScreenDefaultConfiguration
|
||||
* @note Only available on [9.0.0+].
|
||||
* @param[out] touch_screen_configuration \ref HidTouchScreenConfigurationForNx.
|
||||
*/
|
||||
Result hidsysGetTouchScreenDefaultConfiguration(HidTouchScreenConfigurationForNx *touch_screen_configuration);
|
||||
|
||||
/**
|
||||
* @brief IsFirmwareUpdateNeededForNotification
|
||||
* @note Only available on [9.0.0+].
|
||||
@ -369,7 +493,7 @@ Result hidsysIsFirmwareUpdateNeededForNotification(HidsysUniquePadId unique_pad_
|
||||
|
||||
/**
|
||||
* @brief Legacy IsButtonConfigSupported.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysIsButtonConfigSupported instead.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0-17.0.1], use \ref hidsysIsButtonConfigSupported instead.
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
* @param[out] out Output bool flag.
|
||||
*/
|
||||
@ -377,7 +501,7 @@ Result hidsysLegacyIsButtonConfigSupported(HidsysUniquePadId unique_pad_id, bool
|
||||
|
||||
/**
|
||||
* @brief IsButtonConfigSupported
|
||||
* @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacyIsButtonConfigSupported instead.
|
||||
* @note Only available on [11.0.0-17.0.1]. On [10.0.0-10.2.0], use \ref hidsysLegacyIsButtonConfigSupported instead.
|
||||
* @param[in] addr \ref BtdrvAddress
|
||||
* @param[out] out Output bool flag.
|
||||
*/
|
||||
@ -385,34 +509,34 @@ Result hidsysIsButtonConfigSupported(BtdrvAddress addr, bool *out);
|
||||
|
||||
/**
|
||||
* @brief IsButtonConfigEmbeddedSupported
|
||||
* @note Only available on [11.0.0+].
|
||||
* @note Only available on [11.0.0-17.0.1].
|
||||
* @param[out] out Output bool flag.
|
||||
*/
|
||||
Result hidsysIsButtonConfigEmbeddedSupported(bool *out);
|
||||
|
||||
/**
|
||||
* @brief Legacy DeleteButtonConfig.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysDeleteButtonConfig instead.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0-17.0.1], use \ref hidsysDeleteButtonConfig instead.
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
*/
|
||||
Result hidsysLegacyDeleteButtonConfig(HidsysUniquePadId unique_pad_id);
|
||||
|
||||
/**
|
||||
* @brief DeleteButtonConfig
|
||||
* @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacyDeleteButtonConfig instead.
|
||||
* @note Only available on [11.0.0-17.0.1]. On [10.0.0-10.2.0], use \ref hidsysLegacyDeleteButtonConfig instead.
|
||||
* @param[in] addr \ref BtdrvAddress
|
||||
*/
|
||||
Result hidsysDeleteButtonConfig(BtdrvAddress addr);
|
||||
|
||||
/**
|
||||
* @brief DeleteButtonConfigEmbedded
|
||||
* @note Only available on [11.0.0+].
|
||||
* @note Only available on [11.0.0-17.0.1].
|
||||
*/
|
||||
Result hidsysDeleteButtonConfigEmbedded(void);
|
||||
|
||||
/**
|
||||
* @brief Legacy SetButtonConfigEnabled.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysSetButtonConfigEnabled instead.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0-17.0.1], use \ref hidsysSetButtonConfigEnabled instead.
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
* @param[in] flag Input flag.
|
||||
*/
|
||||
@ -420,7 +544,7 @@ Result hidsysLegacySetButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool
|
||||
|
||||
/**
|
||||
* @brief SetButtonConfigEnabled
|
||||
* @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacySetButtonConfigEnabled instead.
|
||||
* @note Only available on [11.0.0-17.0.1]. On [10.0.0-10.2.0], use \ref hidsysLegacySetButtonConfigEnabled instead.
|
||||
* @param[in] addr \ref BtdrvAddress
|
||||
* @param[in] flag Input flag.
|
||||
*/
|
||||
@ -428,14 +552,14 @@ Result hidsysSetButtonConfigEnabled(BtdrvAddress addr, bool flag);
|
||||
|
||||
/**
|
||||
* @brief SetButtonConfigEmbeddedEnabled
|
||||
* @note Only available on [11.0.0+].
|
||||
* @note Only available on [11.0.0-17.0.1].
|
||||
* @param[in] flag Input flag.
|
||||
*/
|
||||
Result hidsysSetButtonConfigEmbeddedEnabled(bool flag);
|
||||
|
||||
/**
|
||||
* @brief Legacy IsButtonConfigEnabled.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysIsButtonConfigEnabled instead.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0-17.0.1], use \ref hidsysIsButtonConfigEnabled instead.
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
* @param[out] out Output bool flag.
|
||||
*/
|
||||
@ -443,7 +567,7 @@ Result hidsysLegacyIsButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool *
|
||||
|
||||
/**
|
||||
* @brief IsButtonConfigEnabled
|
||||
* @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacyIsButtonConfigEnabled instead.
|
||||
* @note Only available on [11.0.0-17.0.1]. On [10.0.0-10.2.0], use \ref hidsysLegacyIsButtonConfigEnabled instead.
|
||||
* @param[in] addr \ref BtdrvAddress
|
||||
* @param[in] out Output bool flag.
|
||||
*/
|
||||
@ -451,14 +575,14 @@ Result hidsysIsButtonConfigEnabled(BtdrvAddress addr, bool *out);
|
||||
|
||||
/**
|
||||
* @brief IsButtonConfigEmbeddedEnabled
|
||||
* @note Only available on [11.0.0+].
|
||||
* @note Only available on [11.0.0-17.0.1].
|
||||
* @param[out] out Output bool flag.
|
||||
*/
|
||||
Result hidsysIsButtonConfigEmbeddedEnabled(bool *out);
|
||||
|
||||
/**
|
||||
* @brief Legacy SetButtonConfigEmbedded.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysSetButtonConfigEmbedded instead.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0-17.0.1], use \ref hidsysSetButtonConfigEmbedded instead.
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
* @param[in] config \ref HidsysButtonConfigEmbedded
|
||||
*/
|
||||
@ -466,14 +590,14 @@ Result hidsysLegacySetButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, cons
|
||||
|
||||
/**
|
||||
* @brief SetButtonConfigEmbedded
|
||||
* @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacySetButtonConfigEmbedded instead.
|
||||
* @note Only available on [11.0.0-17.0.1]. On [10.0.0-10.2.0], use \ref hidsysLegacySetButtonConfigEmbedded instead.
|
||||
* @param[in] config \ref HidsysButtonConfigEmbedded
|
||||
*/
|
||||
Result hidsysSetButtonConfigEmbedded(const HidsysButtonConfigEmbedded *config);
|
||||
|
||||
/**
|
||||
* @brief Legacy SetButtonConfigFull.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysSetButtonConfigFull instead.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0-17.0.1], use \ref hidsysSetButtonConfigFull instead.
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
* @param[in] config \ref HidsysButtonConfigFull
|
||||
*/
|
||||
@ -481,7 +605,7 @@ Result hidsysLegacySetButtonConfigFull(HidsysUniquePadId unique_pad_id, const Hi
|
||||
|
||||
/**
|
||||
* @brief SetButtonConfigFull
|
||||
* @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacySetButtonConfigFull instead.
|
||||
* @note Only available on [11.0.0-17.0.1]. On [10.0.0-10.2.0], use \ref hidsysLegacySetButtonConfigFull instead.
|
||||
* @param[in] addr \ref BtdrvAddress
|
||||
* @param[in] config \ref HidsysButtonConfigFull
|
||||
*/
|
||||
@ -489,7 +613,7 @@ Result hidsysSetButtonConfigFull(BtdrvAddress addr, const HidsysButtonConfigFull
|
||||
|
||||
/**
|
||||
* @brief Legacy SetButtonConfigLeft.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysSetButtonConfigLeft instead.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0-17.0.1], use \ref hidsysSetButtonConfigLeft instead.
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
* @param[in] config \ref HidsysButtonConfigLeft
|
||||
*/
|
||||
@ -497,7 +621,7 @@ Result hidsysLegacySetButtonConfigLeft(HidsysUniquePadId unique_pad_id, const Hi
|
||||
|
||||
/**
|
||||
* @brief SetButtonConfigLeft
|
||||
* @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacySetButtonConfigLeft instead.
|
||||
* @note Only available on [11.0.0-17.0.1]. On [10.0.0-10.2.0], use \ref hidsysLegacySetButtonConfigLeft instead.
|
||||
* @param[in] addr \ref BtdrvAddress
|
||||
* @param[in] config \ref HidsysButtonConfigLeft
|
||||
*/
|
||||
@ -505,7 +629,7 @@ Result hidsysSetButtonConfigLeft(BtdrvAddress addr, const HidsysButtonConfigLeft
|
||||
|
||||
/**
|
||||
* @brief Legacy SetButtonConfigRight.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysSetButtonConfigRight instead.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0-17.0.1], use \ref hidsysSetButtonConfigRight instead.
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
* @param[in] config \ref HidsysButtonConfigRight
|
||||
*/
|
||||
@ -513,7 +637,7 @@ Result hidsysLegacySetButtonConfigRight(HidsysUniquePadId unique_pad_id, const H
|
||||
|
||||
/**
|
||||
* @brief SetButtonConfigRight
|
||||
* @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacySetButtonConfigRight instead.
|
||||
* @note Only available on [11.0.0-17.0.1]. On [10.0.0-10.2.0], use \ref hidsysLegacySetButtonConfigRight instead.
|
||||
* @param[in] addr \ref BtdrvAddress
|
||||
* @param[in] config \ref HidsysButtonConfigRight
|
||||
*/
|
||||
@ -521,7 +645,7 @@ Result hidsysSetButtonConfigRight(BtdrvAddress addr, const HidsysButtonConfigRig
|
||||
|
||||
/**
|
||||
* @brief Legacy GetButtonConfigEmbedded.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysGetButtonConfigEmbedded instead.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0-17.0.1], use \ref hidsysGetButtonConfigEmbedded instead.
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
* @param[out] config \ref HidsysButtonConfigEmbedded
|
||||
*/
|
||||
@ -529,14 +653,14 @@ Result hidsysLegacyGetButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, Hids
|
||||
|
||||
/**
|
||||
* @brief GetButtonConfigEmbedded
|
||||
* @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacyGetButtonConfigEmbedded instead.
|
||||
* @note Only available on [11.0.0-17.0.1]. On [10.0.0-10.2.0], use \ref hidsysLegacyGetButtonConfigEmbedded instead.
|
||||
* @param[out] config \ref HidsysButtonConfigEmbedded
|
||||
*/
|
||||
Result hidsysGetButtonConfigEmbedded(HidsysButtonConfigEmbedded *config);
|
||||
|
||||
/**
|
||||
* @brief Legacy GetButtonConfigFull.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysGetButtonConfigFull instead.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0-17.0.1], use \ref hidsysGetButtonConfigFull instead.
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
* @param[out] config \ref HidsysButtonConfigFull
|
||||
*/
|
||||
@ -544,7 +668,7 @@ Result hidsysLegacyGetButtonConfigFull(HidsysUniquePadId unique_pad_id, HidsysBu
|
||||
|
||||
/**
|
||||
* @brief GetButtonConfigFull
|
||||
* @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacyGetButtonConfigFull instead.
|
||||
* @note Only available on [11.0.0-17.0.1]. On [10.0.0-10.2.0], use \ref hidsysLegacyGetButtonConfigFull instead.
|
||||
* @param[in] addr \ref BtdrvAddress
|
||||
* @param[out] config \ref HidsysButtonConfigFull
|
||||
*/
|
||||
@ -552,7 +676,7 @@ Result hidsysGetButtonConfigFull(BtdrvAddress addr, HidsysButtonConfigFull *conf
|
||||
|
||||
/**
|
||||
* @brief Legacy GetButtonConfigLeft.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysGetButtonConfigLeft instead.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0-17.0.1], use \ref hidsysGetButtonConfigLeft instead.
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
* @param[out] config \ref HidsysButtonConfigLeft
|
||||
*/
|
||||
@ -560,7 +684,7 @@ Result hidsysLegacyGetButtonConfigLeft(HidsysUniquePadId unique_pad_id, HidsysBu
|
||||
|
||||
/**
|
||||
* @brief GetButtonConfigLeft
|
||||
* @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacyGetButtonConfigLeft instead.
|
||||
* @note Only available on [11.0.0-17.0.1]. On [10.0.0-10.2.0], use \ref hidsysLegacyGetButtonConfigLeft instead.
|
||||
* @param[in] addr \ref BtdrvAddress
|
||||
* @param[out] config \ref HidsysButtonConfigLeft
|
||||
*/
|
||||
@ -568,7 +692,7 @@ Result hidsysGetButtonConfigLeft(BtdrvAddress addr, HidsysButtonConfigLeft *conf
|
||||
|
||||
/**
|
||||
* @brief Legacy GetButtonConfigRight.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysGetButtonConfigRight instead.
|
||||
* @note Only available on [10.0.0-10.2.0]. On [11.0.0-17.0.1], use \ref hidsysGetButtonConfigRight instead.
|
||||
* @param[in] unique_pad_id \ref HidsysUniquePadId
|
||||
* @param[out] config \ref HidsysButtonConfigRight
|
||||
*/
|
||||
@ -576,7 +700,7 @@ Result hidsysLegacyGetButtonConfigRight(HidsysUniquePadId unique_pad_id, HidsysB
|
||||
|
||||
/**
|
||||
* @brief GetButtonConfigRight
|
||||
* @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacyGetButtonConfigRight instead.
|
||||
* @note Only available on [11.0.0-17.0.1]. On [10.0.0-10.2.0], use \ref hidsysLegacyGetButtonConfigRight instead.
|
||||
* @param[in] addr \ref BtdrvAddress
|
||||
* @param[out] config \ref HidsysButtonConfigRight
|
||||
*/
|
||||
@ -656,7 +780,7 @@ Result hidsysIsButtonConfigStorageRightEmpty(s32 index, bool *out);
|
||||
|
||||
/**
|
||||
* @brief GetButtonConfigStorageEmbeddedDeprecated
|
||||
* @note Only available on [10.0.0+].
|
||||
* @note Only available on [10.0.0-12.1.0].
|
||||
* @param[in] index Array index, should be 0-4.
|
||||
* @param[out] config \ref HidcfgButtonConfigEmbedded
|
||||
*/
|
||||
@ -664,7 +788,7 @@ Result hidsysGetButtonConfigStorageEmbeddedDeprecated(s32 index, HidcfgButtonCon
|
||||
|
||||
/**
|
||||
* @brief GetButtonConfigStorageFullDeprecated
|
||||
* @note Only available on [10.0.0+].
|
||||
* @note Only available on [10.0.0-12.1.0].
|
||||
* @param[in] index Array index, should be 0-4.
|
||||
* @param[out] config \ref HidcfgButtonConfigFull
|
||||
*/
|
||||
@ -672,7 +796,7 @@ Result hidsysGetButtonConfigStorageFullDeprecated(s32 index, HidcfgButtonConfigF
|
||||
|
||||
/**
|
||||
* @brief GetButtonConfigStorageLeftDeprecated
|
||||
* @note Only available on [10.0.0+].
|
||||
* @note Only available on [10.0.0-12.1.0].
|
||||
* @param[in] index Array index, should be 0-4.
|
||||
* @param[out] config \ref HidcfgButtonConfigLeft
|
||||
*/
|
||||
@ -680,7 +804,7 @@ Result hidsysGetButtonConfigStorageLeftDeprecated(s32 index, HidcfgButtonConfigL
|
||||
|
||||
/**
|
||||
* @brief GetButtonConfigStorageRightDeprecated
|
||||
* @note Only available on [10.0.0+].
|
||||
* @note Only available on [10.0.0-12.1.0].
|
||||
* @param[in] index Array index, should be 0-4.
|
||||
* @param[out] config \ref HidcfgButtonConfigRight
|
||||
*/
|
||||
@ -688,7 +812,7 @@ Result hidsysGetButtonConfigStorageRightDeprecated(s32 index, HidcfgButtonConfig
|
||||
|
||||
/**
|
||||
* @brief SetButtonConfigStorageEmbeddedDeprecated
|
||||
* @note Only available on [10.0.0+].
|
||||
* @note Only available on [10.0.0-12.1.0].
|
||||
* @param[in] index Array index, should be 0-4.
|
||||
* @param[in] config \ref HidcfgButtonConfigEmbedded
|
||||
*/
|
||||
@ -696,7 +820,7 @@ Result hidsysSetButtonConfigStorageEmbeddedDeprecated(s32 index, const HidcfgBut
|
||||
|
||||
/**
|
||||
* @brief SetButtonConfigStorageFullDeprecated
|
||||
* @note Only available on [10.0.0+].
|
||||
* @note Only available on [10.0.0-12.1.0].
|
||||
* @param[in] index Array index, should be 0-4.
|
||||
* @param[in] config \ref HidcfgButtonConfigFull
|
||||
*/
|
||||
@ -704,7 +828,7 @@ Result hidsysSetButtonConfigStorageFullDeprecated(s32 index, const HidcfgButtonC
|
||||
|
||||
/**
|
||||
* @brief SetButtonConfigStorageLeftDeprecated
|
||||
* @note Only available on [10.0.0+].
|
||||
* @note Only available on [10.0.0-12.1.0].
|
||||
* @param[in] index Array index, should be 0-4.
|
||||
* @param[in] config \ref HidcfgButtonConfigLeft
|
||||
*/
|
||||
@ -712,7 +836,7 @@ Result hidsysSetButtonConfigStorageLeftDeprecated(s32 index, const HidcfgButtonC
|
||||
|
||||
/**
|
||||
* @brief SetButtonConfigStorageRightDeprecated
|
||||
* @note Only available on [10.0.0+].
|
||||
* @note Only available on [10.0.0-12.1.0].
|
||||
* @param[in] index Array index, should be 0-4.
|
||||
* @param[in] config \ref HidcfgButtonConfigRight
|
||||
*/
|
||||
@ -910,4 +1034,3 @@ Result hidsysSetButtonConfigStorageLeft(s32 index, const HidcfgButtonConfigLeft
|
||||
* @param[in] name \ref HidcfgStorageName
|
||||
*/
|
||||
Result hidsysSetButtonConfigStorageRight(s32 index, const HidcfgButtonConfigRight *config, const HidcfgStorageName *name);
|
||||
|
||||
|
150
nx/include/switch/services/htcs.h
Normal file
150
nx/include/switch/services/htcs.h
Normal file
@ -0,0 +1,150 @@
|
||||
/**
|
||||
* @file htcs.h
|
||||
* @brief HTC sockets (htcs) service IPC wrapper. Please use <<TODO>> instead.
|
||||
* @author SciresM
|
||||
* @copyright libnx Authors
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include "../types.h"
|
||||
#include "../sf/service.h"
|
||||
|
||||
#define HTCS_PEER_NAME_MAX 32
|
||||
#define HTCS_PORT_NAME_MAX 32
|
||||
|
||||
#define HTCS_SESSION_COUNT_MAX 0x10
|
||||
#define HTCS_SOCKET_COUNT_MAX 40
|
||||
#define HTCS_FD_SET_SIZE HTCS_SOCKET_COUNT_MAX
|
||||
|
||||
typedef uint16_t HtcsAddressFamilyType;
|
||||
|
||||
typedef struct {
|
||||
char name[HTCS_PEER_NAME_MAX];
|
||||
} HtcsPeerName;
|
||||
|
||||
typedef struct {
|
||||
char name[HTCS_PORT_NAME_MAX];
|
||||
} HtcsPortName;
|
||||
|
||||
typedef struct {
|
||||
HtcsAddressFamilyType family;
|
||||
HtcsPeerName peer_name;
|
||||
HtcsPortName port_name;
|
||||
} HtcsSockAddr;
|
||||
|
||||
typedef struct {
|
||||
s64 tv_sec;
|
||||
s64 tv_usec;
|
||||
} HtcsTimeVal;
|
||||
|
||||
typedef struct {
|
||||
int fds[HTCS_FD_SET_SIZE];
|
||||
} HtcsFdSet;
|
||||
|
||||
typedef enum {
|
||||
HTCS_ENONE = 0,
|
||||
HTCS_EACCES = 2,
|
||||
HTCS_EADDRINUSE = 3,
|
||||
HTCS_EADDRNOTAVAIL = 4,
|
||||
HTCS_EAGAIN = 6,
|
||||
HTCS_EALREADY = 7,
|
||||
HTCS_EBADF = 8,
|
||||
HTCS_EBUSY = 10,
|
||||
HTCS_ECONNABORTED = 13,
|
||||
HTCS_ECONNREFUSED = 14,
|
||||
HTCS_ECONNRESET = 15,
|
||||
HTCS_EDESTADDRREQ = 17,
|
||||
HTCS_EFAULT = 21,
|
||||
HTCS_EINPROGRESS = 26,
|
||||
HTCS_EINTR = 27,
|
||||
HTCS_EINVAL = 28,
|
||||
HTCS_EIO = 29,
|
||||
HTCS_EISCONN = 30,
|
||||
HTCS_EMFILE = 33,
|
||||
HTCS_EMSGSIZE = 35,
|
||||
HTCS_ENETDOWN = 38,
|
||||
HTCS_ENETRESET = 39,
|
||||
HTCS_ENOBUFS = 42,
|
||||
HTCS_ENOMEM = 49,
|
||||
HTCS_ENOTCONN = 56,
|
||||
HTCS_ETIMEDOUT = 76,
|
||||
HTCS_EUNKNOWN = 79,
|
||||
|
||||
HTCS_EWOULDBLOCK = HTCS_EAGAIN,
|
||||
} HtcsSocketError;
|
||||
|
||||
typedef enum {
|
||||
HTCS_MSG_PEEK = 1,
|
||||
HTCS_MSG_WAITALL = 2,
|
||||
} HtcsMessageFlag;
|
||||
|
||||
typedef enum {
|
||||
HTCS_SHUT_RD = 0,
|
||||
HTCS_SHUT_WR = 1,
|
||||
HTCS_SHUT_RDWR = 2,
|
||||
} HtcsShutdownType;
|
||||
|
||||
typedef enum {
|
||||
HTCS_F_GETFL = 3,
|
||||
HTCS_F_SETFL = 4,
|
||||
} HtcsFcntlOperation;
|
||||
|
||||
typedef enum {
|
||||
HTCS_O_NONBLOCK = 4,
|
||||
} HtcsFcntlFlag;
|
||||
|
||||
typedef enum {
|
||||
HTCS_AF_HTCS = 0,
|
||||
} HtcsAddressFamily;
|
||||
|
||||
typedef struct {
|
||||
Service s;
|
||||
} HtcsSocket;
|
||||
|
||||
|
||||
/// Initialize the HTCS service.
|
||||
Result htcsInitialize(u32 num_sessions);
|
||||
|
||||
/// Exit the HTCS service.
|
||||
void htcsExit(void);
|
||||
|
||||
/// Gets the Service object for the actual HTCS manager service session.
|
||||
Service* htcsGetManagerServiceSession(void);
|
||||
|
||||
/// Gets the Service object for the actual HTCS monitor service session.
|
||||
Service* htcsGetMonitorServiceSession(void);
|
||||
|
||||
/// Manager functionality.
|
||||
Result htcsGetPeerNameAny(HtcsPeerName *out);
|
||||
Result htcsGetDefaultHostName(HtcsPeerName *out);
|
||||
Result htcsCreateSocket(s32 *out_err, HtcsSocket *out, bool enable_disconnection_emulation);
|
||||
Result htcsStartSelect(u32 *out_task_id, Handle *out_event_handle, const s32 *read, size_t num_read, const s32 *write, size_t num_write, const s32 *except, size_t num_except, s64 tv_sec, s64 tv_usec);
|
||||
Result htcsEndSelect(s32 *out_err, s32 *out_count, s32 *read, size_t num_read, s32 *write, size_t num_write, s32 *except, size_t num_except, u32 task_id);
|
||||
|
||||
/// Socket functionality.
|
||||
Result htcsSocketClose(HtcsSocket *s, s32 *out_err, s32 *out_res);
|
||||
Result htcsSocketConnect(HtcsSocket *s, s32 *out_err, s32 *out_res, const HtcsSockAddr *address);
|
||||
Result htcsSocketBind(HtcsSocket *s, s32 *out_err, s32 *out_res, const HtcsSockAddr *address);
|
||||
Result htcsSocketListen(HtcsSocket *s, s32 *out_err, s32 *out_res, s32 backlog_count);
|
||||
Result htcsSocketShutdown(HtcsSocket *s, s32 *out_err, s32 *out_res, s32 how);
|
||||
Result htcsSocketFcntl(HtcsSocket *s, s32 *out_err, s32 *out_res, s32 command, s32 value);
|
||||
|
||||
Result htcsSocketAcceptStart(HtcsSocket *s, u32 *out_task_id, Handle *out_event_handle);
|
||||
Result htcsSocketAcceptResults(HtcsSocket *s, s32 *out_err, HtcsSocket *out_socket, HtcsSockAddr *out_address, u32 task_id);
|
||||
|
||||
Result htcsSocketRecvStart(HtcsSocket *s, u32 *out_task_id, Handle *out_event_handle, s32 mem_size, s32 flags);
|
||||
Result htcsSocketRecvResults(HtcsSocket *s, s32 *out_err, s64 *out_size, void *buffer, size_t buffer_size, u32 task_id);
|
||||
|
||||
Result htcsSocketSendStart(HtcsSocket *s, u32 *out_task_id, Handle *out_event_handle, const void *buffer, size_t buffer_size, s32 flags);
|
||||
Result htcsSocketSendResults(HtcsSocket *s, s32 *out_err, s64 *out_size, u32 task_id);
|
||||
|
||||
Result htcsSocketStartSend(HtcsSocket *s, u32 *out_task_id, Handle *out_event_handle, s64 *out_max_size, s64 size, s32 flags);
|
||||
Result htcsSocketContinueSend(HtcsSocket *s, s64 *out_size, bool *out_wait, const void *buffer, size_t buffer_size, u32 task_id);
|
||||
Result htcsSocketEndSend(HtcsSocket *s, s32 *out_err, s64 *out_size, u32 task_id);
|
||||
|
||||
Result htcsSocketStartRecv(HtcsSocket *s, u32 *out_task_id, Handle *out_event_handle, s64 size, s32 flags);
|
||||
Result htcsSocketEndRecv(HtcsSocket *s, s32 *out_err, s64 *out_size, void *buffer, size_t buffer_size, u32 task_id);
|
||||
|
||||
Result htcsSocketGetPrimitive(HtcsSocket *s, s32 *out);
|
||||
|
||||
void htcsCloseSocket(HtcsSocket *s);
|
@ -67,6 +67,12 @@ typedef enum {
|
||||
LdnWirelessControllerRestriction_Unknown1 = 1, ///< Unknown
|
||||
} LdnWirelessControllerRestriction;
|
||||
|
||||
/// Protocol
|
||||
typedef enum {
|
||||
LdnProtocol_NX = 1, ///< NX (default)
|
||||
LdnProtocol_Unknown3 = 3, ///< (NXAndOunce?)
|
||||
} LdnProtocol;
|
||||
|
||||
/// Ipv4Address. This is essentially the same as struct in_addr - hence this can be used with standard sockets (byteswap required).
|
||||
typedef struct {
|
||||
u32 addr; ///< Address
|
||||
@ -331,6 +337,13 @@ Result ldnScanPrivate(s32 channel, const LdnScanFilter *filter, LdnNetworkInfo *
|
||||
*/
|
||||
Result ldnSetWirelessControllerRestriction(LdnWirelessControllerRestriction restriction);
|
||||
|
||||
/**
|
||||
* @brief SetProtocol
|
||||
* @note This is only usable with [20.0.0+] (with [18.0.0-19-0.1] this is available but not usable).
|
||||
* @param[in] protocol \ref LdnProtocol
|
||||
*/
|
||||
Result ldnSetProtocol(LdnProtocol protocol);
|
||||
|
||||
/**
|
||||
* @brief OpenAccessPoint
|
||||
* @note \ref LdnState must be ::LdnState_Initialized, this eventually sets the State to ::LdnState_AccessPointOpened.
|
||||
|
@ -20,6 +20,20 @@ typedef struct {
|
||||
u32 acid_fac_size;
|
||||
u32 aci0_fah_size;
|
||||
u8 ac_buffer[0x3E0];
|
||||
} LoaderProgramInfoV1;
|
||||
|
||||
typedef struct {
|
||||
u8 main_thread_priority;
|
||||
u8 default_cpu_id;
|
||||
u16 application_type;
|
||||
u32 main_thread_stack_size;
|
||||
u64 program_id;
|
||||
u32 acid_sac_size;
|
||||
u32 aci0_sac_size;
|
||||
u32 acid_fac_size;
|
||||
u32 aci0_fah_size;
|
||||
u8 unused_20[0x10];
|
||||
u8 ac_buffer[0x3E0];
|
||||
} LoaderProgramInfo;
|
||||
|
||||
typedef struct {
|
||||
@ -28,6 +42,11 @@ typedef struct {
|
||||
u64 size;
|
||||
} LoaderModuleInfo;
|
||||
|
||||
typedef struct {
|
||||
u8 platform; ///< NcmContentMetaPlatform
|
||||
u8 content_attributes; ///< FsContentAttributes
|
||||
} LoaderProgramAttributes;
|
||||
|
||||
/// Initialize ldr:shel.
|
||||
Result ldrShellInitialize(void);
|
||||
|
||||
@ -62,8 +81,9 @@ Result ldrDmntSetProgramArguments(u64 program_id, const void *args, size_t args_
|
||||
Result ldrDmntFlushArguments(void);
|
||||
Result ldrDmntGetProcessModuleInfo(u64 pid, LoaderModuleInfo *out_module_infos, size_t max_out_modules, s32 *num_out);
|
||||
|
||||
Result ldrPmCreateProcess(u64 pin_id, u32 flags, Handle reslimit_h, Handle *out_process_h);
|
||||
Result ldrPmGetProgramInfo(const NcmProgramLocation *loc, LoaderProgramInfo *out_program_info);
|
||||
Result ldrPmCreateProcess(u64 pin_id, u32 flags, Handle reslimit_h, const LoaderProgramAttributes *attrs, Handle *out_process_h);
|
||||
Result ldrPmGetProgramInfo(const NcmProgramLocation *loc, const LoaderProgramAttributes *attrs, LoaderProgramInfo *out_program_info); ///< [19.0.0+/Atmosphere]
|
||||
Result ldrPmGetProgramInfoV1(const NcmProgramLocation *loc, LoaderProgramInfoV1 *out_program_info); ///< [1.0.0-18.1.0/Non-Atmosphere]
|
||||
Result ldrPmPinProgram(const NcmProgramLocation *loc, u64 *out_pin_id);
|
||||
Result ldrPmUnpinProgram(u64 pin_id);
|
||||
Result ldrPmSetEnabledProgramVerification(bool enabled); ///< [10.0.0+]
|
||||
|
@ -113,6 +113,27 @@ typedef struct {
|
||||
u8 unk_x57;
|
||||
} MiiCharInfo;
|
||||
|
||||
typedef struct {
|
||||
u8 data[0x44];
|
||||
} MiiStoreData;
|
||||
|
||||
// Mii format used in 3DS (https://www.3dbrew.org/wiki/Mii#Mii_format).
|
||||
typedef struct {
|
||||
u8 data[0x5C];
|
||||
} MiiVer3StoreData;
|
||||
|
||||
// Original Mii colors and types before Ver3StoreData conversion
|
||||
typedef struct {
|
||||
u8 faceline_color;
|
||||
u8 hair_color;
|
||||
u8 eye_color;
|
||||
u8 eyebrow_color;
|
||||
u8 mouth_color;
|
||||
u8 beard_color;
|
||||
u8 glass_color;
|
||||
u8 glass_type;
|
||||
} MiiNfpStoreDataExtension;
|
||||
|
||||
/// Initialize mii.
|
||||
Result miiInitialize(MiiServiceType service_type);
|
||||
|
||||
|
@ -20,7 +20,7 @@ typedef struct {
|
||||
MiiCreateId create_id; ///< Mii's create ID.
|
||||
u32 unk;
|
||||
u16 mii_name[10+1]; ///< utf-16be, null-terminated
|
||||
} PACKED MiiimgImageAttribute;
|
||||
} NX_PACKED MiiimgImageAttribute;
|
||||
|
||||
/// Initialize miiimg.
|
||||
Result miiimgInitialize(void);
|
||||
|
31
nx/include/switch/services/mm.h
Normal file
31
nx/include/switch/services/mm.h
Normal file
@ -0,0 +1,31 @@
|
||||
/**
|
||||
* @file mmu.h
|
||||
* @brief Multimedia (mm) IPC wrapper.
|
||||
* @author averne
|
||||
* @copyright libnx Authors
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "../types.h"
|
||||
#include "../sf/service.h"
|
||||
|
||||
typedef enum {
|
||||
MmuModuleId_Ram = 2,
|
||||
MmuModuleId_Nvenc = 5,
|
||||
MmuModuleId_Nvdec = 6,
|
||||
MmuModuleId_Nvjpg = 7,
|
||||
} MmuModuleId;
|
||||
|
||||
typedef struct {
|
||||
MmuModuleId module;
|
||||
u32 id;
|
||||
} MmuRequest;
|
||||
|
||||
Result mmuInitialize(void);
|
||||
void mmuExit(void);
|
||||
Service* mmuGetServiceSession(void);
|
||||
|
||||
Result mmuRequestInitialize(MmuRequest *request, MmuModuleId module, u32 unk, bool autoclear); ///< unk is ignored by official software
|
||||
Result mmuRequestFinalize(const MmuRequest *request);
|
||||
Result mmuRequestGet(const MmuRequest *request, u32 *out_freq_hz);
|
||||
Result mmuRequestSetAndWait(const MmuRequest *request, u32 freq_hz, s32 timeout);
|
@ -50,6 +50,7 @@ Result ncmInactivateContentStorage(NcmStorageId storage_id); ///< [2.0.0+]
|
||||
Result ncmActivateContentMetaDatabase(NcmStorageId storage_id); ///< [2.0.0+]
|
||||
Result ncmInactivateContentMetaDatabase(NcmStorageId storage_id); ///< [2.0.0+]
|
||||
Result ncmInvalidateRightsIdCache(void); ///< [9.0.0+]
|
||||
Result ncmActivateFsContentStorage(FsContentStorageId fs_storage_id); ///< [16.0.0+]
|
||||
|
||||
void ncmContentStorageClose(NcmContentStorage* cs);
|
||||
Result ncmContentStorageGeneratePlaceHolderId(NcmContentStorage* cs, NcmPlaceHolderId* out_id);
|
||||
@ -71,15 +72,18 @@ Result ncmContentStorageDisableForcibly(NcmContentStorage* cs);
|
||||
Result ncmContentStorageRevertToPlaceHolder(NcmContentStorage* cs, const NcmPlaceHolderId* placeholder_id, const NcmContentId* old_content_id, const NcmContentId* new_content_id); ///< [2.0.0+]
|
||||
Result ncmContentStorageSetPlaceHolderSize(NcmContentStorage* cs, const NcmPlaceHolderId* placeholder_id, s64 size); ///< [2.0.0+]
|
||||
Result ncmContentStorageReadContentIdFile(NcmContentStorage* cs, void* out_data, size_t out_data_size, const NcmContentId* content_id, s64 offset); ///< [2.0.0+]
|
||||
Result ncmContentStorageGetRightsIdFromPlaceHolderId(NcmContentStorage* cs, NcmRightsId* out_rights_id, const NcmPlaceHolderId* placeholder_id); ///< [2.0.0+]
|
||||
Result ncmContentStorageGetRightsIdFromContentId(NcmContentStorage* cs, NcmRightsId* out_rights_id, const NcmContentId* content_id); ///< [2.0.0+]
|
||||
Result ncmContentStorageGetRightsIdFromPlaceHolderId(NcmContentStorage* cs, NcmRightsId* out_rights_id, const NcmPlaceHolderId* placeholder_id, FsContentAttributes attr); ///< [2.0.0+]
|
||||
Result ncmContentStorageGetRightsIdFromContentId(NcmContentStorage* cs, NcmRightsId* out_rights_id, const NcmContentId* content_id, FsContentAttributes attr); ///< [2.0.0+]
|
||||
Result ncmContentStorageWriteContentForDebug(NcmContentStorage* cs, const NcmContentId* content_id, s64 offset, const void* data, size_t data_size); ///< [2.0.0+]
|
||||
Result ncmContentStorageGetFreeSpaceSize(NcmContentStorage* cs, s64* out_size); ///< [2.0.0+]
|
||||
Result ncmContentStorageGetTotalSpaceSize(NcmContentStorage* cs, s64* out_size); ///< [2.0.0+]
|
||||
Result ncmContentStorageFlushPlaceHolder(NcmContentStorage* cs); ///< [3.0.0+]
|
||||
Result ncmContentStorageGetSizeFromPlaceHolderId(NcmContentStorage* cs, s64* out_size, const NcmPlaceHolderId* placeholder_id); ///< [4.0.0+]
|
||||
Result ncmContentStorageRepairInvalidFileAttribute(NcmContentStorage* cs); ///< [4.0.0+]
|
||||
Result ncmContentStorageGetRightsIdFromPlaceHolderIdWithCache(NcmContentStorage* cs, NcmRightsId* out_rights_id, const NcmPlaceHolderId* placeholder_id, const NcmContentId* cache_content_id); ///< [8.0.0+]
|
||||
Result ncmContentStorageGetRightsIdFromPlaceHolderIdWithCache(NcmContentStorage* cs, NcmRightsId* out_rights_id, const NcmPlaceHolderId* placeholder_id, const NcmContentId* cache_content_id, FsContentAttributes attr); ///< [8.0.0+]
|
||||
Result ncmContentStorageRegisterPath(NcmContentStorage* cs, const NcmContentId* content_id, const char *path); ///< [13.0.0+]
|
||||
Result ncmContentStorageClearRegisteredPath(NcmContentStorage* cs); ///< [13.0.0+]
|
||||
Result ncmContentStorageGetProgramId(NcmContentStorage* cs, u64* out, const NcmContentId* content_id, FsContentAttributes attr); ///< [17.0.0+]
|
||||
|
||||
void ncmContentMetaDatabaseClose(NcmContentMetaDatabase* db);
|
||||
Result ncmContentMetaDatabaseSet(NcmContentMetaDatabase* db, const NcmContentMetaKey* key, const void* data, u64 data_size);
|
||||
@ -94,7 +98,7 @@ Result ncmContentMetaDatabaseHas(NcmContentMetaDatabase* db, bool* out, const Nc
|
||||
Result ncmContentMetaDatabaseHasAll(NcmContentMetaDatabase* db, bool* out, const NcmContentMetaKey* keys, s32 count);
|
||||
Result ncmContentMetaDatabaseGetSize(NcmContentMetaDatabase* db, u64* out_size, const NcmContentMetaKey* key);
|
||||
Result ncmContentMetaDatabaseGetRequiredSystemVersion(NcmContentMetaDatabase* db, u32* out_version, const NcmContentMetaKey* key);
|
||||
Result ncmContentMetaDatabaseGetPatchId(NcmContentMetaDatabase* db, u64* out_patch_id, const NcmContentMetaKey* key);
|
||||
Result ncmContentMetaDatabaseGetPatchContentMetaId(NcmContentMetaDatabase* db, u64* out_patch_id, const NcmContentMetaKey* key);
|
||||
Result ncmContentMetaDatabaseDisableForcibly(NcmContentMetaDatabase* db);
|
||||
Result ncmContentMetaDatabaseLookupOrphanContent(NcmContentMetaDatabase* db, bool* out_orphaned, const NcmContentId* content_ids, s32 count);
|
||||
Result ncmContentMetaDatabaseCommit(NcmContentMetaDatabase* db);
|
||||
@ -103,3 +107,4 @@ Result ncmContentMetaDatabaseListContentMetaInfo(NcmContentMetaDatabase* db, s32
|
||||
Result ncmContentMetaDatabaseGetAttributes(NcmContentMetaDatabase* db, const NcmContentMetaKey* key, u8* out);
|
||||
Result ncmContentMetaDatabaseGetRequiredApplicationVersion(NcmContentMetaDatabase* db, u32* out_version, const NcmContentMetaKey* key); ///< [2.0.0+]
|
||||
Result ncmContentMetaDatabaseGetContentIdByTypeAndIdOffset(NcmContentMetaDatabase* db, NcmContentId* out_content_id, const NcmContentMetaKey* key, NcmContentType type, u8 id_offset); ///< [5.0.0+]
|
||||
Result ncmContentMetaDatabaseGetPlatform(NcmContentMetaDatabase* db, u8* out, const NcmContentMetaKey* key); ///< [17.0.0+]
|
||||
|
@ -42,6 +42,7 @@ typedef enum {
|
||||
NcmContentMetaType_Patch = 0x81, ///< Patch
|
||||
NcmContentMetaType_AddOnContent = 0x82, ///< AddOnContent
|
||||
NcmContentMetaType_Delta = 0x83, ///< Delta
|
||||
NcmContentMetaType_DataPatch = 0x84, ///< DataPatch
|
||||
} NcmContentMetaType;
|
||||
|
||||
/// ContentMetaAttribute
|
||||
@ -49,6 +50,7 @@ typedef enum {
|
||||
NcmContentMetaAttribute_None = 0, ///< None
|
||||
NcmContentMetaAttribute_IncludesExFatDriver = BIT(0), ///< IncludesExFatDriver
|
||||
NcmContentMetaAttribute_Rebootless = BIT(1), ///< Rebootless
|
||||
NcmContentMetaAttribute_Compacted = BIT(2), ///< Compacted
|
||||
} NcmContentMetaAttribute;
|
||||
|
||||
/// ContentInstallType
|
||||
@ -58,14 +60,19 @@ typedef enum {
|
||||
NcmContentInstallType_Unknown = 7, ///< Unknown
|
||||
} NcmContentInstallType;
|
||||
|
||||
/// ContentMetaPlatform
|
||||
typedef enum {
|
||||
NcmContentMetaPlatform_Nx = 0, ///< Nx
|
||||
} NcmContentMetaPlatform;
|
||||
|
||||
/// ContentId
|
||||
typedef struct {
|
||||
alignas(4) u8 c[0x10]; ///< Id
|
||||
u8 c[0x10]; ///< Id
|
||||
} NcmContentId;
|
||||
|
||||
/// PlaceHolderId
|
||||
typedef struct {
|
||||
alignas(8) Uuid uuid; ///< UUID
|
||||
Uuid uuid; ///< UUID
|
||||
} NcmPlaceHolderId;
|
||||
|
||||
/// ContentMetaKey
|
||||
@ -86,7 +93,9 @@ typedef struct {
|
||||
/// ContentInfo
|
||||
typedef struct {
|
||||
NcmContentId content_id; ///< \ref NcmContentId
|
||||
u8 size[0x6]; ///< Content size.
|
||||
u32 size_low; ///< Content size (low).
|
||||
u8 size_high; ///< Content size (high).
|
||||
u8 attr; ///< Content attributes.
|
||||
u8 content_type; ///< \ref NcmContentType.
|
||||
u8 id_offset; ///< Offset of this content. Unused by most applications.
|
||||
} NcmContentInfo;
|
||||
@ -130,12 +139,30 @@ typedef struct {
|
||||
u8 reserved[0x8]; ///< Unused.
|
||||
} NcmPatchMetaExtendedHeader;
|
||||
|
||||
/// AddOnContentMetaExtendedHeader
|
||||
/// AddOnContentMetaExtendedHeader [15.0.0+]
|
||||
typedef struct {
|
||||
u64 application_id; ///< ApplicationId of this add-on-content's corresponding application.
|
||||
u32 required_application_version; ///< Version of the application required by this add-on-content.
|
||||
u8 content_accessibilities; ///< Content accessibilities.
|
||||
u8 padding[3]; ///< Padding.
|
||||
u64 data_patch_id; ///< DataPatchId of this add-on-content's corresponding data patch.
|
||||
} NcmAddOnContentMetaExtendedHeader;
|
||||
|
||||
/// LegacyAddOnContentMetaExtendedHeader [1.0.0-14.1.2]
|
||||
typedef struct {
|
||||
u64 application_id; ///< ApplicationId of this add-on-content's corresponding application.
|
||||
u32 required_application_version; ///< Version of the application required by this add-on-content.
|
||||
u32 padding; ///< Padding.
|
||||
} NcmAddOnContentMetaExtendedHeader;
|
||||
} NcmLegacyAddOnContentMetaExtendedHeader;
|
||||
|
||||
/// DataPatchMetaExtendedHeader
|
||||
typedef struct {
|
||||
u64 data_id; ///< DataId of this data patch's corresponding add-on-content.
|
||||
u64 application_id; ///< ApplicationId of this data patch's add-on-content's corresponding application.
|
||||
u32 required_application_version; ///< Version of the application required by this data patch.
|
||||
u32 extended_data_size; ///< Size of the extended data following the NcmContentInfos.
|
||||
u64 padding; ///< Padding.
|
||||
} NcmDataPatchMetaExtendedHeader;
|
||||
|
||||
/// SystemUpdateMetaExtendedHeader
|
||||
typedef struct {
|
||||
@ -148,3 +175,22 @@ typedef struct {
|
||||
u8 storageID; ///< \ref NcmStorageId
|
||||
u8 pad[7]; ///< Padding
|
||||
} NcmProgramLocation;
|
||||
|
||||
/**
|
||||
* @brief Retrieves the content size from a \ref NcmContentInfo struct.
|
||||
* @param[in] info Pointer to \ref NcmContentInfo struct.
|
||||
* @param[out] out Output size.
|
||||
*/
|
||||
NX_CONSTEXPR void ncmContentInfoSizeToU64(const NcmContentInfo *info, u64 *out) {
|
||||
*out = ((u64)info->size_high << 32) | info->size_low;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Updates the content size from a \ref NcmContentInfo struct.
|
||||
* @param[in] size Input size.
|
||||
* @param[out] out Pointer to \ref NcmContentInfo struct.
|
||||
*/
|
||||
NX_CONSTEXPR void ncmU64ToContentInfoSize(const u64 size, NcmContentInfo *info) {
|
||||
info->size_low = size & 0xFFFFFFFF;
|
||||
info->size_high = (u8)(size >> 32);
|
||||
}
|
||||
|
@ -24,9 +24,9 @@ typedef enum {
|
||||
} NfcServiceType;
|
||||
|
||||
typedef enum {
|
||||
NfpState_NonInitialized = 0,
|
||||
NfpState_Initialized = 1,
|
||||
} NfpState;
|
||||
NfcState_NonInitialized = 0,
|
||||
NfcState_Initialized = 1,
|
||||
} NfcState;
|
||||
|
||||
typedef enum {
|
||||
NfpDeviceState_Initialized = 0,
|
||||
@ -35,51 +35,218 @@ typedef enum {
|
||||
NfpDeviceState_TagRemoved = 3,
|
||||
NfpDeviceState_TagMounted = 4,
|
||||
NfpDeviceState_Unavailable = 5,
|
||||
NfpDeviceState_Finalized = 6,
|
||||
} NfpDeviceState;
|
||||
|
||||
typedef enum {
|
||||
NfcDeviceState_Initialized = 0,
|
||||
NfcDeviceState_SearchingForTag = 1,
|
||||
NfcDeviceState_TagFound = 2,
|
||||
NfcDeviceState_TagRemoved = 3,
|
||||
NfcDeviceState_TagMounted = 4,
|
||||
} NfcDeviceState;
|
||||
|
||||
typedef enum {
|
||||
NfcMifareDeviceState_Initialized = 0,
|
||||
NfcMifareDeviceState_SearchingForTag = 1,
|
||||
NfcMifareDeviceState_TagFound = 2,
|
||||
NfcMifareDeviceState_TagRemoved = 3,
|
||||
NfcMifareDeviceState_TagMounted = 4,
|
||||
NfcMifareDeviceState_Unavailable = 5,
|
||||
} NfcMifareDeviceState;
|
||||
|
||||
typedef enum {
|
||||
NfpApplicationAreaVersion_3DS = 0, ///< Application area created by a 3DS game.
|
||||
NfpApplicationAreaVersion_WiiU = 1, ///< Application area created by a Wii U game.
|
||||
NfpApplicationAreaVersion_3DSv2 = 2, ///< Application area created by a (new?) 3DS game.
|
||||
NfpApplicationAreaVersion_Switch = 3, ///< Application area created by a Switch game.
|
||||
NfpApplicationAreaVersion_Invalid = 0xFF, ///< Invalid value (application area not created).
|
||||
} NfpApplicationAreaVersion;
|
||||
|
||||
typedef enum {
|
||||
NfpDeviceType_Amiibo = 0,
|
||||
} NfpDeviceType;
|
||||
|
||||
typedef enum {
|
||||
NfpMountTarget_Rom = 1,
|
||||
NfpMountTarget_Ram = 2,
|
||||
NfpMountTarget_All = 3,
|
||||
NfpMountTarget_Rom = BIT(0),
|
||||
NfpMountTarget_Ram = BIT(1),
|
||||
NfpMountTarget_All = NfpMountTarget_Rom | NfpMountTarget_Ram,
|
||||
} NfpMountTarget;
|
||||
|
||||
typedef struct {
|
||||
u8 uuid[10];
|
||||
u8 uuid_length;
|
||||
u8 reserved1[0x15];
|
||||
u32 protocol;
|
||||
u32 tag_type;
|
||||
u8 reserved2[0x30];
|
||||
} PACKED NfpTagInfo;
|
||||
typedef enum {
|
||||
NfcProtocol_None = 0,
|
||||
NfcProtocol_TypeA = BIT(0), ///< ISO14443A
|
||||
NfcProtocol_TypeB = BIT(1), ///< ISO14443B
|
||||
NfcProtocol_TypeF = BIT(2), ///< Sony FeliCa
|
||||
NfcProtocol_All = 0xFFFFFFFF,
|
||||
} NfcProtocol;
|
||||
|
||||
typedef enum {
|
||||
NfcTagType_None = 0,
|
||||
NfcTagType_Type1 = BIT(0), ///< ISO14443A RW. Topaz
|
||||
NfcTagType_Type2 = BIT(1), ///< ISO14443A RW. Ultralight, NTAGX, ST25TN
|
||||
NfcTagType_Type3 = BIT(2), ///< ISO14443A RW/RO. Sony FeliCa
|
||||
NfcTagType_Type4A = BIT(3), ///< ISO14443A RW/RO. DESFire
|
||||
NfcTagType_Type4B = BIT(4), ///< ISO14443B RW/RO. DESFire
|
||||
NfcTagType_Type5 = BIT(5), ///< ISO15693 RW/RO. SLI, SLIX, ST25TV
|
||||
NfcTagType_Mifare = BIT(6), ///< Mifare clasic. Skylanders
|
||||
NfcTagType_All = 0xFFFFFFFF,
|
||||
} NfcTagType;
|
||||
|
||||
typedef enum {
|
||||
NfcMifareCommand_Read = 0x30,
|
||||
NfcMifareCommand_AuthA = 0x60,
|
||||
NfcMifareCommand_AuthB = 0x61,
|
||||
NfcMifareCommand_Write = 0xA0,
|
||||
NfcMifareCommand_Transfer = 0xB0,
|
||||
NfcMifareCommand_Decrement = 0xC0,
|
||||
NfcMifareCommand_Increment = 0xC1,
|
||||
NfcMifareCommand_Store = 0xC2,
|
||||
} NfcMifareCommand;
|
||||
|
||||
typedef enum {
|
||||
NfpAmiiboFlag_Valid = BIT(0), ///< Initialized in system settings.
|
||||
NfpAmiiboFlag_ApplicationAreaExists = BIT(1), ///< Application area exists.
|
||||
} NfpAmiiboFlag;
|
||||
|
||||
typedef enum {
|
||||
NfpBreakType_Flush = 0,
|
||||
NfpBreakType_Break1 = 1,
|
||||
NfpBreakType_Break2 = 2,
|
||||
} NfpBreakType;
|
||||
|
||||
typedef struct {
|
||||
u16 last_write_year;
|
||||
u8 last_write_month;
|
||||
u8 last_write_day;
|
||||
u16 year;
|
||||
u8 month;
|
||||
u8 day;
|
||||
} NfpDate;
|
||||
|
||||
typedef struct {
|
||||
u8 uid[10]; ///< UUID.
|
||||
u8 uid_length; ///< UUID length.
|
||||
u8 reserved[0x15];
|
||||
} NfcTagUid;
|
||||
|
||||
typedef struct {
|
||||
NfcTagUid uid; ///< UUID.
|
||||
u32 protocol; ///< \ref NfcProtocol
|
||||
u32 tag_type; ///< \ref NfcTagType
|
||||
u8 reserved[0x30];
|
||||
} NfpTagInfo;
|
||||
|
||||
typedef struct {
|
||||
NfcTagUid uid; ///< UUID.
|
||||
u32 protocol; ///< \ref NfcProtocol
|
||||
u32 tag_type; ///< \ref NfcTagType
|
||||
u8 reserved[0x30];
|
||||
} NfcTagInfo;
|
||||
|
||||
typedef struct {
|
||||
NfpDate last_write_date;
|
||||
u16 write_counter;
|
||||
u16 version;
|
||||
u32 application_area_size;
|
||||
u8 reserved[0x34];
|
||||
} PACKED NfpCommonInfo;
|
||||
} NfpCommonInfo;
|
||||
|
||||
typedef struct {
|
||||
u8 amiibo_id[0x8];
|
||||
u8 reserved[0x38];
|
||||
} PACKED NfpModelInfo;
|
||||
union {
|
||||
u8 character_id[3];
|
||||
struct {
|
||||
u16 game_character_id;
|
||||
u8 character_variant;
|
||||
} NX_PACKED;
|
||||
};
|
||||
u8 series_id; ///< Series.
|
||||
u16 numbering_id; ///< Model number.
|
||||
u8 nfp_type; ///< Figure type.
|
||||
u8 reserved[0x39];
|
||||
} NfpModelInfo;
|
||||
|
||||
typedef struct {
|
||||
MiiCharInfo mii;
|
||||
u16 first_write_year;
|
||||
u8 first_write_month;
|
||||
u8 first_write_day;
|
||||
char amiibo_name[10+1]; ///< utf-8, null-terminated
|
||||
u8 reserved[0x99];
|
||||
} PACKED NfpRegisterInfo;
|
||||
NfpDate first_write_date;
|
||||
char amiibo_name[(10*4)+1]; ///< Amiibo name (utf-8, null-terminated).
|
||||
u8 font_region;
|
||||
u8 reserved[0x7A];
|
||||
} NfpRegisterInfo;
|
||||
|
||||
typedef struct {
|
||||
MiiStoreData mii_store_data;
|
||||
NfpDate first_write_date;
|
||||
char amiibo_name[(10*4)+1]; ///< Amiibo name (utf-8, null-terminated).
|
||||
u8 font_region;
|
||||
u8 reserved[0x8E];
|
||||
} NfpRegisterInfoPrivate;
|
||||
|
||||
typedef struct {
|
||||
u64 application_id;
|
||||
u32 access_id;
|
||||
u16 crc32_change_counter;
|
||||
u8 flags;
|
||||
u8 tag_type;
|
||||
u8 application_area_version;
|
||||
u8 reserved[0x2F];
|
||||
} NfpAdminInfo;
|
||||
|
||||
typedef struct {
|
||||
u8 tag_magic; ///< Tag magic (always 0xA5: https://www.3dbrew.org/wiki/Amiibo#Page_layout).
|
||||
u8 reserved1[0x1];
|
||||
u16 tag_write_counter; ///< Incremented every tag write.
|
||||
u32 crc32_1; ///< CRC32 of some internal 8-byte data.
|
||||
u8 reserved2[0x38];
|
||||
NfpDate last_write_date; ///< Updated every write.
|
||||
u16 write_counter; ///< Incremented every write, until it maxes out at 0xFFFF.
|
||||
u16 version; ///< Version.
|
||||
u32 application_area_size; ///< Size of the application area.
|
||||
u8 reserved3[0x34];
|
||||
MiiVer3StoreData mii_v3; ///< Ver3StoreData (Mii format used in 3DS).
|
||||
u8 pad[0x2];
|
||||
u16 mii_v3_crc16; ///< CRC16 of Ver3StoreData.
|
||||
MiiNfpStoreDataExtension mii_store_data_extension; ///< StoreDataExtension
|
||||
NfpDate first_write_date; ///< Set when the amiibo is first written to.
|
||||
u16 amiibo_name[10+1]; ///< Amiibo name (utf-16, null-terminated).
|
||||
u8 font_region; ///< Font region.
|
||||
u8 unknown1; ///< Normally zero
|
||||
u32 crc32_2; ///< CRC32 of Ver3StoreData + application_id_byte + unknown1 + StoreDataExtension + unknown2 (0x7E bytes total)
|
||||
u32 unknown2[0x5]; ///< Normally zero
|
||||
u8 reserved4[0x64];
|
||||
u64 application_id; ///< Modified application ID (Application ID & 0xFFFFFFFF0FFFFFFF | 0x30000000)
|
||||
u32 access_id; ///< Application area access ID
|
||||
u16 settings_crc32_change_counter;
|
||||
u8 flags; ///< \ref NfpAmiiboFlag
|
||||
u8 tag_type; ///< \ref NfcTagType
|
||||
u8 application_area_version; ///< \ref NfpApplicationAreaVersion
|
||||
u8 application_id_byte; ///< Application ID byte ((Application ID >> 28) & 0xFF)
|
||||
u8 reserved5[0x2E];
|
||||
u8 application_area[0xD8]; ///< Application area.
|
||||
} NfpData;
|
||||
|
||||
typedef struct {
|
||||
u8 mifare_command;
|
||||
u8 unknown; ///< Usually 1
|
||||
u8 reserved1[0x6];
|
||||
u8 sector_key[0x6];
|
||||
u8 reserved2[0x2];
|
||||
} NX_PACKED NfcSectorKey;
|
||||
|
||||
typedef struct {
|
||||
u8 sector_number;
|
||||
u8 reserved[0x7];
|
||||
NfcSectorKey sector_key;
|
||||
} NX_PACKED NfcMifareReadBlockParameter;
|
||||
|
||||
typedef struct {
|
||||
u8 data[0x10];
|
||||
u8 sector_number;
|
||||
u8 reserved[0x7];
|
||||
} NX_PACKED NfcMifareReadBlockData;
|
||||
|
||||
typedef struct {
|
||||
u8 data[0x10];
|
||||
u8 sector_number;
|
||||
u8 reserved[0x7];
|
||||
NfcSectorKey sector_key;
|
||||
} NfcMifareWriteBlockParameter;
|
||||
|
||||
typedef struct {
|
||||
u64 version;
|
||||
@ -103,6 +270,12 @@ Result nfcInitialize(NfcServiceType service_type);
|
||||
/// Exit nfc:*.
|
||||
void nfcExit(void);
|
||||
|
||||
/// Initialize nfc:mf:u.
|
||||
Result nfcMfInitialize();
|
||||
|
||||
/// Exit nfc:mf:u.
|
||||
void nfcMfExit(void);
|
||||
|
||||
/// Gets the Service object for the actual nfp:* service session.
|
||||
Service* nfpGetServiceSession(void);
|
||||
|
||||
@ -115,43 +288,179 @@ Service* nfcGetServiceSession(void);
|
||||
/// Gets the Service object for the interface from nfc:*.
|
||||
Service* nfcGetServiceSession_Interface(void);
|
||||
|
||||
/// Gets the Service object for the actual nfc:mf:u service session.
|
||||
Service* nfcMfGetServiceSession(void);
|
||||
|
||||
/// Gets the Service object for the interface from nfc:mf:u.
|
||||
Service* nfcMfGetServiceSession_Interface(void);
|
||||
|
||||
Result nfpListDevices(s32 *total_out, NfcDeviceHandle *out, s32 count);
|
||||
Result nfpStartDetection(const NfcDeviceHandle *handle);
|
||||
Result nfpStopDetection(const NfcDeviceHandle *handle);
|
||||
Result nfpMount(const NfcDeviceHandle *handle, NfpDeviceType device_type, NfpMountTarget mount_target);
|
||||
Result nfpUnmount(const NfcDeviceHandle *handle);
|
||||
|
||||
/// Only available with [4.0.0+].
|
||||
Result nfcListDevices(s32 *total_out, NfcDeviceHandle *out, s32 count);
|
||||
/// Only available with [4.0.0+].
|
||||
Result nfcStartDetection(const NfcDeviceHandle *handle, NfcProtocol protocol);
|
||||
/// Only available with [4.0.0+].
|
||||
Result nfcStopDetection(const NfcDeviceHandle *handle);
|
||||
|
||||
Result nfcMfListDevices(s32 *total_out, NfcDeviceHandle *out, s32 count);
|
||||
Result nfcMfStartDetection(const NfcDeviceHandle *handle);
|
||||
Result nfcMfStopDetection(const NfcDeviceHandle *handle);
|
||||
|
||||
/// Not available with ::NfpServiceType_System.
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Ram.
|
||||
Result nfpOpenApplicationArea(const NfcDeviceHandle *handle, u32 app_id);
|
||||
|
||||
/// Not available with ::NfpServiceType_System.
|
||||
Result nfpGetApplicationArea(const NfcDeviceHandle *handle, void* buf, size_t buf_size);
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Ram, and the application area to be opened.
|
||||
Result nfpGetApplicationArea(const NfcDeviceHandle *handle, void* buf, size_t buf_size, u32 *out_size);
|
||||
|
||||
/// Not available with ::NfpServiceType_System.
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Ram, and the application area to be opened.
|
||||
Result nfpSetApplicationArea(const NfcDeviceHandle *handle, const void* buf, size_t buf_size);
|
||||
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Ram.
|
||||
Result nfpFlush(const NfcDeviceHandle *handle);
|
||||
|
||||
Result nfpRestore(const NfcDeviceHandle *handle);
|
||||
|
||||
/// Not available with ::NfpServiceType_System.
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Ram.
|
||||
Result nfpCreateApplicationArea(const NfcDeviceHandle *handle, u32 app_id, const void* buf, size_t buf_size);
|
||||
|
||||
/// Not available with ::NfpServiceType_System.
|
||||
/// Only available with [3.0.0+].
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Ram, and the application area to be opened.
|
||||
Result nfpRecreateApplicationArea(const NfcDeviceHandle *handle, u32 app_id, const void* buf, size_t buf_size);
|
||||
|
||||
/// Not available with ::NfpServiceType_System.
|
||||
Result nfpGetApplicationAreaSize(const NfcDeviceHandle *handle, u32 *out_app_area_size);
|
||||
|
||||
/// Not available with ::NfpServiceType_User.
|
||||
Result nfpDeleteApplicationArea(const NfcDeviceHandle *handle);
|
||||
|
||||
/// Not available with ::NfpServiceType_User.
|
||||
Result nfpExistsApplicationArea(const NfcDeviceHandle *handle, bool *out);
|
||||
|
||||
Result nfpGetTagInfo(const NfcDeviceHandle *handle, NfpTagInfo *out);
|
||||
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Ram.
|
||||
Result nfpGetRegisterInfo(const NfcDeviceHandle *handle, NfpRegisterInfo *out);
|
||||
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Ram.
|
||||
Result nfpGetCommonInfo(const NfcDeviceHandle *handle, NfpCommonInfo *out);
|
||||
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Rom.
|
||||
Result nfpGetModelInfo(const NfcDeviceHandle *handle, NfpModelInfo *out);
|
||||
|
||||
/// Not available with ::NfpServiceType_User.
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Ram.
|
||||
Result nfpGetAdminInfo(const NfcDeviceHandle *handle, NfpAdminInfo *out);
|
||||
|
||||
/// Only available with [4.0.0+].
|
||||
Result nfcGetTagInfo(const NfcDeviceHandle *handle, NfcTagInfo *out);
|
||||
|
||||
Result nfcMfGetTagInfo(const NfcDeviceHandle *handle, NfcTagInfo *out);
|
||||
|
||||
/// Returned event will have autoclear off.
|
||||
Result nfpAttachActivateEvent(const NfcDeviceHandle *handle, Event *out_event);
|
||||
/// Returned event will have autoclear off.
|
||||
Result nfpAttachDeactivateEvent(const NfcDeviceHandle *handle, Event *out_event);
|
||||
|
||||
Result nfpGetState(NfpState *out);
|
||||
/// Returned event will have autoclear off.
|
||||
/// Only available with [4.0.0+].
|
||||
Result nfcAttachActivateEvent(const NfcDeviceHandle *handle, Event *out_event);
|
||||
/// Returned event will have autoclear off.
|
||||
/// Only available with [4.0.0+].
|
||||
Result nfcAttachDeactivateEvent(const NfcDeviceHandle *handle, Event *out_event);
|
||||
|
||||
/// Returned event will have autoclear off.
|
||||
Result nfcMfAttachActivateEvent(const NfcDeviceHandle *handle, Event *out_event);
|
||||
/// Returned event will have autoclear off.
|
||||
Result nfcMfAttachDeactivateEvent(const NfcDeviceHandle *handle, Event *out_event);
|
||||
|
||||
Result nfpGetState(NfcState *out);
|
||||
Result nfpGetDeviceState(const NfcDeviceHandle *handle, NfpDeviceState *out);
|
||||
Result nfpGetNpadId(const NfcDeviceHandle *handle, u32 *out);
|
||||
|
||||
/// Only available with [4.0.0+].
|
||||
Result nfcGetState(NfcState *out);
|
||||
/// Only available with [4.0.0+].
|
||||
Result nfcGetDeviceState(const NfcDeviceHandle *handle, NfcDeviceState *out);
|
||||
/// Only available with [4.0.0+].
|
||||
Result nfcGetNpadId(const NfcDeviceHandle *handle, u32 *out);
|
||||
|
||||
Result nfcMfGetState(NfcState *out);
|
||||
Result nfcMfGetDeviceState(const NfcDeviceHandle *handle, NfcMifareDeviceState *out);
|
||||
Result nfcMfGetNpadId(const NfcDeviceHandle *handle, u32 *out);
|
||||
|
||||
/// Returned event will have autoclear on.
|
||||
/// Only available with [3.0.0+].
|
||||
Result nfpAttachAvailabilityChangeEvent(Event *out_event);
|
||||
/// Returned event will have autoclear on.
|
||||
/// Only available with [4.0.0+].
|
||||
Result nfcAttachAvailabilityChangeEvent(Event *out_event);
|
||||
/// Returned event will have autoclear on.
|
||||
Result nfcMfAttachAvailabilityChangeEvent(Event *out_event);
|
||||
|
||||
/// Not available with ::NfpServiceType_User.
|
||||
Result nfpFormat(const NfcDeviceHandle *handle);
|
||||
|
||||
/// Not available with ::NfpServiceType_User.
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Ram.
|
||||
Result nfpGetRegisterInfoPrivate(const NfcDeviceHandle *handle, NfpRegisterInfoPrivate *out);
|
||||
|
||||
/// Not available with ::NfpServiceType_User.
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Ram.
|
||||
Result nfpSetRegisterInfoPrivate(const NfcDeviceHandle *handle, const NfpRegisterInfoPrivate *register_info_private);
|
||||
|
||||
/// Not available with ::NfpServiceType_User.
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Ram.
|
||||
Result nfpDeleteRegisterInfo(const NfcDeviceHandle *handle);
|
||||
|
||||
/// Only available with ::NfpServiceType_Debug.
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Ram.
|
||||
Result nfpGetAll(const NfcDeviceHandle *handle, NfpData *out);
|
||||
|
||||
/// Only available with ::NfpServiceType_Debug.
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Ram.
|
||||
Result nfpSetAll(const NfcDeviceHandle *handle, const NfpData *nfp_data);
|
||||
|
||||
/// Only available with ::NfpServiceType_Debug.
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Ram.
|
||||
Result nfpFlushDebug(const NfcDeviceHandle *handle);
|
||||
|
||||
/// Only available with ::NfpServiceType_Debug.
|
||||
/// Requires the amiibo to be mounted with ::NfpMountTarget_Ram.
|
||||
Result nfpBreakTag(const NfcDeviceHandle *handle, NfpBreakType break_type);
|
||||
|
||||
/// Only available with ::NfpServiceType_Debug.
|
||||
Result nfpReadBackupData(const NfcDeviceHandle *handle, void* out_buf, size_t buf_size, u32 *out_size);
|
||||
|
||||
/// Only available with ::NfpServiceType_Debug.
|
||||
Result nfpWriteBackupData(const NfcDeviceHandle *handle, const void* buf, size_t buf_size);
|
||||
|
||||
/// Only available with ::NfpServiceType_Debug.
|
||||
Result nfpWriteNtf(const NfcDeviceHandle *handle, u32 write_type, const void* buf, size_t buf_size);
|
||||
|
||||
/// This uses nfc:*.
|
||||
Result nfcIsNfcEnabled(bool *out);
|
||||
|
||||
/// Only available with [4.0.0+].
|
||||
Result nfcReadMifare(const NfcDeviceHandle *handle, NfcMifareReadBlockData *out_block_data, const NfcMifareReadBlockParameter *read_block_parameter, s32 count);
|
||||
/// Only available with [4.0.0+].
|
||||
Result nfcWriteMifare(const NfcDeviceHandle *handle, const NfcMifareWriteBlockParameter *write_block_parameter, s32 count);
|
||||
|
||||
Result nfcMfReadMifare(const NfcDeviceHandle *handle, NfcMifareReadBlockData *out_block_data, const NfcMifareReadBlockParameter *read_block_parameter, s32 count);
|
||||
Result nfcMfWriteMifare(const NfcDeviceHandle *handle, const NfcMifareWriteBlockParameter *write_block_parameter, s32 count);
|
||||
|
||||
/// Only available with [4.0.0+].
|
||||
Result nfcSendCommandByPassThrough(const NfcDeviceHandle *handle, u64 timeout, const void* cmd_buf, size_t cmd_buf_size, void* reply_buf, size_t reply_buf_size, u64 *out_size);
|
||||
/// Only available with [4.0.0+].
|
||||
Result nfcKeepPassThroughSession(const NfcDeviceHandle *handle);
|
||||
/// Only available with [4.0.0+].
|
||||
Result nfcReleasePassThroughSession(const NfcDeviceHandle *handle);
|
||||
|
@ -229,6 +229,14 @@ Result nifmIsAnyForegroundRequestAccepted(bool* out);
|
||||
Result nifmPutToSleep(void);
|
||||
Result nifmWakeUp(void);
|
||||
|
||||
/**
|
||||
* @brief SetWowlDelayedWakeTime
|
||||
* @note Only available with ::NifmServiceType_System or ::NifmServiceType_Admin.
|
||||
* @note Only available on [9.0.0+].
|
||||
* @param[in] val Input value.
|
||||
*/
|
||||
Result nifmSetWowlDelayedWakeTime(s32 val);
|
||||
|
||||
///@name IRequest
|
||||
///@{
|
||||
|
||||
@ -282,5 +290,32 @@ Result nifmRequestSubmitAndWait(NifmRequest* r);
|
||||
*/
|
||||
Result nifmRequestGetAppletInfo(NifmRequest* r, u32 theme_color, void* buffer, size_t size, u32 *applet_id, u32 *mode, u32 *out_size);
|
||||
|
||||
/**
|
||||
* @brief SetKeptInSleep
|
||||
* @note Only available on [3.0.0+].
|
||||
* @note ::NifmRequestState must be ::NifmRequestState_Unknown1.
|
||||
* @param r \ref NifmRequest
|
||||
* @param[in] flag Flag
|
||||
*/
|
||||
Result nifmRequestSetKeptInSleep(NifmRequest* r, bool flag);
|
||||
|
||||
/**
|
||||
* @brief RegisterSocketDescriptor. Only 1 socket can be registered at a time with a NifmRequest. Do not use directly, use \ref socketNifmRequestRegisterSocketDescriptor instead.
|
||||
* @note Only available on [3.0.0+].
|
||||
* @note ::NifmRequestState must be ::NifmRequestState_Available.
|
||||
* @param r \ref NifmRequest
|
||||
* @param[in] sockfd Socket fd
|
||||
*/
|
||||
Result nifmRequestRegisterSocketDescriptor(NifmRequest* r, int sockfd);
|
||||
|
||||
/**
|
||||
* @brief UnregisterSocketDescriptor. Do not use directly, use \ref socketNifmRequestUnregisterSocketDescriptor instead.
|
||||
* @note Only available on [3.0.0+].
|
||||
* @note ::NifmRequestState must be ::NifmRequestState_Available.
|
||||
* @param r \ref NifmRequest
|
||||
* @param[in] sockfd Socket fd, must match the fd previously registered with \ref nifmRequestRegisterSocketDescriptor.
|
||||
*/
|
||||
Result nifmRequestUnregisterSocketDescriptor(NifmRequest* r, int sockfd);
|
||||
|
||||
///@}
|
||||
|
||||
|
@ -771,6 +771,18 @@ Result nsIsAnyApplicationEntityInstalled(u64 application_id, bool *out);
|
||||
*/
|
||||
Result nsCleanupUnavailableAddOnContents(u64 application_id, AccountUid uid);
|
||||
|
||||
/**
|
||||
* @brief EstimateSizeToMove
|
||||
* @note Only available on [10.0.0+].
|
||||
* @param[in] storage_ids Array of u8 \ref NcmStorageId.
|
||||
* @param[in] count Size of the storage_ids array in entries.
|
||||
* @param[in] storage_id storage_id \ref NcmStorageId
|
||||
* @param[in] flags Flags
|
||||
* @param[in] application_id ApplicationId.
|
||||
* @param[out] Out Output value.
|
||||
*/
|
||||
Result nsEstimateSizeToMove(u8 *storage_ids, s32 count, NcmStorageId storage_id, u32 flags, u64 application_id, s64 *out);
|
||||
|
||||
/**
|
||||
* @brief FormatSdCard
|
||||
* @note Only available on [2.0.0+].
|
||||
@ -1327,8 +1339,8 @@ Result nsdevGetShellEventInfo(NsShellEventInfo* out); ///< [1.0.0-9.2.0]
|
||||
Result nsdevTerminateApplication(void);
|
||||
Result nsdevPrepareLaunchProgramFromHost(NsLaunchProperties* out, const char* path, size_t path_len); ///< [1.0.0-9.2.0]
|
||||
Result nsdevLaunchApplicationForDevelop(u64* out_pid, u64 application_id, u32 flags); ///< [1.0.0-9.2.0]
|
||||
Result nsdevLaunchApplicationFromHost(u64* out_pid, const char* path, size_t path_len, u32 flags); ///< [10.0.0+]
|
||||
Result nsdevLaunchApplicationWithStorageIdForDevelop(u64* out_pid, u64 application_id, u32 flags, u8 app_storage_id, u8 patch_storage_id);
|
||||
Result nsdevLaunchApplicationFromHost(u64* out_pid, const char* path, size_t path_len, u32 flags); ///< [10.0.0-17.0.1]
|
||||
Result nsdevLaunchApplicationWithStorageIdForDevelop(u64* out_pid, u64 application_id, u32 flags, u8 app_storage_id, u8 patch_storage_id); ///< [1.0.0-17.0.1]
|
||||
Result nsdevIsSystemMemoryResourceLimitBoosted(bool* out); ///< [6.0.0-8.1.0]
|
||||
Result nsdevGetRunningApplicationProcessIdForDevelop(u64* out_pid); ///< [6.0.0+]
|
||||
Result nsdevSetCurrentApplicationRightsEnvironmentCanBeActiveForDevelop(bool can_be_active); ///< [6.0.0+]
|
||||
|
@ -9,6 +9,15 @@
|
||||
#include "../sf/service.h"
|
||||
#include "../kernel/event.h"
|
||||
|
||||
/// NvServiceType, for __nx_nv_service_type.
|
||||
typedef enum {
|
||||
NvServiceType_Auto = -1, ///< This is the default. Automatically select the type using \ref appletGetAppletType.
|
||||
NvServiceType_Application = 0, ///< Initializes nvdrv.
|
||||
NvServiceType_Applet = 1, ///< Initializes nvdrv:a.
|
||||
NvServiceType_System = 2, ///< Initializes nvdrv:s.
|
||||
NvServiceType_Factory = 3, ///< Initializes nvdrv:t.
|
||||
} NvServiceType;
|
||||
|
||||
/// Initialize nvdrv*.
|
||||
Result nvInitialize(void);
|
||||
|
||||
@ -32,7 +41,8 @@ typedef enum {
|
||||
|
||||
Result nvOpen(u32 *fd, const char *devicepath);
|
||||
Result nvIoctl(u32 fd, u32 request, void* argp);
|
||||
Result nvIoctl2(u32 fd, u32 request, void* argp, const void* inbuf, size_t inbuf_size);
|
||||
Result nvIoctl2(u32 fd, u32 request, void* argp, const void* inbuf, size_t inbuf_size); ///< [3.0.0+]
|
||||
Result nvIoctl3(u32 fd, u32 request, void* argp, void* outbuf, size_t outbuf_size); ///< [3.0.0+]
|
||||
Result nvClose(u32 fd);
|
||||
Result nvQueryEvent(u32 fd, u32 event_id, Event *event_out);
|
||||
|
||||
|
@ -7,8 +7,15 @@
|
||||
|
||||
#pragma once
|
||||
#include "../types.h"
|
||||
#include "../kernel/event.h"
|
||||
#include "../sf/service.h"
|
||||
|
||||
typedef struct {
|
||||
u8 rating_age;
|
||||
bool sns_post_restriction;
|
||||
bool free_communication_restriction;
|
||||
} PctlRestrictionSettings;
|
||||
|
||||
/// Initialize pctl.
|
||||
Result pctlInitialize(void);
|
||||
|
||||
@ -21,15 +28,41 @@ Service* pctlGetServiceSession(void);
|
||||
/// Gets the Service object for IParentalControlService.
|
||||
Service* pctlGetServiceSession_Service(void);
|
||||
|
||||
/// Gets whether Parental Controls restrictions are temporarily unlocked.
|
||||
Result pctlIsRestrictionTemporaryUnlocked(bool *flag);
|
||||
|
||||
/// Confirm whether VrMode is allowed. Only available with [4.0.0+].
|
||||
Result pctlConfirmStereoVisionPermission(void);
|
||||
|
||||
/// Gets whether Parental Controls are enabled.
|
||||
Result pctlIsRestrictionEnabled(bool *flag);
|
||||
|
||||
/// Gets whether Parental Controls are enabled.
|
||||
Result pctlGetSafetyLevel(u32 *safety_level);
|
||||
|
||||
/// Returns the current restrictions settings.
|
||||
Result pctlGetCurrentSettings(PctlRestrictionSettings *settings);
|
||||
|
||||
/// Gets the count of applications that have free communication.
|
||||
Result pctlGetFreeCommunicationApplicationListCount(u32 *count);
|
||||
|
||||
/// Reset the confirmation done by \ref pctlConfirmStereoVisionPermission. Only available with [5.0.0+].
|
||||
Result pctlResetConfirmedStereoVisionPermission(void);
|
||||
|
||||
/// Gets whether VrMode is allowed. Only available with [5.0.0+].
|
||||
Result pctlIsStereoVisionPermitted(bool *flag);
|
||||
|
||||
/// Confirm whether pairing is active.
|
||||
Result pctlIsPairingActive(bool *flag);
|
||||
|
||||
/// Returns the synchronization event.
|
||||
Result pctlGetSynchronizationEvent(Event* out_event);
|
||||
|
||||
/// Returns the supension event.
|
||||
Result pctlGetPlayTimerEventToRequestSuspension(Event* out_event);
|
||||
|
||||
/// Confirm whether play timer alarm is disabled. Only available with [4.0.0+].
|
||||
Result pctlIsPlayTimerAlarmDisabled(bool *flag);
|
||||
|
||||
/// Returns the unlinked event.
|
||||
Result pctlGetUnlinkedEvent(Event* out_event);
|
||||
|
@ -191,6 +191,13 @@ typedef enum {
|
||||
PcvModuleId_EXTPERIPH2 = 0x40000057,
|
||||
} PcvModuleId;
|
||||
|
||||
// Clock list type returned by GetPossibleClockRates
|
||||
typedef enum {
|
||||
PcvClockRatesListType_Invalid = 0,
|
||||
PcvClockRatesListType_Discrete = 1,
|
||||
PcvClockRatesListType_Range = 2,
|
||||
} PcvClockRatesListType;
|
||||
|
||||
/// Initialize pcv.
|
||||
Result pcvInitialize(void);
|
||||
|
||||
@ -210,3 +217,5 @@ Result pcvSetClockRate(PcvModule module, u32 hz);
|
||||
Result pcvSetVoltageEnabled(u32 power_domain, bool state);
|
||||
/// Only available on [1.0.0-7.0.1].
|
||||
Result pcvGetVoltageEnabled(bool *isEnabled, u32 power_domain);
|
||||
/// Only available on [1.0.0-7.0.1].
|
||||
Result pcvGetPossibleClockRates(PcvModule module, u32 *rates, s32 max_count, PcvClockRatesListType *out_type, s32 *out_count);
|
||||
|
@ -38,41 +38,71 @@ typedef enum {
|
||||
PdmPlayLogPolicy_Unknown3 = 3, ///< [10.0.0+] The cmds which require ::PdmPlayLogPolicy_All, now also allow value 3 if the cmd input flag is set.
|
||||
} PdmPlayLogPolicy;
|
||||
|
||||
/// AppletEvent.
|
||||
/// AppletEventV1. AppletEvent for [1.0.0-15.0.1], converted to \ref PdmAppletEvent when needed.
|
||||
/// Timestamp format, converted from PosixTime: total minutes since epoch UTC 1999/12/31 00:00:00.
|
||||
/// See \ref pdmPlayTimestampToPosix.
|
||||
typedef struct {
|
||||
u64 program_id; ///< ProgramId.
|
||||
u32 entry_index; ///< Entry index.
|
||||
u32 timestampUser; ///< See PdmPlayEvent::timestampUser, with the above timestamp format.
|
||||
u32 timestampNetwork; ///< See PdmPlayEvent::timestampNetwork, with the above timestamp format.
|
||||
u8 eventType; ///< \ref PdmAppletEventType
|
||||
u32 timestamp_user; ///< See PdmPlayEvent::timestamp_user, with the above timestamp format.
|
||||
u32 timestamp_network; ///< See PdmPlayEvent::timestamp_network, with the above timestamp format.
|
||||
u8 event_type; ///< \ref PdmAppletEventType
|
||||
u8 pad[3]; ///< Padding.
|
||||
} PdmAppletEventV1;
|
||||
|
||||
/// AppletEvent. AppletEvent for [16.0.0+], converted from \ref PdmAppletEventV1 on [1.0.0-15.0.1].
|
||||
typedef struct {
|
||||
u64 program_id; ///< ProgramId.
|
||||
u32 entry_index; ///< Entry index.
|
||||
u32 pad; ///< Padding
|
||||
u64 timestamp_user; ///< See PdmPlayEvent::timestamp_user.
|
||||
u64 timestamp_network; ///< See PdmPlayEvent::timestamp_network.
|
||||
u8 event_type; ///< \ref PdmAppletEventType
|
||||
u8 pad2[7]; ///< Padding.
|
||||
} PdmAppletEvent;
|
||||
|
||||
/// PlayStatistics
|
||||
/// PlayStatisticsV1. PlayStatistics for [1.0.0-15.0.1], converted to \ref PdmPlayStatistics when needed.
|
||||
typedef struct {
|
||||
u64 application_id; ///< ApplicationId.
|
||||
u64 program_id; ///< ProgramId.
|
||||
|
||||
u32 first_entry_index; ///< Entry index for the first time the application was played.
|
||||
u32 first_timestampUser; ///< See PdmAppletEvent::timestampUser. This is for the first time the application was played.
|
||||
u32 first_timestampNetwork; ///< See PdmAppletEvent::timestampNetwork. This is for the first time the application was played.
|
||||
u32 first_entry_index; ///< Entry index for the first time the program was played.
|
||||
u32 first_timestamp_user; ///< See PdmAppletEventV1::timestamp_user. This is for the first time the program was played.
|
||||
u32 first_timestamp_network; ///< See PdmAppletEventV1::timestamp_network. This is for the first time the program was played.
|
||||
|
||||
u32 last_entry_index; ///< Entry index for the last time the application was played.
|
||||
u32 last_timestampUser; ///< See PdmAppletEvent::timestampUser. This is for the last time the application was played.
|
||||
u32 last_timestampNetwork; ///< See PdmAppletEvent::timestampNetwork. This is for the last time the application was played.
|
||||
u32 last_entry_index; ///< Entry index for the last time the program was played.
|
||||
u32 last_timestamp_user; ///< See PdmAppletEventV1::timestamp_user. This is for the last time the program was played.
|
||||
u32 last_timestamp_network; ///< See PdmAppletEventV1::timestamp_network. This is for the last time the program was played.
|
||||
|
||||
u32 playtimeMinutes; ///< Total play-time in minutes.
|
||||
u32 totalLaunches; ///< Total times the application was launched.
|
||||
u32 playtime_minutes; ///< Total play-time in minutes.
|
||||
u32 total_launches; ///< Total times the program was launched.
|
||||
} PdmPlayStatisticsV1;
|
||||
|
||||
/// PlayStatistics. PlayStatistics for [16.0.0+], converted from \ref PdmPlayStatisticsV1 on [1.0.0-15.0.1].
|
||||
typedef struct {
|
||||
u64 program_id; ///< ProgramId.
|
||||
|
||||
u32 first_entry_index; ///< Entry index for the first time the program was played.
|
||||
u32 pad; ///< Padding
|
||||
u64 first_timestamp_user; ///< See PdmAppletEvent::timestamp_user. This is for the first time the program was played, in PosixTime.
|
||||
u64 first_timestamp_network; ///< See PdmAppletEvent::timestamp_network. This is for the first time the program was played, in PosixTime.
|
||||
|
||||
u32 last_entry_index; ///< Entry index for the last time the program was played.
|
||||
u32 pad2; ///< Padding
|
||||
u64 last_timestamp_user; ///< See PdmAppletEvent::timestamp_user. This is for the last time the program was played, in PosixTime.
|
||||
u64 last_timestamp_network; ///< See PdmAppletEvent::timestamp_network. This is for the last time the program was played, in PosixTime.
|
||||
|
||||
u64 playtime; ///< Total play-time in nanoseconds.
|
||||
u32 total_launches; ///< Total times the program was launched.
|
||||
u32 pad3; ///< Padding
|
||||
} PdmPlayStatistics;
|
||||
|
||||
/// LastPlayTime.
|
||||
/// This contains data from the last time the application was played.
|
||||
typedef struct {
|
||||
u64 application_id; ///< ApplicationId.
|
||||
u32 timestampUser; ///< See PdmAppletEvent::timestampUser.
|
||||
u32 timestampNetwork; ///< See PdmAppletEvent::timestampNetwork.
|
||||
u32 lastPlayedMinutes; ///< Total minutes since the application was last played.
|
||||
u32 timestamp_user; ///< See PdmAppletEventV1::timestamp_user.
|
||||
u32 timestamp_network; ///< See PdmAppletEventV1::timestamp_network.
|
||||
u32 last_played_minutes; ///< Total minutes since the application was last played.
|
||||
u8 flag; ///< Flag indicating whether the above field is set.
|
||||
u8 pad[3]; ///< Padding.
|
||||
} PdmLastPlayTime;
|
||||
@ -98,10 +128,10 @@ typedef struct {
|
||||
u32 data;
|
||||
} unk_x8;
|
||||
|
||||
u8 appletId; ///< \ref AppletId
|
||||
u8 storageId; ///< \ref NcmStorageId
|
||||
u8 logPolicy; ///< \ref PdmPlayLogPolicy
|
||||
u8 eventType; ///< \ref PdmAppletEventType
|
||||
u8 applet_id; ///< \ref AppletId
|
||||
u8 storage_id; ///< \ref NcmStorageId
|
||||
u8 log_policy; ///< \ref PdmPlayLogPolicy
|
||||
u8 event_type; ///< \ref PdmAppletEventType
|
||||
u8 unused[0xc]; ///< Unused.
|
||||
} applet;
|
||||
|
||||
@ -114,34 +144,59 @@ typedef struct {
|
||||
struct {
|
||||
u8 value; ///< Input value from the pdm:ntfy command.
|
||||
u8 unused[0x1b]; ///< Unused.
|
||||
} powerStateChange;
|
||||
} power_state_change;
|
||||
|
||||
struct {
|
||||
u8 value; ///< Input value from the pdm:ntfy command.
|
||||
u8 unused[0x1b]; ///< Unused.
|
||||
} operationModeChange;
|
||||
} operation_mode_change;
|
||||
|
||||
u8 data[0x1c];
|
||||
} eventData; ///< ProgramId/ApplicationId/userId stored within here have the u32 low/high swapped in each u64.
|
||||
} event_data; ///< ProgramId/ApplicationId/userId stored within here have the u32 low/high swapped in each u64.
|
||||
|
||||
u8 playEventType; ///< \ref PdmPlayEventType. Controls which struct in the above eventData is used. ::PdmPlayEventType_Initialize doesn't use eventData.
|
||||
u8 play_event_type; ///< \ref PdmPlayEventType. Controls which struct in the above event_data is used. ::PdmPlayEventType_Initialize doesn't use event_data.
|
||||
u8 pad[3]; ///< Padding.
|
||||
|
||||
u64 timestampUser; ///< PosixTime timestamp from StandardUserSystemClock.
|
||||
u64 timestampNetwork; ///< PosixTime timestamp from StandardNetworkSystemClock.
|
||||
u64 timestampSteady; ///< Timestamp in seconds derived from StandardSteadyClock.
|
||||
u64 timestamp_user; ///< PosixTime timestamp from StandardUserSystemClock.
|
||||
u64 timestamp_network; ///< PosixTime timestamp from StandardNetworkSystemClock.
|
||||
u64 timestamp_steady; ///< Timestamp in seconds derived from StandardSteadyClock.
|
||||
} PdmPlayEvent;
|
||||
|
||||
/// AccountEvent
|
||||
/// AccountEventV3. AccountEvent for [3.0.0-9.2.0], converted to \ref PdmAccountEvent when needed.
|
||||
typedef struct {
|
||||
AccountUid uid; ///< \ref AccountUid
|
||||
u32 entry_index; ///< Entry index.
|
||||
u8 pad[4]; ///< Padding.
|
||||
u64 timestampUser; ///< See PdmPlayEvent::timestampUser.
|
||||
u64 timestampNetwork; ///< See PdmPlayEvent::timestampNetwork.
|
||||
u64 timestampSteady; ///< See PdmPlayEvent::timestampSteady.
|
||||
u8 type; ///< See PdmPlayEvent::eventData::account::type.
|
||||
u8 pad_x31[7]; ///< Padding.
|
||||
u64 timestamp_user; ///< See PdmPlayEvent::timestamp_user.
|
||||
u64 timestamp_network; ///< See PdmPlayEvent::timestamp_network.
|
||||
u64 timestamp_steady; ///< See PdmPlayEvent::timestamp_steady.
|
||||
u8 type; ///< See PdmPlayEvent::event_data::account::type.
|
||||
u8 pad2[7]; ///< Padding.
|
||||
} PdmAccountEventV3;
|
||||
|
||||
/// AccountEventV10. AccountEvent for [10.0.0-15.0.1], converted to \ref PdmAccountEvent when needed.
|
||||
typedef struct {
|
||||
AccountUid uid; ///< \ref AccountUid
|
||||
u64 program_id; ///< ProgramId
|
||||
u32 entry_index; ///< Entry index.
|
||||
u8 pad[4]; ///< Padding.
|
||||
u64 timestamp_user; ///< See PdmPlayEvent::timestamp_user.
|
||||
u64 timestamp_network; ///< See PdmPlayEvent::timestamp_network.
|
||||
u64 timestamp_steady; ///< See PdmPlayEvent::timestamp_steady.
|
||||
u8 type; ///< See PdmPlayEvent::event_data::account::type.
|
||||
u8 pad2[7]; ///< Padding.
|
||||
} PdmAccountEventV10;
|
||||
|
||||
/// AccountEvent. AccountEvent for [16.0.0+], converted from the older structs when needed.
|
||||
typedef struct {
|
||||
AccountUid uid; ///< \ref AccountUid
|
||||
u64 program_id; ///< [10.0.0+] ProgramId
|
||||
u32 entry_index; ///< Entry index.
|
||||
u8 pad[4]; ///< Padding.
|
||||
u64 timestamp_user; ///< See PdmPlayEvent::timestamp_user.
|
||||
u64 timestamp_network; ///< See PdmPlayEvent::timestamp_network.
|
||||
u8 type; ///< See PdmPlayEvent::event_data::account::type.
|
||||
u8 pad2[7]; ///< Padding.
|
||||
} PdmAccountEvent;
|
||||
|
||||
/// AccountPlayEvent.
|
||||
@ -157,8 +212,8 @@ typedef struct {
|
||||
/// ApplicationPlayStatistics
|
||||
typedef struct {
|
||||
u64 application_id; ///< ApplicationId.
|
||||
u64 totalPlayTime; ///< Total play-time in nanoseconds.
|
||||
u64 totalLaunches; ///< Total times the application was launched.
|
||||
u64 playtime; ///< Total play-time in nanoseconds.
|
||||
u64 total_launches; ///< Total times the application was launched.
|
||||
} PdmApplicationPlayStatistics;
|
||||
|
||||
/// Initialize pdm:qry.
|
||||
@ -226,6 +281,7 @@ Result pdmqryGetAvailablePlayEventRange(s32 *total_entries, s32 *start_entry_ind
|
||||
|
||||
/**
|
||||
* @brief Gets a list of \ref PdmAccountEvent.
|
||||
* @note Only available with [3.0.0+].
|
||||
* @param[in] entry_index Start entry index.
|
||||
* @param[out] events Output \ref PdmAccountEvent array.
|
||||
* @param[in] count Max entries in the output array.
|
||||
@ -255,7 +311,7 @@ Result pdmqryGetAvailableAccountPlayEventRange(AccountUid uid, s32 *total_entrie
|
||||
|
||||
/**
|
||||
* @brief Gets a list of applications played by the specified user.
|
||||
* @note Only available with [6.0.0+].
|
||||
* @note Only available with [6.0.0-14.1.2].
|
||||
* @param[in] uid \ref AccountUid
|
||||
* @param[in] flag [10.0.0+] Whether to additionally allow using entries with ::PdmPlayLogPolicy_Unknown3.
|
||||
* @param[out] application_ids Output ApplicationIds array.
|
||||
@ -265,8 +321,8 @@ Result pdmqryGetAvailableAccountPlayEventRange(AccountUid uid, s32 *total_entrie
|
||||
Result pdmqryQueryRecentlyPlayedApplication(AccountUid uid, bool flag, u64 *application_ids, s32 count, s32 *total_out);
|
||||
|
||||
/**
|
||||
* @brief Gets an Event which is signaled when logging a new \ref PdmPlayEvent which would be available via \ref pdmqryQueryAccountEvent, where PdmPlayEvent::eventData::account::type is 0.
|
||||
* @note Only available with [6.0.0+].
|
||||
* @brief Gets an Event which is signaled when logging a new \ref PdmPlayEvent which would be available via \ref pdmqryQueryAccountEvent, where PdmPlayEvent::event_data::account::type is 0.
|
||||
* @note Only available with [6.0.0-14.1.2].
|
||||
* @note The Event must be closed by the user once finished with it.
|
||||
* @param[out] out_event Output Event with autoclear=false.
|
||||
*/
|
||||
|
@ -7,6 +7,7 @@
|
||||
#pragma once
|
||||
#include "../types.h"
|
||||
#include "../sf/service.h"
|
||||
#include "../sf/tipc.h"
|
||||
#include "../services/ncm_types.h"
|
||||
#include "../services/pm.h"
|
||||
|
||||
@ -33,8 +34,9 @@ typedef struct {
|
||||
u8 reserved_0E[2]; ///< Padding
|
||||
} PglContentMetaInfo;
|
||||
|
||||
typedef struct {
|
||||
typedef union {
|
||||
Service s;
|
||||
TipcService t;
|
||||
} PglEventObserver;
|
||||
|
||||
/// Initialize pgl.
|
||||
@ -43,8 +45,11 @@ Result pglInitialize(void);
|
||||
/// Exit pgl.
|
||||
void pglExit(void);
|
||||
|
||||
/// Gets the Service object for the actual pgl service session.
|
||||
Service* pglGetServiceSession(void);
|
||||
/// Gets the Service object for the actual pgl service session. Requires < 12.0.0
|
||||
Service* pglGetServiceSessionCmif(void);
|
||||
|
||||
/// Gets the TipcService object for the actual pgl service session. Requires 12.0.0+
|
||||
TipcService* pglGetServiceSessionTipc(void);
|
||||
|
||||
Result pglLaunchProgram(u64 *out_pid, const NcmProgramLocation *loc, u32 pm_launch_flags, u8 pgl_launch_flags);
|
||||
Result pglTerminateProcess(u64 pid);
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
typedef enum {
|
||||
PlServiceType_User = 0, ///< Initializes pl:u.
|
||||
PlServiceType_System = 1, ///< Initializes pl:s.
|
||||
PlServiceType_System = 1, ///< Initializes pl:s. With [16.0.0+] SharedFont is no longer available with this, pl:u must be used for that.
|
||||
} PlServiceType;
|
||||
|
||||
/// SharedFontType
|
||||
|
@ -57,6 +57,15 @@ typedef enum {
|
||||
PmBootMode_SafeMode = 2, ///< SafeMode
|
||||
} PmBootMode;
|
||||
|
||||
/// ResourceLimitValues
|
||||
typedef struct {
|
||||
u64 physical_memory;
|
||||
u32 thread_count;
|
||||
u32 event_count;
|
||||
u32 transfer_memory_count;
|
||||
u32 session_count;
|
||||
} PmResourceLimitValues;
|
||||
|
||||
/// Initialize pm:dmnt.
|
||||
Result pmdmntInitialize(void);
|
||||
|
||||
@ -111,8 +120,11 @@ Result pmdmntHookToCreateProcess(Event* out, u64 program_id);
|
||||
Result pmdmntGetApplicationProcessId(u64* pid_out);
|
||||
Result pmdmntHookToCreateApplicationProcess(Event* out);
|
||||
Result pmdmntClearHook(u32 which);
|
||||
Result pmdmntGetProgramId(u64* program_id_out, u64 pid);
|
||||
|
||||
Result pminfoGetProgramId(u64* program_id_out, u64 pid);
|
||||
Result pminfoGetAppletCurrentResourceLimitValues(PmResourceLimitValues* out);
|
||||
Result pminfoGetAppletPeakResourceLimitValues(PmResourceLimitValues* out);
|
||||
|
||||
Result pmshellLaunchProgram(u32 launch_flags, const NcmProgramLocation *location, u64 *pid);
|
||||
Result pmshellTerminateProcess(u64 processID);
|
||||
@ -124,4 +136,5 @@ Result pmshellClearJitDebugOccured(u64 pid);
|
||||
Result pmshellNotifyBootFinished(void);
|
||||
Result pmshellGetApplicationProcessIdForShell(u64* pid_out);
|
||||
Result pmshellBoostSystemMemoryResourceLimit(u64 boost_size);
|
||||
Result pmshellEnableApplicationExtraThread(void);
|
||||
Result pmshellBoostApplicationThreadResourceLimit(void);
|
||||
Result pmshellBoostSystemThreadResourceLimit(void);
|
||||
|
@ -94,7 +94,7 @@ void pscmExit(void);
|
||||
/// Gets the Service object for the actual psc:m service session.
|
||||
Service* pscmGetServiceSession(void);
|
||||
|
||||
Result pscmGetPmModule(PscPmModule *out, PscPmModuleId module_id, const u16 *dependencies, size_t dependency_count, bool autoclear);
|
||||
Result pscmGetPmModule(PscPmModule *out, PscPmModuleId module_id, const u32 *dependencies, size_t dependency_count, bool autoclear);
|
||||
|
||||
Result pscPmModuleGetRequest(PscPmModule *module, PscPmState *out_state, u32 *out_flags);
|
||||
Result pscPmModuleAcknowledge(PscPmModule *module, PscPmState state);
|
||||
|
@ -10,10 +10,11 @@
|
||||
#include "../kernel/event.h"
|
||||
|
||||
typedef enum {
|
||||
ChargerType_None = 0, ///< No charger
|
||||
ChargerType_Charger = 1, ///< Official charger or dock
|
||||
ChargerType_Usb = 2 ///< Other USB-C chargers
|
||||
} ChargerType;
|
||||
PsmChargerType_Unconnected = 0, ///< No charger
|
||||
PsmChargerType_EnoughPower = 1, ///< Full supported power
|
||||
PsmChargerType_LowPower = 2, ///< Lower power supported USB-PD mode
|
||||
PsmChargerType_NotSupported = 3, ///< No common supported USB-PD modes
|
||||
} PsmChargerType;
|
||||
|
||||
typedef enum {
|
||||
PsmBatteryVoltageState_NeedsShutdown = 0, ///< Power state should transition to shutdown
|
||||
@ -38,7 +39,7 @@ void psmExit(void);
|
||||
Service* psmGetServiceSession(void);
|
||||
|
||||
Result psmGetBatteryChargePercentage(u32 *out);
|
||||
Result psmGetChargerType(ChargerType *out);
|
||||
Result psmGetChargerType(PsmChargerType *out);
|
||||
Result psmGetBatteryVoltageState(PsmBatteryVoltageState *out);
|
||||
Result psmGetRawBatteryChargePercentage(double *out);
|
||||
Result psmIsEnoughPowerSupplied(bool *out);
|
||||
|
@ -13,6 +13,7 @@
|
||||
#include "../services/acc.h"
|
||||
#include "../services/fs.h"
|
||||
#include "../services/btdrv_types.h"
|
||||
#include "../services/btm_types.h"
|
||||
#include "../sf/service.h"
|
||||
|
||||
#define SET_MAX_NAME_SIZE 0x48
|
||||
@ -22,6 +23,17 @@ typedef enum {
|
||||
ColorSetId_Dark = 1,
|
||||
} ColorSetId;
|
||||
|
||||
/// Console Product Models
|
||||
typedef enum {
|
||||
SetSysProductModel_Invalid = 0, ///< Invalid Model
|
||||
SetSysProductModel_Nx = 1, ///< Erista Model
|
||||
SetSysProductModel_Copper = 2, ///< Erista "Simulation" Model
|
||||
SetSysProductModel_Iowa = 3, ///< Mariko Model
|
||||
SetSysProductModel_Hoag = 4, ///< Mariko Lite Model
|
||||
SetSysProductModel_Calcio = 5, ///< Mariko "Simulation" Model
|
||||
SetSysProductModel_Aula = 6, ///< Mariko OLED Model
|
||||
} SetSysProductModel;
|
||||
|
||||
/// IDs for Language.
|
||||
typedef enum
|
||||
{
|
||||
@ -299,25 +311,28 @@ typedef struct {
|
||||
|
||||
/// BluetoothDevicesSettings
|
||||
typedef struct {
|
||||
BtdrvAddress address;
|
||||
char name[0x20];
|
||||
u16 unk_x26;
|
||||
u8 unk_x28;
|
||||
Uuid uuid;
|
||||
u8 unk_x39;
|
||||
u16 unk_x3A;
|
||||
u32 unk_x3C;
|
||||
u16 unk_x40;
|
||||
u16 unk_x42;
|
||||
u16 unk_x44;
|
||||
u8 unk_x46[0x80];
|
||||
u16 unk_xC6;
|
||||
u8 unk_xC8;
|
||||
u8 unk_xC9;
|
||||
u16 unk_xCA;
|
||||
u8 unk_xCC[8];
|
||||
u8 unk_xD4;
|
||||
u8 unk_xD5[0x12B];
|
||||
BtdrvAddress addr; ///< \ref BtdrvAddress
|
||||
BtmBdName name; ///< [1.0.0-12.1.0] BdName. On 13.0.0+ name2 is used instead.
|
||||
BtmClassOfDevice class_of_device; ///< ClassOfDevice
|
||||
u8 link_key[0x10]; ///< LinkKey
|
||||
u8 link_key_present; ///< LinkKeyPresent
|
||||
u16 version; ///< Version
|
||||
u32 trusted_services; ///< TrustedServices
|
||||
u16 vid; ///< Vid
|
||||
u16 pid; ///< Pid
|
||||
u8 sub_class; ///< SubClass
|
||||
u8 attribute_mask; ///< AttributeMask
|
||||
u16 descriptor_length; ///< DescriptorLength
|
||||
u8 descriptor[0x80]; ///< Descriptor
|
||||
u8 key_type; ///< KeyType
|
||||
u8 device_type; ///< DeviceType
|
||||
u16 brr_size; ///< BrrSize
|
||||
u8 brr[0x9]; ///< Brr
|
||||
u8 audio_source_volume; ///< [13.0.0+] AudioSourceVolume
|
||||
char name2[0xF9]; ///< [13.0.0+] Name
|
||||
u8 audio_sink_volume; ///< [15.0.0+] AudioSinkVolume
|
||||
u32 audio_flags; ///< [14.0.0+] AudioFlags
|
||||
u8 reserved[0x2C]; ///< Reserved
|
||||
} SetSysBluetoothDevicesSettings;
|
||||
|
||||
/// Structure returned by \ref setsysGetFirmwareVersion.
|
||||
@ -422,8 +437,8 @@ typedef struct {
|
||||
u8 vertical_active_lines_msb : 4;
|
||||
u8 horizontal_sync_offset_pixels_lsb;
|
||||
u8 horizontal_sync_pulse_width_pixels_lsb;
|
||||
u8 horizontal_sync_pulse_width_lines_lsb : 4;
|
||||
u8 horizontal_sync_offset_lines_lsb : 4;
|
||||
u8 vertical_sync_pulse_width_lines_lsb : 4;
|
||||
u8 vertical_sync_offset_lines_lsb : 4;
|
||||
u8 vertical_sync_pulse_width_lines_msb : 2;
|
||||
u8 vertical_sync_offset_lines_msb : 2;
|
||||
u8 horizontal_sync_pulse_width_pixels_msb : 2;
|
||||
@ -450,7 +465,7 @@ typedef struct {
|
||||
u8 svd_index : 7;
|
||||
u8 native_flag : 1;
|
||||
} svd[0xC];
|
||||
} PACKED video;
|
||||
} NX_PACKED video;
|
||||
struct {
|
||||
u8 size : 5;
|
||||
SetSysBlockType block_type : 3;
|
||||
@ -459,7 +474,7 @@ typedef struct {
|
||||
u8 padding1 : 1;
|
||||
u8 sampling_rates_bitmap;
|
||||
u8 bitrate;
|
||||
} PACKED audio;
|
||||
} NX_PACKED audio;
|
||||
struct {
|
||||
u8 size : 5;
|
||||
SetSysBlockType block_type : 3;
|
||||
@ -468,7 +483,7 @@ typedef struct {
|
||||
u8 mode_bitmap;
|
||||
u8 max_tmds_frequency;
|
||||
u8 latency_bitmap;
|
||||
} PACKED vendor_specific;
|
||||
} NX_PACKED vendor_specific;
|
||||
u8 padding[2];
|
||||
} SetSysDataBlock;
|
||||
|
||||
@ -479,7 +494,7 @@ typedef struct {
|
||||
u16 product_code;
|
||||
u32 serial_number;
|
||||
u8 manufacture_week;
|
||||
u8 manufacture_year;
|
||||
u8 manufacture_year; ///< Real value is val - 10.
|
||||
u8 edid_version;
|
||||
u8 edid_revision;
|
||||
u8 video_input_parameters_bitmap;
|
||||
@ -542,6 +557,8 @@ typedef struct {
|
||||
SetSysModeLine extended_timing_descriptor[5];
|
||||
u8 padding[5];
|
||||
u8 extended_checksum; ///< Sum of 128 extended bytes should equal 0 mod 256.
|
||||
u8 data2[0x80]; ///< [13.0.0+]
|
||||
u8 data3[0x80]; ///< [13.0.0+]
|
||||
} SetSysEdid;
|
||||
|
||||
/// DataDeletionSettings
|
||||
@ -584,6 +601,18 @@ typedef struct {
|
||||
u8 field[4];
|
||||
} SetSysColor4u8Type;
|
||||
|
||||
/// NxControllerLegacySettings
|
||||
typedef struct {
|
||||
BtdrvAddress address;
|
||||
u8 type; ///< \ref SetSysControllerType.
|
||||
char serial[0x10];
|
||||
SetSysColor4u8Type body_color;
|
||||
SetSysColor4u8Type button_color;
|
||||
u8 unk_x1F[8];
|
||||
u8 unk_x27;
|
||||
u8 interface_type; ///< Bitmask with \ref XcdInterfaceType.
|
||||
} SetSysNxControllerLegacySettings;
|
||||
|
||||
/// NxControllerSettings
|
||||
typedef struct {
|
||||
BtdrvAddress address;
|
||||
@ -594,6 +623,7 @@ typedef struct {
|
||||
u8 unk_x1F[8];
|
||||
u8 unk_x27;
|
||||
u8 interface_type; ///< Bitmask with \ref XcdInterfaceType.
|
||||
u8 unk_x29[0x403]; ///< Unknown
|
||||
} SetSysNxControllerSettings;
|
||||
|
||||
/// ConsoleSixAxisSensorAccelerationBias
|
||||
@ -1182,16 +1212,16 @@ Result setsysGetAudioOutputMode(SetSysAudioOutputModeTarget target, SetSysAudioO
|
||||
Result setsysSetAudioOutputMode(SetSysAudioOutputModeTarget target, SetSysAudioOutputMode mode);
|
||||
|
||||
/**
|
||||
* @brief IsForceMuteOnHeadphoneRemoved
|
||||
* @brief GetSpeakerAutoMuteFlag
|
||||
* @param[out] out Output flag.
|
||||
*/
|
||||
Result setsysIsForceMuteOnHeadphoneRemoved(bool *out);
|
||||
Result setsysGetSpeakerAutoMuteFlag(bool *out);
|
||||
|
||||
/**
|
||||
* @brief SetForceMuteOnHeadphoneRemoved
|
||||
* @brief SetSpeakerAutoMuteFlag
|
||||
* @param[in] flag Input flag.
|
||||
*/
|
||||
Result setsysSetForceMuteOnHeadphoneRemoved(bool flag);
|
||||
Result setsysSetSpeakerAutoMuteFlag(bool flag);
|
||||
|
||||
/**
|
||||
* @brief GetQuestFlag
|
||||
@ -1390,9 +1420,9 @@ Result setsysSetDeviceNickname(const SetSysDeviceNickName *nickname);
|
||||
|
||||
/**
|
||||
* @brief GetProductModel
|
||||
* @param[out] out Output ProductModel.
|
||||
* @param[out] model Output SetSysProductModel.
|
||||
*/
|
||||
Result setsysGetProductModel(s32 *out);
|
||||
Result setsysGetProductModel(SetSysProductModel *model);
|
||||
|
||||
/**
|
||||
* @brief GetLdnChannel
|
||||
@ -1502,18 +1532,20 @@ Result setsysSetAutoUpdateEnableFlag(bool flag);
|
||||
|
||||
/**
|
||||
* @brief GetNxControllerSettings
|
||||
* @note On [13.0.0+] \ref setsysGetNxControllerSettingsEx should be used instead.
|
||||
* @param[out] total_out Total output entries.
|
||||
* @param[out] settings Output array of \ref SetSysNxControllerSettings.
|
||||
* @param[out] settings Output array of \ref SetSysNxControllerLegacySettings.
|
||||
* @param[in] count Size of the settings array in entries.
|
||||
*/
|
||||
Result setsysGetNxControllerSettings(s32 *total_out, SetSysNxControllerSettings *settings, s32 count);
|
||||
Result setsysGetNxControllerSettings(s32 *total_out, SetSysNxControllerLegacySettings *settings, s32 count);
|
||||
|
||||
/**
|
||||
* @brief SetNxControllerSettings
|
||||
* @param[in] settings Input array of \ref SetSysNxControllerSettings.
|
||||
* @note On [13.0.0+] \ref setsysSetNxControllerSettingsEx should be used instead.
|
||||
* @param[in] settings Input array of \ref SetSysNxControllerLegacySettings.
|
||||
* @param[in] count Size of the settings array in entries.
|
||||
*/
|
||||
Result setsysSetNxControllerSettings(const SetSysNxControllerSettings *settings, s32 count);
|
||||
Result setsysSetNxControllerSettings(const SetSysNxControllerLegacySettings *settings, s32 count);
|
||||
|
||||
/**
|
||||
* @brief GetBatteryPercentageFlag
|
||||
@ -1657,7 +1689,7 @@ Result setsysSetHeadphoneVolumeUpdateFlag(bool flag);
|
||||
|
||||
/**
|
||||
* @brief NeedsToUpdateHeadphoneVolume
|
||||
* @note Only available on [3.0.0+].
|
||||
* @note Only available on [3.0.0-14.1.2].
|
||||
* @param[out] a0 Output arg.
|
||||
* @param[out] a1 Output arg.
|
||||
* @param[out] a2 Output arg.
|
||||
@ -2272,6 +2304,21 @@ Result setsysGetFieldTestingFlag(bool *out);
|
||||
*/
|
||||
Result setsysSetFieldTestingFlag(bool flag);
|
||||
|
||||
/**
|
||||
* @brief GetNxControllerSettingsEx
|
||||
* @param[out] total_out Total output entries.
|
||||
* @param[out] settings Output array of \ref SetSysNxControllerSettings.
|
||||
* @param[in] count Size of the settings array in entries.
|
||||
*/
|
||||
Result setsysGetNxControllerSettingsEx(s32 *total_out, SetSysNxControllerSettings *settings, s32 count);
|
||||
|
||||
/**
|
||||
* @brief SetNxControllerSettingsEx
|
||||
* @param[in] settings Input array of \ref SetSysNxControllerSettings.
|
||||
* @param[in] count Size of the settings array in entries.
|
||||
*/
|
||||
Result setsysSetNxControllerSettingsEx(const SetSysNxControllerSettings *settings, s32 count);
|
||||
|
||||
/// Initialize setcal.
|
||||
Result setcalInitialize(void);
|
||||
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include "../types.h"
|
||||
#include "../kernel/svc.h"
|
||||
#include "../sf/service.h"
|
||||
#include "../sf/tipc.h"
|
||||
|
||||
/// Structure representing a service name (null terminated, remaining characters set to zero).
|
||||
typedef struct SmServiceName {
|
||||
@ -117,6 +118,12 @@ Handle smGetServiceOverride(SmServiceName name);
|
||||
*/
|
||||
Result smRegisterService(Handle* handle_out, SmServiceName name, bool is_light, s32 max_sessions);
|
||||
|
||||
/// Same as \ref smRegisterService, but always using cmif serialization.
|
||||
Result smRegisterServiceCmif(Handle* handle_out, SmServiceName name, bool is_light, s32 max_sessions);
|
||||
|
||||
/// Same as \ref smRegisterService, but always using tipc serialization.
|
||||
Result smRegisterServiceTipc(Handle* handle_out, SmServiceName name, bool is_light, s32 max_sessions);
|
||||
|
||||
/**
|
||||
* @brief Unregisters a previously registered service in SM.
|
||||
* @param[in] name Name of the service.
|
||||
@ -124,19 +131,38 @@ Result smRegisterService(Handle* handle_out, SmServiceName name, bool is_light,
|
||||
*/
|
||||
Result smUnregisterService(SmServiceName name);
|
||||
|
||||
/// Same as \ref smUnregisterService, but always using cmif serialization.
|
||||
Result smUnregisterServiceCmif(SmServiceName name);
|
||||
|
||||
/// Same as \ref smUnregisterService, but always using tipc serialization.
|
||||
Result smUnregisterServiceTipc(SmServiceName name);
|
||||
|
||||
/**
|
||||
* @brief Detaches the current SM session.
|
||||
* @note After this function is called, the rest of the SM API cannot be used.
|
||||
* @note Only available on [11.0.0+].
|
||||
* @note Only available on [11.0.0-11.0.1], or Atmosphère.
|
||||
*/
|
||||
Result smDetachClient(void);
|
||||
|
||||
/// Same as \ref smDetachClient, but always using cmif serialization.
|
||||
Result smDetachClientCmif(void);
|
||||
|
||||
/// Same as \ref smDetachClient, but always using tipc serialization.
|
||||
Result smDetachClientTipc(void);
|
||||
|
||||
/**
|
||||
* @brief Gets the Service session used to communicate with SM.
|
||||
* @return Pointer to service session used to communicate with SM.
|
||||
*/
|
||||
Service *smGetServiceSession(void);
|
||||
|
||||
/**
|
||||
* @brief Gets the TipcService session used to communicate with SM.
|
||||
* @return Pointer to tipc service session used to communicate with SM.
|
||||
* @note Only available on [12.0.0+], or Atmosphère.
|
||||
*/
|
||||
TipcService *smGetServiceSessionTipc(void);
|
||||
|
||||
/**
|
||||
* @brief Overrides a service with a custom IPC service handle.
|
||||
* @param[in] name Name of the service.
|
||||
|
@ -7,6 +7,7 @@
|
||||
#pragma once
|
||||
#include "../types.h"
|
||||
#include "../sf/service.h"
|
||||
#include "../sf/tipc.h"
|
||||
|
||||
/// Initialize sm:m.
|
||||
Result smManagerInitialize(void);
|
||||
@ -14,8 +15,29 @@ Result smManagerInitialize(void);
|
||||
/// Exit sm:m.
|
||||
void smManagerExit(void);
|
||||
|
||||
/// Gets the Service object for the actual sm:m service session.
|
||||
Service* smManagerGetServiceSession(void);
|
||||
|
||||
Result smManagerRegisterProcess(u64 pid, const void *acid_sac, size_t acid_sac_size, const void *aci0_sac, size_t aci0_sac_size);
|
||||
Result smManagerUnregisterProcess(u64 pid);
|
||||
|
||||
/// Initialize sm:m exclusively for tipc (requires <12.0.0 and non-Atmosphere).
|
||||
Result smManagerCmifInitialize(void);
|
||||
|
||||
/// Exit sm:m exclusively for tipc (requires <12.0.0 and non-Atmosphere).
|
||||
void smManagerCmifExit(void);
|
||||
|
||||
/// Gets the Service object for the actual sm:m service session (requires <12.0.0 and non-Atmosphere).
|
||||
Service* smManagerCmifGetServiceSession(void);
|
||||
|
||||
Result smManagerCmifRegisterProcess(u64 pid, const void *acid_sac, size_t acid_sac_size, const void *aci0_sac, size_t aci0_sac_size);
|
||||
Result smManagerCmifUnregisterProcess(u64 pid);
|
||||
|
||||
/// Initialize sm:m exclusively for tipc (requires 12.0.0+ or Atmosphere).
|
||||
Result smManagerTipcInitialize(void);
|
||||
|
||||
/// Exit sm:m exclusively for tipc (requires 12.0.0+ or Atmosphere).
|
||||
void smManagerTipcExit(void);
|
||||
|
||||
/// Gets the TipcService object for the actual sm:m service session (requires 12.0.0+ or Atmosphere).
|
||||
TipcService* smManagerTipcGetServiceSession(void);
|
||||
|
||||
Result smManagerTipcRegisterProcess(u64 pid, const void *acid_sac, size_t acid_sac_size, const void *aci0_sac, size_t aci0_sac_size);
|
||||
Result smManagerTipcUnregisterProcess(u64 pid);
|
||||
|
@ -7,6 +7,7 @@
|
||||
#pragma once
|
||||
#include "../types.h"
|
||||
#include "../kernel/event.h"
|
||||
#include "../sf/service.h"
|
||||
|
||||
#define SPL_RSA_BUFFER_SIZE (0x100)
|
||||
|
||||
|
@ -8,12 +8,19 @@
|
||||
#include "../types.h"
|
||||
#include "../sf/service.h"
|
||||
|
||||
/// Values for __nx_ssl_service_type, controls which ssl service to initialize.
|
||||
typedef enum {
|
||||
SslServiceType_Default = 0, ///< Initialize the ssl service.
|
||||
SslServiceType_System = 1, ///< [15.0.0+] Initialize the ssl:s service. On older versions this is the same as ::SslServiceType_Default.
|
||||
} SslServiceType;
|
||||
|
||||
/// CaCertificateId
|
||||
typedef enum {
|
||||
SslCaCertificateId_All = -1, ///< [3.0.0+] All
|
||||
|
||||
SslCaCertificateId_NintendoCAG3 = 1, ///< NintendoCAG3
|
||||
SslCaCertificateId_NintendoClass2CAG3 = 2, ///< NintendoClass2CAG3
|
||||
SslCaCertificateId_NintendoRootCAG4 = 3, ///< [16.0.0+] "Nintendo Root CA G4"
|
||||
|
||||
SslCaCertificateId_AmazonRootCA1 = 1000, ///< AmazonRootCA1
|
||||
SslCaCertificateId_StarfieldServicesRootCertificateAuthorityG2 = 1001, ///< StarfieldServicesRootCertificateAuthorityG2
|
||||
@ -49,6 +56,32 @@ typedef enum {
|
||||
SslCaCertificateId_VeriSignClass3PublicPrimaryCertificationAuthorityG5 = 1031, ///< VeriSignClass3PublicPrimaryCertificationAuthorityG5 ([8.0.0+] ::SslTrustedCertStatus is ::SslTrustedCertStatus_EnabledNotTrusted)
|
||||
SslCaCertificateId_VeriSignUniversalRootCertificationAuthority = 1032, ///< VeriSignUniversalRootCertificationAuthority ([8.0.0+] ::SslTrustedCertStatus is ::SslTrustedCertStatus_EnabledNotTrusted)
|
||||
SslCaCertificateId_DSTRootCAX3 = 1033, ///< [6.0.0+] DSTRootCAX3
|
||||
SslCaCertificateId_USERTrustRsaCertificationAuthority = 1034, ///< [10.0.3+] "USERTrust RSA Certification Authority"
|
||||
SslCaCertificateId_ISRGRootX10 = 1035, ///< [10.1.0+] "ISRG Root X10"
|
||||
SslCaCertificateId_USERTrustEccCertificationAuthority = 1036, ///< [10.1.0+] "USERTrust ECC Certification Authority"
|
||||
SslCaCertificateId_COMODORsaCertificationAuthority = 1037, ///< [10.1.0+] "COMODO RSA Certification Authority"
|
||||
SslCaCertificateId_COMODOEccCertificationAuthority = 1038, ///< [10.1.0+] "COMODO ECC Certification Authority"
|
||||
SslCaCertificateId_AmazonRootCA2 = 1039, ///< [11.0.0+] "Amazon Root CA 2"
|
||||
SslCaCertificateId_AmazonRootCA3 = 1040, ///< [11.0.0+] "Amazon Root CA 3"
|
||||
SslCaCertificateId_AmazonRootCA4 = 1041, ///< [11.0.0+] "Amazon Root CA 4"
|
||||
SslCaCertificateId_DigiCertAssuredIDRootG3 = 1042, ///< [11.0.0+] "DigiCert Assured ID Root G3"
|
||||
SslCaCertificateId_DigiCertGlobalRootG3 = 1043, ///< [11.0.0+] "DigiCert Global Root G3"
|
||||
SslCaCertificateId_DigiCertTrustedRootG4 = 1044, ///< [11.0.0+] "DigiCert Trusted Root G4"
|
||||
SslCaCertificateId_EntrustRootCertificationAuthorityEC1 = 1045, ///< [11.0.0+] "Entrust Root Certification Authority - EC1"
|
||||
SslCaCertificateId_EntrustRootCertificationAuthorityG4 = 1046, ///< [11.0.0+] "Entrust Root Certification Authority - G4"
|
||||
SslCaCertificateId_GlobalSignECCRootCAR4 = 1047, ///< [11.0.0+] "GlobalSign ECC Root CA - R4"
|
||||
SslCaCertificateId_GlobalSignECCRootCAR5 = 1048, ///< [11.0.0+] "GlobalSign ECC Root CA - R5"
|
||||
SslCaCertificateId_GlobalSignECCRootCAR6 = 1049, ///< [11.0.0+] "GlobalSign ECC Root CA - R6"
|
||||
SslCaCertificateId_GTSRootR1 = 1050, ///< [11.0.0+] "GTS Root R1"
|
||||
SslCaCertificateId_GTSRootR2 = 1051, ///< [11.0.0+] "GTS Root R2"
|
||||
SslCaCertificateId_GTSRootR3 = 1052, ///< [11.0.0+] "GTS Root R3"
|
||||
SslCaCertificateId_GTSRootR4 = 1053, ///< [11.0.0+] "GTS Root R4"
|
||||
SslCaCertificateId_SecurityCommunicationRootCA = 1054, ///< [12.0.0+] "Security Communication RootCA"
|
||||
SslCaCertificateId_GlobalSignRootE4 = 1055, ///< [15.0.0+] "GlobalSign Root E4"
|
||||
SslCaCertificateId_GlobalSignRootR4 = 1056, ///< [15.0.0+] "GlobalSign Root R4"
|
||||
SslCaCertificateId_TTeleSecGlobalRootClass2 = 1057, ///< [15.0.0+] "T-TeleSec GlobalRoot Class 2"
|
||||
SslCaCertificateId_DigiCertTLSECCP384RootG5 = 1058, ///< [16.0.0+] "DigiCert TLS ECC P384 Root G5"
|
||||
SslCaCertificateId_DigiCertTLSRSA4096RootG5 = 1059, ///< [16.0.0+] "DigiCert TLS RSA4096 Root G5"
|
||||
} SslCaCertificateId;
|
||||
|
||||
/// TrustedCertStatus
|
||||
@ -144,6 +177,12 @@ typedef enum {
|
||||
SslOptionType_EnableAlpn = 3, ///< [9.0.0+] EnableAlpn. Only available with \ref sslConnectionSetOption. \ref sslConnectionSetSocketDescriptor should have been used prior to this - this will optionally use state setup by that, without throwing an error if that cmd wasn't used.
|
||||
} SslOptionType;
|
||||
|
||||
/// PrivateOptionType
|
||||
typedef enum {
|
||||
SslPrivateOptionType_DtlsSession = 1, ///< \ref sslConnectionSetSessionCacheMode will throw an error if the input ::SslSessionCacheMode is non-zero and this option flag is set.
|
||||
SslPrivateOptionType_SetCipher = 2, ///< [17.0.0+] This exclusively enables the cipher suite specified in the input u32 value passed to \ref sslConnectionSetPrivateOption (all other ciphers disabled).
|
||||
} SslPrivateOptionType;
|
||||
|
||||
/// AlpnProtoState
|
||||
typedef enum {
|
||||
SslAlpnProtoState_NoSupport = 0, ///< NoSupport
|
||||
@ -190,6 +229,15 @@ typedef struct {
|
||||
char protocol_version[0x8]; ///< Protocol version string.
|
||||
} SslCipherInfo;
|
||||
|
||||
/// KeyAndCertParams
|
||||
typedef struct {
|
||||
u32 unk_x0; ///< Must be value 1.
|
||||
s32 key_size; ///< Key size in bits.
|
||||
u64 public_exponent; ///< Public exponent, must be non-zero. Only the low 4-bytes are used.
|
||||
char common_name[0x40]; ///< CN (Common Name) NUL-terminated string.
|
||||
u32 common_name_len; ///< Length of common_name excluding NUL-terminator. Must be 0x1-0x3F.
|
||||
} SslKeyAndCertParams;
|
||||
|
||||
/// Initialize ssl. A default value of 0x3 can be used for num_sessions. This must be 0x1-0x4.
|
||||
Result sslInitialize(u32 num_sessions);
|
||||
|
||||
@ -261,6 +309,26 @@ Result sslSetDebugOption(const void* buffer, size_t size, SslDebugOptionType typ
|
||||
*/
|
||||
Result sslGetDebugOption(void* buffer, size_t size, SslDebugOptionType type);
|
||||
|
||||
/**
|
||||
* @brief ClearTls12FallbackFlag
|
||||
* @note Only available on [14.0.0+].
|
||||
*/
|
||||
Result sslClearTls12FallbackFlag(void);
|
||||
|
||||
/**
|
||||
* @brief SetThreadCoreMask
|
||||
* @param[in] mask CoreMask
|
||||
* @note Only available on [15.0.0+] with ::SslServiceType_System.
|
||||
*/
|
||||
Result sslSetThreadCoreMask(u64 mask);
|
||||
|
||||
/**
|
||||
* @brief GetThreadCoreMask
|
||||
* @param[out] out Output CoreMask.
|
||||
* @note Only available on [15.0.0+] with ::SslServiceType_System.
|
||||
*/
|
||||
Result sslGetThreadCoreMask(u64 *out);
|
||||
|
||||
///@name ISslContext
|
||||
///@{
|
||||
|
||||
@ -360,6 +428,42 @@ Result sslContextAddPolicyOid(SslContext *c, const char *str, u32 str_bufsize);
|
||||
*/
|
||||
Result sslContextImportCrl(SslContext *c, const void* buffer, u32 size, u64 *id);
|
||||
|
||||
/**
|
||||
* @brief ImportClientCertKeyPki
|
||||
* @note Only available on [16.0.0+].
|
||||
* @param c \ref SslContext
|
||||
* @param[in] cert Input cert buffer,
|
||||
* @param[in] cert_size Size of the cert buffer.
|
||||
* @param[in] key Input key buffer.
|
||||
* @param[in] key_size Size of the key buffer.
|
||||
* @param[in] format \ref SslCertificateFormat for the cert and key.
|
||||
* @param[out] id Output Id. Optional, can be NULL.
|
||||
*/
|
||||
Result sslContextImportClientCertKeyPki(SslContext *c, const void* cert, u32 cert_size, const void* key, u32 key_size, SslCertificateFormat format, u64 *id);
|
||||
|
||||
/**
|
||||
* @brief GeneratePrivateKeyAndCert
|
||||
* @note Only available on [16.0.0+].
|
||||
* @param c \ref SslContext
|
||||
* @param[out] cert Output cert buffer,
|
||||
* @param[in] cert_size Size of the cert buffer.
|
||||
* @param[out] key Output key buffer.
|
||||
* @param[in] key_size Size of the key buffer.
|
||||
* @param[in] val Must be value 1.
|
||||
* @param[in] params \ref SslKeyAndCertParams
|
||||
* @param[out] out_certsize Actual size of the generated cert data.
|
||||
* @param[out] out_keysize Actual size of the generated key data.
|
||||
*/
|
||||
Result sslContextGeneratePrivateKeyAndCert(SslContext *c, void* cert, u32 cert_size, void* key, u32 key_size, u32 val, const SslKeyAndCertParams *params, u32 *out_certsize, u32 *out_keysize);
|
||||
|
||||
/**
|
||||
* @brief CreateConnectionForSystem
|
||||
* @note Only available on [15.0.0+] with ::SslServiceType_System.
|
||||
* @param c \ref SslContext
|
||||
* @param[out] conn Output \ref SslConnection.
|
||||
*/
|
||||
Result sslContextCreateConnectionForSystem(SslContext *c, SslConnection *conn);
|
||||
|
||||
///@}
|
||||
|
||||
///@name ISslConnection
|
||||
@ -619,5 +723,80 @@ Result sslConnectionSetNextAlpnProto(SslConnection *c, const u8 *buffer, u32 siz
|
||||
*/
|
||||
Result sslConnectionGetNextAlpnProto(SslConnection *c, SslAlpnProtoState *state, u32 *out, u8 *buffer, u32 size);
|
||||
|
||||
/**
|
||||
* @brief SetDtlsSocketDescriptor. Do not use directly, use \ref socketSslConnectionSetDtlsSocketDescriptor instead.
|
||||
* @note Only available on [16.0.0+].
|
||||
* @note An error is thrown if this was used previously.
|
||||
* @param c \ref SslConnection
|
||||
* @param[in] sockfd sockfd
|
||||
* @param[in] Input sockaddr.
|
||||
* @param[in] size Input sockaddr size.
|
||||
* @param[out] out_sockfd sockfd. Prior to using \ref sslConnectionClose, this must be closed if it's not negative (it will be -1 if ::SslOptionType_DoNotCloseSocket is set).
|
||||
*/
|
||||
Result sslConnectionSetDtlsSocketDescriptor(SslConnection *c, int sockfd, const void* buf, size_t size, int *out_sockfd);
|
||||
|
||||
/**
|
||||
* @brief GetDtlsHandshakeTimeout
|
||||
* @note Only available on [16.0.0+].
|
||||
* @param c \ref SslConnection
|
||||
* @param[out] out Output nanoseconds value.
|
||||
*/
|
||||
Result sslConnectionGetDtlsHandshakeTimeout(SslConnection *c, u64 *out);
|
||||
|
||||
/**
|
||||
* @brief SetPrivateOption
|
||||
* @note Only available on [16.0.0+].
|
||||
* @param c \ref SslConnection
|
||||
* @param[in] option \ref SslPrivateOptionType
|
||||
* @param[in] value Input value.
|
||||
*/
|
||||
Result sslConnectionSetPrivateOption(SslConnection *c, SslPrivateOptionType option, u32 value);
|
||||
|
||||
/**
|
||||
* @brief SetSrtpCiphers
|
||||
* @note Only available on [16.0.0+].
|
||||
* @param c \ref SslConnection
|
||||
* @param[in] ciphers Input array of u16s. Each entry must be value 1-2, otherwise the entry is ignored.
|
||||
* @param[in] count Total entries in the ciphers array, the maximum is 4.
|
||||
*/
|
||||
Result sslConnectionSetSrtpCiphers(SslConnection *c, const u16 *ciphers, u32 count);
|
||||
|
||||
/**
|
||||
* @brief GetSrtpCipher
|
||||
* @note Only available on [16.0.0+].
|
||||
* @param c \ref SslConnection
|
||||
* @param[out] out Output value.
|
||||
*/
|
||||
Result sslConnectionGetSrtpCipher(SslConnection *c, u16 *out);
|
||||
|
||||
/**
|
||||
* @brief ExportKeyingMaterial
|
||||
* @note Only available on [16.0.0+].
|
||||
* @param c \ref SslConnection
|
||||
* @param[out] outbuf Output buffer.
|
||||
* @param[in] outbuf_size Output buffer size.
|
||||
* @param[in] label Input label string.
|
||||
* @param[in] label_size Size of the label buffer excluding NUL-terminator.
|
||||
* @param[in] context Optional input context buffer, can be NULL.
|
||||
* @param[in] context_size Size of context, if specified this must be <0xFFFF.
|
||||
*/
|
||||
Result sslConnectionExportKeyingMaterial(SslConnection *c, u8 *outbuf, u32 outbuf_size, const char *label, u32 label_size, const void* context, u32 context_size);
|
||||
|
||||
/**
|
||||
* @brief SetIoTimeout
|
||||
* @note Only available on [16.0.0+].
|
||||
* @param c \ref SslConnection
|
||||
* @param[in] timeout Input timeout value.
|
||||
*/
|
||||
Result sslConnectionSetIoTimeout(SslConnection *c, u32 timeout);
|
||||
|
||||
/**
|
||||
* @brief GetIoTimeout
|
||||
* @note Only available on [16.0.0+].
|
||||
* @param c \ref SslConnection
|
||||
* @param[out] out Output timeout value.
|
||||
*/
|
||||
Result sslConnectionGetIoTimeout(SslConnection *c, u32 *out);
|
||||
|
||||
///@}
|
||||
|
||||
|
@ -14,6 +14,15 @@ typedef enum {
|
||||
TsLocation_External = 1, ///< TMP451 External: SoC
|
||||
} TsLocation;
|
||||
|
||||
typedef enum {
|
||||
TsDeviceCode_LocationInternal = 0x41000001u,
|
||||
TsDeviceCode_LocationExternal = 0x41000002u,
|
||||
} TsDeviceCode;
|
||||
|
||||
typedef struct {
|
||||
Service s;
|
||||
} TsSession;
|
||||
|
||||
/// Initialize ts.
|
||||
Result tsInitialize(void);
|
||||
|
||||
@ -39,9 +48,13 @@ Result tsGetTemperatureRange(TsLocation location, s32 *min_temperature, s32 *max
|
||||
Result tsGetTemperature(TsLocation location, s32 *temperature);
|
||||
|
||||
/**
|
||||
* @brief Gets the temperature for the specified \ref TsLocation, in MilliC.
|
||||
* @brief Gets the temperature for the specified \ref TsLocation, in MilliC. [1.0.0-13.2.1]
|
||||
* @param[in] location \ref TsLocation
|
||||
* @param[out] temperature Output temperature in MilliC.
|
||||
*/
|
||||
Result tsGetTemperatureMilliC(TsLocation location, s32 *temperature);
|
||||
|
||||
Result tsOpenSession(TsSession *s, u32 device_code); ///< [8.0.0+]
|
||||
|
||||
Result tsSessionGetTemperature(TsSession *s, float *temperature); ///< [10.0.0+]
|
||||
void tsSessionClose(TsSession *s);
|
@ -54,6 +54,7 @@ Service* uartGetServiceSession(void);
|
||||
|
||||
/**
|
||||
* @brief HasPort
|
||||
* @note Only available on [1.0.0-16.1.0].
|
||||
* @param[in] port \ref UartPort
|
||||
* @param[out] out Output success flag.
|
||||
*/
|
||||
@ -61,6 +62,7 @@ Result uartHasPort(UartPort port, bool *out);
|
||||
|
||||
/**
|
||||
* @brief HasPortForDev
|
||||
* @note Only available on [1.0.0-16.1.0].
|
||||
* @param[in] port \ref UartPortForDev
|
||||
* @param[out] out Output success flag.
|
||||
*/
|
||||
@ -68,6 +70,7 @@ Result uartHasPortForDev(UartPortForDev port, bool *out);
|
||||
|
||||
/**
|
||||
* @brief IsSupportedBaudRate
|
||||
* @note Only available on [1.0.0-16.1.0].
|
||||
* @param[in] port \ref UartPort
|
||||
* @param[in] baud_rate BaudRate
|
||||
* @param[out] out Output success flag.
|
||||
@ -76,6 +79,7 @@ Result uartIsSupportedBaudRate(UartPort port, u32 baud_rate, bool *out);
|
||||
|
||||
/**
|
||||
* @brief IsSupportedBaudRateForDev
|
||||
* @note Only available on [1.0.0-16.1.0].
|
||||
* @param[in] port \ref UartPortForDev
|
||||
* @param[in] baud_rate BaudRate
|
||||
* @param[out] out Output success flag.
|
||||
@ -84,6 +88,7 @@ Result uartIsSupportedBaudRateForDev(UartPortForDev port, u32 baud_rate, bool *o
|
||||
|
||||
/**
|
||||
* @brief IsSupportedFlowControlMode
|
||||
* @note Only available on [1.0.0-16.1.0].
|
||||
* @param[in] port \ref UartPort
|
||||
* @param[in] flow_control_mode \ref UartFlowControlMode
|
||||
* @param[out] out Output success flag.
|
||||
@ -92,6 +97,7 @@ Result uartIsSupportedFlowControlMode(UartPort port, UartFlowControlMode flow_co
|
||||
|
||||
/**
|
||||
* @brief IsSupportedFlowControlModeForDev
|
||||
* @note Only available on [1.0.0-16.1.0].
|
||||
* @param[in] port \ref UartPortForDev
|
||||
* @param[in] flow_control_mode \ref UartFlowControlMode
|
||||
* @param[out] out Output success flag.
|
||||
@ -107,6 +113,7 @@ Result uartCreatePortSession(UartPortSession *s);
|
||||
|
||||
/**
|
||||
* @brief IsSupportedPortEvent
|
||||
* @note Only available on [1.0.0-16.1.0].
|
||||
* @param[in] port \ref UartPort
|
||||
* @param[in] port_event_type \ref UartPortEventType
|
||||
* @param[out] out Output success flag.
|
||||
@ -115,6 +122,7 @@ Result uartIsSupportedPortEvent(UartPort port, UartPortEventType port_event_type
|
||||
|
||||
/**
|
||||
* @brief IsSupportedPortEventForDev
|
||||
* @note Only available on [1.0.0-16.1.0].
|
||||
* @param[in] port \ref UartPortForDev
|
||||
* @param[in] port_event_type \ref UartPortEventType
|
||||
* @param[out] out Output success flag.
|
||||
@ -123,7 +131,7 @@ Result uartIsSupportedPortEventForDev(UartPortForDev port, UartPortEventType por
|
||||
|
||||
/**
|
||||
* @brief IsSupportedDeviceVariation
|
||||
* @note Only available on [7.0.0+].
|
||||
* @note Only available on [7.0.0-16.1.0].
|
||||
* @param[in] port \ref UartPort
|
||||
* @param[in] device_variation DeviceVariation
|
||||
* @param[out] out Output success flag.
|
||||
@ -132,7 +140,7 @@ Result uartIsSupportedDeviceVariation(UartPort port, u32 device_variation, bool
|
||||
|
||||
/**
|
||||
* @brief IsSupportedDeviceVariationForDev
|
||||
* @note Only available on [7.0.0+].
|
||||
* @note Only available on [7.0.0-16.1.0].
|
||||
* @param[in] port \ref UartPortForDev
|
||||
* @param[in] device_variation DeviceVariation
|
||||
* @param[out] out Output success flag.
|
||||
|
@ -29,7 +29,7 @@ struct usb_endpoint_descriptor {
|
||||
uint8_t bmAttributes;
|
||||
uint16_t wMaxPacketSize;
|
||||
uint8_t bInterval;
|
||||
} PACKED;
|
||||
} NX_PACKED;
|
||||
|
||||
/// Imported from libusb, with some adjustments.
|
||||
struct usb_interface_descriptor {
|
||||
@ -72,7 +72,7 @@ struct usb_config_descriptor {
|
||||
uint8_t iConfiguration;
|
||||
uint8_t bmAttributes;
|
||||
uint8_t MaxPower;
|
||||
} PACKED;
|
||||
} NX_PACKED;
|
||||
|
||||
/// Imported from libusb, with some adjustments.
|
||||
struct usb_ss_endpoint_companion_descriptor {
|
||||
|
@ -9,6 +9,7 @@
|
||||
#include "../sf/service.h"
|
||||
#include "../services/usb.h"
|
||||
#include "../kernel/event.h"
|
||||
#include "../kernel/tmem.h"
|
||||
|
||||
typedef enum {
|
||||
///< These use \ref usb_device_descriptor. Bit2..6 require [6.0.0+], these are ignored on eariler versions.
|
||||
@ -59,7 +60,7 @@ typedef struct {
|
||||
u8 pad_x155[0x6];
|
||||
struct usb_ss_endpoint_companion_descriptor output_ss_endpoint_companion_descs[15]; ///< ?
|
||||
u8 pad_x1b5[0x3];
|
||||
} PACKED UsbHsInterfaceInfo;
|
||||
} NX_PACKED UsbHsInterfaceInfo;
|
||||
|
||||
/// Interface struct. Note that devices have a seperate \ref UsbHsInterface for each interface.
|
||||
typedef struct {
|
||||
@ -74,16 +75,21 @@ typedef struct {
|
||||
u8 pad_x21b[0x5];
|
||||
|
||||
u64 timestamp; ///< Unknown u64 timestamp for when the device was inserted?
|
||||
} PACKED UsbHsInterface;
|
||||
} NX_PACKED UsbHsInterface;
|
||||
|
||||
typedef struct {
|
||||
u32 xferId;
|
||||
Result res;
|
||||
u32 requestedSize;
|
||||
u32 transferredSize;
|
||||
u64 unk_x10;
|
||||
u64 id; ///< id from \ref usbHsEpPostBufferAsync.
|
||||
} UsbHsXferReport;
|
||||
|
||||
typedef struct {
|
||||
vu64 write_index;
|
||||
vu64 read_index;
|
||||
} UsbHsRingHeader;
|
||||
|
||||
/// The interface service object. These Events have autoclear=false.
|
||||
typedef struct {
|
||||
Service s;
|
||||
@ -97,6 +103,9 @@ typedef struct {
|
||||
typedef struct {
|
||||
Service s;
|
||||
Event eventXfer; ///< [2.0.0+] Signaled when PostBufferAsync finishes.
|
||||
u32 maxUrbCount;
|
||||
u64 max_reports;
|
||||
void* ringbuf;
|
||||
|
||||
struct usb_endpoint_descriptor desc;
|
||||
} UsbHsClientEpSession;
|
||||
@ -226,6 +235,79 @@ Result usbHsIfResetDevice(UsbHsClientIfSession* s);
|
||||
/// Closes the specified endpoint session.
|
||||
void usbHsEpClose(UsbHsClientEpSession* s);
|
||||
|
||||
/// Uses a data transfer with the specified endpoint, this will block until the transfer finishes. The buffer address and size should be aligned to 0x1000-bytes, where the input size is the original size.
|
||||
/// Gets the Xfer Event which is signaled when PostBufferAsync finishes. This is only valid for [2.0.0+]. If using \ref eventWait with this, then \ref eventClear should be used if the event was signaled (since the autoclear is false).
|
||||
NX_CONSTEXPR Event* usbHsEpGetXferEvent(UsbHsClientEpSession* s) {
|
||||
return &s->eventXfer;
|
||||
}
|
||||
|
||||
/// Gets the buffer size to use with \ref usbHsEpShareReportRing.
|
||||
NX_CONSTEXPR u32 usbHsEpGetReportRingSize(UsbHsClientEpSession* s) {
|
||||
u64 max_reports = s->maxUrbCount * 0x21;
|
||||
u32 size = sizeof(UsbHsRingHeader) + max_reports*sizeof(UsbHsXferReport);
|
||||
size = (size+0xFFF) & ~0xFFF;
|
||||
return size;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Starts an async data transfer with the specified endpoint. The Event from \ref usbHsEpGetXferEvent can be used to determine when the transfer finished. If you don't need async, \ref usbHsEpPostBuffer can be used instead.
|
||||
* @note Only available on [2.0.0+].
|
||||
* @param[in] s The endpoint object.
|
||||
* @param buffer Data buffer. The buffer address and size should be aligned to 0x1000-bytes.
|
||||
* @param[in] size The actual data size.
|
||||
* @param[in] id This is an arbitrary value which will be later returned in \ref UsbHsXferReport. For example a value starting at 0 can be used, then if sending multiple requests at once this value can be incremented each time (with 0 for the first request in this set of requests).
|
||||
* @param[out] xferId Output xferId.
|
||||
*/
|
||||
Result usbHsEpPostBufferAsync(UsbHsClientEpSession* s, void* buffer, u32 size, u64 id, u32* xferId);
|
||||
|
||||
/**
|
||||
* @brief Gets an array of \ref UsbHsXferReport for the specified endpoint. This should be used after waiting on the Event from \ref usbHsEpGetXferEvent.
|
||||
* @note Only available on [2.0.0+].
|
||||
* @param[in] s The endpoint object.
|
||||
* @param[out] reports Output array of \ref UsbHsXferReport.
|
||||
* @param[in] max_reports Size of the reports array in entries.
|
||||
* @param[out] count Number of entries written to the array.
|
||||
*/
|
||||
Result usbHsEpGetXferReport(UsbHsClientEpSession* s, UsbHsXferReport* reports, u32 max_reports, u32* count);
|
||||
|
||||
/**
|
||||
* @brief Uses a data transfer with the specified endpoint, this will block until the transfer finishes. This wraps \ref usbHsEpPostBufferAsync and \ref usbHsEpGetXferReport, and also handles the Event (on pre-2.0.0 this handles using the relevant cmds instead). If async is needed, use \ref usbHsEpPostBufferAsync instead.
|
||||
* @param[in] s The endpoint object.
|
||||
* @param buffer Data buffer. The buffer address and size should be aligned to 0x1000-bytes.
|
||||
* @param[in] size The actual data size.
|
||||
* @param[out] transferredSize Output transferred size.
|
||||
*/
|
||||
Result usbHsEpPostBuffer(UsbHsClientEpSession* s, void* buffer, u32 size, u32* transferredSize);
|
||||
|
||||
/**
|
||||
* @brief This uses the same functionality internally as \ref usbHsEpPostBufferAsync except the urbs array and unk1/unk2 are specified by the user instead.
|
||||
* @note Only available on [2.0.0+].
|
||||
* @param[in] s The endpoint object.
|
||||
* @param buffer Data buffer. The buffer address and size should be aligned to 0x1000-bytes.
|
||||
* @param[in] urbs Input array of u32s for the size of each urb.
|
||||
* @param[in] urbCount Total entries in the urbs array.
|
||||
* @param[in] id Same as \ref usbHsEpPostBufferAsync.
|
||||
* @param[in] unk1 \ref usbHsEpPostBufferAsync would internally pass value 0 here.
|
||||
* @param[in] unk2 \ref usbHsEpPostBufferAsync would internally pass value 0 here.
|
||||
* @param[out] xferId Output xferId.
|
||||
*/
|
||||
Result usbHsEpBatchBufferAsync(UsbHsClientEpSession* s, void* buffer, u32* urbs, u32 urbCount, u64 id, u32 unk1, u32 unk2, u32* xferId);
|
||||
|
||||
/**
|
||||
* @brief This can be used to map the specified buffer as devicemem, which can then be used with \ref usbHsEpPostBufferAsync / \ref usbHsEpPostBuffer / \ref usbHsEpBatchBufferAsync. If the buffer address passed to those funcs is within this SmmuSpace, the specified buffer must be within the bounds of the SmmuSpace buffer.
|
||||
* @note Only available on [4.0.0+].
|
||||
* @note A buffer from usbHsEpCreateSmmuSpace can't be reused by another endpoint with the aforementioned funcs.
|
||||
* @note This can only be used once per UsbHsClientEpSession object.
|
||||
* @param[in] s The endpoint object.
|
||||
* @param buffer Buffer address, this must be aligned to 0x1000-bytes.
|
||||
* @param[in] size Buffer size, this must be aligned to 0x1000-bytes.
|
||||
*/
|
||||
Result usbHsEpCreateSmmuSpace(UsbHsClientEpSession* s, void* buffer, u32 size);
|
||||
|
||||
/**
|
||||
* @brief This creates TransferMemory which is used to read \ref UsbHsXferReport when \ref usbHsEpGetXferReport is used, instead of using the service cmd.
|
||||
* @note Only available on [4.0.0+].
|
||||
* @param buffer Buffer, must be 0x1000-byte aligned.
|
||||
* @param[in] size Buffer size, \ref usbHsEpGetReportRingSize can be used to calculate this.
|
||||
*/
|
||||
Result usbHsEpShareReportRing(UsbHsClientEpSession* s, void* buffer, size_t size);
|
||||
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "../types.h"
|
||||
#include "../kernel/event.h"
|
||||
#include "../sf/service.h"
|
||||
#include "pl.h"
|
||||
|
||||
typedef struct {
|
||||
char data[0x40];
|
||||
@ -68,6 +69,10 @@ typedef enum {
|
||||
ViLayerStack_Null = 10, ///< Layer stack for the empty display.
|
||||
} ViLayerStack;
|
||||
|
||||
/// Used as argument for certain drawing commands.
|
||||
typedef u16 ViColorRgba4444;
|
||||
typedef u32 ViColorRgba8888;
|
||||
|
||||
Result viInitialize(ViServiceType service_type);
|
||||
void viExit(void);
|
||||
|
||||
@ -116,3 +121,9 @@ Result viSetLayerScalingMode(ViLayer *layer, ViScalingMode scaling_mode);
|
||||
|
||||
Result viGetIndirectLayerImageMap(void* buffer, size_t size, s32 width, s32 height, u64 IndirectLayerConsumerHandle, u64 *out_size, u64 *out_stride);
|
||||
Result viGetIndirectLayerImageRequiredMemoryInfo(s32 width, s32 height, u64 *out_size, u64 *out_alignment);
|
||||
|
||||
// Manager functions
|
||||
Result viManagerPrepareFatal(void); ///< [16.0.0+]
|
||||
Result viManagerShowFatal(void); ///< [16.0.0+]
|
||||
Result viManagerDrawFatalRectangle(s32 x, s32 y, s32 end_x, s32 end_y, ViColorRgba4444 color); ///< [16.0.0+]
|
||||
Result viManagerDrawFatalText32(s32 *out_advance, s32 x, s32 y, const u32 *utf32_codepoints, size_t num_codepoints, float scale_x, float scale_y, PlSharedFontType font_type, ViColorRgba8888 bg_color, ViColorRgba8888 fg_color, s32 initial_advance); ///< [16.0.0+]
|
||||
|
@ -16,7 +16,7 @@ typedef enum {
|
||||
WlanInfState_Connected, ///< WLAN is connected.
|
||||
} WlanInfState;
|
||||
|
||||
/// Initialize wlan:inf.
|
||||
/// [1.0.0-14.1.2] Initialize wlan:inf.
|
||||
Result wlaninfInitialize(void);
|
||||
|
||||
/// Exit wlan:inf.
|
||||
|
@ -91,13 +91,13 @@ typedef struct CmifResponse {
|
||||
Handle* move_handles;
|
||||
} CmifResponse;
|
||||
|
||||
NX_CONSTEXPR void* cmifGetAlignedDataStart(u32* data_words, void* base)
|
||||
NX_INLINE void* cmifGetAlignedDataStart(u32* data_words, void* base)
|
||||
{
|
||||
intptr_t data_start = ((u8*)data_words - (u8*)base + 15) &~ 15;
|
||||
return (u8*)base + data_start;
|
||||
}
|
||||
|
||||
NX_CONSTEXPR CmifRequest cmifMakeRequest(void* base, CmifRequestFormat fmt)
|
||||
NX_INLINE CmifRequest cmifMakeRequest(void* base, CmifRequestFormat fmt)
|
||||
{
|
||||
// First of all, we need to figure out what size we need.
|
||||
u32 actual_size = 16;
|
||||
@ -156,7 +156,7 @@ NX_CONSTEXPR CmifRequest cmifMakeRequest(void* base, CmifRequestFormat fmt)
|
||||
return req;
|
||||
}
|
||||
|
||||
NX_CONSTEXPR void* cmifMakeControlRequest(void* base, u32 request_id, u32 size)
|
||||
NX_INLINE void* cmifMakeControlRequest(void* base, u32 request_id, u32 size)
|
||||
{
|
||||
u32 actual_size = 16 + sizeof(CmifInHeader) + size;
|
||||
HipcRequest hipc = hipcMakeRequestInline(base,
|
||||
@ -173,7 +173,7 @@ NX_CONSTEXPR void* cmifMakeControlRequest(void* base, u32 request_id, u32 size)
|
||||
return hdr+1;
|
||||
}
|
||||
|
||||
NX_CONSTEXPR void cmifMakeCloseRequest(void* base, u32 object_id)
|
||||
NX_INLINE void cmifMakeCloseRequest(void* base, u32 object_id)
|
||||
{
|
||||
if (object_id) {
|
||||
HipcRequest hipc = hipcMakeRequestInline(base,
|
||||
@ -225,25 +225,25 @@ NX_CONSTEXPR void cmifRequestOutPointer(CmifRequest* req, void* buffer, size_t s
|
||||
*req->out_pointer_sizes++ = size;
|
||||
}
|
||||
|
||||
NX_CONSTEXPR void cmifRequestInAutoBuffer(CmifRequest* req, const void* buffer, size_t size)
|
||||
NX_CONSTEXPR void cmifRequestInAutoBuffer(CmifRequest* req, const void* buffer, size_t size, HipcBufferMode mode)
|
||||
{
|
||||
if (req->server_pointer_size && size <= req->server_pointer_size) {
|
||||
cmifRequestInPointer(req, buffer, size);
|
||||
cmifRequestInBuffer(req, NULL, 0, HipcBufferMode_Normal);
|
||||
cmifRequestInBuffer(req, NULL, 0, mode);
|
||||
} else {
|
||||
cmifRequestInPointer(req, NULL, 0);
|
||||
cmifRequestInBuffer(req, buffer, size, HipcBufferMode_Normal);
|
||||
cmifRequestInBuffer(req, buffer, size, mode);
|
||||
}
|
||||
}
|
||||
|
||||
NX_CONSTEXPR void cmifRequestOutAutoBuffer(CmifRequest* req, void* buffer, size_t size)
|
||||
NX_CONSTEXPR void cmifRequestOutAutoBuffer(CmifRequest* req, void* buffer, size_t size, HipcBufferMode mode)
|
||||
{
|
||||
if (req->server_pointer_size && size <= req->server_pointer_size) {
|
||||
cmifRequestOutPointer(req, buffer, size);
|
||||
cmifRequestOutBuffer(req, NULL, 0, HipcBufferMode_Normal);
|
||||
cmifRequestOutBuffer(req, NULL, 0, mode);
|
||||
} else {
|
||||
cmifRequestOutPointer(req, NULL, 0);
|
||||
cmifRequestOutBuffer(req, buffer, size, HipcBufferMode_Normal);
|
||||
cmifRequestOutBuffer(req, buffer, size, mode);
|
||||
}
|
||||
}
|
||||
|
||||
@ -257,7 +257,7 @@ NX_CONSTEXPR void cmifRequestHandle(CmifRequest* req, Handle handle)
|
||||
*req->hipc.copy_handles++ = handle;
|
||||
}
|
||||
|
||||
NX_CONSTEXPR Result cmifParseResponse(CmifResponse* res, void* base, bool is_domain, u32 size)
|
||||
NX_INLINE Result cmifParseResponse(CmifResponse* res, void* base, bool is_domain, u32 size)
|
||||
{
|
||||
HipcResponse hipc = hipcParseResponse(base);
|
||||
void* start = cmifGetAlignedDataStart(hipc.data_words, base);
|
||||
|
@ -6,6 +6,7 @@
|
||||
* @copyright libnx Authors
|
||||
*/
|
||||
#pragma once
|
||||
#include <assert.h>
|
||||
#include "hipc.h"
|
||||
#include "cmif.h"
|
||||
|
||||
@ -150,10 +151,14 @@ NX_INLINE void serviceCreate(Service* s, Handle h)
|
||||
*/
|
||||
NX_INLINE void serviceCreateNonDomainSubservice(Service* s, Service* parent, Handle h)
|
||||
{
|
||||
if (h != INVALID_HANDLE) {
|
||||
s->session = h;
|
||||
s->own_handle = 1;
|
||||
s->object_id = 0;
|
||||
s->pointer_buffer_size = parent->pointer_buffer_size;
|
||||
} else {
|
||||
*s = (Service){};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -164,10 +169,14 @@ NX_INLINE void serviceCreateNonDomainSubservice(Service* s, Service* parent, Han
|
||||
*/
|
||||
NX_CONSTEXPR void serviceCreateDomainSubservice(Service* s, Service* parent, u32 object_id)
|
||||
{
|
||||
if (object_id != 0) {
|
||||
s->session = parent->session;
|
||||
s->own_handle = 0;
|
||||
s->object_id = object_id;
|
||||
s->pointer_buffer_size = parent->pointer_buffer_size;
|
||||
} else {
|
||||
*s = (Service){};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -293,10 +302,15 @@ NX_CONSTEXPR void _serviceRequestProcessBuffer(CmifRequest* req, const SfBuffer*
|
||||
const bool is_out = (attr & SfBufferAttr_Out);
|
||||
|
||||
if (attr & SfBufferAttr_HipcAutoSelect) {
|
||||
HipcBufferMode mode = HipcBufferMode_Normal;
|
||||
if (attr & SfBufferAttr_HipcMapTransferAllowsNonSecure)
|
||||
mode = HipcBufferMode_NonSecure;
|
||||
if (attr & SfBufferAttr_HipcMapTransferAllowsNonDevice)
|
||||
mode = HipcBufferMode_NonDevice;
|
||||
if (is_in)
|
||||
cmifRequestInAutoBuffer(req, buf->ptr, buf->size);
|
||||
cmifRequestInAutoBuffer(req, buf->ptr, buf->size, mode);
|
||||
if (is_out)
|
||||
cmifRequestOutAutoBuffer(req, (void*)buf->ptr, buf->size);
|
||||
cmifRequestOutAutoBuffer(req, (void*)buf->ptr, buf->size, mode);
|
||||
} else if (attr & SfBufferAttr_HipcPointer) {
|
||||
if (is_in)
|
||||
cmifRequestInPointer(req, buf->ptr, buf->size);
|
||||
@ -460,14 +474,45 @@ NX_INLINE Result serviceDispatchImpl(
|
||||
return rc;
|
||||
}
|
||||
|
||||
#ifndef __cplusplus
|
||||
|
||||
#define serviceMacroDetectIsSameType(a, b) __builtin_types_compatible_p(typeof(a), typeof(b))
|
||||
#define serviceMacroDetectIsPointerOrArray(p) (__builtin_classify_type(p) == 5)
|
||||
#define serviceMacroDecay(p) (&*__builtin_choose_expr(serviceMacroDetectIsPointerOrArray(p), p, NULL))
|
||||
#define serviceMacroDetectIsPointer(p) serviceMacroDetectIsSameType(p, serviceMacroDecay(p))
|
||||
|
||||
#else
|
||||
|
||||
extern "C++" {
|
||||
|
||||
namespace libnx::impl {
|
||||
|
||||
template<typename T> struct is_pointer { static constexpr bool value = false; };
|
||||
template<typename T> struct is_pointer<T*> { static constexpr bool value = true; };
|
||||
template<typename T> struct is_pointer<T* const> { static constexpr bool value = true; };
|
||||
template<typename T> struct is_pointer<T* volatile> { static constexpr bool value = true; };
|
||||
template<typename T> struct is_pointer<T* const volatile> { static constexpr bool value = true; };
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#define serviceMacroDetectIsPointer(p) (::libnx::impl::is_pointer<decltype(p)>::value)
|
||||
|
||||
#endif
|
||||
|
||||
#define serviceDispatch(_s,_rid,...) \
|
||||
serviceDispatchImpl((_s),(_rid),NULL,0,NULL,0,(SfDispatchParams){ __VA_ARGS__ })
|
||||
|
||||
#define serviceDispatchIn(_s,_rid,_in,...) \
|
||||
serviceDispatchImpl((_s),(_rid),&(_in),sizeof(_in),NULL,0,(SfDispatchParams){ __VA_ARGS__ })
|
||||
({ static_assert(!(serviceMacroDetectIsPointer(_in))); \
|
||||
serviceDispatchImpl((_s),(_rid),&(_in),sizeof(_in),NULL,0,(SfDispatchParams){ __VA_ARGS__ }); })
|
||||
|
||||
#define serviceDispatchOut(_s,_rid,_out,...) \
|
||||
serviceDispatchImpl((_s),(_rid),NULL,0,&(_out),sizeof(_out),(SfDispatchParams){ __VA_ARGS__ })
|
||||
({ static_assert(!(serviceMacroDetectIsPointer(_out))); \
|
||||
serviceDispatchImpl((_s),(_rid),NULL,0,&(_out),sizeof(_out),(SfDispatchParams){ __VA_ARGS__ }); })
|
||||
|
||||
#define serviceDispatchInOut(_s,_rid,_in,_out,...) \
|
||||
serviceDispatchImpl((_s),(_rid),&(_in),sizeof(_in),&(_out),sizeof(_out),(SfDispatchParams){ __VA_ARGS__ })
|
||||
({ static_assert(!(serviceMacroDetectIsPointer(_in))); \
|
||||
static_assert(!(serviceMacroDetectIsPointer(_out))); \
|
||||
serviceDispatchImpl((_s),(_rid),&(_in),sizeof(_in),&(_out),sizeof(_out),(SfDispatchParams){ __VA_ARGS__ }); })
|
||||
|
@ -12,7 +12,7 @@ typedef struct SessionMgr
|
||||
u32 free_mask;
|
||||
Mutex mutex;
|
||||
CondVar condvar;
|
||||
bool is_waiting;
|
||||
u32 num_waiters;
|
||||
} SessionMgr;
|
||||
|
||||
Result sessionmgrCreate(SessionMgr* mgr, Handle root_session, u32 num_sessions);
|
||||
|
269
nx/include/switch/sf/tipc.h
Normal file
269
nx/include/switch/sf/tipc.h
Normal file
@ -0,0 +1,269 @@
|
||||
/**
|
||||
* @file tipc.h
|
||||
* @brief Tiny IPC protocol
|
||||
* @author fincs
|
||||
* @author SciresM
|
||||
* @copyright libnx Authors
|
||||
*/
|
||||
#pragma once
|
||||
#include "hipc.h"
|
||||
#include "cmif.h"
|
||||
#include "service.h"
|
||||
|
||||
typedef enum TipcCommandType {
|
||||
TipcCommandType_Close = 15,
|
||||
} TipcCommandType;
|
||||
|
||||
/// tipc Service object structure
|
||||
typedef struct TipcService {
|
||||
Handle session;
|
||||
} TipcService;
|
||||
|
||||
typedef struct TipcDispatchParams {
|
||||
SfBufferAttrs buffer_attrs;
|
||||
SfBuffer buffers[8];
|
||||
|
||||
bool in_send_pid;
|
||||
|
||||
u32 in_num_handles;
|
||||
Handle in_handles[8];
|
||||
|
||||
u32 out_num_objects;
|
||||
TipcService* out_objects;
|
||||
|
||||
SfOutHandleAttrs out_handle_attrs;
|
||||
Handle* out_handles;
|
||||
} TipcDispatchParams;
|
||||
|
||||
typedef struct TipcRequestFormat {
|
||||
u32 request_id;
|
||||
u32 data_size;
|
||||
u32 num_in_buffers;
|
||||
u32 num_out_buffers;
|
||||
u32 num_inout_buffers;
|
||||
u32 num_handles;
|
||||
u32 send_pid;
|
||||
} TipcRequestFormat;
|
||||
|
||||
/**
|
||||
* @brief Creates a tipc service object from an IPC session handle.
|
||||
* @param[out] s TIPC service object.
|
||||
* @param[in] h IPC session handle.
|
||||
*/
|
||||
NX_CONSTEXPR void tipcCreate(TipcService* s, Handle h) {
|
||||
s->session = h;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Closes a tipc service.
|
||||
* @param[in] s TIPC service object.
|
||||
*/
|
||||
NX_INLINE void tipcClose(TipcService* s)
|
||||
{
|
||||
hipcMakeRequestInline(armGetTls(), .type = TipcCommandType_Close);
|
||||
svcSendSyncRequest(s->session);
|
||||
svcCloseHandle(s->session);
|
||||
*s = (TipcService){};
|
||||
}
|
||||
|
||||
NX_CONSTEXPR void tipcRequestInBuffer(HipcRequest* req, const void* buffer, size_t size, HipcBufferMode mode)
|
||||
{
|
||||
*req->send_buffers++ = hipcMakeBuffer(buffer, size, mode);
|
||||
}
|
||||
|
||||
NX_CONSTEXPR void tipcRequestOutBuffer(HipcRequest* req, void* buffer, size_t size, HipcBufferMode mode)
|
||||
{
|
||||
*req->recv_buffers++ = hipcMakeBuffer(buffer, size, mode);
|
||||
}
|
||||
|
||||
NX_CONSTEXPR void tipcRequestInOutBuffer(HipcRequest* req, void* buffer, size_t size, HipcBufferMode mode)
|
||||
{
|
||||
*req->exch_buffers++ = hipcMakeBuffer(buffer, size, mode);
|
||||
}
|
||||
|
||||
NX_CONSTEXPR void tipcRequestHandle(HipcRequest* req, Handle handle)
|
||||
{
|
||||
*req->copy_handles++ = handle;
|
||||
}
|
||||
|
||||
NX_CONSTEXPR void _tipcRequestFormatProcessBuffer(TipcRequestFormat* fmt, u32 attr)
|
||||
{
|
||||
if (!attr) return;
|
||||
const bool is_in = (attr & SfBufferAttr_In) != 0;
|
||||
const bool is_out = (attr & SfBufferAttr_Out) != 0;
|
||||
|
||||
if (attr & SfBufferAttr_HipcMapAlias) {
|
||||
if (is_in && is_out)
|
||||
fmt->num_inout_buffers ++;
|
||||
else if (is_in)
|
||||
fmt->num_in_buffers ++;
|
||||
else if (is_out)
|
||||
fmt->num_out_buffers ++;
|
||||
}
|
||||
}
|
||||
|
||||
NX_CONSTEXPR void _tipcRequestProcessBuffer(HipcRequest* req, const SfBuffer* buf, u32 attr)
|
||||
{
|
||||
if (!attr) return;
|
||||
const bool is_in = (attr & SfBufferAttr_In);
|
||||
const bool is_out = (attr & SfBufferAttr_Out);
|
||||
|
||||
if (attr & SfBufferAttr_HipcMapAlias) {
|
||||
HipcBufferMode mode = HipcBufferMode_Normal;
|
||||
if (attr & SfBufferAttr_HipcMapTransferAllowsNonSecure)
|
||||
mode = HipcBufferMode_NonSecure;
|
||||
if (attr & SfBufferAttr_HipcMapTransferAllowsNonDevice)
|
||||
mode = HipcBufferMode_NonDevice;
|
||||
|
||||
if (is_in && is_out)
|
||||
tipcRequestInOutBuffer(req, (void*)buf->ptr, buf->size, mode);
|
||||
else if (is_in)
|
||||
tipcRequestInBuffer(req, buf->ptr, buf->size, mode);
|
||||
else if (is_out)
|
||||
tipcRequestOutBuffer(req, (void*)buf->ptr, buf->size, mode);
|
||||
}
|
||||
}
|
||||
|
||||
NX_INLINE void* tipcMakeRequest(
|
||||
u32 request_id, u32 data_size, bool send_pid,
|
||||
const SfBufferAttrs buffer_attrs, const SfBuffer* buffers,
|
||||
u32 num_handles, const Handle* handles) {
|
||||
TipcRequestFormat fmt = {};
|
||||
fmt.request_id = request_id + 16;
|
||||
fmt.data_size = data_size;
|
||||
fmt.num_handles = num_handles;
|
||||
fmt.send_pid = send_pid;
|
||||
|
||||
_tipcRequestFormatProcessBuffer(&fmt, buffer_attrs.attr0);
|
||||
_tipcRequestFormatProcessBuffer(&fmt, buffer_attrs.attr1);
|
||||
_tipcRequestFormatProcessBuffer(&fmt, buffer_attrs.attr2);
|
||||
_tipcRequestFormatProcessBuffer(&fmt, buffer_attrs.attr3);
|
||||
_tipcRequestFormatProcessBuffer(&fmt, buffer_attrs.attr4);
|
||||
_tipcRequestFormatProcessBuffer(&fmt, buffer_attrs.attr5);
|
||||
_tipcRequestFormatProcessBuffer(&fmt, buffer_attrs.attr6);
|
||||
_tipcRequestFormatProcessBuffer(&fmt, buffer_attrs.attr7);
|
||||
|
||||
HipcRequest req = hipcMakeRequestInline(armGetTls(),
|
||||
.type = fmt.request_id,
|
||||
.num_send_statics = 0,
|
||||
.num_send_buffers = fmt.num_in_buffers,
|
||||
.num_recv_buffers = fmt.num_out_buffers,
|
||||
.num_exch_buffers = fmt.num_inout_buffers,
|
||||
.num_data_words = (data_size + 3) / 4,
|
||||
.num_recv_statics = 0,
|
||||
.send_pid = fmt.send_pid,
|
||||
.num_copy_handles = fmt.num_handles,
|
||||
.num_move_handles = 0,
|
||||
);
|
||||
|
||||
for (u32 i = 0; i < num_handles; i ++)
|
||||
tipcRequestHandle(&req, handles[i]);
|
||||
|
||||
_tipcRequestProcessBuffer(&req, &buffers[0], buffer_attrs.attr0);
|
||||
_tipcRequestProcessBuffer(&req, &buffers[1], buffer_attrs.attr1);
|
||||
_tipcRequestProcessBuffer(&req, &buffers[2], buffer_attrs.attr2);
|
||||
_tipcRequestProcessBuffer(&req, &buffers[3], buffer_attrs.attr3);
|
||||
_tipcRequestProcessBuffer(&req, &buffers[4], buffer_attrs.attr4);
|
||||
_tipcRequestProcessBuffer(&req, &buffers[5], buffer_attrs.attr5);
|
||||
_tipcRequestProcessBuffer(&req, &buffers[6], buffer_attrs.attr6);
|
||||
_tipcRequestProcessBuffer(&req, &buffers[7], buffer_attrs.attr7);
|
||||
|
||||
return req.data_words;
|
||||
}
|
||||
|
||||
NX_CONSTEXPR Handle tipcResponseGetCopyHandle(HipcResponse* res)
|
||||
{
|
||||
return *res->copy_handles++;
|
||||
}
|
||||
|
||||
NX_CONSTEXPR Handle tipcResponseGetMoveHandle(HipcResponse* res)
|
||||
{
|
||||
return *res->move_handles++;
|
||||
}
|
||||
|
||||
NX_CONSTEXPR void _tipcResponseGetHandle(HipcResponse* res, SfOutHandleAttr type, Handle* out)
|
||||
{
|
||||
switch (type) {
|
||||
default:
|
||||
case SfOutHandleAttr_None:
|
||||
break;
|
||||
case SfOutHandleAttr_HipcCopy:
|
||||
*out = tipcResponseGetCopyHandle(res);
|
||||
break;
|
||||
case SfOutHandleAttr_HipcMove:
|
||||
*out = tipcResponseGetMoveHandle(res);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
NX_INLINE Result tipcParseResponse(
|
||||
u32 out_size, void** out_data,
|
||||
u32 num_out_objects, TipcService* out_objects,
|
||||
const SfOutHandleAttrs out_handle_attrs, Handle* out_handles
|
||||
) {
|
||||
|
||||
HipcResponse res = hipcParseResponse(armGetTls());
|
||||
|
||||
Result rc = *res.data_words++;
|
||||
if (R_FAILED(rc))
|
||||
return rc;
|
||||
|
||||
if (out_size)
|
||||
*out_data = res.data_words;
|
||||
|
||||
for (u32 i = 0; i < num_out_objects; i ++) {
|
||||
tipcCreate(&out_objects[i], tipcResponseGetMoveHandle(&res));
|
||||
}
|
||||
|
||||
_tipcResponseGetHandle(&res, out_handle_attrs.attr0, &out_handles[0]);
|
||||
_tipcResponseGetHandle(&res, out_handle_attrs.attr1, &out_handles[1]);
|
||||
_tipcResponseGetHandle(&res, out_handle_attrs.attr2, &out_handles[2]);
|
||||
_tipcResponseGetHandle(&res, out_handle_attrs.attr3, &out_handles[3]);
|
||||
_tipcResponseGetHandle(&res, out_handle_attrs.attr4, &out_handles[4]);
|
||||
_tipcResponseGetHandle(&res, out_handle_attrs.attr5, &out_handles[5]);
|
||||
_tipcResponseGetHandle(&res, out_handle_attrs.attr6, &out_handles[6]);
|
||||
_tipcResponseGetHandle(&res, out_handle_attrs.attr7, &out_handles[7]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
NX_INLINE Result tipcDispatchImpl(
|
||||
TipcService* s, u32 request_id,
|
||||
const void* in_data, u32 in_data_size,
|
||||
void* out_data, u32 out_data_size,
|
||||
TipcDispatchParams disp
|
||||
)
|
||||
{
|
||||
void* in = tipcMakeRequest(request_id,
|
||||
in_data_size, disp.in_send_pid,
|
||||
disp.buffer_attrs, disp.buffers,
|
||||
disp.in_num_handles, disp.in_handles);
|
||||
|
||||
if (in_data_size)
|
||||
__builtin_memcpy(in, in_data, in_data_size);
|
||||
|
||||
Result rc = svcSendSyncRequest(s->session);
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
void* out = NULL;
|
||||
rc = tipcParseResponse(out_data_size, &out,
|
||||
disp.out_num_objects, disp.out_objects,
|
||||
disp.out_handle_attrs, disp.out_handles);
|
||||
|
||||
if (R_SUCCEEDED(rc) && out_data && out_data_size)
|
||||
__builtin_memcpy(out_data, out, out_data_size);
|
||||
}
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
#define tipcDispatch(_s,_rid,...) \
|
||||
tipcDispatchImpl((_s),(_rid),NULL,0,NULL,0,(TipcDispatchParams){ __VA_ARGS__ })
|
||||
|
||||
#define tipcDispatchIn(_s,_rid,_in,...) \
|
||||
tipcDispatchImpl((_s),(_rid),&(_in),sizeof(_in),NULL,0,(TipcDispatchParams){ __VA_ARGS__ })
|
||||
|
||||
#define tipcDispatchOut(_s,_rid,_out,...) \
|
||||
tipcDispatchImpl((_s),(_rid),NULL,0,&(_out),sizeof(_out),(TipcDispatchParams){ __VA_ARGS__ })
|
||||
|
||||
#define tipcDispatchInOut(_s,_rid,_in,_out,...) \
|
||||
tipcDispatchImpl((_s),(_rid),&(_in),sizeof(_in),&(_out),sizeof(_out),(TipcDispatchParams){ __VA_ARGS__ })
|
@ -54,27 +54,31 @@ typedef struct { float value[3]; } UtilFloat3; ///< 3 floats.
|
||||
#define BIT(n) (1U<<(n))
|
||||
#endif
|
||||
|
||||
#ifndef BITL
|
||||
#define BITL(n) (1UL<<(n))
|
||||
#endif
|
||||
|
||||
/// Packs a struct so that it won't include padding bytes.
|
||||
#ifndef PACKED
|
||||
#define PACKED __attribute__((packed))
|
||||
#ifndef NX_PACKED
|
||||
#define NX_PACKED __attribute__((packed))
|
||||
#endif
|
||||
|
||||
/// Marks a function as not returning, for the purposes of compiler optimization.
|
||||
#ifndef NORETURN
|
||||
#define NORETURN __attribute__((noreturn))
|
||||
#ifndef NX_NORETURN
|
||||
#define NX_NORETURN __attribute__((noreturn))
|
||||
#endif
|
||||
|
||||
/// Performs a dummy operation on the specified argument in order to silence compiler warnings about unused arguments.
|
||||
#ifndef IGNORE_ARG
|
||||
#define IGNORE_ARG(x) (void)(x)
|
||||
#ifndef NX_IGNORE_ARG
|
||||
#define NX_IGNORE_ARG(x) (void)(x)
|
||||
#endif
|
||||
|
||||
/// Flags a function as deprecated.
|
||||
#ifndef DEPRECATED
|
||||
#ifndef NX_DEPRECATED
|
||||
#ifndef LIBNX_NO_DEPRECATION
|
||||
#define DEPRECATED __attribute__ ((deprecated))
|
||||
#define NX_DEPRECATED __attribute__ ((deprecated))
|
||||
#else
|
||||
#define DEPRECATED
|
||||
#define NX_DEPRECATED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -191,3 +191,16 @@ Result pselShowNintendoAccountNnidLinker(AccountUid user) {
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
Result pselShowUserQualificationPromoter(AccountUid user) {
|
||||
if (hosversionBefore(13,0,0))
|
||||
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||
|
||||
PselUiSettings ui;
|
||||
Result rc = pselUiCreate(&ui, PselUiMode_UserQualificationPromoter);
|
||||
if(R_SUCCEEDED(rc)) {
|
||||
pselUiAddUser(&ui, user);
|
||||
rc = pselUiShow(&ui, NULL);
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
@ -1,11 +1,11 @@
|
||||
#include <string.h>
|
||||
#include <malloc.h>
|
||||
#include <math.h>
|
||||
#include "libapplet_internal.h"
|
||||
#include "applets/swkbd.h"
|
||||
#include "services/vi.h"
|
||||
#include "runtime/hosversion.h"
|
||||
#include "runtime/util/utf.h"
|
||||
#include "../runtime/alloc.h"
|
||||
|
||||
static Result _swkbdGetReplies(SwkbdInline* s);
|
||||
|
||||
@ -85,7 +85,7 @@ Result swkbdCreate(SwkbdConfig* c, s32 max_dictwords) {
|
||||
c->workbuf_size = (c->workbuf_size + 0xfff) & ~0xfff;
|
||||
}
|
||||
|
||||
c->workbuf = (u8*)memalign(0x1000, c->workbuf_size);
|
||||
c->workbuf = (u8*)__libnx_aligned_alloc(0x1000, c->workbuf_size);
|
||||
if (c->workbuf==NULL) rc = MAKERESULT(Module_Libnx, LibnxError_OutOfMemory);
|
||||
if (R_SUCCEEDED(rc)) memset(c->workbuf, 0, c->workbuf_size);
|
||||
|
||||
@ -93,7 +93,7 @@ Result swkbdCreate(SwkbdConfig* c, s32 max_dictwords) {
|
||||
}
|
||||
|
||||
void swkbdClose(SwkbdConfig* c) {
|
||||
free(c->workbuf);
|
||||
__libnx_free(c->workbuf);
|
||||
memset(c, 0, sizeof(SwkbdConfig));
|
||||
}
|
||||
|
||||
@ -136,7 +136,7 @@ void swkbdConfigMakePresetDownloadCode(SwkbdConfig* c) {
|
||||
swkbdConfigSetType(c, SwkbdType_QWERTY);
|
||||
|
||||
swkbdConfigSetStringLenMax(c, 16);
|
||||
swkbdConfigSetStringLenMaxExt(c, 1);
|
||||
swkbdConfigSetStringLenMin(c, 1);
|
||||
swkbdConfigSetTextDrawType(c, SwkbdTextDrawType_DownloadCode);
|
||||
}
|
||||
|
||||
@ -279,14 +279,14 @@ Result swkbdShow(SwkbdConfig* c, char* out_string, size_t out_string_size) {
|
||||
memset(&storage, 0, sizeof(AppletStorage));
|
||||
memset(&customizedDictionarySet_storage, 0, sizeof(customizedDictionarySet_storage));
|
||||
|
||||
strbuf = (u16*)malloc(strbuf_size+2);
|
||||
strbuf = (u16*)__libnx_alloc(strbuf_size+2);
|
||||
if (strbuf==NULL) rc = MAKERESULT(Module_Libnx, LibnxError_OutOfMemory);
|
||||
if (strbuf) memset(strbuf, 0, strbuf_size+2);
|
||||
if (R_FAILED(rc)) return rc;
|
||||
|
||||
rc = appletCreateLibraryApplet(&holder, AppletId_LibraryAppletSwkbd, LibAppletMode_AllForeground);
|
||||
if (R_FAILED(rc)) {
|
||||
free(strbuf);
|
||||
__libnx_free(strbuf);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@ -354,7 +354,7 @@ Result swkbdShow(SwkbdConfig* c, char* out_string, size_t out_string_size) {
|
||||
appletStorageCloseTmem(&storage);
|
||||
appletStorageCloseTmem(&customizedDictionarySet_storage);
|
||||
|
||||
free(strbuf);
|
||||
__libnx_free(strbuf);
|
||||
|
||||
return rc;
|
||||
}
|
||||
@ -393,8 +393,8 @@ Result swkbdInlineCreate(SwkbdInline* s) {
|
||||
s->calcArg.appearArg.type = SwkbdType_QWERTY;
|
||||
s->calcArg.unk_x6 = 1;
|
||||
s->calcArg.unk_x7 = 1;
|
||||
s->calcArg.appearArg.unk_x20 = -1;
|
||||
s->calcArg.appearArg.unk_x24 = -1;
|
||||
s->calcArg.appearArg.stringLenMax = -1;
|
||||
s->calcArg.appearArg.stringLenMin = -1;
|
||||
s->calcArg.appearArg.unk_x30 = 1;
|
||||
|
||||
s->calcArg.enableBackspace = 1;
|
||||
@ -412,18 +412,18 @@ Result swkbdInlineCreate(SwkbdInline* s) {
|
||||
swkbdInlineSetUtf8Mode(s, true);
|
||||
|
||||
s->interactive_tmpbuf_size = 0x1000;
|
||||
s->interactive_tmpbuf = (u8*)malloc(s->interactive_tmpbuf_size);
|
||||
s->interactive_tmpbuf = (u8*)__libnx_alloc(s->interactive_tmpbuf_size);
|
||||
if (s->interactive_tmpbuf==NULL) rc = MAKERESULT(Module_Libnx, LibnxError_OutOfMemory);
|
||||
if (R_SUCCEEDED(rc)) memset(s->interactive_tmpbuf, 0, s->interactive_tmpbuf_size);
|
||||
|
||||
if (R_SUCCEEDED(rc)) {
|
||||
s->interactive_strbuf_size = 0x1001;
|
||||
s->interactive_strbuf = (char*)malloc(s->interactive_strbuf_size);
|
||||
s->interactive_strbuf = (char*)__libnx_alloc(s->interactive_strbuf_size);
|
||||
if (s->interactive_strbuf==NULL) rc = MAKERESULT(Module_Libnx, LibnxError_OutOfMemory);
|
||||
if (R_SUCCEEDED(rc)) memset(s->interactive_strbuf, 0, s->interactive_strbuf_size);
|
||||
|
||||
if (R_FAILED(rc)) {
|
||||
free(s->interactive_tmpbuf);
|
||||
__libnx_free(s->interactive_tmpbuf);
|
||||
s->interactive_tmpbuf = NULL;
|
||||
}
|
||||
}
|
||||
@ -470,10 +470,10 @@ Result swkbdInlineClose(SwkbdInline* s) {
|
||||
appletHolderClose(&s->holder);
|
||||
}
|
||||
|
||||
free(s->interactive_tmpbuf);
|
||||
__libnx_free(s->interactive_tmpbuf);
|
||||
s->interactive_tmpbuf = NULL;
|
||||
s->interactive_tmpbuf_size = 0;
|
||||
free(s->interactive_strbuf);
|
||||
__libnx_free(s->interactive_strbuf);
|
||||
s->interactive_strbuf = NULL;
|
||||
s->interactive_strbuf_size = 0;
|
||||
|
||||
@ -553,7 +553,7 @@ Result swkbdInlineGetImage(SwkbdInline* s, void* buffer, u64 size, bool *data_av
|
||||
if (!buffer || !size) return MAKERESULT(Module_Libnx, LibnxError_BadInput);
|
||||
|
||||
if (_swkbdInlineHandleFinished(s)) {
|
||||
data_available = false;
|
||||
*data_available = false;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -604,7 +604,7 @@ s32 swkbdInlineGetTouchRectangles(SwkbdInline* s, SwkbdRect *keytop, SwkbdRect *
|
||||
|
||||
if (!s->calcArg.footerScalable) {
|
||||
footer_max_height-= 72.0f;
|
||||
if (s->calcArg.keytopAsFloating) footer_max_height+= 1.4f;
|
||||
if (s->calcArg.keytopAsFloating) footer_max_height+= 14.0f;
|
||||
}
|
||||
|
||||
if (keytop) {
|
||||
@ -612,7 +612,7 @@ s32 swkbdInlineGetTouchRectangles(SwkbdInline* s, SwkbdRect *keytop, SwkbdRect *
|
||||
float width = s->calcArg.keytopScaleX*image_width;
|
||||
float scale_y = s->calcArg.keytopScaleY;
|
||||
float tmp_y = (keytop_max_height - 360.0f)*scale_y;
|
||||
keytop->x = lroundf(((width*-5.0f)+640.0f) + (s->calcArg.keytopTranslateX*image_width)); // This results in a negative value with the default keytopTranslateX. sdknso uses 5.0f, but 0.5f was likely (?) intended - we do the same as sdknso anyway though.
|
||||
keytop->x = lroundf(((width*-0.5f)+640.0f) + (s->calcArg.keytopTranslateX*image_width));
|
||||
keytop->y = lroundf((360.0f - tmp_y) - (s->calcArg.keytopTranslateY * 720.0f));
|
||||
keytop->width = lroundf(width);
|
||||
keytop->height = lroundf(footer_max_height*scale_y);
|
||||
@ -896,8 +896,8 @@ void swkbdInlineDisappear(SwkbdInline* s) {
|
||||
void swkbdInlineMakeAppearArg(SwkbdAppearArg* arg, SwkbdType type) {
|
||||
memset(arg, 0, sizeof(SwkbdAppearArg));
|
||||
|
||||
arg->unk_x20 = -1;
|
||||
arg->unk_x24 = -1;
|
||||
arg->stringLenMax = -1;
|
||||
arg->stringLenMin = -1;
|
||||
arg->unk_x30 = 1;
|
||||
arg->type = type;
|
||||
}
|
||||
|
@ -1,5 +1,4 @@
|
||||
#include <string.h>
|
||||
#include <malloc.h>
|
||||
#include "libapplet_internal.h"
|
||||
#include "applets/web.h"
|
||||
#include "runtime/hosversion.h"
|
||||
@ -583,7 +582,7 @@ Result webConfigSetWebAudio(WebCommonConfig* config, bool flag) {
|
||||
return _webConfigSetFlag(config, WebArgType_WebAudio, flag);
|
||||
}
|
||||
|
||||
Result webConfigSetFooterFixedKind(WebCommonConfig* config, u32 kind) {
|
||||
Result webConfigSetFooterFixedKind(WebCommonConfig* config, WebFooterFixedKind kind) {
|
||||
WebShimKind shim = _webGetShimKind(config);
|
||||
if (shim != WebShimKind_Offline && shim != WebShimKind_Web) return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
|
||||
if (hosversionBefore(5,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||
|
@ -22,6 +22,10 @@ CODE_BEGIN armDCacheFlush
|
||||
bic x8, x0, x10
|
||||
mov x10, x1
|
||||
|
||||
mov w1, #1
|
||||
mrs x0, tpidrro_el0
|
||||
strb w1, [x0, #0x104]
|
||||
|
||||
armDCacheFlush_L0:
|
||||
dc civac, x8
|
||||
add x8, x8, x9
|
||||
@ -29,6 +33,9 @@ armDCacheFlush_L0:
|
||||
bcc armDCacheFlush_L0
|
||||
|
||||
dsb sy
|
||||
|
||||
strb wzr, [x0, #0x104]
|
||||
|
||||
ret
|
||||
CODE_END
|
||||
|
||||
@ -43,6 +50,10 @@ CODE_BEGIN armDCacheClean
|
||||
bic x8, x0, x10
|
||||
mov x10, x1
|
||||
|
||||
mov w1, #1
|
||||
mrs x0, tpidrro_el0
|
||||
strb w1, [x0, #0x104]
|
||||
|
||||
armDCacheClean_L0:
|
||||
dc cvac, x8
|
||||
add x8, x8, x9
|
||||
@ -50,6 +61,9 @@ armDCacheClean_L0:
|
||||
bcc armDCacheClean_L0
|
||||
|
||||
dsb sy
|
||||
|
||||
strb wzr, [x0, #0x104]
|
||||
|
||||
ret
|
||||
CODE_END
|
||||
|
||||
@ -63,6 +77,10 @@ CODE_BEGIN armICacheInvalidate
|
||||
bic x8, x0, x10
|
||||
mov x10, x1
|
||||
|
||||
mov w1, #1
|
||||
mrs x0, tpidrro_el0
|
||||
strb w1, [x0, #0x104]
|
||||
|
||||
armICacheInvalidate_L0:
|
||||
ic ivau, x8
|
||||
add x8, x8, x9
|
||||
@ -70,6 +88,10 @@ armICacheInvalidate_L0:
|
||||
bcc armICacheInvalidate_L0
|
||||
|
||||
dsb sy
|
||||
isb
|
||||
|
||||
strb wzr, [x0, #0x104]
|
||||
|
||||
ret
|
||||
CODE_END
|
||||
|
||||
@ -84,6 +106,10 @@ CODE_BEGIN armDCacheZero
|
||||
bic x8, x0, x10
|
||||
mov x10, x1
|
||||
|
||||
mov w1, #1
|
||||
mrs x0, tpidrro_el0
|
||||
strb w1, [x0, #0x104]
|
||||
|
||||
armDCacheZero_L0:
|
||||
dc zva, x8
|
||||
add x8, x8, x9
|
||||
@ -91,5 +117,8 @@ armDCacheZero_L0:
|
||||
bcc armDCacheZero_L0
|
||||
|
||||
dsb sy
|
||||
|
||||
strb wzr, [x0, #0x104]
|
||||
|
||||
ret
|
||||
CODE_END
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user