Compare commits

..

15 Commits

Author SHA1 Message Date
Sébastien
fdd34779e6 fix offline again-release 2022-12-02 16:26:11 -05:00
github-actions
76dd27116f Update prebuilt objects [skip actions] 2022-12-02 20:34:32 +00:00
Sebastien L
77f486e56f fix offline icons - release 2022-12-02 15:31:33 -05:00
github-actions
403623d4d6 Update prebuilt objects [skip actions] 2022-11-30 19:50:45 +00:00
Sebastien L
60b163676a Fix protocol generation - release 2022-11-30 14:46:51 -05:00
github-actions
f49c3f7206 Update prebuilt objects [skip actions] 2022-11-30 05:54:53 +00:00
philippe44
3fade26793 build protobuf 2022-11-29 16:49:35 -08:00
philippe44
856303d8f1 Add GPIO config for Infrared on SqueezeAMP 3.20 2022-11-29 13:58:09 -08:00
philippe44
b20c8306fa fix a few spotify key bugs and remove BTDM 2022-11-28 21:09:27 -08:00
Sebastien L
877f16181b Activate new workflow 2022-11-28 13:57:31 -05:00
Sebastien
2cba6972ff update build_tools [skip actions] 2022-11-28 13:45:10 -05:00
Sebastien
fbd9516667 one more update to web push - [skip actions] 2022-11-28 10:46:15 -05:00
Sebastien
646a220fd0 Merge branch 'master-v4.3' of https://github.com/sle118/squeezelite-esp32 into master-v4.3 2022-11-28 10:45:04 -05:00
Sebastien
962dbf89c8 Add more auth methods for build - [skip actions] 2022-11-28 10:44:59 -05:00
github-actions
3a658f3ba2 Update prebuilt objects [skip actions] 2022-11-28 15:22:22 +00:00
42 changed files with 150 additions and 101 deletions

View File

@@ -1,5 +1,8 @@
name: Manually executable test for ESP-IDF v4.3.1
name: Platform Build
on:
push:
branches:
- '**4.3'
workflow_dispatch:
inputs:
ui_build:
@@ -10,9 +13,6 @@ on:
description: 'Force a Release build. When not forced, the system will check for release word in the last commit message to trigger a release'
required: true
type: boolean
# push:
# branches:
# - '**4.3'
jobs:
bootstrap:

View File

@@ -15,7 +15,7 @@ ENV GCC_TOOLS_BASE=/opt/esp/tools/xtensa-esp32-elf/esp-2021r2-8.4.0/xtensa-esp32
# To run the image interactive (windows):
# docker run --rm -v %cd%:/project -w /project -it sle118/squeezelite-esp32-idfv43
# To run the image interactive (linux):
# docker run --rm -v `pwd`:/project -w /project -it sle118/squeezelite-esp32-idfv4-master
# docker run --rm -v `pwd`:/project -w /project -it sle118/squeezelite-esp32-idfv43
# to build the web app inside of the interactive session
# pushd components/wifi-manager/webapp/ && npm install && npm run-script build && popd
#
@@ -90,7 +90,7 @@ RUN : \
&& pip show pygit2 \
&& python --version \
&& pip --version \
&& pip3 install protobuf grpcio-tools \
&& pip install protobuf grpcio-tools \
&& rm -rf $IDF_TOOLS_PATH/dist \
&& :

View File

@@ -259,7 +259,7 @@ CONFIG_CSPOT_SINK=y
# Various I/O
#
CONFIG_I2C_CONFIG=""
CONFIG_SET_GPIO=""
CONFIG_SET_GPIO="0=ir"
CONFIG_ROTARY_ENCODER=""
# end of Various I/O

View File

