Compare commits
	
		
			8 Commits
		
	
	
		
			8c2d553dfb
			...
			b8c79955a8
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| b8c79955a8 | |||
| 44240aa7bf | |||
| 6bc523b2a8 | |||
| 97cdd7fad1 | |||
| ec62eeee1e | |||
| 7b166caf84 | |||
| 62a7cd1b9c | |||
| 7e047c0c09 | 
@@ -73,6 +73,38 @@
 | 
				
			|||||||
        <input class="form-control" type="text" placeholder="%SYSTEM_STATUS%" readonly>
 | 
					        <input class="form-control" type="text" placeholder="%SYSTEM_STATUS%" readonly>
 | 
				
			||||||
        </p>
 | 
					        </p>
 | 
				
			||||||
        <!-- Div Group current Mode -->
 | 
					        <!-- Div Group current Mode -->
 | 
				
			||||||
 | 
					        <!-- Div Group Faction Points -->
 | 
				
			||||||
 | 
					        <hr />
 | 
				
			||||||
 | 
					        <p>
 | 
				
			||||||
 | 
					        <h4>aktueller Punktestand</h4>
 | 
				
			||||||
 | 
					        <div class="table-responsive">
 | 
				
			||||||
 | 
					          <table class="table table-borderless table-dark">
 | 
				
			||||||
 | 
					            <thead>
 | 
				
			||||||
 | 
					              <tr>
 | 
				
			||||||
 | 
					                <th class="text-center" scope="col">%NAME_FAC_1%</th>
 | 
				
			||||||
 | 
					                <th class="text-center" scope="col">%NAME_FAC_2%</th>
 | 
				
			||||||
 | 
					                <th class="text-center" scope="col">%NAME_FAC_3%</th>
 | 
				
			||||||
 | 
					              </tr>
 | 
				
			||||||
 | 
					            </thead>
 | 
				
			||||||
 | 
					            <tbody>
 | 
				
			||||||
 | 
					              <tr>
 | 
				
			||||||
 | 
					                <td class="mx-auto"><img src="static/img/logo_fac1.png" class="rounded mx-auto img-fluid d-block"
 | 
				
			||||||
 | 
					                    alt="..."></td>
 | 
				
			||||||
 | 
					                <td class="mx-auto"><img src="static/img/logo_fac2.png" class="rounded mx-auto img-fluid d-block"
 | 
				
			||||||
 | 
					                    alt="..."></td>
 | 
				
			||||||
 | 
					                <td class="mx-auto"><img src="static/img/logo_fac3.png" class="rounded mx-auto img-fluid d-block"
 | 
				
			||||||
 | 
					                    alt="..."></td>
 | 
				
			||||||
 | 
					              </tr>
 | 
				
			||||||
 | 
					              <tr>
 | 
				
			||||||
 | 
					                <td class="text-center">%POINTS_FAC_1%</td>
 | 
				
			||||||
 | 
					                <td class="text-center">%POINTS_FAC_2%</td>
 | 
				
			||||||
 | 
					                <td class="text-center">%POINTS_FAC_3%</td>
 | 
				
			||||||
 | 
					              </tr>
 | 
				
			||||||
 | 
					            </tbody>
 | 
				
			||||||
 | 
					          </table>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        </p>
 | 
				
			||||||
 | 
					        <!-- Div GroupFaction Points -->
 | 
				
			||||||
        <!-- Div Group DTC Table -->
 | 
					        <!-- Div Group DTC Table -->
 | 
				
			||||||
        <div %SHOW_DTC_TABLE%>
 | 
					        <div %SHOW_DTC_TABLE%>
 | 
				
			||||||
          <hr />
 | 
					          <hr />
 | 
				
			||||||
