package bt import "core:c" SceBtErrorCode :: enum c.uint { REG_NOT_READY = 0x802F0101, REG_DELETE_NO_ENTRY = 0x802F0102, REG_UPDATE_CANNOT_SAVE = 0x802F0103, REG_SET_HID_DESC_BAD_ARG = 0x802F0105, REG_SET_HID_DESC_NO_REG = 0x802F0106, REG_GET_HID_DESC_NO_REG = 0x802F0107, REG_GET_HID_DESC_TOO_SHORT = 0x802F0108, REG_DELETE_CONNECTING = 0x802F0109, REG_CANNOT_LOAD = 0x802F010A, REG_CANNOT_OPEN = 0x802F010B, REG_CANNOT_READ = 0x802F010C, REG_CANNOT_WRITE = 0x802F010D, INQUIRY_START_BUSY = 0x802F0201, CONNECT_START_NO_REG = 0x802F0202, CONNECT_START_NOT_CONNECTABLE = 0x802F0203, CONNECT_START_BUSY = 0x802F0204, DISCONNECT_START_NOT_CONNECTED = 0x802F0205, PIN_INVALID_LENGTH = 0x802F0206, USER_CONFIRM_NOT_CONNECTED = 0x802F0207, SDP_OPEN_NO_L2C = 0x802F0208, CONNECT_START_REG_FULL = 0x802F0209, CONNECT_START_CONNECTED = 0x802F020A, CONNECT_START_TOO_MANY = 0x802F020D, CONNECT_START_DELETING = 0x802F020E, AVDTP_OPEN_NO_L2C = 0x802F0501, AVDTP_CLOSE_BAD_SERV = 0x802F0502, AVDTP_CLOSE_BAD_STATE = 0x802F0503, AVDTP_START_BAD_SERV = 0x802F0504, AVDTP_START_BAD_STATE = 0x802F0505, AVDTP_STOP_BAD_SERV = 0x802F0506, AVDTP_STOP_BAD_STATE = 0x802F0507, AVDTP_SEND_BAD_STATE = 0x802F0508, AVDTP_RECONF_BAD_SERV = 0x802F0509, AVDTP_RECONF_BAD_STATE = 0x802F050A, AVCTP_OPEN_NO_L2C = 0x802F0601, AVCTP_SEND_NO_L2C = 0x802F0603, AVCTP_NOT_CONNECTED = 0x802F0604, AVCTP_SEND_BUSY = 0x802F0605, AVCTP_SEND_NO_PRESS = 0x802F0606, AVCTP_SEND_NO_RELEASE = 0x802F0607, AVCTP_READ_NO_VOLUME = 0x802F0608, AVCTP_SEND_NOT_RUBY = 0x802F0609, HID_OPEN_NO_L2C = 0x802F0901, HID_CLOSE_NO_L2C = 0x802F0902, HID_SEND_NO_L2C = 0x802F0903, HID_NOT_CONNECTED = 0x802F0904, HID_NO_CAP = 0x802F0905, HID_INVALID_REQUEST_TYPE = 0x802F0906, HID_INVALID_BUFFER_ADDRESS = 0x802F0907, HID_INVALID_PROTOCOL = 0x802F0908, HID_INVALID_IDLE = 0x802F0909, HID_NOT_YET = 0x802F090C, HID_INVALID_LENGTH = 0x802F090D, HID_INVALID_REPORT_ID = 0x802F090E, HID_OVERWRITE_REQ = 0x802F090F, JUMBO_UNLOCK_NOT_OWNER = 0x802F0B01, HCI_TX_OVERFLOW = 0x802F0B02, ACL_TX_BUF_OVERFLOW = 0x802F0B03, ACL_TX_CB_OVERFLOW = 0x802F0B04, TIMER_CANCEL_BAD_ID = 0x802F0B05, TIMER_CANCEL_NOT_INITIALIZED = 0x802F0B06, TIMER_SET_NOT_INITIALIZED = 0x802F0B07, TIMER_SET_NO_SPACE = 0x802F0B08, COPYIN_FAILED = 0x802F0B09, COPYOUT_FAILED = 0x802F0B0A, GET_NAME_NO_DEVICE = 0x802F0C01, CB_TOO_MANY = 0x802F0C02, CB_NOT_REGISTERED = 0x802F0C03, CB_OVERFLOW = 0x802F0C04, AUDIO_START_NOT_CONNECTED = 0x802F0D01, AUDIO_START_NO_CAP = 0x802F0D02, AUDIO_STOP_NOT_CONNECTED = 0x802F0D03, AUDIO_STOP_NO_CAP = 0x802F0D04, AUDIO_SEND_NOT_CONNECTED = 0x802F0D05, AUDIO_SEND_NOT_STARTED = 0x802F0D06, AUDIO_SEND_INVALID_LENGTH = 0x802F0D07, AUDIO_RECV_NOT_CONNECTED = 0x802F0D08, AUDIO_RECV_NOT_STARTED = 0x802F0D09, AUDIO_RECV_INVALID_LENGTH = 0x802F0D0A, AUDIO_START_INVALID_SERV = 0x802F0D0B, AUDIO_STOP_INVALID_SERV = 0x802F0D0C, AUDIO_START_SERV_FAILED = 0x802F0D0D, AUDIO_STOP_SERV_FAILED = 0x802F0D0E, AUDIO_FREQ_NOT_CONNECTED = 0x802F0D0F, AUDIO_SEND_NO_CP = 0x802F0D10, AUDIO_SEND_BAD_TYPE = 0x802F0D11, AUDIO_RECV_BAD_TYPE = 0x802F0D12, AUDIO_COMBI_NOT_FOUND = 0x802F0D16, AUDIO_SEND_NO_L2C = 0x802F0D17, AUDIO_INTERNAL_1 = 0x802F0D18, AUDIO_SEND_BUSY = 0x802F0D19, AUDIO_RECV_BUSY = 0x802F0D1A, AUDIO_SEND_NO_CAP = 0x802F0D1B, AUDIO_SEND_SERV_FAILED = 0x802F0D1C, AUDIO_RECV_NO_CAP = 0x802F0D1D, AUDIO_RECV_SERV_FAILED = 0x802F0D1E, HID_RECV_NOT_CONNECTED = 0x802F0E01, HID_RECV_INVALID_LENGTH = 0x802F0E02, AVRCP_TOO_LONG_TITLE = 0x802F1201, AVRCP_INVALID_PLAY_STATUS = 0x802F1202, CONF_NOT_READY = 0x802F1501, CONF_INVALID_VALUE = 0x802F1502, CONF_BT_INACTIVE = 0x802F1503, CONF_TIMEOUT = 0x802F1504, CONF_CARD_NOT_FOUND = 0x802F1505, CONF_FUNCTION_NOT_FOUND = 0x802F1506, CONF_CANT_ENABLE_FUNCTION = 0x802F1507, CONF_CANT_DISABLE_FUNCTION = 0x802F1508, CONF_REGISTER_SUBINTR_HANDLER = 0x802F1509, CONF_RELEASE_SUBINTR_HANDLER = 0x802F150A, CONF_ENABLE_SUBINTR = 0x802F150B, CONF_DISABLE_SUBINTR = 0x802F150C, CONF_ON_TIMEOUT = 0x802F150D, CONF_OFF_TIMEOUT = 0x802F150E, CONF_SUSPEND_TIMEOUT = 0x802F150F, CONF_CANT_ENTER = 0x802F1520, NOTIMP = 0x802F2001, KPROC_CREATE = 0x802F2002, SDIO_GET_FUNCTION = 0x802F2003, SDIO_REGISTER_INTR_HANDLER = 0x802F2004, SDIO_UNREGISTER_INTR_HANDLER = 0x802F2005, SDIO_LOCK = 0x802F2006, SDIO_UNLOCK = 0x802F2007, SDIO_ENABLE_FUNCTION = 0x802F2008, SDIO_DISABLE_FUNCTION = 0x802F2009, SDIO_SET_BLOCK_LEN = 0x802F200A, SDIO_SET_BUS_SPEED = 0x802F200B, SDIO_READ_DIR = 0x802F200C, SDIO_WRITE_DIR = 0x802F200D, SDIO_READ_FIX = 0x802F200E, SDIO_WRITE_FIX = 0x802F200F, TSLEEP = 0x802F2010, GET_DEBUG_INFO_INVALID_REQUEST = 0x802F2101, SET_DEBUG_INFO_INVALID_REQUEST = 0x802F2102, GET_DEBUG_INFO_INVALID_SIZE = 0x802F2103, SET_DEBUG_INFO_INVALID_SIZE = 0x802F2104, GET_DEBUG_INFO_INVALID_ARGUMENT = 0x802F2105, SET_DEBUG_INFO_INVALID_ARGUMENT = 0x802F2106, GET_DEBUG_INFO_INVALID_STATE = 0x802F2107, SET_DEBUG_INFO_INVALID_STATE = 0x802F2108, GET_DEBUG_INFO_NOT_CONNECTED = 0x802F2109, SET_DEBUG_INFO_NOT_CONNECTED = 0x802F210A, PIN_IS_LE = 0x802F2201, CONNECT_START_IS_LE = 0x802F2202, AVCTP_IS_LE = 0x802F2203, HID_IS_LE = 0x802F2204, AUDIO_START_IS_LE = 0x802F2205, AUDIO_STOP_IS_LE = 0x802F2206, AUDIO_SEND_IS_LE = 0x802F2207, AUDIO_RECV_IS_LE = 0x802F2208, AUDIO_FREQ_IS_LE = 0x802F2209, ATT_BASE = 0x802F2300, ATT_INVALID_HANDLE = 0x802F2301, ATT_READ_NOT_PERMITTED = 0x802F2302, ATT_WRITE_NOT_PERMITTED = 0x802F2303, ATT_INVALID_PDU = 0x802F2304, ATT_INSUFFICIENT_AUTHENTICATION = 0x802F2305, ATT_REQUEST_NOT_SUPPORTED = 0x802F2306, ATT_INVALID_OFFSET = 0x802F2307, ATT_INSUFFICIENT_AUTHORIZATION = 0x802F2308, ATT_PEPARE_QUEUE_FULL = 0x802F2309, ATT_ATTRIBUTE_NOT_FOUND = 0x802F230A, ATT_ATTRIBUTE_NOT_LONG = 0x802F230B, ATT_INSUFFICIENT_ENCRYPTION_KEY_SIZE = 0x802F230C, ATT_INVALID_ATTRIBUTE_VALUE_LENGTH = 0x802F230D, ATT_UNLIKELY_ERROR = 0x802F230E, ATT_INSUFFICIENT_ENCRYPTION = 0x802F230F, ATT_UNSUPPORTED_GROUP_TYPE = 0x802F2310, ATT_INSUFFICIENT_RESOURCES = 0x802F2311, ATT_APPLICATION_ERROR_LO = 0x802F2380, ATT_APPLICATION_ERROR_HI = 0x802F23FF, GATT_INVALID_NO = 0x802F2401, GATT_NOT_CONNECTED = 0x802F2402, GATT_BUSY = 0x802F2403, GATT_INVALID_HANDLE = 0x802F2404, GATT_INVALID_FLAGS = 0x802F2405, GATT_INVALID_SIZE = 0x802F2406, GATT_NOT_LE = 0x802F2407, GATT_TOO_BIG_RECORD = 0x802F2408, GATT_NOT_YET = 0x802F2409, GATT_DISCONNECT = 0x802F240A, GATT_TSLEEP = 0x802F240B, GATT_ENTER = 0x802F240C, GATT_TOO_BIG_BUFFER = 0x802F240D, SM_INVALID_KEY_LENGTH = 0x802F2501, SM_NOT_DIGIT = 0x802F2502, SM_NO_REQ = 0x802F2503, SM_NOT_NEEDED_PIN = 0x802F2504, SM_INVALID_CONFIRM_REPLY = 0x802F2505, LE_SET_ADVERTISING_INVALID_REQ = 0x802F2601, LE_SET_ADVERTISING_INVALID_LENGTH = 0x802F2602, LE_SET_ADVERTISING_INVALID_INTERVAL_MIN = 0x802F2603, LE_SET_ADVERTISING_INVALID_INTERVAL_MAX = 0x802F2604, LE_SET_ADVERTISING_INVALID_OWN_ADDRESS_TYPE = 0x802F2605, LE_SET_ADVERTISING_INVALID_DIRECT_ADDRESS_TYPE = 0x802F2606, LE_SET_ADVERTISING_INVALID_DIRECT_ADDRESS = 0x802F2607, LE_SET_SCAN_INVALID_REQ = 0x802F2701, LE_SET_SCAN_INVALID_LENGTH = 0x802F2702, LE_SET_SCAN_INVALID_INTERVAL = 0x802F2703, LE_SET_SCAN_INVALID_WINDOW = 0x802F2704, LE_SET_SCAN_INVALID_OWN_ADDRESS_TYPE = 0x802F2705, LE_GET_ADVERTISING_NOT_FOUND = 0x802F2801, LE_CREATE_CONNECTION_INVALID_SCAN_INTERVAL = 0x802F2901, LE_CREATE_CONNECTION_INVALID_SCAN_WINDOW = 0x802F2902, LE_CREATE_CONNECTION_INVALID_PEER_ADDRESS = 0x802F2903, LE_CREATE_CONNECTION_INVALID_OWN_ADDRESS_TYPE = 0x802F2904, LE_CREATE_CONNECTION_INVALID_INTERVAL_MIN = 0x802F2905, LE_CREATE_CONNECTION_INVALID_INTERVAL_MAX = 0x802F2906, LE_CREATE_CONNECTION_INVALID_LATENCY = 0x802F2907, LE_CREATE_CONNECTION_INVALID_TIMEOUT = 0x802F2908, LE_CREATE_CONNECTION_REG_FULL = 0x802F2909, LE_CREATE_CONNECTION_REG_ERROR = 0x802F290A, LE_CREATE_CONNECTION_CONNECTED = 0x802F290B, LE_CREATE_CONNECTION_FULL = 0x802F290C, LE_CREATE_CONNECTION_BUSY = 0x802F290D, ATT_READ_INVALID_NO = 0x802F2A01, ATT_READ_INVALID_LENGTH = 0x802F2A02, ATT_READ_INVALID_INTERNAL = 0x802F2A03, ATT_WRITE_INVALID_NO = 0x802F2A04, ATT_WRITE_INVALID_LENGTH = 0x802F2A05, ATT_WRITE_INVALID_INTERNAL = 0x802F2A06, ATT_NOT_YET = 0x802F2A07, LE_NOT_SUPPORTED = 0x802F2B01, PAIRING_OOB_TIMEOUT = 0x802F3101, PAIRING_OOB_FULL = 0x802F3102, PAIRING_OOB_CAN_NOT_DISCONNECT = 0x802F3103, PAIRING_OOB_INTERNAL_ERROR = 0x802F3104, NOT_READY = 0x802F3201, GET_JACK_STATUS_NOT_CONNECTED = 0x802F3301, TOO_MANY_CONNECTION = 0x802F3401, TOO_MANY_HID = 0x802F3402, NOT_SUPPORTED_DEVICE = 0x802F3403, JEDI_VOLUME_GAIN_NOT_CONNECTED = 0x802F3501, JEDI_SNIFF_NOT_CONNECTED = 0x802F3601, JEDI_SNIFF_NOT_JEDI = 0x802F3602 } SceBtRegisteredInfo :: struct { mac: [6]c.uchar, unk0: c.ushort, bt_class: c.uint, unk1: c.uint, unk2: c.uint, vid: c.ushort, pid: c.ushort, unk3: c.uint, unk4: c.uint, name: [128]c.char, unk5: [0x60]c.uchar, } #assert(size_of(SceBtRegisteredInfo) == 0x100) SceBtEvent :: struct { using _: struct #raw_union { data: [0x10]c.uchar, using _: struct { id: c.uchar, unk1: c.uchar, unk2: c.ushort, unk3: c.uint, mac0: c.uint, mac1: c.uint, }, }, } #assert(size_of(SceBtEvent) == 0x10) SceBtCallback :: #type ^proc "c" (r0: c.int, r1: c.int, r2: c.int, r3: c.int) SceBtHidRequest :: struct #packed { unk00: c.uint32_t, unk04: c.uint32_t, type: c.uint8_t, //!< 0 = read?, 1 = write?, 2 = feature?, 3 = ? unk09: c.uint8_t, unk0A: c.uint8_t, unk0B: c.uint8_t, buffer: rawptr, length: c.uint32_t, next: ^SceBtHidRequest, }