@@ -83,15 +83,13 @@ static void bt_app_task_handler(void *arg)
esp_bt_controller_mem_release(ESP_BT_MODE_BLE);
esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
if(esp_bt_controller_get_status() == ESP_BT_CONTROLLER_STATUS_IDLE ){
if (esp_bt_controller_get_status() == ESP_BT_CONTROLLER_STATUS_IDLE ) {
if ((err = esp_bt_controller_init(&bt_cfg)) != ESP_OK) {
ESP_LOGE(TAG, "%s initialize controller failed: %s\n", __func__, esp_err_to_name(err));
goto exit;
}
if ((err = esp_bt_controller_enable(ESP_BT_MODE_BTDM)) != ESP_OK) {
if ((err = esp_bt_controller_enable(ESP_BT_MODE_CLASSIC_BT)) != ESP_OK) {
ESP_LOGE(TAG, "%s enable controller failed: %s\n", __func__, esp_err_to_name(err));
goto exit;
}

View File

@@ -415,7 +415,7 @@ bool create_rotary(void *id, int A, int B, int SW, int long_press, rotary_handle
// create companion button if rotary has a switch
if (SW != -1) button_create(id, SW, BUTTON_LOW, true, 0, rotary_button_handler, long_press, -1);
ESP_LOGI(TAG, "Creating rotary encoder A:%d B:%d, SW:%d", A, B, SW);
ESP_LOGI(TAG, "Created rotary encoder A:%d B:%d, SW:%d", A, B, SW);
return true;
}
@@ -432,5 +432,7 @@ bool create_infrared(int gpio, infrared_handler handler) {
common_task_init();
xRingbufferAddToQueueSetRead(infrared.rb, common_queue_set);
ESP_LOGI(TAG, "Created infrared receiver using GPIO %u", gpio);
return (infrared.rb != NULL);
}

View File

@@ -162,6 +162,8 @@ ESP_LOGI(TAG, "Getting Spotify event %d ", (int) event.eventType);
}
});
// need to make sure mercuryManager is running otherwise we'll loop and destroy instances
while (!mercuryManager->isRunning) vTaskDelay(pdMS_TO_TICKS(25));
mercuryManager->reconnectedCallback = []() {
return spircController->subscribe();
};

View File