@@ -98,6 +130,19 @@
 | 
				
			|||||||
      <!-- Div Tab Maintenance -->
 | 
					      <!-- Div Tab Maintenance -->
 | 
				
			||||||
      <div id="tab_maintenance" class="tab-pane fade" role="tabpanel">
 | 
					      <div id="tab_maintenance" class="tab-pane fade" role="tabpanel">
 | 
				
			||||||
        <h3>Wartung</h3>
 | 
					        <h3>Wartung</h3>
 | 
				
			||||||
 | 
					        <!-- Div Group Reset Timers -->
 | 
				
			||||||
 | 
					        <hr />
 | 
				
			||||||
 | 
					        <p>
 | 
				
			||||||
 | 
					        <h4>Punkte zurücksetzen</h4>
 | 
				
			||||||
 | 
					        <form action="post.htm" method="POST" class="form-horizontal">
 | 
				
			||||||
 | 
					          <div class="form-group row">
 | 
				
			||||||
 | 
					            <div class="col text-center">
 | 
				
			||||||
 | 
					              <button name="resetpoints" type="submit" class="btn btn-outline-primary">Reset</button>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </form>
 | 
				
			||||||
 | 
					        </p>
 | 
				
			||||||
 | 
					        <!-- Div Group Reset Timers  -->
 | 
				
			||||||
        <!-- Div Group EEPROM formatting -->
 | 
					        <!-- Div Group EEPROM formatting -->
 | 
				
			||||||
        <hr />
 | 
					        <hr />
 | 
				
			||||||
        <p>
 | 
					        <p>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@
 | 
				
			|||||||
    --white: #fff;
 | 
					    --white: #fff;
 | 
				
			||||||
    --gray: #6c757d;
 | 
					    --gray: #6c757d;
 | 
				
			||||||
    --gray-dark: #343a40;
 | 
					    --gray-dark: #343a40;
 | 
				
			||||||
    --primary: #FF550B;
 | 
					    --primary: #bb1515;
 | 
				
			||||||
    --secondary: #303030;
 | 
					    --secondary: #303030;
 | 
				
			||||||
    --success: #015668;
 | 
					    --success: #015668;
 | 
				
			||||||
    --info: #0F81C7;
 | 
					    --info: #0F81C7;
 | 
				
			||||||
