Adjust constants and button event handling

Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
This commit is contained in:
TheJackiMonster 2023-05-01 18:38:53 +02:00
parent 8cf3221944
commit 754b5c131a
No known key found for this signature in database
GPG key ID: D850A5F772E880F9
2 changed files with 91 additions and 31 deletions

View file

@ -33,15 +33,62 @@
#include <cstdint> #include <cstdint>
#endif #endif
#define DEVICE4_ACTION_PASSIVE_POLL_START 0b00010 #define DEVICE4_MSG_P_BRIGHTNESS 0x03
#define DEVICE4_ACTION_BRIGHTNESS_COMMAND 0b00011 #define DEVICE4_MSG_W_DISP_MODE 0x08
#define DEVICE4_ACTION_MANUAL_POLL_CLICK 0b00101 #define DEVICE4_MSG_R_GLASSID 0x15
#define DEVICE4_ACTION_ACTIVE_POLL 0b01001 #define DEVICE4_MSG_R_DP7911_FW_VERSION 0x16
#define DEVICE4_ACTION_PASSIVE_POLL_END 0b10010 #define DEVICE4_MSG_R_DSP_VERSION 0x18
#define DEVICE4_MSG_W_CANCEL_ACTIVATION 0x19
#define DEVICE4_MSG_P_HEARTBEAT 0x1A
#define DEVICE4_MSG_W_SLEEP_TIME 0x1E
#define DEVICE4_BUTTON_DISPLAY_TOGGLE 0x1 #define DEVICE4_MSG_R_DSP_APP_FW_VERSION 0x21
#define DEVICE4_BUTTON_BRIGHTNESS_UP 0x2 #define DEVICE4_MSG_R_MCU_APP_FW_VERSION 0x26
#define DEVICE4_BUTTON_BRIGHTNESS_DOWN 0x3 #define DEVICE4_MSG_R_ACTIVATION_TIME 0x29
#define DEVICE4_MSG_W_ACTIVATION_TIME 0x2A
#define DEVICE4_MSG_R_DP7911_FW_IS_UPDATE 0x3C
#define DEVICE4_MSG_W_UPDATE_DP 0x3D
#define DEVICE4_MSG_W_UPDATE_MCU_APP_FW_PREPARE 0x3E
#define DEVICE4_MSG_W_UPDATE_MCU_APP_FW_START 0x3F
#define DEVICE4_MSG_W_UPDATE_MCU_APP_FW_TRANSMIT 0x40
#define DEVICE4_MSG_W_UPDATE_MCU_APP_FW_FINISH 0x41
#define DEVICE4_MSG_W_BOOT_JUMP_TO_APP 0x42
#define DEVICE4_MSG_W_MCU_APP_JUMP_TO_BOOT 0x44
#define DEVICE4_MSG_W_UPDATE_DSP_APP_FW_PREPARE 0x45
#define DEVICE4_MSG_W_UPDATE_DSP_APP_FW_START 0x46
#define DEVICE4_MSG_W_UPDATE_DSP_APP_FW_TRANSMIT 0x47
#define DEVICE4_MSG_W_UPDATE_DSP_APP_FW_FINISH 0x48
#define DEVICE4_MSG_R_IS_NEED_UPGRADE_DSP_FW 0x49
#define DEVICE4_MSG_W_FORCE_UPGRADE_DSP_FW 0x69
#define DEVICE4_MSG_W_BOOT_UPDATE_MODE 0x1100
#define DEVICE4_MSG_W_BOOT_UPDATE_CONFIRM 0x1101
#define DEVICE4_MSG_W_BOOT_UPDATE_PREPARE 0x1102
#define DEVICE4_MSG_W_BOOT_UPDATE_START 0x1103
#define DEVICE4_MSG_W_BOOT_UPDATE_TRANSMIT 0x1104
#define DEVICE4_MSG_W_BOOT_UPDATE_FINISH 0x1105
#define DEVICE4_MSG_P_START_HEARTBEAT 0x6c02
#define DEVICE4_MSG_P_BUTTON_PRESSED 0x6C05
#define DEVICE4_MSG_P_END_HEARTBEAT 0x6c12
#define DEVICE4_MSG_P_ASYNC_TEXT_LOG 0x6c09
#define DEVICE4_MSG_E_DSP_ONE_PACKGE_WRITE_FINISH 0x6C0E
#define DEVICE4_MSG_E_DSP_UPDATE_PROGRES 0x6C10
#define DEVICE4_MSG_E_DSP_UPDATE_ENDING 0x6C11
#define DEVICE4_BUTTON_PHYS_DISPLAY_TOGGLE 0x1
#define DEVICE4_BUTTON_PHYS_BRIGHTNESS_UP 0x2
#define DEVICE4_BUTTON_PHYS_BRIGHTNESS_DOWN 0x3
#define DEVICE4_BUTTON_VIRT_DISPLAY_TOGGLE 0x1
#define DEVICE4_BUTTON_VIRT_BRIGHTNESS_UP 0x6
#define DEVICE4_BUTTON_VIRT_BRIGHTNESS_DOWN 0x7
#define DEVICE4_BUTTON_VIRT_MODE_UP 0x8
#define DEVICE4_BUTTON_VIRT_MODE_DOWN 0x9
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@ -53,8 +100,8 @@ struct __attribute__((__packed__)) device4_packet_t {
uint16_t length; uint16_t length;
uint8_t _padding0 [4]; uint8_t _padding0 [4];
uint32_t timestamp; uint32_t timestamp;
uint8_t action; uint16_t msgid;
uint8_t _padding1 [6]; uint8_t _padding1 [5];
union { union {
char text [42]; char text [42];
uint8_t data [42]; uint8_t data [42];

View file

@ -52,7 +52,7 @@ static bool send_payload(device4_type* device, uint8_t size, const uint8_t* payl
return (transferred == size); return (transferred == size);
} }
static bool send_payload_action(device4_type* device, uint8_t action, uint8_t len, const uint8_t* data) { static bool send_payload_action(device4_type* device, uint16_t msgid, uint8_t len, const uint8_t* data) {
static device4_packet_type packet; static device4_packet_type packet;
const uint16_t packet_len = 11 + len; const uint16_t packet_len = 11 + len;
@ -62,12 +62,12 @@ static bool send_payload_action(device4_type* device, uint8_t action, uint8_t le
packet.length = packet_len; packet.length = packet_len;
memset(packet._padding0, 0, 4); memset(packet._padding0, 0, 4);
packet.timestamp = 0; packet.timestamp = 0;
packet.action = action; packet.msgid = msgid;
memset(packet._padding1, 0, 6); memset(packet._padding1, 0, 5);
memcpy(packet.data, data, len); memcpy(packet.data, data, len);
packet.checksum = crc32_checksum((const uint8_t*) (&packet.length), packet.length); packet.checksum = crc32_checksum((const uint8_t*) (&packet.length), packet.length);
return send_payload(device, payload_len, (uint8_t*) (&packet)); return send_payload(device, payload_len, (uint8_t*) (&packet));
} }
@ -113,7 +113,7 @@ device4_type* device4_open(device4_event_callback callback) {
device4_clear(device); device4_clear(device);
/*if (!send_payload_action(device, DEVICE4_ACTION_BRIGHTNESS_COMMAND, 0, NULL)) { /*if (!send_payload_action(device, DEVICE4_MSG_P_BRIGHTNESS, 0, NULL)) {
perror("Sending brightness command action failed!\n"); perror("Sending brightness command action failed!\n");
return device; return device;
} }
@ -142,7 +142,7 @@ void device4_clear(device4_type* device) {
} }
int device4_read(device4_type* device, int timeout) { int device4_read(device4_type* device, int timeout) {
if (!device) { if ((!device) || (!device->handle)) {
return -1; return -1;
} }
@ -172,12 +172,24 @@ int device4_read(device4_type* device, int timeout) {
const uint32_t timestamp = packet.timestamp; const uint32_t timestamp = packet.timestamp;
const size_t data_len = (size_t) &(packet.data) - (size_t) &(packet.length); const size_t data_len = (size_t) &(packet.data) - (size_t) &(packet.length);
#ifndef NDEBUG
printf("MSG: %d = %04x (%d)\n", packet.msgid, packet.msgid, packet.length);
if (packet.length > 11) {
for (int i = 0; i < packet.length - 11; i++) {
printf("%02x ", packet.data[i]);
}
printf("\n");
}
#endif
switch (packet.action) { switch (packet.msgid) {
case DEVICE4_ACTION_PASSIVE_POLL_START: { case DEVICE4_MSG_P_START_HEARTBEAT: {
break; break;
} }
case DEVICE4_ACTION_BRIGHTNESS_COMMAND: { case DEVICE4_MSG_P_BRIGHTNESS: {
const uint8_t brightness = packet.data[1]; const uint8_t brightness = packet.data[1];
device->brightness = brightness; device->brightness = brightness;
@ -191,13 +203,14 @@ int device4_read(device4_type* device, int timeout) {
); );
break; break;
} }
case DEVICE4_ACTION_MANUAL_POLL_CLICK: { case DEVICE4_MSG_P_BUTTON_PRESSED: {
const uint8_t button = packet.data[0]; const uint8_t phys_button = packet.data[0];
const uint8_t brightness = packet.data[8]; const uint8_t virt_button = packet.data[4];
const uint8_t value = packet.data[8];
switch (button) { switch (virt_button) {
case DEVICE4_BUTTON_DISPLAY_TOGGLE: case DEVICE4_BUTTON_VIRT_DISPLAY_TOGGLE:
device->active = !device->active; device->active = value;
if (device->active) { if (device->active) {
device4_callback( device4_callback(
@ -217,8 +230,8 @@ int device4_read(device4_type* device, int timeout) {
); );
} }
break; break;
case DEVICE4_BUTTON_BRIGHTNESS_UP: case DEVICE4_BUTTON_VIRT_BRIGHTNESS_UP:
device->brightness = brightness; device->brightness = value;
device4_callback( device4_callback(
device, device,
@ -228,8 +241,8 @@ int device4_read(device4_type* device, int timeout) {
NULL NULL
); );
break; break;
case DEVICE4_BUTTON_BRIGHTNESS_DOWN: case DEVICE4_BUTTON_VIRT_BRIGHTNESS_DOWN:
device->brightness = brightness; device->brightness = value;
device4_callback( device4_callback(
device, device,
@ -245,7 +258,7 @@ int device4_read(device4_type* device, int timeout) {
break; break;
} }
case DEVICE4_ACTION_ACTIVE_POLL: { case DEVICE4_MSG_P_ASYNC_TEXT_LOG: {
const char* text = packet.text; const char* text = packet.text;
const size_t text_len = strlen(text); const size_t text_len = strlen(text);
@ -265,7 +278,7 @@ int device4_read(device4_type* device, int timeout) {
); );
break; break;
} }
case DEVICE4_ACTION_PASSIVE_POLL_END: { case DEVICE4_MSG_P_END_HEARTBEAT: {
break; break;
} }
default: default: