mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-27 01:48:38 +03:00
Compare commits
15 Commits
I2S-4MFlas
...
SqueezeAmp
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fdd34779e6 | ||
|
|
76dd27116f | ||
|
|
77f486e56f | ||
|
|
403623d4d6 | ||
|
|
60b163676a | ||
|
|
f49c3f7206 | ||
|
|
3fade26793 | ||
|
|
856303d8f1 | ||
|
|
b20c8306fa | ||
|
|
877f16181b | ||
|
|
2cba6972ff | ||
|
|
fbd9516667 | ||
|
|
646a220fd0 | ||
|
|
962dbf89c8 | ||
|
|
3a658f3ba2 |
@@ -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:
|
||||
@@ -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 \
|
||||
&& :
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
};
|
||||
|
||||
@@ -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})
|
||||
|
||||
1
components/spotify/cspot/bell/nanopb/generator/protoc-gen-nanopb
Normal file → Executable file
1
components/spotify/cspot/bell/nanopb/generator/protoc-gen-nanopb
Normal file → Executable 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
|
||||
|
||||
@@ -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
BIN
components/wifi-manager/webapp/dist/index.html.gz
vendored
BIN
components/wifi-manager/webapp/dist/index.html.gz
vendored
Binary file not shown.
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
2
components/wifi-manager/webapp/dist/js/index.9af6cc.bundle.js
vendored
Normal file
2
components/wifi-manager/webapp/dist/js/index.9af6cc.bundle.js
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
components/wifi-manager/webapp/dist/js/index.9af6cc.bundle.js.gz
vendored
Normal file
BIN
components/wifi-manager/webapp/dist/js/index.9af6cc.bundle.js.gz
vendored
Normal file
Binary file not shown.
1
components/wifi-manager/webapp/dist/js/index.9af6cc.bundle.js.map
vendored
Normal file
1
components/wifi-manager/webapp/dist/js/index.9af6cc.bundle.js.map
vendored
Normal file
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
2
components/wifi-manager/webapp/dist/js/node_vendors.9af6cc.bundle.js
vendored
Normal file
2
components/wifi-manager/webapp/dist/js/node_vendors.9af6cc.bundle.js
vendored
Normal file
File diff suppressed because one or more lines are too long
BIN
components/wifi-manager/webapp/dist/js/node_vendors.9af6cc.bundle.js.gz
vendored
Normal file
BIN
components/wifi-manager/webapp/dist/js/node_vendors.9af6cc.bundle.js.gz
vendored
Normal file
Binary file not shown.
1
components/wifi-manager/webapp/dist/js/node_vendors.9af6cc.bundle.js.map
vendored
Normal file
1
components/wifi-manager/webapp/dist/js/node_vendors.9af6cc.bundle.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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}')
|
||||
|
||||
@@ -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 ""
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
BIN
server_certs/DigiCertGlobalRootCA.crt.23
Normal file
BIN
server_certs/DigiCertGlobalRootCA.crt.23
Normal file
Binary file not shown.
BIN
server_certs/DigiCertGlobalRootCA.crt.24
Normal file
BIN
server_certs/DigiCertGlobalRootCA.crt.24
Normal file
Binary file not shown.
BIN
server_certs/DigiCertGlobalRootCA.crt.25
Normal file
BIN
server_certs/DigiCertGlobalRootCA.crt.25
Normal file
Binary file not shown.
BIN
server_certs/DigiCertGlobalRootCA.crt.26
Normal file
BIN
server_certs/DigiCertGlobalRootCA.crt.26
Normal file
Binary file not shown.
BIN
server_certs/rootca1.cer.22
Normal file
BIN
server_certs/rootca1.cer.22
Normal file
Binary file not shown.
BIN
server_certs/rootca1.cer.23
Normal file
BIN
server_certs/rootca1.cer.23
Normal file
Binary file not shown.
BIN
server_certs/rootca1.cer.24
Normal file
BIN
server_certs/rootca1.cer.24
Normal file
Binary file not shown.
BIN
server_certs/rootca1.cer.25
Normal file
BIN
server_certs/rootca1.cer.25
Normal file
Binary file not shown.
Reference in New Issue
Block a user