@@ -1450,8 +1450,8 @@ fieldset:disabled a.btn {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.btn-primary {
 | 
					.btn-primary {
 | 
				
			||||||
    color: #fff;
 | 
					    color: #fff;
 | 
				
			||||||
    background-color: #ff550b;
 | 
					    background-color: #bb1515;
 | 
				
			||||||
    border-color: #ff550b;
 | 
					    border-color: #bb1515;
 | 
				
			||||||
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075)
 | 
					    box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1469,8 +1469,8 @@ fieldset:disabled a.btn {
 | 
				
			|||||||
.btn-primary.disabled,
 | 
					.btn-primary.disabled,
 | 
				
			||||||
.btn-primary:disabled {
 | 
					.btn-primary:disabled {
 | 
				
			||||||
    color: #fff;
 | 
					    color: #fff;
 | 
				
			||||||
    background-color: #ff550b;
 | 
					    background-color: #bb1515;
 | 
				
			||||||
    border-color: #ff550b
 | 
					    border-color: #bb1515
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.btn-primary:not(:disabled):not(.disabled).active,
 | 
					.btn-primary:not(:disabled):not(.disabled).active,
 | 
				
			||||||
@@ -1761,16 +1761,16 @@ fieldset:disabled a.btn {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.btn-outline-primary {
 | 
					.btn-outline-primary {
 | 
				
			||||||
    color: #ff550b;
 | 
					    color: #bb1515;
 | 
				
			||||||
    background-color: transparent;
 | 
					    background-color: transparent;
 | 
				
			||||||
    background-image: none;
 | 
					    background-image: none;
 | 
				
			||||||
    border-color: #ff550b
 | 
					    border-color: #bb1515
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.btn-outline-primary:hover {
 | 
					.btn-outline-primary:hover {
 | 
				
			||||||
    color: #fff;
 | 
					    color: #fff;
 | 
				
			||||||
    background-color: #ff550b;
 | 
					    background-color: #bb1515;
 | 
				
			||||||
    border-color: #ff550b
 | 
					    border-color: #bb1515
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.btn-outline-primary.focus,
 | 
					.btn-outline-primary.focus,
 | 
				
			||||||
@@ -1780,7 +1780,7 @@ fieldset:disabled a.btn {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.btn-outline-primary.disabled,
 | 
					.btn-outline-primary.disabled,
 | 
				
			||||||
.btn-outline-primary:disabled {
 | 
					.btn-outline-primary:disabled {
 | 
				
			||||||
    color: #ff550b;
 | 
					    color: #bb1515;
 | 
				
			||||||
    background-color: transparent
 | 
					    background-color: transparent
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1788,8 +1788,8 @@ fieldset:disabled a.btn {
 | 
				
			|||||||
.btn-outline-primary:not(:disabled):not(.disabled):active,
 | 
					.btn-outline-primary:not(:disabled):not(.disabled):active,
 | 
				
			||||||
.show>.btn-outline-primary.dropdown-toggle {
 | 
					.show>.btn-outline-primary.dropdown-toggle {
 | 
				
			||||||
    color: #fff;
 | 
					    color: #fff;
 | 
				
			||||||
    background-color: #ff550b;
 | 
					    background-color: #bb1515;
 | 
				
			||||||
    border-color: #ff550b
 | 
					    border-color: #bb1515
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.btn-outline-primary:not(:disabled):not(.disabled).active:focus,
 | 
					.btn-outline-primary:not(:disabled):not(.disabled).active:focus,
 | 
				
			||||||
@@ -2335,7 +2335,7 @@ input[type=submit].btn-block {
 | 
				
			|||||||
.dropdown-item:active {
 | 
					.dropdown-item:active {
 | 
				
			||||||
    color: #fff;
 | 
					    color: #fff;
 | 
				
			||||||
    text-decoration: none;
 | 
					    text-decoration: none;
 | 
				
			||||||
    background-color: #ff550b
 | 
					    background-color: #bb1515
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.dropdown-item.disabled,
 | 
					.dropdown-item.disabled,
 | 
				
			||||||
@@ -2661,7 +2661,7 @@ input[type=submit].btn-block {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.custom-control-input:checked~.custom-control-label::before {
 | 
					.custom-control-input:checked~.custom-control-label::before {
 | 
				
			||||||
    color: #fff;
 | 
					    color: #fff;
 | 
				
			||||||
    background-color: #ff550b;
 | 
					    background-color: #bb1515;
 | 
				
			||||||
    box-shadow: none
 | 
					    box-shadow: none
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2720,7 +2720,7 @@ input[type=submit].btn-block {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.custom-checkbox .custom-control-input:checked~.custom-control-label::before {
 | 
					.custom-checkbox .custom-control-input:checked~.custom-control-label::before {
 | 
				
			||||||
    background-color: #ff550b
 | 
					    background-color: #bb1515
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.custom-checkbox .custom-control-input:checked~.custom-control-label::after {
 | 
					.custom-checkbox .custom-control-input:checked~.custom-control-label::after {
 | 
				
			||||||
@@ -2728,7 +2728,7 @@ input[type=submit].btn-block {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before {
 | 
					.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before {
 | 
				
			||||||
    background-color: #ff550b;
 | 
					    background-color: #bb1515;
 | 
				
			||||||
    box-shadow: none
 | 
					    box-shadow: none
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2749,7 +2749,7 @@ input[type=submit].btn-block {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.custom-radio .custom-control-input:checked~.custom-control-label::before {
 | 
					.custom-radio .custom-control-input:checked~.custom-control-label::before {
 | 
				
			||||||
    background-color: #ff550b
 | 
					    background-color: #bb1515
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.custom-radio .custom-control-input:checked~.custom-control-label::after {
 | 
					.custom-radio .custom-control-input:checked~.custom-control-label::after {
 | 
				
			||||||
@@ -2898,7 +2898,7 @@ input[type=submit].btn-block {
 | 
				
			|||||||
    width: 1rem;
 | 
					    width: 1rem;
 | 
				
			||||||
    height: 1rem;
 | 
					    height: 1rem;
 | 
				
			||||||
    margin-top: -.25rem;
 | 
					    margin-top: -.25rem;
 | 
				
			||||||
    background-color: #ff550b;
 | 
					    background-color: #bb1515;
 | 
				
			||||||
    border: 0;
 | 
					    border: 0;
 | 
				
			||||||
    border-radius: 1rem;
 | 
					    border-radius: 1rem;
 | 
				
			||||||
    box-shadow: 0 .1rem .25rem rgba(0, 0, 0, .1);
 | 
					    box-shadow: 0 .1rem .25rem rgba(0, 0, 0, .1);
 | 
				
			||||||
@@ -2928,7 +2928,7 @@ input[type=submit].btn-block {
 | 
				
			|||||||
.custom-range::-moz-range-thumb {
 | 
					.custom-range::-moz-range-thumb {
 | 
				
			||||||
    width: 1rem;
 | 
					    width: 1rem;
 | 
				
			||||||
    height: 1rem;
 | 
					    height: 1rem;
 | 
				
			||||||
    background-color: #ff550b;
 | 
					    background-color: #bb1515;
 | 
				
			||||||
    border: 0;
 | 
					    border: 0;
 | 
				
			||||||
    border-radius: 1rem;
 | 
					    border-radius: 1rem;
 | 
				
			||||||
    box-shadow: 0 .1rem .25rem rgba(0, 0, 0, .1);
 | 
					    box-shadow: 0 .1rem .25rem rgba(0, 0, 0, .1);
 | 
				
			||||||
@@ -2958,7 +2958,7 @@ input[type=submit].btn-block {
 | 
				
			|||||||
.custom-range::-ms-thumb {
 | 
					.custom-range::-ms-thumb {
 | 
				
			||||||
    width: 1rem;
 | 
					    width: 1rem;
 | 
				
			||||||
    height: 1rem;
 | 
					    height: 1rem;
 | 
				
			||||||
    background-color: #ff550b;
 | 
					    background-color: #bb1515;
 | 
				
			||||||
    border: 0;
 | 
					    border: 0;
 | 
				
			||||||
    border-radius: 1rem;
 | 
					    border-radius: 1rem;
 | 
				
			||||||
    box-shadow: 0 .1rem .25rem rgba(0, 0, 0, .1);
 | 
					    box-shadow: 0 .1rem .25rem rgba(0, 0, 0, .1);
 | 
				
			||||||
@@ -3063,7 +3063,7 @@ input[type=submit].btn-block {
 | 
				
			|||||||
.nav-pills .nav-link.active,
 | 
					.nav-pills .nav-link.active,
 | 
				
			||||||
.nav-pills .show>.nav-link {
 | 
					.nav-pills .show>.nav-link {
 | 
				
			||||||
    color: #fff;
 | 
					    color: #fff;
 | 
				
			||||||
    background-color: #ff550b
 | 
					    background-color: #bb1515
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.nav-fill .nav-item {
 | 
					.nav-fill .nav-item {
 | 
				
			||||||
@@ -3905,7 +3905,7 @@ input[type=submit].btn-block {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
.badge-primary {
 | 
					.badge-primary {
 | 
				
			||||||
    color: #fff;
 | 
					    color: #fff;
 | 
				
			||||||
    background-color: #ff550b
 | 
					    background-color: #bb1515
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.badge-primary[href]:focus,
 | 
					.badge-primary[href]:focus,
 | 
				
			||||||
@@ -4185,7 +4185,7 @@ input[type=submit].btn-block {
 | 
				
			|||||||
    color: #6c757d;
 | 
					    color: #6c757d;
 | 
				
			||||||
    text-align: center;
 | 
					    text-align: center;
 | 
				
			||||||
    white-space: nowrap;
 | 
					    white-space: nowrap;
 | 
				
			||||||
    background-color: #ff550b;
 | 
					    background-color: #bb1515;
 | 
				
			||||||
    transition: width .6s ease
 | 
					    transition: width .6s ease
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -5184,7 +5184,7 @@ button.close {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.bg-primary {
 | 
					.bg-primary {
 | 
				
			||||||
    background-color: #ff550b !important
 | 
					    background-color: #bb1515 !important
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
a.bg-primary:focus,
 | 
					a.bg-primary:focus,
 | 
				
			||||||
@@ -5320,7 +5320,7 @@ button.bg-dark:hover {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.border-primary {
 | 
					.border-primary {
 | 
				
			||||||
    border-color: #ff550b !important
 | 
					    border-color: #bb1515 !important
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.border-secondary {
 | 
					.border-secondary {
 | 
				
			||||||
@@ -8234,7 +8234,7 @@ button.bg-dark:hover {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.text-primary {
 | 
					.text-primary {
 | 
				
			||||||
    color: #ff550b !important
 | 
					    color: #bb1515 !important
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
a.text-primary:focus,
 | 
					a.text-primary:focus,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@
 | 
				
			|||||||
#define HOST_NAME "AirsoftTimer_%08X"
 | 
					#define HOST_NAME "AirsoftTimer_%08X"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define SHUTDOWN_DELAY_MS 5000
 | 
					#define SHUTDOWN_DELAY_MS 5000
 | 
				
			||||||
#define RESETABLE_AFTER_STARTUP_MS 30000
 | 
					#define STARTUP_DELAY_MS 20000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define GPIO_LORA_TX D3
 | 
					#define GPIO_LORA_TX D3
 | 
				
			||||||
#define GPIO_LORA_RX D4
 | 
					#define GPIO_LORA_RX D4
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@
 | 
				
			|||||||
#include "dtc.h"
 | 
					#include "dtc.h"
 | 
				
			||||||
#include "common.h"
 | 
					#include "common.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define EEPROM_SIZE_BYTES I2C_DEVICESIZE_24LC01
 | 
					#define EEPROM_SIZE_BYTES I2C_DEVICESIZE_24LC64
 | 
				
			||||||
#define EEPROM_ENDURANCE 1000000
 | 
					#define EEPROM_ENDURANCE 1000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef enum
 | 
					typedef enum
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,6 +11,13 @@ typedef enum eSystem_Status
 | 
				
			|||||||
  sysStat_Shutdown
 | 
					  sysStat_Shutdown
 | 
				
			||||||
} tSystem_Status;
 | 
					} tSystem_Status;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const char sSystem_Status_txt[][9] = {
 | 
				
			||||||
 | 
					    "Startup",
 | 
				
			||||||
 | 
					    "Normal",
 | 
				
			||||||
 | 
					    "Error",
 | 
				
			||||||
 | 
					    "Shutdown"
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef enum eEERequest
 | 
					typedef enum eEERequest
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  EE_IDLE,
 | 
					  EE_IDLE,
 | 
				
			||||||
@@ -31,8 +38,6 @@ typedef struct Globals_s
 | 
				
			|||||||
  char DeviceName_ID[43];
 | 
					  char DeviceName_ID[43];
 | 
				
			||||||
  char FlashVersion[10];
 | 
					  char FlashVersion[10];
 | 
				
			||||||
  tSystem_Status systemStatus = sysStat_Startup;
 | 
					  tSystem_Status systemStatus = sysStat_Startup;
 | 
				
			||||||
  tSystem_Status resumeStatus = sysStat_Startup;
 | 
					 | 
				
			||||||
  char systemStatustxt[16] = "";
 | 
					 | 
				
			||||||
  eEERequest requestEEAction = EE_IDLE;
 | 
					  eEERequest requestEEAction = EE_IDLE;
 | 
				
			||||||
  uint16_t eePersistanceAdress;
 | 
					  uint16_t eePersistanceAdress;
 | 
				
			||||||
  bool hasDTC;
 | 
					  bool hasDTC;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,20 +2,27 @@
 | 
				
			|||||||
#define _SANITYCHECK_H_
 | 
					#define _SANITYCHECK_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef ADMIN_PASSWORD
 | 
					#ifndef ADMIN_PASSWORD
 | 
				
			||||||
#error "You need to define ADMIN_PASSWORD for OTA-Update"
 | 
					    #error "You need to define ADMIN_PASSWORD for OTA-Update"
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#ifndef WIFI_PASSWORD
 | 
					 | 
				
			||||||
#error "You must define an WIFI_PASSWORD for OTA-Update"
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#ifndef WIFI_SSID
 | 
					 | 
				
			||||||
#error "You must define an WIFI_SSID for OTA-Update"
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#ifndef WIFI_AP_SSID
 | 
					 | 
				
			||||||
#warning "No WIFI_AP_SSID defined. Using DeviceName"
 | 
					 | 
				
			||||||
#define WIFI_AP_SSID DEVICE_NAME
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#ifndef WIFI_AP_PASSWORD
 | 
					 | 
				
			||||||
#error "You must define an WIFI_AP_PASSWORD for Standalone AP-Mode"
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef WIFI_AP_SSID
 | 
				
			||||||
 | 
					    #warning "No WIFI_AP_SSID defined. Using DeviceName"
 | 
				
			||||||
 | 
					    #define WIFI_AP_SSID DEVICE_NAME
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef WIFI_AP_PASSWORD
 | 
				
			||||||
 | 
					    #error "You must define an WIFI_AP_PASSWORD for Standalone AP-Mode"
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifdef FEATURE_ENABLE_WIFI_CLIENT
 | 
				
			||||||
 | 
					    #ifndef WIFI_CLIENT_PASSWORD
 | 
				
			||||||
 | 
					        #error "You must define an WIFI_PASSWORD for OTA-Update"
 | 
				
			||||||
 | 
					    #endif
 | 
				
			||||||
 | 
					    #ifndef WIFI_CLIENT_SSID
 | 
				
			||||||
 | 
					        #error "You must define an WIFI_SSID for OTA-Update"
 | 
				
			||||||
 | 
					    #endif
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif //_SANITYCHECK_H_
 | 
					#endif //_SANITYCHECK_H_
 | 
				
			||||||
@@ -27,13 +27,13 @@ upload_speed = 921600
 | 
				
			|||||||
build_flags=
 | 
					build_flags=
 | 
				
			||||||
  !python git_rev_macro.py
 | 
					  !python git_rev_macro.py
 | 
				
			||||||
  -DATOMIC_FS_UPDATE
 | 
					  -DATOMIC_FS_UPDATE
 | 
				
			||||||
  ;-DFEATURE_ENABLE_WIFI_CLIENT
 | 
					  -DFEATURE_ENABLE_WIFI_CLIENT
 | 
				
			||||||
  ;-DFEATURE_ENABLE_LORA
 | 
					  ;-DFEATURE_ENABLE_LORA
 | 
				
			||||||
  ;-DCAPTIVE
 | 
					  ;-DCAPTIVE
 | 
				
			||||||
  -DWIFI_AP_IP_GW=10,0,0,1
 | 
					  -DWIFI_AP_IP_GW=10,0,0,1
 | 
				
			||||||
  -DADMIN_PASSWORD=${wifi_cred.admin_password}
 | 
					  -DADMIN_PASSWORD=${wifi_cred.admin_password}
 | 
				
			||||||
  -DWIFI_SSID=${wifi_cred.wifi_ssid}
 | 
					  -DWIFI_CLIENT_SSID=${wifi_cred.wifi_client_ssid}
 | 
				
			||||||
  -DWIFI_PASSWORD=${wifi_cred.wifi_password}
 | 
					  -DWIFI_CLIENT_PASSWORD=${wifi_cred.wifi_client_password}
 | 
				
			||||||
  -DWIFI_AP_SSID=${wifi_cred.wifi_ap_ssid}
 | 
					  -DWIFI_AP_SSID=${wifi_cred.wifi_ap_ssid}
 | 
				
			||||||
  -DWIFI_AP_PASSWORD=${wifi_cred.wifi_ap_password}
 | 
					  -DWIFI_AP_PASSWORD=${wifi_cred.wifi_ap_password}
 | 
				
			||||||
  -DDEVICE_NAME='"Dark Emergency Timer"'
 | 
					  -DDEVICE_NAME='"Dark Emergency Timer"'
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,7 +33,7 @@ void Debug_Process()
 | 
				
			|||||||
        CMD_OVERFLOW
 | 
					        CMD_OVERFLOW
 | 
				
			||||||
    } InputProcessed_t;
 | 
					    } InputProcessed_t;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    static int inputCnt = 0;
 | 
					    static unsigned int inputCnt = 0;
 | 
				
			||||||
    static char inputBuffer[32];
 | 
					    static char inputBuffer[32];
 | 
				
			||||||
    InputProcessed_t InputProcessed = IDLE;
 | 
					    InputProcessed_t InputProcessed = IDLE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -204,8 +204,6 @@ void Debug_dumpConfig()
 | 
				
			|||||||
void Debug_dumpGlobals()
 | 
					void Debug_dumpGlobals()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    Debug_pushMessage("systemStatus: %d\n", globals.systemStatus);
 | 
					    Debug_pushMessage("systemStatus: %d\n", globals.systemStatus);
 | 
				
			||||||
    Debug_pushMessage("resumeStatus: %d\n", globals.resumeStatus);
 | 
					 | 
				
			||||||
    Debug_pushMessage("systemStatustxt: %s\n", globals.systemStatustxt);
 | 
					 | 
				
			||||||
    Debug_pushMessage("battery_level: %d\n", globals.battery_level);
 | 
					    Debug_pushMessage("battery_level: %d\n", globals.battery_level);
 | 
				
			||||||
    Debug_pushMessage("loadvoltage_mV: %d\n", globals.loadvoltage_mV);
 | 
					    Debug_pushMessage("loadvoltage_mV: %d\n", globals.loadvoltage_mV);
 | 
				
			||||||
    Debug_pushMessage("requestEEAction: %d\n", globals.requestEEAction);
 | 
					    Debug_pushMessage("requestEEAction: %d\n", globals.requestEEAction);
 | 
				
			||||||
@@ -266,7 +264,7 @@ void Debug_ShowDTCs()
 | 
				
			|||||||
    char buff_timestamp[16]; // Format: DD-hh:mm:ss:xxx
 | 
					    char buff_timestamp[16]; // Format: DD-hh:mm:ss:xxx
 | 
				
			||||||
    char buff_active[9];
 | 
					    char buff_active[9];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    Debug_pushMessage("\n      timestamp | DTC-Nr. |   status | severity\n");
 | 
					    Debug_pushMessage("\n      timestamp | DTC-Nr. |   status | severity | debugVal\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (uint32_t i = 0; i < MAX_DTC_STORAGE; i++)
 | 
					    for (uint32_t i = 0; i < MAX_DTC_STORAGE; i++)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -286,7 +284,7 @@ void Debug_ShowDTCs()
 | 
				
			|||||||
            else
 | 
					            else
 | 
				
			||||||
                strcpy(buff_active, "none");
 | 
					                strcpy(buff_active, "none");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Debug_pushMessage("%s   %7d   %8s   %8d\n", buff_timestamp, DTCStorage[i].Number, buff_active, DTCStorage[i].severity);
 | 
					            Debug_pushMessage("%s   %7d   %8s   %8d   %8d\n", buff_timestamp, DTCStorage[i].Number, buff_active, DTCStorage[i].severity, DTCStorage[i].debugVal);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,6 +5,5 @@ Globals_t globals;
 | 
				
			|||||||
void initGlobals()
 | 
					void initGlobals()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  globals.systemStatus = sysStat_Startup;
 | 
					  globals.systemStatus = sysStat_Startup;
 | 
				
			||||||
  globals.resumeStatus = sysStat_Normal;
 | 
					 | 
				
			||||||
  globals.requestEEAction = EE_IDLE;
 | 
					  globals.requestEEAction = EE_IDLE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -89,15 +89,16 @@ void setup()
 | 
				
			|||||||
	Serial.begin(115200);
 | 
						Serial.begin(115200);
 | 
				
			||||||
	Serial.setDebugOutput(false);
 | 
						Serial.setDebugOutput(false);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	Serial.println("\n\nDark Emergency Timer - by Hiabuto Defense");
 | 
						Serial.print("\n\n-------------------START-------------------\n");
 | 
				
			||||||
	Serial.println(globals.DeviceName);
 | 
						Serial.print(globals.DeviceName);
 | 
				
			||||||
 | 
						Serial.print("\nby Hiabuto Defense\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ClearAllDTC(); // Init DTC-Storage
 | 
						ClearAllDTC(); // Init DTC-Storage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	InitEEPROM();
 | 
						InitEEPROM();
 | 
				
			||||||
	GetConfig_EEPROM();
 | 
						GetConfig_EEPROM();
 | 
				
			||||||
	GetPersistence_EEPROM();
 | 
						GetPersistence_EEPROM();
 | 
				
			||||||
	Serial.print("\nEE-Init done");
 | 
						Serial.print("EE-Init done\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (i2c_io.begin())
 | 
						if (i2c_io.begin())
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
@@ -133,7 +134,7 @@ void setup()
 | 
				
			|||||||
#ifdef FEATURE_ENABLE_WIFI_CLIENT
 | 
					#ifdef FEATURE_ENABLE_WIFI_CLIENT
 | 
				
			||||||
	WiFi.mode(WIFI_STA);
 | 
						WiFi.mode(WIFI_STA);
 | 
				
			||||||
	WiFi.setHostname(globals.DeviceName);
 | 
						WiFi.setHostname(globals.DeviceName);
 | 
				
			||||||
	wifiMulti.addAP(QUOTE(WIFI_SSID_CLIENT), QUOTE(WIFI_PASSWORD_CLIENT));
 | 
						wifiMulti.addAP(QUOTE(WIFI_CLIENT_SSID), QUOTE(WIFI_CLIENT_PASSWORD));
 | 
				
			||||||
	tmrWiFiMaintainConnection.start();
 | 
						tmrWiFiMaintainConnection.start();
 | 
				
			||||||
	Serial.print("WiFi-Client Initialized\n");
 | 
						Serial.print("WiFi-Client Initialized\n");
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
@@ -235,8 +236,26 @@ void loop()
 | 
				
			|||||||
#ifdef FEATURE_ENABLE_WIFI_CLIENT
 | 
					#ifdef FEATURE_ENABLE_WIFI_CLIENT
 | 
				
			||||||
	tmrWiFiMaintainConnection.update();
 | 
						tmrWiFiMaintainConnection.update();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	if (globals.systemStatus == sysStat_Shutdown)
 | 
					
 | 
				
			||||||
 | 
						switch (globals.systemStatus)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						case sysStat_Error:
 | 
				
			||||||
 | 
							/* code */
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case sysStat_Normal:
 | 
				
			||||||
 | 
							/* code */
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case sysStat_Shutdown:
 | 
				
			||||||
		SystemShutdown();
 | 
							SystemShutdown();
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						case sysStat_Startup:
 | 
				
			||||||
 | 
							if (millis() > STARTUP_DELAY_MS)
 | 
				
			||||||
 | 
								globals.systemStatus = sysStat_Normal;
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	yield();
 | 
						yield();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -564,7 +583,7 @@ void ProcessKeyCombos(bool *btnState)
 | 
				
			|||||||
		else if (keyCount_Fac2 == 4 && keyCount_Fac3 == 0)
 | 
							else if (keyCount_Fac2 == 4 && keyCount_Fac3 == 0)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Serial.printf("KeyCombo: Reset Timer\n");
 | 
								Serial.printf("KeyCombo: Reset Timer\n");
 | 
				
			||||||
			if (millis() < RESETABLE_AFTER_STARTUP_MS)
 | 
								if (globals.systemStatus == sysStat_Startup)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				OverrideDisplay("RST ", 5000);
 | 
									OverrideDisplay("RST ", 5000);
 | 
				
			||||||
				PersistenceData.faction_1_timer = 0;
 | 
									PersistenceData.faction_1_timer = 0;
 | 
				
			||||||
@@ -576,7 +595,7 @@ void ProcessKeyCombos(bool *btnState)
 | 
				
			|||||||
			else
 | 
								else
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				OverrideDisplay("ERR ", 5000);
 | 
									OverrideDisplay("ERR ", 5000);
 | 
				
			||||||
				Serial.printf("ERROR: only %d seconds after Startup!\n", RESETABLE_AFTER_STARTUP_MS / 1000);
 | 
									Serial.printf("ERROR: only %d seconds after Startup!\n", STARTUP_DELAY_MS / 1000);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -66,7 +66,7 @@ String processor(const String &var)
 | 
				
			|||||||
  if (var == "HOSTNAME")
 | 
					  if (var == "HOSTNAME")
 | 
				
			||||||
    return String(globals.DeviceName);
 | 
					    return String(globals.DeviceName);
 | 
				
			||||||
  if (var == "SYSTEM_STATUS")
 | 
					  if (var == "SYSTEM_STATUS")
 | 
				
			||||||
    return String(globals.systemStatustxt);
 | 
					    return String(sSystem_Status_txt[globals.systemStatus]);
 | 
				
			||||||
  if (var == "SW_VERSION")
 | 
					  if (var == "SW_VERSION")
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    char buffer[6];
 | 
					    char buffer[6];
 | 
				
			||||||
@@ -239,6 +239,14 @@ void WebserverPOST_Callback(AsyncWebServerRequest *request)
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
      globals.systemStatus = sysStat_Shutdown;
 | 
					      globals.systemStatus = sysStat_Shutdown;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    if (p->name() == "resetpoints")
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      PersistenceData.faction_1_timer = 0;
 | 
				
			||||||
 | 
					      PersistenceData.faction_2_timer = 0;
 | 
				
			||||||
 | 
					      PersistenceData.faction_3_timer = 0;
 | 
				
			||||||
 | 
					      PersistenceData.activeFaction = NONE;
 | 
				
			||||||
 | 
					      globals.requestEEAction == EE_PDS_SAVE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    // end: POST Form Maintenance
 | 
					    // end: POST Form Maintenance
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // begin: POST Form Settings
 | 
					    // begin: POST Form Settings
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user