맞춤 컨트롤러 기기 매핑 추가

게임 컨트롤러 라이브러리는 버튼, 모션 축 레이아웃, 인식된 컨트롤러에 대한 매핑, 인식되지 않은 컨트롤러에 대한 기본 매핑을 구성하는 데 사용되는 컨트롤러 기기의 내부 데이터베이스를 유지합니다. 이 데이터베이스에 널리 사용되는 여러 컨트롤러가 포함되어 있지만 모든 기기가 포함되어 있지는 않을 수 있음 표시할 수 있습니다. 게임 컨트롤러 라이브러리는 다음과 같은 기능을 갖춘 맞춤설정을 지원합니다.

  • 현재 매핑 데이터베이스를 검색합니다.
  • 기존 데이터베이스에 항목을 추가합니다.
  • 기존 데이터베이스 항목을 바꿉니다.
  • 현재 전체 데이터베이스를 새 데이터베이스로 교체합니다.

기기 식별

컨트롤러 기기는 productIdvendorId 값으로 식별됩니다. 인식된 각 컨트롤러 기기에는 일치하는 productIdvendorId입니다. 컨트롤러 매핑 구조에는 항목의 적합한 최소 및 최대 Android API 범위를 지정하는 필드가 포함되어 있습니다. productIdvendorId이(가) 동일한 여러 항목이 데이터베이스에 액세스할 수 있습니다.

현재 리매핑 데이터 읽기

Paddleboat_getControllerRemapTableData 함수를 사용하여 현재 리매핑 데이터를 검색합니다.

int32_t Paddleboat_getControllerRemapTableData(
   
const int32_t destRemapTableEntryCount,
   
Paddleboat_Controller_Mapping_Data* mappingData)

Paddleboat_getControllerRemapTableData는 내부 데이터베이스에 있는 리매핑 항목의 총 개수를 반환합니다.

매개변수 설명
destRemapTableEntryCount mappingData 매개변수에 전달된 Paddleboat_Controller_Mapping_Data 요소의 배열 크기입니다.
mappingData Paddleboat_Controller_Mapping_Data 요소 배열에 대한 포인터입니다.

destRemapTableEntryCount가 총 리매핑 항목 수보다 적으면 destRemapTableEntryCount로 지정된 항목만 복사됩니다. mappingData로 변환합니다.

리매핑 데이터 추가 또는 교체

Paddleboat_addControllerRemapData 함수를 사용하여 리매핑 항목을 추가하거나 현재 리매핑 데이터베이스를 교체합니다.

void Paddleboat_addControllerRemapData(
   
const Paddleboat_Remap_Addition_Mode addMode,
   
const int32_t remapTableEntryCount,
   
const Paddleboat_Controller_Mapping_Data* mappingData)
매개변수 설명
addMode 작업에 사용되는 추가 규칙으로, 유효한 값은 PADDLEBOAT_REMAP_ADD_MODE_DEFAULT 또는 PADDLEBOAT_REMAP_ADD_MODE_REPLACE_ALL입니다.
remapTableEntryCount mappingData 매개변수에 전달된 Paddleboat_Controller_Mapping_Data 요소의 배열 크기입니다.
mappingData Paddleboat_Controller_Mapping_Data 요소 배열에 대한 포인터입니다.

추가 모드

addModePADDLEBOAT_REMAP_ADD_MODE_REPLACE_ALL이 지정된 경우 기존 데이터베이스가 삭제되고 새 배열의 콘텐츠로 교체됩니다.

addModePADDLEBOAT_REMAP_ADD_MODE_DEFAULT가 지정된 경우 mappingData에 전달된 배열의 각 요소에 다음 기준이 적용됩니다.

  • Paddleboat_getControllerRemapTableData가 고유한 경우(vendorIdproductId가 아직 없거나 존재하지만 중복되지 않는 minApi 또는 maxApi 범위가 있음) 항목이 내부 데이터베이스에 추가됩니다.
  • Paddleboat_getControllerRemapTableData가 고유하지 않은 경우(vendorIdproductId가 존재하고 minApi 또는 maxApi 중복이 있음) 내부 데이터베이스의 기존 항목을 교체합니다.

Paddleboat_Controller_Mapping_Data 구조는 다음과 같습니다.

typedef struct Paddleboat_Controller_Mapping_Data {
    int16_t minimumEffectiveApiLevel
; /** Min. API level for this entry */
    int16_t maximumEffectiveApiLevel
; /** Max. API level, 0 = no max */
    int32_t vendorId
; /** VendorID of the controller device for this entry */
    int32_t productId
; /** ProductID of the controller device for this entry */
    int32_t flags
; /** Flag bits, will be ORed with
                     * Paddleboat_Controller_Info.controllerFlags */


   
/** AMOTION_EVENT_AXIS value for the corresponding Paddleboat control axis,
     *  or PADDLEBOAT_AXIS_IGNORED if unsupported. */

    uint16_t axisMapping
[PADDLEBOAT_MAPPING_AXIS_COUNT];
   
/** Button to set on positive or negative axis value,
     *  PADDLEBOAT_AXIS_BUTTON_IGNORED if none. */

    uint8_t axisPositiveButtonMapping
[PADDLEBOAT_MAPPING_AXIS_COUNT];
    uint8_t axisNegativeButtonMapping
[PADDLEBOAT_MAPPING_AXIS_COUNT];
   
/** AKEYCODE_ value corresponding with the corresponding Paddleboat button.
     *  PADDLEBOAT_BUTTON_IGNORED if unsupported. */

    uint16_t buttonMapping
[PADDLEBOAT_BUTTON_COUNT];
} Paddleboat_Controller_Mapping_Data;

