Removed *.md file creation from Supported Devices

* Added Dummy Controller processing
* Other fixes to broken detector replacements
* Removed file exemptions in runner script
This commit is contained in:
Chris M 2024-05-28 00:23:26 +10:00 committed by Adam Honse
parent b06ce22abb
commit aa4483183c
7 changed files with 61 additions and 259 deletions

View file

@ -42,11 +42,7 @@ before_script:
artifacts:
name: "${CI_PROJECT_NAME}_Supported_Devices_${CI_COMMIT_SHORT_SHA}"
paths:
- ./*.md
- Supported Devices.csv
exclude:
- README.md
- CONTRIBUTING.md
expire_in: 30 days
rules:

View file

@ -145,7 +145,7 @@ static const char *led_names[] =
@save :x:
@direct :white_check_mark:
@effects :x:
@detectors A4TechDetector
@detectors DetectBloodyB820R
@comment The A4Tech Bloody B820R keyboard controller currently
supports the full size (ANSI layout).
\*-------------------------------------------------------------------*/

View file

@ -19,7 +19,7 @@
@save :robot:
@direct :white_check_mark:
@effects :white_check_mark:
@detectors DetectCoolerMasterKeyboards
@detectors DetectCoolerMasterV1Keyboards,DetectCoolerMasterV2Keyboards
@comment
In CMKeyboardV1Controller brightness control not supported.
Supported effects differ between CMKeyboardV1Controller and

View file

@ -19,7 +19,7 @@
@save :robot:
@direct :x:
@effects :white_check_mark:
@detectors EpomakerControllerDetect
@detectors DetectEpomakerControllers
@comment
\*-------------------------------------------------------------------*/

View file

@ -19,7 +19,7 @@
@save :robot:
@direct :white_check_mark:
@effects :white_check_mark:
@detectors DetectGigabyteAorusLaptopControllers
@detectors DetectGigabyteAorusLaptopKeyboardControllers,DetectGigabyteAorusLaptopBacklightControllers
@comment Direct mode will only exposes the whole keyboard as one
big led, only custom mode can do real per key lightning.
This is impossible to determine if it auto saves to flash

View file

@ -349,8 +349,8 @@
/*-----------------------------------------------------*\
| Colorful Sub-Device IDs |
\*-----------------------------------------------------*/
#define COLORFUL_IGAME_RTX_2070_SUPER_ADVANCED_OCV 0X1401
#define COLORFUL_IGAME_RTX_2070_SUPER_ADVANCED_OCV2 0X140A
#define COLORFUL_IGAME_RTX_2070_SUPER_ADVANCED_OCV 0x1401
#define COLORFUL_IGAME_RTX_2070_SUPER_ADVANCED_OCV2 0x140A
#define COLORFUL_IGAME_RTX_3060_ADVANCED_OC_12G_LV 0x140A
#define COLORFUL_IGAME_RTX_3060_ULTRAW_OC_12G 0x150A
#define COLORFUL_IGAME_RTX_3060_ULTRAW_OC_12G_2 0x1501
@ -614,7 +614,7 @@
#define MSI_RTX2070S_ARMOR_OC_SUB_DEV 0xC730
#define MSI_RTX2070S_GAMING_TRIO_SUB_DEV 0xC727
#define MSI_RTX2070S_GAMING_Z_TRIO_SUB_DEV 0x37B6
#define MSI_RTX2070S_GAMING_X_SUB_DEV 0x373e
#define MSI_RTX2070S_GAMING_X_SUB_DEV 0x373E
#define MSI_RTX2070S_GAMING_X_TRIO_SUB_DEV 0xC726
#define MSI_RTX2080_GAMING_TRIO_SUB_DEV 0x372E
#define MSI_RTX2080_GAMING_X_TRIO_SUB_DEV 0x3726

View file

