mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-18 20:38:10 +00:00
modtrezormsg: untagle touch
This commit is contained in:
parent
6c982a64d1
commit
4a7540f5b9
@ -5,8 +5,6 @@
|
|||||||
* see LICENSE file for details
|
* see LICENSE file for details
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "touch.h"
|
|
||||||
|
|
||||||
extern struct _USBD_HandleTypeDef hUSBDDevice;
|
extern struct _USBD_HandleTypeDef hUSBDDevice;
|
||||||
extern uint8_t USBD_HID_SendReport(struct _USBD_HandleTypeDef *pdev, uint8_t *report, uint16_t len);
|
extern uint8_t USBD_HID_SendReport(struct _USBD_HandleTypeDef *pdev, uint8_t *report, uint16_t len);
|
||||||
extern int USBD_HID_Rx(uint8_t *buf, uint32_t len, uint32_t timeout);
|
extern int USBD_HID_Rx(uint8_t *buf, uint32_t len, uint32_t timeout);
|
||||||
@ -29,8 +27,3 @@ ssize_t msg_send(uint8_t iface, const uint8_t *buf, size_t len)
|
|||||||
}
|
}
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t msg_poll_touch(void)
|
|
||||||
{
|
|
||||||
return touch_read();
|
|
||||||
}
|
|
||||||
|
@ -67,10 +67,3 @@ ssize_t msg_send(uint8_t iface, const uint8_t *buf, size_t len)
|
|||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern uint32_t trezorui_poll_event(void);
|
|
||||||
|
|
||||||
uint32_t msg_poll_touch(void)
|
|
||||||
{
|
|
||||||
return trezorui_poll_event();
|
|
||||||
}
|
|
||||||
|
@ -99,6 +99,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_3(mod_TrezorMsg_Msg_send_obj, mod_TrezorMsg_Msg_s
|
|||||||
|
|
||||||
#define TICK_RESOLUTION 1000
|
#define TICK_RESOLUTION 1000
|
||||||
#define TOUCH_IFACE 0
|
#define TOUCH_IFACE 0
|
||||||
|
extern uint32_t touch_read(void); // defined in HAL
|
||||||
|
|
||||||
/// def trezor.msg.select(timeout_us: int) -> tuple:
|
/// def trezor.msg.select(timeout_us: int) -> tuple:
|
||||||
/// '''
|
/// '''
|
||||||
@ -112,7 +113,7 @@ STATIC mp_obj_t mod_TrezorMsg_Msg_select(mp_obj_t self, mp_obj_t timeout_us) {
|
|||||||
timeout = 0;
|
timeout = 0;
|
||||||
}
|
}
|
||||||
for(;;) {
|
for(;;) {
|
||||||
uint32_t e = msg_poll_touch();
|
uint32_t e = touch_read();
|
||||||
if (e) {
|
if (e) {
|
||||||
mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR(mp_obj_new_tuple(4, NULL));
|
mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR(mp_obj_new_tuple(4, NULL));
|
||||||
tuple->items[0] = MP_OBJ_NEW_SMALL_INT(TOUCH_IFACE);
|
tuple->items[0] = MP_OBJ_NEW_SMALL_INT(TOUCH_IFACE);
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include <SDL2/SDL_image.h>
|
|
||||||
|
|
||||||
#define DISPLAY_BORDER 16
|
#define DISPLAY_BORDER 16
|
||||||
|
|
||||||
@ -33,49 +32,6 @@ void DATA(uint8_t x) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// this should match values used in msg_poll_ui_event() in modtrezormsg/modtrezormsg-stmhal.h
|
|
||||||
uint32_t trezorui_poll_event(void)
|
|
||||||
{
|
|
||||||
SDL_Event event;
|
|
||||||
int x, y;
|
|
||||||
SDL_PumpEvents();
|
|
||||||
if (SDL_PollEvent(&event) > 0) {
|
|
||||||
switch (event.type) {
|
|
||||||
case SDL_MOUSEBUTTONDOWN:
|
|
||||||
case SDL_MOUSEMOTION:
|
|
||||||
case SDL_MOUSEBUTTONUP:
|
|
||||||
x = event.button.x - DISPLAY_BORDER;
|
|
||||||
y = event.button.y - DISPLAY_BORDER;
|
|
||||||
if (x < 0 || y < 0 || x >= DISPLAY_RESX || y >= DISPLAY_RESY) break;
|
|
||||||
switch (event.type) {
|
|
||||||
case SDL_MOUSEBUTTONDOWN:
|
|
||||||
return (0x00 << 24) | (0x01 << 16) | (x << 8) | y; // touch_start
|
|
||||||
break;
|
|
||||||
case SDL_MOUSEMOTION:
|
|
||||||
// remove other SDL_MOUSEMOTION events from queue
|
|
||||||
SDL_FlushEvent(SDL_MOUSEMOTION);
|
|
||||||
if (event.motion.state) {
|
|
||||||
return (0x00 << 24) | (0x02 << 16) | (x << 8) | y; // touch_move
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SDL_MOUSEBUTTONUP:
|
|
||||||
return (0x00 << 24) | (0x04 << 16) | (x << 8) | y; // touch_end
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SDL_KEYUP:
|
|
||||||
if (event.key.keysym.sym == SDLK_ESCAPE) {
|
|
||||||
exit(3);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SDL_QUIT:
|
|
||||||
exit(3);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void display_init(void)
|
void display_init(void)
|
||||||
{
|
{
|
||||||
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
|
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
|
||||||
@ -86,7 +42,7 @@ void display_init(void)
|
|||||||
printf("SDL_CreateWindow Error: %s\n", SDL_GetError());
|
printf("SDL_CreateWindow Error: %s\n", SDL_GetError());
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
}
|
}
|
||||||
RENDERER = SDL_CreateRenderer(win, -1, SDL_RENDERER_SOFTWARE);
|
RENDERER = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED);
|
||||||
if (!RENDERER) {
|
if (!RENDERER) {
|
||||||
printf("SDL_CreateRenderer Error: %s\n", SDL_GetError());
|
printf("SDL_CreateRenderer Error: %s\n", SDL_GetError());
|
||||||
SDL_DestroyWindow(win);
|
SDL_DestroyWindow(win);
|
||||||
|
@ -69,6 +69,7 @@ endif
|
|||||||
|
|
||||||
# OBJ micropython/extmod/modtrezormsg
|
# OBJ micropython/extmod/modtrezormsg
|
||||||
ifeq ($(MICROPY_PY_TREZORMSG),1)
|
ifeq ($(MICROPY_PY_TREZORMSG),1)
|
||||||
|
SRC_MOD += $(EXTMOD_DIR)/../unix/touch.c
|
||||||
SRC_MOD += $(EXTMOD_DIR)/modtrezormsg/modtrezormsg.c
|
SRC_MOD += $(EXTMOD_DIR)/modtrezormsg/modtrezormsg.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
15
micropython/unix/options.h
Normal file
15
micropython/unix/options.h
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Pavol Rusnak, SatoshiLabs
|
||||||
|
*
|
||||||
|
* Licensed under TREZOR License
|
||||||
|
* see LICENSE file for details
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __OPTIONS_H__
|
||||||
|
#define __OPTIONS_H__
|
||||||
|
|
||||||
|
#define DISPLAY_RESX 240
|
||||||
|
#define DISPLAY_RESY 240
|
||||||
|
#define DISPLAY_BORDER 16
|
||||||
|
|
||||||
|
#endif
|
52
micropython/unix/touch.c
Normal file
52
micropython/unix/touch.c
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) Pavol Rusnak, SatoshiLabs
|
||||||
|
*
|
||||||
|
* Licensed under TREZOR License
|
||||||
|
* see LICENSE file for details
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <SDL2/SDL.h>
|
||||||
|
|
||||||
|
#include "options.h"
|
||||||
|
|
||||||
|
uint32_t touch_read(void)
|
||||||
|
{
|
||||||
|
SDL_Event event;
|
||||||
|
int x, y;
|
||||||
|
SDL_PumpEvents();
|
||||||
|
if (SDL_PollEvent(&event) > 0) {
|
||||||
|
switch (event.type) {
|
||||||
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
|
case SDL_MOUSEMOTION:
|
||||||
|
case SDL_MOUSEBUTTONUP:
|
||||||
|
x = event.button.x - DISPLAY_BORDER;
|
||||||
|
y = event.button.y - DISPLAY_BORDER;
|
||||||
|
if (x < 0 || y < 0 || x >= DISPLAY_RESX || y >= DISPLAY_RESY) break;
|
||||||
|
switch (event.type) {
|
||||||
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
|
return (0x00 << 24) | (0x01 << 16) | (x << 8) | y; // touch_start
|
||||||
|
break;
|
||||||
|
case SDL_MOUSEMOTION:
|
||||||
|
// remove other SDL_MOUSEMOTION events from queue
|
||||||
|
SDL_FlushEvent(SDL_MOUSEMOTION);
|
||||||
|
if (event.motion.state) {
|
||||||
|
return (0x00 << 24) | (0x02 << 16) | (x << 8) | y; // touch_move
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SDL_MOUSEBUTTONUP:
|
||||||
|
return (0x00 << 24) | (0x04 << 16) | (x << 8) | y; // touch_end
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SDL_KEYUP:
|
||||||
|
if (event.key.keysym.sym == SDLK_ESCAPE) {
|
||||||
|
exit(3);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SDL_QUIT:
|
||||||
|
exit(3);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user