@@ -36,7 +36,7 @@ if(UNIX AND NOT APPLE)
endif()
# Build protobuf code
if(0)
if(1)
set(NANOPB_OPTIONS "-I${CMAKE_CURRENT_SOURCE_DIR}")
file(GLOB PROTOS protobuf/*.proto)
nanopb_generate_cpp(PROTO_SRCS PROTO_HDRS RELPATH ${CMAKE_CURRENT_SOURCE_DIR} ${PROTOS})

View File

@@ -10,5 +10,4 @@
# --plugin= on the command line.
MYPATH=$(dirname "$0")
echo "Executing $MYPATH/nanopb_generator.py "
exec "$MYPATH/nanopb_generator.py" --protoc-plugin

View File

@@ -179,6 +179,7 @@ size_t PlainConnection::writeBlock(const std::vector<uint8_t> &data)
break;
default:
if (retries++ > 4) throw std::runtime_error("Error in write");
goto WRITE;
}
}
idx += n;

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -19,6 +19,10 @@ declare function getStatus(): {};
declare function getStatus(): {};
declare function getStatus(): {};
declare function getStatus(): {};
declare function getStatus(): {};
declare function getStatus(): {};
declare function getStatus(): {};
declare function getStatus(): {};
declare function getRadioButton(entry: any): string;
declare function getRadioButton(entry: any): string;
declare function getRadioButton(entry: any): string;
@@ -40,6 +44,14 @@ declare function getRadioButton(entry: any): string;
declare function getRadioButton(entry: any): string;
declare function getRadioButton(entry: any): string;
declare function getRadioButton(entry: any): string;
declare function getRadioButton(entry: any): string;
declare function getRadioButton(entry: any): string;
declare function getRadioButton(entry: any): string;
declare function getRadioButton(entry: any): string;
declare function pushStatus(): void;
declare function pushStatus(): void;
declare function pushStatus(): void;
declare function pushStatus(): void;
declare function pushStatus(): void;
declare function pushStatus(): void;
declare function pushStatus(): void;

View File

@@ -44,19 +44,19 @@
</div>
<div class="info navbar-right" style="display: inline-flex;">
<span class="recovery_element material-icons " style="color:orange; display: none">system_update_alt</span>
<span id="battery" class="material-icons" style="fill:white; display: none">battery_full</span>
<span id="o_jack" class="material-icons" style="fill:white; display: none">headphones</span>
<span id="s_airplay" class="material-icons" style="fill:white; display: none">airplay</span>
<span class="recovery_element material-icons " style="color:orange; display: none" aria-label="🛑" >system_update_alt</span>
<span id="battery" class="material-icons" style="fill:white; display: none" aria-label="🔋" >battery_full</span>
<span id="o_jack" class="material-icons" style="fill:white; display: none" aria-label="🎧">headphones</span>
<span id="s_airplay" class="material-icons" style="fill:white; display: none" aria-label="🍎">airplay</span>
<em id="s_cspot" class="fab fa-spotify" style="fill:white; display: inline"></em>
<span data-bs-toggle="tooltip" id="o_type" data-bs-placement="top" title="">
<span id="o_bt" class="material-icons" style="fill:white; display: none">bluetooth</span>
<span id="o_spdif" class="material-icons" style="fill:white; display: none">graphic_eq</span>
<span id="o_i2s" class="material-icons" style="fill:white; display: none">speaker</span>
<span id="o_bt" class="material-icons" style="fill:white; display: none" aria-label="">bluetooth</span>
<span id="o_spdif" class="material-icons" style="fill:white; display: none" aria-label="">graphic_eq</span>
<span id="o_i2s" class="material-icons" style="fill:white; display: none" aria-label="🔈">speaker</span>
</span>
<span id="ethernet" class="material-icons if_eth" style="fill:white; display: none">cable</span>
<span id="ethernet" class="material-icons if_eth" style="fill:white; display: none" aria-label="ETH">cable</span>
<span id="wifiStsIcon" class="material-icons if_wifi"
style="fill:white; display: none">signal_wifi_statusbar_4_bar</span>
style="fill:white; display: none" aria-label=""></span>
</div>
</header>
@@ -374,22 +374,6 @@
</div>
</div>
</div>
<div class="card-body if_wifi" style="display: none">
<table class="table table-hover">
<thead>
<tr>
<th scope="col">Joined</th>
<th scope="col">Name</th>
<th scope="col">Signal</th>
<th scope="col">Security</th>
</tr>
</thead>
<tbody id="wifiTable"></tbody>
</table>
<button type="button" id="updateAP" class="btn btn-info btn-sm">Scan</button>
</div>
</div>

View File

@@ -77,22 +77,22 @@ const nvsTypes = {
NVS_TYPE_ANY: 0xff /*! < Must be last */,
};
const btIcons = {
bt_playing: 'media_bluetooth_on',
bt_disconnected: 'media_bluetooth_off',
bt_neutral: 'bluetooth',
bt_connecting: 'bluetooth_searching',
bt_connected: 'bluetooth_connected',
bt_disabled: 'bluetooth_disabled',
play_arrow: 'play_circle_filled',
pause: 'pause_circle',
stop: 'stop_circle',
'': '',
bt_playing: {'label':'','icon': 'media_bluetooth_on'},
bt_disconnected: {'label':'','icon': 'media_bluetooth_off'},
bt_neutral: {'label':'','icon': 'bluetooth'},
bt_connecting: {'label':'','icon': 'bluetooth_searching'},
bt_connected: {'label':'','icon': 'bluetooth_connected'},
bt_disabled: {'label':'','icon': 'bluetooth_disabled'},
play_arrow: {'label':'','icon': 'play_circle_filled'},
pause: {'label':'','icon': 'pause_circle'},
stop: {'label':'','icon': 'stop_circle'},
'': {'label':'','icon':''}
};
const batIcons = [
{ icon: "battery_0_bar", ranges: [{ f: 5.8, t: 6.8 }, { f: 8.8, t: 10.2 }] },
{ icon: "battery_2_bar", ranges: [{ f: 6.8, t: 7.4 }, { f: 10.2, t: 11.1 }] },
{ icon: "battery_3_bar", ranges: [{ f: 7.4, t: 7.5 }, { f: 11.1, t: 11.25 }] },
{ icon: "battery_4_bar", ranges: [{ f: 7.5, t: 7.8 }, { f: 11.25, t: 11.7 }] }
{ icon: "battery_0_bar", label:'▪', ranges: [{ f: 5.8, t: 6.8 }, { f: 8.8, t: 10.2 }] },
{ icon: "battery_2_bar", label:'▪▪', ranges: [{ f: 6.8, t: 7.4 }, { f: 10.2, t: 11.1 }] },
{ icon: "battery_3_bar", label:'▪▪▪', ranges: [{ f: 7.4, t: 7.5 }, { f: 11.1, t: 11.25 }] },
{ icon: "battery_4_bar", label:'▪▪▪▪', ranges: [{ f: 7.5, t: 7.8 }, { f: 11.25, t: 11.7 }] }
];
const btStateIcons = [
{ desc: 'Idle', sub: ['bt_neutral'] },
@@ -464,13 +464,19 @@ window.handleReboot = function (link) {
$('#reboot_nav').removeClass('active'); delayReboot(500, '', link);
}
}
function isConnected(){
return ConnectedTo.hasOwnProperty('ip') && ConnectedTo.ip!='0.0.0.0'&& ConnectedTo.ip!='';
}
function getIcon(icons){
return isConnected()?icons.icon:icons.label;
}
function handlebtstate(data) {
let icon = '';
let tt = '';
if (data.bt_status !== undefined && data.bt_sub_status !== undefined) {
const iconindex = btStateIcons[data.bt_status].sub[data.bt_sub_status];
if (iconindex) {
icon = btIcons[iconindex];
icon = btIcons[iconindex];
tt = btStateIcons[data.bt_status].desc;
} else {
icon = btIcons.bt_connected;
@@ -479,7 +485,7 @@ function handlebtstate(data) {
}
$('#o_type').attr('title', tt);
$('#o_bt').html(icon);
$('#o_bt').html(isConnected()?icon.label:icon.text);
}
function handleTemplateTypeRadio(outtype) {
$('#o_type').children('span').css({ display: 'none' });
@@ -857,7 +863,6 @@ window.handleConnect = function () {
$("*[class*='connecting']").hide();
$('#ssid-wait').text(ConnectingToSSID.ssid);
$('.connecting').show();
$.ajax({
url: '/connect.json',
dataType: 'text',
@@ -876,6 +881,10 @@ window.handleConnect = function () {
}
$(document).ready(function () {
$('.material-icons').each(function (_index, entry) {
entry.attributes['icon']=entry.textContent;
});
setIcons(true);
handleNVSVisible();
flashState.init();
$('#fw-url-input').on('input', function () {
@@ -1294,20 +1303,23 @@ window.setURL = function (button) {
function rssiToIcon(rssi) {
if (rssi >= -55) {
return `signal_wifi_statusbar_4_bar`;
return {'label':'****','icon':`signal_wifi_statusbar_4_bar`};
} else if (rssi >= -60) {
return `network_wifi_3_bar`;
return {'label':'***','icon':`network_wifi_3_bar`};
} else if (rssi >= -65) {
return `network_wifi_2_bar`;
return {'label':'**','icon':`network_wifi_2_bar`};
} else if (rssi >= -70) {
return `network_wifi_1_bar`;
return {'label':'*','icon':`network_wifi_1_bar`};
} else {
return `signal_wifi_statusbar_null`;
return {'label':'.','icon':`signal_wifi_statusbar_null`};
}
}
function refreshAP() {
if (ConnectedTo?.urc === connectReturnCode.ETH) return;
$.ajaxSetup({
timeout: 3000 //Time in milliseconds
});
$.getJSON('/scan.json', async function () {
await sleep(2000);
$.getJSON('/ap.json', function (data) {
@@ -1327,10 +1339,13 @@ function refreshAP() {
});
}
function formatAP(ssid, rssi, auth) {
const rssi_icon=rssiToIcon(rssi);
const auth_icon={label:auth == 0 ? '🔓' : '🔒',icon:auth == 0 ? 'no_encryption' : 'lock'};
return `<tr data-bs-toggle="modal" data-bs-target="#WifiConnectDialog"><td></td><td>${ssid}</td><td>
<span class="material-icons" style="fill:white; display: inline" >${rssiToIcon(rssi)}</span>
<span class="material-icons" style="fill:white; display: inline" aria-label="${rssi_icon.label}" icon="${rssi_icon.icon}" >${getIcon(rssi_icon)}</span>
</td><td>
<span class="material-icons">${(auth == 0 ? 'no_encryption' : 'lock')}</span>
<span class="material-icons" aria-label="${auth_icon.label}" icon="${auth_icon.icon}">${getIcon(auth_icon)}</span>
</td></tr>`;
}
function refreshAPHTML2(data) {
@@ -1411,6 +1426,9 @@ function getBTSinkOpt(name) {
return $(`${btSinkNamesOptSel} option:contains('${name}')`);
}
function getMessages() {
$.ajaxSetup({
timeout: messageInterval //Time in milliseconds
});
$.getJSON('/messages.json', async function (data) {
for (const msg of data) {
const msgAge = msg.current_time - msg.sent_time;
@@ -1627,7 +1645,13 @@ function handleWifiDialog(data) {
}
}
function setIcons(offline){
$('.material-icons').each(function (_index, entry) {
entry.textContent = entry.attributes[offline?'aria-label':'icon'].value;
});
}
function handleNetworkStatus(data) {
setIcons(!isConnected());
if (hasConnectionChanged(data) || !data.urc) {
ConnectedTo = data;
$(".if_eth").hide();
@@ -1658,16 +1682,18 @@ function batteryToIcon(voltage) {
for (const iconEntry of batIcons) {
for (const entryRanges of iconEntry.ranges) {
if (inRange(voltage, entryRanges.f, entryRanges.t)) {
return iconEntry.icon;
return { label: iconEntry.label, icon:iconEntry.icon};
}
}
}
return "battery_full";
return {label:'▪▪▪▪',icon:"battery_full"};
}
function checkStatus() {
$.ajaxSetup({
timeout: statusInterval //Time in milliseconds
});
$.getJSON('/status.json', function (data) {
handleRecoveryMode(data);
handleNVSVisible();
@@ -1691,7 +1717,10 @@ function checkStatus() {
$('span#flash-status').html('');
}
if (data.Voltage) {
$('#battery').html(`${batteryToIcon(data.Voltage)}`);
const bat_icon=batteryToIcon(data.Voltage);
$('#battery').html(`${getIcon(bat_icon)}`);
$('#battery').attr("aria-label",bat_icon.label);
$('#battery').attr("icon",bat_icon.icon);
$('#battery').show();
} else {
$('#battery').hide();
@@ -1835,6 +1864,9 @@ function getLongOps(data, name, longopts) {
return data.values[name] !== undefined ? data.values[name][longopts] : "";
}
function getCommands() {
$.ajaxSetup({
timeout: 7000 //Time in milliseconds
});
$.getJSON('/commands.json', function (data) {
console.log(data);
$('.orec').show();
@@ -1956,6 +1988,9 @@ function getCommands() {
}
function getConfig() {
$.ajaxSetup({
timeout: 7000 //Time in milliseconds
});
$.getJSON('/config.json', function (entries) {
$('#nvsTable tr').remove();
const data = (entries.config ? entries.config : entries);
@@ -2102,4 +2137,3 @@ function inRange(x, min, max) {
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

View File

@@ -1,5 +1,5 @@
target_add_binary_data( __idf_wifi-manager webapp/dist/css/index.7964a13ec910c36040b8.css.gz BINARY)
target_add_binary_data( __idf_wifi-manager webapp/dist/favicon-32x32.png BINARY)
target_add_binary_data( __idf_wifi-manager webapp/dist/index.html.gz BINARY)
target_add_binary_data( __idf_wifi-manager webapp/dist/js/index.3b7a54.bundle.js.gz BINARY)
target_add_binary_data( __idf_wifi-manager webapp/dist/js/node_vendors.3b7a54.bundle.js.gz BINARY)
target_add_binary_data( __idf_wifi-manager webapp/dist/js/index.9af6cc.bundle.js.gz BINARY)
target_add_binary_data( __idf_wifi-manager webapp/dist/js/node_vendors.9af6cc.bundle.js.gz BINARY)

View File

@@ -6,29 +6,29 @@ extern const uint8_t _favicon_32x32_png_start[] asm("_binary_favicon_32x32_png_s
extern const uint8_t _favicon_32x32_png_end[] asm("_binary_favicon_32x32_png_end");
extern const uint8_t _index_html_gz_start[] asm("_binary_index_html_gz_start");
extern const uint8_t _index_html_gz_end[] asm("_binary_index_html_gz_end");
extern const uint8_t _index_3b7a54_bundle_js_gz_start[] asm("_binary_index_3b7a54_bundle_js_gz_start");
extern const uint8_t _index_3b7a54_bundle_js_gz_end[] asm("_binary_index_3b7a54_bundle_js_gz_end");
extern const uint8_t _node_vendors_3b7a54_bundle_js_gz_start[] asm("_binary_node_vendors_3b7a54_bundle_js_gz_start");
extern const uint8_t _node_vendors_3b7a54_bundle_js_gz_end[] asm("_binary_node_vendors_3b7a54_bundle_js_gz_end");
extern const uint8_t _index_9af6cc_bundle_js_gz_start[] asm("_binary_index_9af6cc_bundle_js_gz_start");
extern const uint8_t _index_9af6cc_bundle_js_gz_end[] asm("_binary_index_9af6cc_bundle_js_gz_end");
extern const uint8_t _node_vendors_9af6cc_bundle_js_gz_start[] asm("_binary_node_vendors_9af6cc_bundle_js_gz_start");
extern const uint8_t _node_vendors_9af6cc_bundle_js_gz_end[] asm("_binary_node_vendors_9af6cc_bundle_js_gz_end");
const char * resource_lookups[] = {
"/css/index.7964a13ec910c36040b8.css.gz",
"/favicon-32x32.png",
"/index.html.gz",
"/js/index.3b7a54.bundle.js.gz",
"/js/node_vendors.3b7a54.bundle.js.gz",
"/js/index.9af6cc.bundle.js.gz",
"/js/node_vendors.9af6cc.bundle.js.gz",
""
};
const uint8_t * resource_map_start[] = {
_index_7964a13ec910c36040b8_css_gz_start,
_favicon_32x32_png_start,
_index_html_gz_start,
_index_3b7a54_bundle_js_gz_start,
_node_vendors_3b7a54_bundle_js_gz_start
_index_9af6cc_bundle_js_gz_start,
_node_vendors_9af6cc_bundle_js_gz_start
};
const uint8_t * resource_map_end[] = {
_index_7964a13ec910c36040b8_css_gz_end,
_favicon_32x32_png_end,
_index_html_gz_end,
_index_3b7a54_bundle_js_gz_end,
_node_vendors_3b7a54_bundle_js_gz_end
_index_9af6cc_bundle_js_gz_end,
_node_vendors_9af6cc_bundle_js_gz_end
};

View File

@@ -1,6 +1,6 @@
/***********************************
webpack_headers
dist/css/index.7964a13ec910c36040b8.css.gz,dist/favicon-32x32.png,dist/index.html.gz,dist/js/index.3b7a54.bundle.js.gz,dist/js/node_vendors.3b7a54.bundle.js.gz
dist/css/index.7964a13ec910c36040b8.css.gz,dist/favicon-32x32.png,dist/index.html.gz,dist/js/index.9af6cc.bundle.js.gz,dist/js/node_vendors.9af6cc.bundle.js.gz
***********************************/
#pragma once
#include <inttypes.h>

View File

@@ -15,9 +15,11 @@ from requests import Response
class Logger:
NEWLINE_CHAR = '\n'
with_crlf = False
@classmethod
def print_message(cls,message,prefix=''):
trimmed=re.sub(r'\n', r'%0A', message,flags=re.MULTILINE)
if not Logger.with_crlf:
trimmed=re.sub(r'\n', r'%0A', message,flags=re.MULTILINE)
print(f'{prefix}{trimmed}')
@classmethod
def debug(cls,message):
@@ -131,10 +133,16 @@ parser = argparse.ArgumentParser(
description='Handles some parts of the squeezelite-esp32 build process')
parser.add_argument('--cwd', type=str,
help='Working directory', default=os.getcwd())
parser.add_argument('--with_crlf', action='store_true',help='To prevent replacing cr/lf with hex representation')
parser.add_argument('--loglevel', type=str, choices={
'CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG', 'NOTSET'}, help='Logging level', default='INFO')
subparsers = parser.add_subparsers(dest='command', required=True)
parser_commits = subparsers.add_parser("list_commits",add_help=False,
description="Commits list",
help="Lists the last commits"
)
parser_dir = subparsers.add_parser("list_files",
add_help=False,
description="List Files parser",
@@ -208,14 +216,13 @@ parser_build_flags.add_argument(
parser_build_flags.add_argument(
'--ui_build', action='store_true', help='Include building the web UI')
def format_commit(commit):
# 463a9d8b7 Merge branch 'bugfix/ci_deploy_tags_v4.0' into 'release/v4.0' (2020-01-11T14:08:55+08:00)
dt = datetime.fromtimestamp(float(commit.author.time), timezone(
timedelta(minutes=commit.author.offset)))
timestr = dt.strftime('%c%z')
cmesg:str = commit.message.replace('\n', ' ')
cmesg = cmesg.replace('*','-')
#timestr = dt.strftime('%c%z')
timestr = dt.strftime('%F %R %Z')
cmesg:str = commit.message.replace('\n', ' ').replace('\r','').replace('*','-')
return f'{commit.short_id} {cmesg} ({timestr}) <{commit.author.name}>'.replace(' ', ' ', )
@@ -886,10 +893,10 @@ def push_if_change(repo: Repository, token: str, source_path: str, manif_json):
remote: Remote = repo.remotes['origin']
auth_methods = ['x-access-token','x-oauth-basic']
for method in auth_methods:
if push_with_method('x-access-token', token, remote, [reference]):
if push_with_method(method, token, remote, [reference]):
print(f'::notice Web installer updated for {format_artifact_from_manifest(manif_json)}')
return
raise Exception('Unable to push web installer.')
else:
print(f'WARNING: No change found. Skipping update')
@@ -946,6 +953,10 @@ def handle_list_files(args):
print(f'Content of {args.cwd}:')
print(Logger.NEWLINE_CHAR.join(get_file_list(args.cwd)))
def handle_commits(args):
set_workdir(args)
print(Releases.get_commit_list_descriptions())
parser_environment.set_defaults(func=handle_environment, cmd='environment')
parser_manifest.set_defaults(func=handle_manifest, cmd='manifest')
@@ -953,11 +964,13 @@ parser_pushinstaller.set_defaults(func=handle_pushinstaller, cmd='installer')
parser_show.set_defaults(func=handle_show, cmd='show')
parser_build_flags.set_defaults(func=handle_build_flags, cmd='build_flags')
parser_dir.set_defaults(func=handle_list_files, cmd='list_files')
parser_commits.set_defaults(func=handle_commits,cmd='list_commits')
def main():
exit_result_code = 0
args = parser.parse_args()
Logger.with_crlf = args.with_crlf
print(f'::group::{args.command}')
print(f'build_tools version : {tool_version}')
print(f'Processing command {args.command}')

View File

@@ -117,7 +117,7 @@ menu "Squeezelite-ESP32"
string
default "dc=27,data=19,clk=18" if TWATCH2020
default "mosi=15,miso=2,clk=14" if MUSE
default ""
default ""
config DISPLAY_CONFIG
string
default "SPI,driver=ST7789,width=240,height=240,cs=5,back=12,speed=16000000,HFlip,VFlip" if TWATCH2020
@@ -125,7 +125,7 @@ menu "Squeezelite-ESP32"
config ETH_CONFIG
string
default ""
# AGGREGATES - end
# AGGREGATES - end
config DAC_CONTROLSET
string
default "{ \"init\": [ {\"reg\":41, \"val\":128}, {\"reg\":18, \"val\":255} ], \"poweron\": [ {\"reg\":18, \"val\":64, \"mode\":\"or\"} ], \"poweroff\": [ {\"reg\":18, \"val\":191, \"mode\":\"and\"} ] }" if TWATCH2020
@@ -168,6 +168,9 @@ menu "Squeezelite-ESP32"
int
default 13 if SQUEEZEAMP
default -1
config SET_GPIO
string
default "0=ir" if SQUEEZEAMP
endmenu
menu "Audio settings"
@@ -342,14 +345,15 @@ menu "Squeezelite-ESP32"
data=<gpio>,clk=<gpio>[,d/c=<num>][,host=<0|1|2>]
config SET_GPIO
string "Special GPIO configuration"
default ""
help
Set parameters of shared GPIO with special values.
<gpio_1>=Vcc|GND|amp[:0|1]|jack[:0|1][,<gpio_n>=Vcc|GND|amp[:0|1]|jack[:0|1]]
<gpio_1>=Vcc|GND|amp[:0|1]|jack[:0|1][ir][spkfault[:0|1][,<gpio_n>=Vcc|GND|amp[:0|1]|jack[:0|1]]
'amp' => GPIO that is set when playback starts
'jack' => GPIO used for audio jack detection
'green', 'red' => GPIO for status LED
'[:0|1] means set the active value for that GPIO can be low or high
'spkfault' => GPIO used for speaker fault detection
'ir' => GPIO used for Infrared Receiver
[:0|1] means set the active value for that GPIO can be low or high
config ROTARY_ENCODER
string "Rotary Encoder configuration"
default ""

View File

@@ -262,7 +262,7 @@ CONFIG_AIRPLAY_PORT="5000"
# Various I/O
#
CONFIG_I2C_CONFIG=""
CONFIG_SET_GPIO=""
# CONFIG_SET_GPIO= is not set
CONFIG_ROTARY_ENCODER=""
# end of Various I/O

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
server_certs/rootca1.cer.22 Normal file

Binary file not shown.

BIN
server_certs/rootca1.cer.23 Normal file

Binary file not shown.

BIN
server_certs/rootca1.cer.24 Normal file

Binary file not shown.

BIN
server_certs/rootca1.cer.25 Normal file

Binary file not shown.