@ -1,4 +1,4 @@
#!/bin/bash
#!/usr/bin/env bash
#-----------------------------------------------------------------------------#
# This script relies on the preprocessed *.ii and *.s files from #
# all "RGBController_" .cpp files and the detectors that call them #
@ -11,12 +11,7 @@
## Modular Variables
OPENRGB_PATH=$1
CONTROLLER_PATH=${OPENRGB_PATH}'/Controllers'
DATA_TABLE_HEAD='| Controller Name | Connection | Save to Flash | Direct | Hardware Effects |\n'
DATA_TABLE_ALIGN='| :--- | :---: | :---: | :---: | :---: |'
USB_DEVICE_TABLE_HEAD='| Vendor ID | Product ID | Device Name |\n'
GPU_DEVICE_TABLE_HEAD='| Vendor &<br/>Device ID | Sub-Vendor &<br/>Product ID | Device Name |\n'
DEVICE_TABLE_ALIGN='| :---: | :---: | :--- |'
MAIN_FILE='Supported Devices.md'
CSV_TABLE_HEAD='Name,Category,Type,RGBController,VID,PID,SVID,SPID,Save,Direct,Effects,Comments'
CSV_FILE='Supported Devices.csv'
@ -42,52 +37,18 @@ declare -a UNICODE=($WHITE_CHECK_MARK $ROTATING_LIGHT $ROBOT $TOOLS $NO_ENTRY $C
#make -j$(nproc)
## The HID list is produced from each "REGISTER_DETECTOR" macro replacement.
DELIMITER=$'\x01'
DLM=$'\x01'
## | callback_function | VID | PID | Name |
HID_LIST=$(grep -hR -e "static\ HIDDeviceDetector" . | cut -d '(' -f 2- | awk -F , -v delim="${DELIMITER}" '{ print $2 ":"delim $3 delim $4 delim $1 delim }')
I2C_LIST=$(grep -hR -e "static\ I2CPCIDeviceDetector" . | cut -d '(' -f 2- | awk -F , -v delim="${DELIMITER}" '{ print $2 ":"delim $3 delim $4 delim $5 delim $6 delim $1 delim }')
HID_LIST=$(grep -hR -e "static\ HIDDeviceDetector" . | sed -e "s/^.*\(\".*\"\), \(.*\), \([0-9ABCDEFx]*\), \([0-9ABCDEFx]*\).*,.*,.*,.*;$/\2${DLM}\3${DLM}\4${DLM}\1/p")
I2C_LIST=$(grep -hR -e "static\ I2CPCIDeviceDetector" . | sed -e "s/^.*\(\".*\"\), \(.*\), \([0-9ABCDEFx]*\), \([0-9ABCDEFx]*\), \([0-9ABCDEFx]*\), \([0-9ABCDEFx]*\),.*;$/\2${DLM}\3${DLM}\4${DLM}\5${DLM}\6${DLM}\1/p")
DUMMY_LIST=$(grep -hR -e DUMMY_DEVICE_DETECTOR\( ${CONTROLLER_PATH} | sed -e "s/^.*\(\".*\"\), \(.*\), \([0-9ABCDEFx]*\), \([0-9ABCDEFx]*\) ).*/\2${DLM}\3${DLM}\4${DLM}\1/p")
printf %s\n%s "$HID_LIST" "$I2C_LIST" > "device.list"
printf "%s\n%s\n%s" "$HID_LIST" "$I2C_LIST" "$DUMMY_LIST" > "device.list"
## This is the list of RGBController.cpp classes including path
FILE_LIST=$(find ${CONTROLLER_PATH} | grep RGBController_ | grep cpp | sort)
echo -e $FILE_LIST > "file.list"
## Write the heading to the main file prior to iterating over the controller list
echo -e "# Supported Devices\n\n" > "$MAIN_FILE"
## Write quick links to each section heading in an unordered list
echo -e "- [Motherboards](#motherboards)" >> "$MAIN_FILE"
echo -e "- [RAM](#ram)" >> "$MAIN_FILE"
echo -e "- [Graphics Cards](#graphics-cards)" >> "$MAIN_FILE"
echo -e "- [Coolers](#coolers)" >> "$MAIN_FILE"
echo -e "- [LED Strips](#led-strips)" >> "$MAIN_FILE"
echo -e "- [Keyboards](#keyboards)" >> "$MAIN_FILE"
echo -e "- [Microphones](#microphones)" >> "$MAIN_FILE"
echo -e "- [Mice](#mice)" >> "$MAIN_FILE"
echo -e "- [Mouse Mats](#mouse-mats)" >> "$MAIN_FILE"
echo -e "- [Headsets](#headsets)" >> "$MAIN_FILE"
echo -e "- [Headset Stands](#headset-stands)" >> "$MAIN_FILE"
echo -e "- [Gamepads](#gamepads)" >> "$MAIN_FILE"
echo -e "- [Accessories](#Accessories)" >> "$MAIN_FILE"
echo -e "- [Lights](#lights)" >> "$MAIN_FILE"
echo -e "- [Speakers](#speakers)" >> "$MAIN_FILE"
echo -e "- [Virtual Devices](#virtual-devices)" >> "$MAIN_FILE"
echo -e "- [Storage](#storage)" >> "$MAIN_FILE"
echo -e "- [Cases](#cases)" >> "$MAIN_FILE"
echo -e "- [Other Devices](#other-devices)" >> "$MAIN_FILE"
echo -e "\n## Legend\n\n" >> "$MAIN_FILE"
echo -e "| Symbol | Meaning |" >> "$MAIN_FILE"
echo -e "| :---: | :--- |" >> "$MAIN_FILE"
echo -e "| ${WHITE_CHECK_MARK} | Fully supported by OpenRGB |" >> "$MAIN_FILE"
echo -e "| ${ROTATING_LIGHT} | Support is problematic<br/>See device page for details |" >> "$MAIN_FILE"
echo -e "| ${ROBOT} | Feature is automatic and can not be turned off |" >> "$MAIN_FILE"
echo -e "| ${TOOLS} | Partially supported by OpenRGB<br/>See device page for details |" >> "$MAIN_FILE"
echo -e "| ${NO_ENTRY} | Not currently supported by OpenRGB |" >> "$MAIN_FILE"
echo -e "| ${CROSS} | Not applicable for this device |" >> "$MAIN_FILE"
echo -e "${CSV_TABLE_HEAD}" > "${CSV_FILE}"
while read -r controller
@ -115,212 +76,57 @@ do
effects=${effects/${STRINGS[$i]}/${UNICODE[$i]}}
done
if [[ $name = *[![:blank:]]* ]]; then #Check that the name is not blank
case $save in
${CROSS})
save_title="Not supported by controller"
;;
${NO_ENTRY})
save_title="Not currently supported by OpenRGB"
;;
${ROBOT})
save_title="Controller saves automatically on every update"
;;
${WHITE_CHECK_MARK})
save_title="Saving is supported by this controller"
;;
esac
case $direct in
${CROSS})
direct_title="Not supported by controller"
;;
${NO_ENTRY})
direct_title="Not currently supported by OpenRGB"
;;
${ROTATING_LIGHT})
direct_title="Direct control is problematic (See device page for details)"
;;
${WHITE_CHECK_MARK})
direct_title="Direct control is supported for Software Effects"
;;
esac
case $effects in
${CROSS})
effects_title="Hardware effects are not supported by controller"
;;
${NO_ENTRY})
effects_title="Not currently supported by OpenRGB"
;;
${ROTATING_LIGHT})
effects_title="Hardware effects implementation is problematic"
;;
${TOOLS})
effects_title="Hardware effects are not fully implemented by controller (See device page for details)"
;;
${WHITE_CHECK_MARK})
effects_title="Hardware effects are supported"
;;
esac
link=$(echo -e ${name//[[:blank:]]/-} | sed -e 's/(/%28/' -e 's/)/%29/')
## Output this controllers entry into the main file's tables
current_controller='|['${name}']('${link}'.md)|'${type}'|<span title="'$save_title'">'${save}'</span>|<span title="'$direct_title'">'${direct}'</span>|<span title="'$effects_title'">'${effects}'</span>|\n'
## Add entry to all relevant categories listed in @category
while read -r category
do
case $category in
Motherboard)
motherboard+=$current_controller
;;
RAM)
ram+=$current_controller
;;
GPU)
gpu+=$current_controller
;;
Cooler)
cooler+=$current_controller
;;
LEDStrip)
ledstrip+=$current_controller
;;
Keyboard)
keyboard+=$current_controller
;;
Microphone)
microphone+=$current_controller
;;
Mouse)
mouse+=$current_controller
;;
Mousemat)
mousemat+=$current_controller
;;
Headset)
headset+=$current_controller
;;
HeadsetStand)
headset_stand+=$current_controller
;;
Gamepad)
gamepad+=$current_controller
;;
Accessory)
accessory+=$current_controller
;;
Light)
light+=$current_controller
;;
Speaker)
speaker+=$current_controller
;;
Virtual)
virtual+=$current_controller
;;
Storage)
storage+=$current_controller
;;
Case)
case+=$current_controller
;;
Dummy)
## Do nothing for the Dummy controller
;;
*)
unknown+=$current_controller
;;
esac
done <<< "$categories"
## Create a controller page and fill it with header details and the start of the device table
outfile=${name//[[:blank:]]/-}.md
echo -e "# ${name}\n\n ${comment}\n" >"$outfile"
echo -e "## Connection Type\n ${type}\n" >> "$outfile"
echo -e "## Saving\n ${save_title}\n" >> "$outfile"
echo -e "## Direct Mode\n ${direct_title}\n" >> "$outfile"
echo -e "## Hardware Effects\n ${effects_title}\n" >> "$outfile"
if [[ $categories = GPU ]]; then
echo -e "## Device List\n\n${GPU_DEVICE_TABLE_HEAD}${DEVICE_TABLE_ALIGN}" >> "$outfile"
else
echo -e "## Device List\n\n${USB_DEVICE_TABLE_HEAD}${DEVICE_TABLE_ALIGN}" >> "$outfile"
## Iterate over the comma seperated detector function list
while read -r detector
do
#Filter the list for all devices that use this detector
text=$(printf "%s\n%s\n%s" "$HID_LIST" "$I2C_LIST" "$DUMMY_LIST" | grep ${detector} | cut -d: -f 2- | sed -e 's/"//g')
if [[ -z ${text} ]]; then
echo "${detector} was not found in the list"
fi
## Iterate over the comma seperated detector function list
while read -r detector
#Replace the detector string with the list of devices
detectors=${detectors/${detector}/${text}}
vid=""
pid=""
svid=""
spid=""
device_name=""
while read -r device
do
#Filter the list for all devices that use this detector
text=$(printf "%s\n%s" "$HID_LIST" "$I2C_LIST" | grep ${detector} | cut -d: -f 2- | sed -e 's/"//g')
case $type in
USB)
IFS="${DLM}" read null vid pid device_name null <<< "${device}"
#Remove leading hex signifier from $vid and $pid
vid=${vid/0x/}
pid=${pid/0x/}
device_name=${device_name//[^[:alnum:][:punct:][:blank:]]/}
escaped_comment=$(LC_ALL=C sed 's/["]/""/g' <<<"$comment")
#Replace the detector string with the list of devices
detectors=${detectors/${detector}/${text}}
csv_row=$(printf '"%s","%s","%s","%s","%s","%s","","","%s","%s","%s","%s"\n' "${device_name//|/\\|}" "${categories//|/\\|}" "${type//|/\\|}" "${name//|/\\|}" "${vid/ /}" "${pid/ /}" "${save}" "${direct}" "${effects}" "${escaped_comment}")
;;
I2C | SMBus)
IFS="${DLM}" read null vid pid svid spid device_name null <<<"$device"
#Remove leading hex signifiers
vid=${vid/0x/}
pid=${pid/0x/}
svid=${svid/0x/}
spid=${spid/0x/}
device_name=${device_name//[^[:alnum:][:punct:][:blank:]]/}
escaped_comment=$(LC_ALL=C sed 's/["]/""/g' <<<"$comment")
vid=""
pid=""
svid=""
spid=""
device_name=""
csv_row=$(printf '"%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s"\n' "${device_name//|/\\|}" "${categories//|/\\|}" "${type//|/\\|}" "${name//|/\\|}" "${vid/ /}" "${pid/ /}" "${svid/ /}" "${spid/ /}" "${save}" "${direct}" "${effects}" "${escaped_comment}")
;;
*)
csv_row=""
;;
esac
while read -r device
do
case $type in
USB)
IFS="${DELIMITER}" read null vid pid device_name null <<< "${device}"
#Remove leading hex signifier from $vid and $pid
vid=${vid/0x/}
pid=${pid/0x/}
device_name=${device_name//[^[:alnum:][:punct:][:blank:]]/}
escaped_comment=$(LC_ALL=C sed 's/["]/""/g' <<<"$comment")
csv_row=$(printf '"%s","%s","%s","%s","%s","%s","","","%s","%s","%s","%s"\n' "${device_name//|/\\|}" "${categories//|/\\|}" "${type//|/\\|}" "${name//|/\\|}" "${vid/ /}" "${pid/ /}" "${save}" "${direct}" "${effects}" "${escaped_comment}")
table_row=$(printf '| `%s` | `%s` | %s |' "${vid/ /}" "${pid/ /}" "${device_name//|/\\|}")
;;
I2C | SMBus)
IFS="${DELIMITER}" read null vid pid svid spid device_name null <<<"$device"
#Remove leading hex signifiers
vid=${vid/0x/}
pid=${pid/0x/}
svid=${svid/0x/}
spid=${spid/0x/}
device_name=${device_name//[^[:alnum:][:punct:][:blank:]]/}
escaped_comment=$(LC_ALL=C sed 's/["]/""/g' <<<"$comment")
csv_row=$(printf '"%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s","%s"\n' "${device_name//|/\\|}" "${categories//|/\\|}" "${type//|/\\|}" "${name//|/\\|}" "${vid/ /}" "${pid/ /}" "${svid/ /}" "${spid/ /}" "${save}" "${direct}" "${effects}" "${escaped_comment}")
table_row=$(printf '| `%s:%s` | `%s:%s` | %s |' "${vid/ /}" "${pid/ /}" "${svid/ /}" "${spid/ /}" "${device_name//|/\\|}")
;;
*)
table_row=""
;;
esac
if [[ $table_row = *[![:blank:]]* ]]; then
echo -e "$table_row" >>"$outfile"
echo -e "$csv_row" >>"$CSV_FILE"
fi
done <<< "$text"
done <<< "$detectors"
fi
if [[ $csv_row = *[![:blank:]]* ]]; then
echo -e "$csv_row" >>"$CSV_FILE"
fi
done <<< "$text"
done <<< "$detectors"
done <<< "$FILE_LIST"
printf "\n## Motherboards\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${motherboard}| sort)">> "$MAIN_FILE"
printf "\n## RAM\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${ram}| sort)">> "$MAIN_FILE"
printf "\n## Graphics Cards\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${gpu}| sort)" >> "$MAIN_FILE"
printf "\n## Coolers\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${cooler}| sort)" >> "$MAIN_FILE"
printf "\n## LED Strips\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${ledstrip}| sort)" >> "$MAIN_FILE"
printf "\n## Keyboards\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${keyboard}| sort)" >> "$MAIN_FILE"
printf "\n## Microphones\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${microphone}| sort)" >> "$MAIN_FILE"
printf "\n## Mice\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${mouse}| sort)" >> "$MAIN_FILE"
printf "\n## Mouse Mats\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${mousemat}| sort)" >> "$MAIN_FILE"
printf "\n## Headsets\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${headset}| sort)" >> "$MAIN_FILE"
printf "\n## Headset Stands\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${headset_stand}| sort)" >> "$MAIN_FILE"
printf "\n## Gamepads\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${gamepad}| sort)" >> "$MAIN_FILE"
printf "\n## Accessories\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${accessory}| sort)" >> "$MAIN_FILE"
printf "\n## Lights\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${light}| sort)" >> "$MAIN_FILE"
printf "\n## Speakers\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${speaker}| sort)" >> "$MAIN_FILE"
printf "\n## Virtual Devices\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${virtual}| sort)" >> "$MAIN_FILE"
printf "\n## Storage\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${storage}| sort)" >> "$MAIN_FILE"
printf "\n## Cases\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${case}| sort)" >> "$MAIN_FILE"
printf "\n## Other Devices\n${DATA_TABLE_HEAD}${DATA_TABLE_ALIGN}%s\n" "$(echo -e ${unknown}| sort)" >> "$MAIN_FILE"