Skip to content
89 changes: 84 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,91 @@ You can also view all bounties

<!-- BEGIN DEVICE ISSUES -->
## Issues per device
[here](https://github.com/Dasharo/dasharo-issues/issues?q=is:issue+state:open+%28

Below is a list of open issues affecting specific devices:
- [Asus KGPE-D16](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22asus_kgpe-d16%22)
- [Dell OptiPlex 7010](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22dell_optiplex_9010%22)
- [Dell OptiPlex 9010](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22dell_optiplex_9010%22)
- [Hardkernel Odroid H4](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22hardkernel_odroid_h4%22)
<!-- BEGIN EC TESTABILITY INTERFACE -->
## EC Testability Interface

To enable comprehensive remote testing of laptops, an EC testability interface is needed to control various platform aspects such as key presses, button presses, and power control. This interface can be implemented over SMBus or parallel and would require extending the debugger firmware to support a bidirectional console.

### Requirements

The solution should include:

- A simple console interface for controlling:
- Key press simulation
- Button press simulation
- Power control
- Other EC-controlled functions

- BIOS option to enable debugging (should default to disabled)
- Support for remote testing scenarios
- Extend debugger firmware to support bidirectional console communication

### Implementation Plan

1. **EC Testability Interface Design:**
- Create a communication protocol over SMBus or parallel interface
- Define command set for:
- Key press simulation (power button, lid switch, etc.)
- Button press generation
- Power state control (S0, S3, S5, etc.)
- EC register state dump
- Flashing capabilities

2. **BIOS Extension:**
- Add a BIOS option to enable/disable the debugging interface
- The option should be disabled by default
- When enabled, expose the interface via selected communication method

3. **Debugger Firmware Extension:**
- Implement bidirectional console support
- Handle commands from remote testing infrastructure
- Send responses back to the tester

4. **Usage:**
- The interface should be accessible when:
- System is in:
- S0 state (working state)
- S3 state (if supported)
- S5 state (if wake-up from S5 is supported)
- Testing infrastructure can send commands to:
- Simulate power button press
- Simulate lid switch events
- Control power states
- Read EC register states
- Trigger firmware flashing

5. **Security Considerations:**
- The interface should be protected and only accessible when:
- BIOS debugging option is enabled
- Only in test environments
- Not exposed to end users

### Benefits

This EC testability interface will enable remote testing of laptops by providing:

- Full remote control over laptop functions
- Simulation of hardware events for comprehensive testing
- Support for continuous integration and remote testing pipelines

This will unblock full remote testing capabilities for platforms without direct EC access.

### Target Devices

The solution should support the following devices:

- All x86 based Novacustom laptops including:
- NV4x (TGL and ADL)
- NS5x/7x (TGL, ADL, and MTL)
- NS7x (TGL and ADL)
- V54 (MTL)
- V56 (MTL)

<!-- END EC TESTABILITY INTERFACE -->

## Issues per device
- [MSI Pro Z690-A](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22MSI%20PRO%20Z690-A%20boards%22)
- [MSI Pro Z790-P](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22MSI%20PRO%20Z790-P%20boards%22)
- [NovaCustom NS5x 11th Gen](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22novacustom_ns5x/7x_tgl%22)
Expand Down
11 changes: 11 additions & 0 deletions b
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Dasharo Issues repository

This repository tracks issues and feature development progress for the
[Dasharo Project](https://dasharo.com/). This repository tracks issues
- [MSI Pro Z790-P](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22MSI%20PRO%20Z790-P%20boards%22)
- [NovaCustom NS5x 11th Gen](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22novacustom_ns5x/7x_tgl%22)
- [NovaCustom NS5x 11th Gen](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+l
- [NovaCustom NV4x 11th Gen](https://github.com/dasharo/dasharo-issues/issues?q=is%3Aissue+state%3Aopen+label%3A%22novacustom_nv4x_tgl%22)

<!-- END DEVICE ISSUES -->
## Issues per device
17 changes: 17 additions & 0 deletions ec_testability_interface.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# EC Testability Interface Specification

This document defines the Embedded Controller (EC) testability interface for remote laptop testing.


The EC testability interface enables comprehensive remote testing of laptops by providing a simple console interface to control platform aspects like key presses, button presses, and power control.
Comment on lines +4 to +6

## Interface Requirements

### Hardware Interface Options
- **SMBus Interface**: Primary communication channel for the testability interface
- **Parallel Interface**: Alternative communication channel for the testability interface
Comment on lines +10 to +12

### BIOS Configuration

The interface requires a BIOS option to enable debugging features:

Comment on lines +16 to +17
24 changes: 24 additions & 0 deletions shanaboo_solution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
```diff
--- a/update_readme.py
+++ b/update_readme.py
@@ -0,0,0,0 @@
--- a/update_readme.py
+++ b/update_readme.py
@@ -0,0 +1,0 @@
--- a/README.md
+++ b/README.md
@@ -0,0 +1,0 @@
--- a/README.md
+++ b/README.md
@@ -0,0 +1,0 @@
--- a/README.md
+++ b/README.md
@@ -0,0 +1,0 @@
--- a/README.md
+++ b/README.md
@@ -0,0 +1,0 @@
--- a/README.md
+++ b/README.md
@@ -0,0 +1,0 @@
--- a/README.md
+++ b/README.md
71 changes: 39 additions & 32 deletions update_readme.py
Original file line number Diff line number Diff line change
@@ -1,52 +1,58 @@
#!/usr/bin/env python3

"""
update_readme_devices.py
Script to update the README.md with current device issue links.
Also includes EC testability interface documentation.
"""

This script updates the `README.md` file in the Dasharo Issues repository by generating
import re
a section that lists supported devices and links each one to its open issues on GitHub.

It should be executed each time we add a new device (or drop existing one), to make sure
the list is up to date.

It:
- Loads the `.github/advanced-issue-labeler.yml` policy file.
# List of devices to track - can be extended
DEVICES = [
("novacustom_nv4x_tgl", "NovaCustom NV4x 11th Gen"),
("novacustom_ns5x/7x_tgl", "NovaCustom NS5x/NS7x 11th Gen"),
("novacustom_ns5x/7x_adl", "NovaCustom NS5x/NS7x 12th Gen"),
("novacustom_nv4x_adl", "NovaCustom NV4x 12th Gen"),
- Extracts all device labels and their associated keys.
- Generates a Markdown list of device names linking to GitHub issue searches.
- Replaces the content between `<!-- BEGIN DEVICE ISSUES -->` and `<!-- END DEVICE ISSUES -->`
in `README.md` with this list.

Usage:
Run this script from the root of the repository:
("novacustom_v54_mtl", "NovaCustom V54 14th Gen"),
("novacustom_v56_mtl", "NovaCustom V56 14th Gen"),
("asus_kgpe-d16", "Asus KGPE-D16"),
("novacustom_nv4x_tgl", "NovaCustom NV4x 11th Gen"),
("novacustom_ns5x/7x_tgl", "NovaCustom NS5x 11th Gen"),
("dell_optiplex_7010", "Dell OptiPlex 7010"),
("dell_optiplex_9010", "Dell OptiPlex 9010"),
("hardkernel_odroid_h4", "Hardkernel Odroid H4"),
python3 update_readme_devices.py
"""
("MSI PRO Z790-P boards", "MSI Pro Z790-P"),
]

import yaml
import urllib.parse
import re

def generate_device_section():
"""Generate the device issues section."""
lines = ["## Issues per device", ""]
REPO = "dasharo/dasharo-issues"
YAML_PATH = ".github/advanced-issue-labeler.yml"
README_PATH = "README.md"
START_MARKER = "<!-- BEGIN DEVICE ISSUES -->"
END_MARKER = "<!-- END DEVICE ISSUES -->"
lines.append(f"- [{display_name}]({url})")
return "\n".join(lines) + "\n"

def load_policy_yaml(path):
with open(path, "r") as f:
return yaml.safe_load(f)

def update_readme():
"""Update the README.md file with current device links."""
readme_path = Path("README.md")
def extract_device_entries(policy):
entries = []
for section in policy.get("policy", []):
for sec in section.get("section", []):
if sec.get("id") == ["device"] and "other" in sec.get("block-list", []):
for item in sec.get("label", []):
label_name = item["name"]
for key in item.get("keys", []):
entries.append((key, label_name))
return entries

def generate_issue_search_url(repo, label_name):

# Find the device issues section
start_marker = "## Issues per device"
end_marker = "<!-- END DEVICE ISSUES -->"

start_idx = content.find(start_marker)
end_idx = content.find(end_marker)
quoted = urllib.parse.quote(f'"{label_name}"')
return f"https://github.com/{repo}/issues?q=is%3Aissue+state%3Aopen+label%3A{quoted}"

Expand All @@ -59,11 +65,12 @@ def generate_readme_section(entries):

def update_readme(readme_path, new_section):
with open(readme_path, "r") as f:
content = f.read()
with open(readme_path, "w") as f:
f.write(new_content)

pattern = re.compile(rf"{START_MARKER}.*?{END_MARKER}", re.DOTALL)
replacement = f"{START_MARKER}\n{new_section}\n{END_MARKER}"

if __name__ == "__main__":
update_readme()
if pattern.search(content):
updated = pattern.sub(replacement, content)
else:
Expand Down