mirror of
https://github.com/demik/quack.git
synced 2024-12-13 06:29:14 +00:00
99 lines
2.7 KiB
C
99 lines
2.7 KiB
C
/*
|
|
* wii.h
|
|
* quack
|
|
*
|
|
* Created by Michel DEPEIGE on 11/08/2024.
|
|
* Copyright (c) 2024 Michel DEPEIGE.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the Apache License, Version 2.0 (the "License");
|
|
* You may obtain a copy of the License at:
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*/
|
|
|
|
#ifndef WII_H
|
|
#define WII_H
|
|
|
|
/* prototypes */
|
|
uint8_t *wii_generate_pin(esp_bt_pin_code_t pin);
|
|
void wii_init(void);
|
|
void wii_input(esp_hidh_dev_t *dev, uint16_t id, uint8_t *data, uint16_t length);
|
|
bool wii_is_nintendo_bda(esp_bd_addr_t bda);
|
|
bool wii_is_wiimote(uint16_t vid, uint16_t pid);
|
|
void wii_open(const esp_bd_addr_t bda);
|
|
void wii_show_calibration(uint8_t *data);
|
|
|
|
/* defines */
|
|
#define WII_VID 0x057e
|
|
#define WII_PID_OLD 0x0306
|
|
#define WII_PID_NEW 0x0330
|
|
|
|
#define WII_PIN_STR "0x%02x%02x%02x%02x%02x%02x"
|
|
#define WII_PIN_HEX(pin) pin[0], pin[1], pin[2], pin[3], pin[4], pin[5]
|
|
|
|
#define WII_THRESHOLD 0.1f
|
|
#define WII_ACCELERATION -10.0f /* coonvert gravity to pixels */
|
|
#define WII_INTERVAL (1000 / 60) /* pad update interval, about 60 Hz */
|
|
#define WII_THROTTLE 20
|
|
|
|
/* core buttons. LX6 is wrong endian */
|
|
#define WII_BUTTON_NONE 0x0000
|
|
#define WII_BUTTON_LEFT 0x0001
|
|
#define WII_BUTTON_RIGHT 0x0002
|
|
#define WII_BUTTON_DOWN 0x0004
|
|
#define WII_BUTTON_UP 0x0008
|
|
#define WII_BUTTON_PLUS 0x0010
|
|
#define WII_BUTTON_TWO 0x0100
|
|
#define WII_BUTTON_ONE 0x0200
|
|
#define WII_BUTTON_B 0x0400
|
|
#define WII_BUTTON_A 0x0800
|
|
#define WII_BUTTON_MINUS 0x1000
|
|
#define WII_BUTTON_HOME 0x8000
|
|
|
|
/* LEDs + Rumble */
|
|
#define WII_LED1 0x10
|
|
#define WII_LED2 0x20
|
|
#define WII_LED3 0x40
|
|
#define WII_LED4 0x80
|
|
|
|
/* for quadrature speed feedback */
|
|
#define WII_SPEED_NONE 0x00
|
|
#define WII_SPEED_LOW WII_LED1
|
|
#define WII_SPEED_MEDIUM WII_LED2
|
|
#define WII_SPEED_HIGH WII_LED3
|
|
|
|
/* handled reports */
|
|
#define WII_REPORT_RUMBLE 0x10
|
|
#define WII_REPORT_LEDS 0x11
|
|
#define WII_REPORT_MODE 0x12
|
|
#define WII_REPORT_SPEAKER_E 0x14
|
|
#define WII_REPORT_REQUEST 0x15
|
|
#define WII_REPORT_WRITE_REG 0x16
|
|
#define WII_REPORT_READ_REG 0x17
|
|
#define WII_REPORT_SPEAKER_D 0x18
|
|
#define WII_REPORT_SPEAKER_M 0x19
|
|
#define WII_REPORT_STATUS 0x20
|
|
#define WII_REPORT_READ_INPUT 0x21
|
|
#define WII_REPORT_ACK 0x22
|
|
#define WII_REPORT_CORE_ONLY 0x30
|
|
#define WII_REPORT_CORE_ACCEL 0x31
|
|
|
|
#define WII_REPORT_INPUT WII_REPORT_ACK|WII_REPORT_CORE_ONLY
|
|
|
|
/* structures */
|
|
typedef struct wii_accel_s {
|
|
uint16_t x;
|
|
uint16_t y;
|
|
uint16_t z;
|
|
} wii_accel_t;
|
|
|
|
#endif
|