Skip to content

Commit

Permalink
Refactor command data handling and add WiFi signal debugging sensor
Browse files Browse the repository at this point in the history
  • Loading branch information
AzonInc committed Feb 9, 2025
1 parent 4ff78dd commit d49457d
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 4 deletions.
31 changes: 27 additions & 4 deletions components/tc_bus/protocol.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@ namespace esphome
CommandData data{};
data.command = 0;
data.type = type;
data.address = address;
data.payload = payload;
data.serial_number = serial_number;
data.is_long = true;

switch (type)
Expand All @@ -25,54 +22,66 @@ namespace esphome
data.command |= ((serial_number & 0xFFFFF) << 8); // C30BA
data.command |= (1 << 7); // 8
data.command |= (address & 0x3F); // 0
data.serial_number = serial_number;
data.address = address;
break;

case COMMAND_TYPE_INTERNAL_CALL:
data.command |= (0 << 28); // 0
data.command |= ((serial_number & 0xFFFFF) << 8); // C30BA
data.command &= ~(1 << 7); // 0
data.command |= (address & 0x3F); // 0
data.serial_number = serial_number;
data.address = address;
break;

case COMMAND_TYPE_FLOOR_CALL:
data.command |= (1 << 28); // 1
data.command |= ((serial_number & 0xFFFFF) << 8); // C30BA
data.command |= 0x41; // 41
data.serial_number = serial_number;
break;

case COMMAND_TYPE_START_TALKING_DOOR_CALL:
data.command |= (3 << 28); // 3
data.command |= ((serial_number & 0xFFFFF) << 8); // C30BA
data.command |= (1 << 7); // 8
data.command |= (address & 0x3F); // 0
data.serial_number = serial_number;
data.address = address;
break;

case COMMAND_TYPE_START_TALKING:
data.command |= (3 << 28); // 3
data.command |= ((serial_number & 0xFFFFF) << 8); // C30BA
data.command &= ~(1 << 7); // 0
data.command |= (address & 0x3F); // 0
data.serial_number = serial_number;
data.address = address;
break;

case COMMAND_TYPE_STOP_TALKING_DOOR_CALL:
data.is_long = false;
data.command |= (3 << 12); // 3
data.command |= (1 << 7); // 08
data.command |= (address & 0x3F); // 0
data.address = address;
break;

case COMMAND_TYPE_STOP_TALKING:
data.is_long = false;
data.command |= (3 << 12); // 3
data.command &= ~(1 << 7); // 00
data.command |= (address & 0x3F); // 0
data.address = address;
break;

case COMMAND_TYPE_OPEN_DOOR:
data.is_long = false;
data.command |= (1 << 12); // 1
data.command |= (1 << 8); // 1
data.command |= (address & 0x3F); // 00
data.address = address;
break;

case COMMAND_TYPE_OPEN_DOOR_LONG:
Expand All @@ -82,13 +91,16 @@ namespace esphome
data.command |= (1 << 12); // 1
data.command |= (1 << 8); // 1
data.command |= (address & 0x3F); // 00
data.address = address;
}
else
{
data.command |= (1 << 28); // 1
data.command |= ((serial_number & 0xFFFFF) << 8); // C30BA
data.command |= (1 << 7); // 8
data.command |= (address & 0x3F); // 0
data.serial_number = serial_number;
data.address = address;
}
break;

Expand All @@ -102,12 +114,14 @@ namespace esphome
data.command |= (6 << 28); // 6
data.command |= ((serial_number & 0xFFFFF) << 8); // C30BA
data.command |= (payload & 0xFF); // 08
data.payload = payload;
break;

case COMMAND_TYPE_REQUEST_VERSION:
data.command |= (5 << 28); // 5
data.command |= ((serial_number & 0xFFFFF) << 8); // C30BA
data.command |= (0xC0 & 0xFF); // C0
data.serial_number = serial_number;
break;

case COMMAND_TYPE_RESET:
Expand All @@ -124,20 +138,23 @@ namespace esphome
case COMMAND_TYPE_FOUND_DOORMAN_DEVICE:
data.command |= (0x7F << 24); // 7F
data.command |= payload & 0xFFFFFF; // MAC address
data.payload = payload;
break;

case COMMAND_TYPE_SELECT_DEVICE_GROUP:
data.is_long = false;
data.command |= (5 << 12); // 5
data.command |= (8 << 8); // 80
data.command |= (payload & 0xFF); // 0
data.payload = payload;
break;

case COMMAND_TYPE_SELECT_DEVICE_GROUP_RESET:
data.is_long = false;
data.command |= (5 << 12); // 5
data.command |= (9 << 8); // 90
data.command |= (payload & 0xFF); // 0
data.payload = payload;
break;

case COMMAND_TYPE_SEARCH_DEVICES:
Expand All @@ -152,27 +169,33 @@ namespace esphome
data.command |= (0 << 8); // 0
data.command |= (4 << 4); // 4
data.command |= (payload & 0xF); // 0 / 1
data.payload = payload;
break;

case COMMAND_TYPE_READ_MEMORY_BLOCK:
data.is_long = false;
data.command |= (8 << 12); // 8
data.command |= (4 << 8); // 4
data.command |= ((data.address * 4) & 0xFF); // 00
data.address = address;
break;

case COMMAND_TYPE_WRITE_MEMORY:
data.command |= (8 << 28); // 8
data.command |= (2 << 24); // 2
data.command |= (address & 0xFF) << 16; // start address
data.command |= payload & 0xFFFF; // ABCD payload
data.address = address;
data.payload = payload;
break;

case COMMAND_TYPE_SELECT_MEMORY_PAGE:
data.command |= (8 << 28); // 8
data.command |= (1 << 24); // 1
data.command |= (address & 0xF) << 20; // page
data.command |= serial_number & 0xFFFFF;
data.serial_number = serial_number;
data.address = address;
break;

default:
Expand Down Expand Up @@ -686,7 +709,7 @@ namespace esphome
else if (model_key == "1E9") return MODEL_IVW9011;
else if (model_key == "1B3" || model_key == "1B4" || model_key == "1B5")
return MODEL_IVE70;

return MODEL_NONE;
}

Expand Down
18 changes: 18 additions & 0 deletions firmware/addons/debug-utilities.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,24 @@ sensor:
sorting_group_id: sorting_group_diagnostic
sorting_weight: -5

- platform: wifi_signal
id: debug_wifi_signal_db
update_interval: 60s
internal: True

- platform: copy
id: debug_wifi_signal
icon: "mdi:wifi"
source_id: debug_wifi_signal_db
name: "WiFi Signal"
filters:
- lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
unit_of_measurement: "%"
entity_category: DIAGNOSTIC
device_class: ""
web_server:
sorting_group_id: sorting_group_diagnostic

- platform: debug
free:
id: debug_heap_free
Expand Down

0 comments on commit d49457d

Please sign in to comment.