매핑 예

다음은 Google Stadia 컨트롤러를 설명하기 위해 채워진 Paddleboat_Controller_Mapping_Data를 보여줍니다.

#define PADDLEBOAT_AXIS_BUTTON_DPAD_UP 0
#define PADDLEBOAT_AXIS_BUTTON_DPAD_LEFT 1
#define PADDLEBOAT_AXIS_BUTTON_DPAD_DOWN 2
#define PADDLEBOAT_AXIS_BUTTON_DPAD_RIGHT 3
#define PADDLEBOAT_AXIS_BUTTON_L2 9
#define PADDLEBOAT_AXIS_BUTTON_R2 12

static const Paddleboat_Controller_Mapping_Data stadia_controller_map[] = {
   
16, 0, 0x18d1, 0x9400, PADDLEBOAT_CONTROLLER_LAYOUT_STANDARD,
   
{
       
/* LX */ AMOTION_EVENT_AXIS_X,
       
/* LY */ AMOTION_EVENT_AXIS_Y,
       
/* RX */ AMOTION_EVENT_AXIS_Z,
       
/* RY */ AMOTION_EVENT_AXIS_RZ,
       
/* L1 */ PADDLEBOAT_AXIS_IGNORED,
       
/* L2 */ AMOTION_EVENT_AXIS_BRAKE,
       
/* R1 */ PADDLEBOAT_AXIS_IGNORED,
       
/* R2 */ AMOTION_EVENT_AXIS_GAS,
       
/* HX */ AMOTION_EVENT_AXIS_HAT_X,
       
/* HY */ AMOTION_EVENT_AXIS_HAT_Y,
   
},
   
{
       
/* LX */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
       
/* LY */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
       
/* RX */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
       
/* RY */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
       
/* L1 */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
       
/* L2 */ PADDLEBOAT_AXIS_BUTTON_L2,
       
/* R1 */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
       
/* R2 */ PADDLEBOAT_AXIS_BUTTON_R2,
       
/* HX */ PADDLEBOAT_AXIS_BUTTON_DPAD_RIGHT,
       
/* HY */ PADDLEBOAT_AXIS_BUTTON_DPAD_DOWN,
   
},
   
{
       
/* LX */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
       
/* LY */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
       
/* RX */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
       
/* RY */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
       
/* L1 */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
       
/* L2 */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
       
/* R1 */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
       
/* R2 */ PADDLEBOAT_AXIS_BUTTON_IGNORED,
       
/* HX */ PADDLEBOAT_AXIS_BUTTON_DPAD_LEFT,
       
/* HY */ PADDLEBOAT_AXIS_BUTTON_DPAD_UP,
   
},
   
{
       
/* UP     */ AKEYCODE_DPAD_UP,
       
/* LEFT   */ AKEYCODE_DPAD_LEFT,
       
/* DOWN   */ AKEYCODE_DPAD_DOWN,
       
/* RIGHT  */ AKEYCODE_DPAD_RIGHT,
       
/* A      */ AKEYCODE_BUTTON_A,
       
/* B      */ AKEYCODE_BUTTON_B,
       
/* X      */ AKEYCODE_BUTTON_X,
       
/* Y      */ AKEYCODE_BUTTON_Y,
       
/* L1     */ AKEYCODE_BUTTON_L1,
       
/* L2     */ AKEYCODE_BUTTON_L2,
       
/* L3     */ AKEYCODE_BUTTON_THUMBL,
       
/* R1     */ AKEYCODE_BUTTON_R1,
       
/* R2     */ AKEYCODE_BUTTON_R2,
       
/* R3     */ AKEYCODE_BUTTON_THUMBR,
       
/* SELECT */ AKEYCODE_BUTTON_SELECT,
       
/* START  */ AKEYCODE_BUTTON_START,
       
/* SYSTEM */ AKEYCODE_BUTTON_MODE,
       
/* TOUCHP */ PADDLEBOAT_BUTTON_IGNORED,
       
/* AUX1   */ PADDLEBOAT_BUTTON_IGNORED,
       
/* AUX2   */ PADDLEBOAT_BUTTON_IGNORED,
       
/* AUX3   */ PADDLEBOAT_BUTTON_IGNORED,
       
/* AUX4   */ PADDLEBOAT_BUTTON_IGNORED
   
}
};