Files
vitasdk-odin/Usbd/Usbd.odin
T

280 lines
6.1 KiB
Odin
Raw Normal View History

2024-05-11 23:24:13 +02:00
package usbd
import "core:c"
import sce "../common"
foreign import usbd "system:SceUsbd_stub"
@(link_prefix = "sceUsbd")
foreign usbd {
/**
* Init usb subsystem
*
* @return 0 on success, < 0 on error
*
* @param[out] uid Pointer to uid
*
*/
Init :: proc(uid: ^sce.UID) -> c.int ---
/**
* Stop usb subsystem
*
* @return 0 on success, < 0 on error
*
* @param uid uid
*
*/
End :: proc(uid: sce.UID) -> c.int ---
/**
* Get usb devices list
*
* @return 0 on success, < 0 on error
*
* @param[in] uid uid
* @param[in] num max number of devices to return (8 max)
* @param[out] info pointer to receive device info
*
*/
GetDeviceList :: proc(uid: sce.UID, num: sce.Size, info: ^SceUsbdDeviceInfo) -> c.int --- // 8 devices max
/**
* Get usb device descriptors data size
*
* @return size on success, < 0 on error
*
* @param uid uid
* @param device_id device id
*
*/
GetDescriptorSize :: proc(uid: sce.UID, device_id: c.uint) -> c.int ---
/**
* Get usb device descriptors (all)
*
* @return 0 on success, < 0 on error
*
* @param[in] uid uid
* @param[in] device_id device id
* @param[out] descriptor buffer for descriptor data
* @param[in] size buffer size
*
*/
GetDescriptor :: proc(uid: sce.UID, device_id: sce.UID, descriptor: ^c.uint, size: sce.Size) -> c.int ---
/**
* Get usb device speed
*
* @return 0 on success, < 0 on error
*
* @param[in] uid uid
* @param[in] device_id device id
* @param[out] speed device speed
*
*/
GetDeviceSpeed :: proc(uid: sce.UID, device_id: sce.UID, speed: ^c.uint) -> c.int ---
/**
* Register callback to usb event
*
* @return 0 on success, < 0 on error
*
* @param[in] cbid callback uid
* @param[in] flag if 1 - trigger events immediately
*
* @note there may be only one callback registered through whole system.
* And it's currently taken up by shell.
*
*/
RegisterCallback :: proc(cbid: sce.UID, flag: c.int) -> c.int ---
/**
* Remove callback to usb event
*
* @return 0 on success, < 0 on error
*
* @param[in] cbid callback uid
*
* @note this checks process id
*
*/
UnregisterCallback :: proc(cbid: sce.UID) -> c.int ---
/**
* Reset usb device
*
* @return 0 on success, < 0 on error
*
* @param[in] uid uid
* @param[in] device_id device id
*
*/
ResetDevice :: proc(uid: sce.UID, device_id: sce.UID) -> c.int ---
/**
* Attach specified driver to device
*
* @return 0 on success, < 0 on error
*
* @param[in] uid uid
* @param[in] driver_id driver id (result of Register(Composite)Ldd)
* @param[in] bus usb port number
* @param[in] device usb device number
*
* @note device_id = (bus << 16) + device
*/
Attach :: proc(uid: sce.UID, driver_id: sce.UID, bus: sce.UInt, device: sce.UInt) -> c.int ---
/**
* Get device address
*
* @return 0 on success, < 0 on error
*
* @param[in] uid uid
* @param[in] device_id device id
* @param[out] addr buffer for return value
*
* @note it is unknown what that function actually returns in addr, observed only 0
*/
GetDeviceAddress :: proc(uid: sce.UID, device_id: sce.UID, addr: ^SceUsbdDeviceAddress) -> c.int ---
/**
* Get transfer status
*
* @return 0 on success, < 0 on error
*
* @param[in] transfer_id transfer uid
* @param[out] status buffer for return value
*
* @note it is unknown what that function actually returns in addr, observed only 0
*/
GetTransferStatus :: proc(transfer_id: sce.UID, status: ^SceUsbdTransferStatus) -> c.int ---
/**
* Get isochronous transfer status
*
* @return 0 on success, < 0 on error
*
* @param[in] transfer_id transfer uid
* @param[out] status buffer for return value
*
* @note it is unknown what that function actually returns in addr, observed only 0
*/
GetIsochTransferStatus :: proc(transfer_id: sce.UID, status: ^SceUsbdIsochTransferStatus) -> c.int ---
/**
* Open endpoint communication pipe
*
* @return pipe_id on success, < 0 on error
*
* @param[in] uid uid
* @param[in] pipe endpoint to open
*
*/
OpenPipe :: proc(uid: sce.UID, pipe: ^SceUsbdDevicePipe) -> sce.UID ---
/**
* Open endpoint communication pipe for default config endpoint
*
* @return pipe_id on success, < 0 on error
*
* @param[in] uid uid
* @param[in] device_id device id
*
*/
OpenDefaultPipe :: proc(uid: sce.UID, device_id: sce.UID) -> sce.UID ---
/**
* Close endpoint communication pipe
*
* @return 0 on success, < 0 on error
*
* @param[in] uid uid
* @param[in] pipe_id pipe uid
*
*/
ClosePipe :: proc(uid: sce.UID, pipe_id: sce.UID) -> c.int ---
/**
* Transfer data to/from endpoint
*
* @return transfer_id on success, < 0 on error
*
* @param[in] uid uid
* @param[in] data data to transfer
*
*/
TransferData :: proc(uid: sce.UID, data: ^SceUsbdTransferData) -> sce.UID ---
/**
* Transfer data to/from endpoint isochronously
*
* @return transfer_id on success, < 0 on error
*
* @param[in] uid uid
* @param[in] pipe_id pipe uid
* @param[in] transfer data to transfer
*
*/
IsochTransferData :: proc(uid: sce.UID, pipe_id: sce.UID, transfer: ^SceUsbdIsochTransfer) -> c.int ---
/**
* Receive usb event
*
* @return transfer_id on success, < 0 on error
*
* @param[in] uid uid
* @param[out] event
*
*/
ReceiveEvent :: proc(uid: sce.UID, event: ^SceUsbdReceiveEvent) -> c.int ---
/**
* Register logical device driver
*
* @return driver_id on success, < 0 on error
*
* @param[in] uid uid
* @param[in] name driver name, 255 max
*
*/
RegisterLdd :: proc(uid: sce.UID, name: cstring) -> sce.UID ---
/**
* Register logical device driver for composite devices
*
* @return driver_id on success, < 0 on error
*
* @param[in] uid uid
* @param[in] name driver name, 255 max
*
*/
RegisterCompositeLdd :: proc(uid: sce.UID, name: cstring) -> sce.UID ---
/**
* De-register logical device driver
*
* @return 0 on success, < 0 on error
*
* @param[in] uid uid
* @param[in] name driver name, 255 max
*
*/
UnregisterLdd :: proc(uid: sce.UID, name: cstring) -> c.int ---
/**
* Attach composite driver to device
*
* @return 0 on success, < 0 on error
*
* @param[in] uid uid
* @param[in] param parameters
*
*/
AttachCompositeLdd :: proc(uid: sce.UID, param: ^SceUsbdAttachCompositeParam) -> c.int ---
}