Implemented weak ps2_mouse_init_user()

There are a lot of PS/2 commands, some are vendor/device specific, so we
provide a weak ps2_mouse_init_user() to be implemented in each keyboard
that need it.
master
Priyadi Iman Nurcahyo 2016-12-05 01:07:12 +07:00
parent fc80aa9974
commit 6ef3060b42
2 changed files with 56 additions and 47 deletions

View File

@ -28,53 +28,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ============================= MACROS ============================ */ /* ============================= MACROS ============================ */
#define PS2_MOUSE_SEND(command, message) \ static report_mouse_t mouse_report = {};./
do { \
uint8_t rcv = ps2_host_send(command); \
if (debug_mouse) { \
print((message)); \
xprintf(" command: %X, result: %X, error: %X \n", command, rcv, ps2_error); \
} \
} while(0)
#define PS2_MOUSE_SEND_SAFE(command, message) \
do { \
if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \
ps2_mouse_disable_data_reporting(); \
} \
PS2_MOUSE_SEND(command, message); \
if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \
ps2_mouse_enable_data_reporting(); \
} \
} while(0)
#define PS2_MOUSE_SET_SAFE(command, value, message) \
do { \
if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \
ps2_mouse_disable_data_reporting(); \
} \
PS2_MOUSE_SEND(command, message); \
PS2_MOUSE_SEND(value, "Sending value"); \
if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \
ps2_mouse_enable_data_reporting(); \
} \
} while(0)
#define PS2_MOUSE_RECEIVE(message) \
do { \
uint8_t rcv = ps2_host_recv_response(); \
if (debug_mouse) { \
print((message)); \
xprintf(" result: %X, error: %X \n", rcv, ps2_error); \
} \
} while(0)
static enum ps2_mouse_mode_e {
PS2_MOUSE_STREAM_MODE,
PS2_MOUSE_REMOTE_MODE,
} ps2_mouse_mode = PS2_MOUSE_STREAM_MODE;
static report_mouse_t mouse_report = {};
static inline void ps2_mouse_print_report(report_mouse_t *mouse_report); static inline void ps2_mouse_print_report(report_mouse_t *mouse_report);
static inline void ps2_mouse_convert_report_to_hid(report_mouse_t *mouse_report); static inline void ps2_mouse_convert_report_to_hid(report_mouse_t *mouse_report);
@ -108,6 +62,12 @@ void ps2_mouse_init(void) {
#ifdef PS2_MOUSE_USE_2_1_SCALING #ifdef PS2_MOUSE_USE_2_1_SCALING
ps2_mouse_set_scaling_2_1(); ps2_mouse_set_scaling_2_1();
#endif #endif
ps2_mouse_init_user();
}
__attribute__((weak))
void ps2_mouse_init_user(void) {
} }
void ps2_mouse_task(void) { void ps2_mouse_task(void) {

View File

@ -19,6 +19,53 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PS2_MOUSE_H #define PS2_MOUSE_H
#include <stdbool.h> #include <stdbool.h>
#include "debug.h"
#define PS2_MOUSE_SEND(command, message) \
do { \
uint8_t rcv = ps2_host_send(command); \
if (debug_mouse) { \
print((message)); \
xprintf(" command: %X, result: %X, error: %X \n", command, rcv, ps2_error); \
} \
} while(0)
#define PS2_MOUSE_SEND_SAFE(command, message) \
do { \
if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \
ps2_mouse_disable_data_reporting(); \
} \
PS2_MOUSE_SEND(command, message); \
if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \
ps2_mouse_enable_data_reporting(); \
} \
} while(0)
#define PS2_MOUSE_SET_SAFE(command, value, message) \
do { \
if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \
ps2_mouse_disable_data_reporting(); \
} \
PS2_MOUSE_SEND(command, message); \
PS2_MOUSE_SEND(value, "Sending value"); \
if (PS2_MOUSE_STREAM_MODE == ps2_mouse_mode) { \
ps2_mouse_enable_data_reporting(); \
} \
} while(0)
#define PS2_MOUSE_RECEIVE(message) \
do { \
uint8_t rcv = ps2_host_recv_response(); \
if (debug_mouse) { \
print((message)); \
xprintf(" result: %X, error: %X \n", rcv, ps2_error); \
} \
} while(0)
static enum ps2_mouse_mode_e {
PS2_MOUSE_STREAM_MODE,
PS2_MOUSE_REMOTE_MODE,
} ps2_mouse_mode = PS2_MOUSE_STREAM_MODE;
/* /*
* Data format: * Data format:
@ -107,6 +154,8 @@ typedef enum ps2_mouse_sample_rate_e {
void ps2_mouse_init(void); void ps2_mouse_init(void);
void ps2_mouse_init_user(void);
void ps2_mouse_task(void); void ps2_mouse_task(void);
void ps2_mouse_disable_data_reporting(void); void ps2_mouse_disable_data_reporting(void);