chore: initial commit of code. version 1.0.1
This commit is contained in:
parent
81c892a30d
commit
a6c6d16217
25
.dockerignore
Normal file
25
.dockerignore
Normal file
@ -0,0 +1,25 @@
|
||||
**/.classpath
|
||||
**/.dockerignore
|
||||
**/.env
|
||||
**/.git
|
||||
**/.gitignore
|
||||
**/.project
|
||||
**/.settings
|
||||
**/.toolstarget
|
||||
**/.vs
|
||||
**/.vscode
|
||||
**/*.*proj.user
|
||||
**/*.dbmdl
|
||||
**/*.jfm
|
||||
**/azds.yaml
|
||||
**/bin
|
||||
**/charts
|
||||
**/docker-compose*
|
||||
**/Dockerfile*
|
||||
**/node_modules
|
||||
**/npm-debug.log
|
||||
**/obj
|
||||
**/secrets.dev.yaml
|
||||
**/values.dev.yaml
|
||||
LICENSE
|
||||
README.md
|
||||
15
.gitignore
vendored
Normal file
15
.gitignore
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
/_ReSharper.Caches/**/*
|
||||
/.vs/**/*
|
||||
/ScoreboardApi/bin/**/*
|
||||
/ScoreboardApi/obj/**/*
|
||||
/displaytest/output/**/*
|
||||
/ScoreboardNumbers/output/**/*
|
||||
/WifiTest/output/**/*
|
||||
/scoreboardoutput/sketch/output/**/*
|
||||
/scoreboardoutput/core/**/*
|
||||
/scoreboardoutput/build_opt.h
|
||||
/scoreboardoutput/build.options.json
|
||||
/scoreboardoutput/compile_commands.json
|
||||
/scoreboardoutput/file_opts
|
||||
/scoreboardoutput/includes.cache
|
||||
/scoreboardoutput/libraries.cache
|
||||
299
HTML/Controller/controller.css
Normal file
299
HTML/Controller/controller.css
Normal file
@ -0,0 +1,299 @@
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* Set a background color */
|
||||
body {
|
||||
background-color: #b8b8ba;
|
||||
font-family: Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
.btn {
|
||||
width: -webkit-fill-available;
|
||||
}
|
||||
.col {
|
||||
width: 100%;
|
||||
} .scoreboard {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 800px;
|
||||
margin: 0 auto;
|
||||
background-color: #e0e0e0;
|
||||
color: #333;
|
||||
padding: 10px;
|
||||
border: 4px solid #800080;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
.timer-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
background-color: #fff;
|
||||
border: 4px solid #800080;
|
||||
border-radius: 50%;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.timer {
|
||||
font-size: 38px;
|
||||
color: #333;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.half-indicator {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
color: #800080;
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
}
|
||||
|
||||
.kickoff-indicator {
|
||||
font-size: 25px;
|
||||
font-weight: bold;
|
||||
color: #800080;
|
||||
margin-top:auto;
|
||||
margin-bottom:auto;
|
||||
}
|
||||
.finalscore-indicator {
|
||||
font-size: 25px;
|
||||
font-weight: bold;
|
||||
color: #800080;
|
||||
margin-top:auto;
|
||||
margin-bottom:auto;
|
||||
}
|
||||
|
||||
.border {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.team-details {
|
||||
font-size: 48px;
|
||||
color: white;
|
||||
background-color: #000;
|
||||
padding: 0px;
|
||||
text-align: center;
|
||||
max-height: 100px;
|
||||
border-radius: 0px 0px 30px 30px;
|
||||
}
|
||||
|
||||
.team {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border-radius: 10px 10px 10px 10px;
|
||||
background-color: dimgrey;
|
||||
}
|
||||
|
||||
.team-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.team-logo {
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.team-logo svg {
|
||||
max-width: 60px;
|
||||
max-height: 60px;
|
||||
background-color: #800080;
|
||||
padding: 5px;
|
||||
margin-right:auto;
|
||||
margin-left:auto;
|
||||
}
|
||||
|
||||
.team-name {
|
||||
font-weight: bold;
|
||||
font-size: 20px;
|
||||
color: white;
|
||||
margin-bottom: 5px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.team-score {
|
||||
font-size: 48px;
|
||||
color: white;
|
||||
background-color: #000;
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
max-height: 100px;
|
||||
border-radius: 0 0 10px 10px;
|
||||
}
|
||||
|
||||
.score-history {
|
||||
font-size: 14px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
/* Uckfield RFC's background color */
|
||||
#home-team {
|
||||
background-color: #ff0000;
|
||||
}
|
||||
|
||||
/* Away Team's background color */
|
||||
#away-team {
|
||||
background-color: #0000ff;
|
||||
}
|
||||
|
||||
/*
|
||||
eventList
|
||||
*/
|
||||
.timeline {
|
||||
position: relative;
|
||||
padding: 20px;
|
||||
width: 50%;
|
||||
margin-top: 10px;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.timeline-item {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 40px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
background-color: #f9f9f9;
|
||||
padding: 20px;
|
||||
position: relative;
|
||||
border-radius: 8px;
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
.timeline-content-match {
|
||||
background-color: rgb(69, 69, 69);
|
||||
color: white;
|
||||
min-width: 100px;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
padding-left: 30px;
|
||||
padding-right: 30px;
|
||||
position: relative;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
border-radius: 8px;
|
||||
border: 1px solid purple;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.match:first-child {
|
||||
margin-top: -20px;
|
||||
}
|
||||
|
||||
.match:last-child {
|
||||
margin-bottom: -20px;
|
||||
}
|
||||
|
||||
.score-panel {
|
||||
font-size: 20px;
|
||||
color: white;
|
||||
background-color: gray;
|
||||
padding: 5px 10px 5px 10px;
|
||||
position: absolute;
|
||||
left: 50.1%;
|
||||
border-radius: 8px;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.delete-btn {
|
||||
position: absolute;
|
||||
float: right;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
background-color: #f00;
|
||||
/* background-color: #ff6347; */
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 5px 10px;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.icon {
|
||||
position: absolute;
|
||||
left: 50.1%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
color: black;
|
||||
/* Set the color of the icon */
|
||||
z-index: 1;
|
||||
/* Ensure the icon appears above the panel */
|
||||
}
|
||||
|
||||
.yc {
|
||||
color: yellow;
|
||||
text-shadow: 0 0 5px #000;
|
||||
}
|
||||
|
||||
.rc {
|
||||
color: red;
|
||||
text-shadow: 0 0 5px #000;
|
||||
}
|
||||
|
||||
.away {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.timeline:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
border-left: 2px solid black;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1500px) {
|
||||
.timeline-item {
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
width: 40%;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 1499px) {
|
||||
.timeline {
|
||||
width: 80%;
|
||||
}
|
||||
.timeline-item {
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
width: 40%;
|
||||
}
|
||||
}
|
||||
|
||||
.noMatch {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.summary-team-label {
|
||||
margin-top: 15px;
|
||||
margin-bottom: 15px;
|
||||
font-size: 25px;
|
||||
}
|
||||
241
HTML/Controller/controller.html
Normal file
241
HTML/Controller/controller.html
Normal file
@ -0,0 +1,241 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<head>
|
||||
<link href="controller.css" rel="stylesheet" />
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css"
|
||||
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
|
||||
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css"
|
||||
integrity="5e2ESR8Ycmos6g3gAKr1Jvwye8sW4U1u/cAKulfVJnkakCcMqhOudbtPnvJ+nbv7" crossorigin="anonymous">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.1/knockout-latest.js"
|
||||
integrity="sha512-2AL/VEauKkZqQU9BHgnv48OhXcJPx9vdzxN1JrKDVc4FPU/MEE/BZ6d9l0mP7VmvLsjtYwqiYQpDskK9dG8KBA=="
|
||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"
|
||||
integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="
|
||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.min.js"
|
||||
integrity="sha384-BBtl+eGJRgqQAUMxJ7pMwbEyER4l1g+O15P+16Ep7Q9Q+zqX6gSbd85u4mG4QzX+"
|
||||
crossorigin="anonymous"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="alert alert-danger" role="alert" data-bind="text: disconnectedMessage(), hidden: isConnected"></div>
|
||||
<div class="container text-center">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
Match
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row gx-2">
|
||||
<!-- Make these conditionally visible
|
||||
|
||||
WaitingForStart = 1,
|
||||
FirstHalf = 2,
|
||||
HalfTime = 3,
|
||||
SecondHalf = 3,
|
||||
Finished = 4,
|
||||
TimeOff = 5
|
||||
<div class="col">
|
||||
<button type="button" class="btn btn-secondary btn-lg p-3">Start Match</button>
|
||||
</div>
|
||||
-->
|
||||
|
||||
<!-- ko if: gameState() === "WaitingForStart" || gameState() === "" -->
|
||||
<div class="col">
|
||||
<div class="card">
|
||||
<div class="card-body" data-bind="text: getMatchPendingMessage()">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: gameState() === "FirstHalf" || gameState() === 'SecondHalf' -->
|
||||
<div class="col">
|
||||
<button type="button" class="btn btn-secondary btn-lg p-3">Time Off</button>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: gameState() === "TimeOff"-->
|
||||
<div class="col">
|
||||
<button type="button" class="btn btn-secondary btn-lg p-3">Time On</button>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
|
||||
<!-- ko if: gameState() === "FirstHalf"-->
|
||||
<div class="col">
|
||||
<button type="button" class="btn btn-secondary btn-lg p-3">Half Time</button>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: gameState() === "HalfTime"-->
|
||||
<div class="col">
|
||||
<button type="button" class="btn btn-secondary btn-lg p-3">Start Second Half</button>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
|
||||
<!-- ko if: gameState() === "SecondHalf"-->
|
||||
<div class="col">
|
||||
<button type="button" class="btn btn-secondary btn-lg p-3">Finish Match</button>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
|
||||
<!-- ko if: gameState() === 'Finished' -->
|
||||
<div>Match has finished, no actions to perform.</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ko if: gameState() !== 'WaitingForStart' && gameState() !== 'Finished' -->
|
||||
<div class="row gx-7 mt-5">
|
||||
<div class="col">
|
||||
<div class="card">
|
||||
<div class="card-header" data-bind="text: homeTeamName">
|
||||
Home
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row gx-2">
|
||||
<div class="col">
|
||||
<button type="button" class="btn btn-secondary btn-lg p-3"
|
||||
data-bind="click: addTeamEvent.bind(this,'Home','Try'), enable: isConnected">Try</button>
|
||||
</div>
|
||||
<div class="col">
|
||||
<button type="button" class="btn btn-secondary btn-lg p-3"
|
||||
data-bind="click: addTeamEvent.bind(this,'Home','Conversion'), enable: isConnected">Conversion</button>
|
||||
</div>
|
||||
<div class="col">
|
||||
<button type="button" class="btn btn-secondary btn-lg p-3"
|
||||
data-bind="click: addTeamEvent.bind(this,'Home','Penalty'), enable: isConnected">Penalty</button>
|
||||
</div>
|
||||
<div class="col">
|
||||
<button type="button" class="btn btn-secondary btn-lg p-3"
|
||||
data-bind="click: addTeamEvent.bind(this,'Home','DropGoal'), enable: isConnected">Drop
|
||||
Goal</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-center mt-4 gx-4">
|
||||
<div class="col-2">
|
||||
<button type="button" class="btn btn-warning btn-lg p-4 mr-4"
|
||||
data-bind="click: addTeamEvent.bind(this,'Home','YellowCard'), enable: isConnected"></button>
|
||||
</div>
|
||||
<div class="col-2">
|
||||
<button type="button" class=" btn btn-danger btn-lg p-4 ml-4"
|
||||
data-bind="click: addTeamEvent.bind(this,'Home','RedCard'), enable: isConnected"></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col">
|
||||
<div class="card">
|
||||
<div class="card-header" data-bind="text: awayTeamName">
|
||||
Away
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row gx-2">
|
||||
<div class="col">
|
||||
<button type="button" class="btn btn-secondary btn-lg p-3"
|
||||
data-bind="click: addTeamEvent.bind(this,'Away','Try'), enable: isConnected">Try</button>
|
||||
</div>
|
||||
<div class="col">
|
||||
<button type="button" class="btn btn-secondary btn-lg p-3"
|
||||
data-bind="click: addTeamEvent.bind(this,'Away','Conversion'), enable: isConnected">Conversion</button>
|
||||
</div>
|
||||
<div class="col">
|
||||
<button type="button" class="btn btn-secondary btn-lg p-3"
|
||||
data-bind="click: addTeamEvent.bind(this,'Away','Penalty'), enable: isConnected">Penalty</button>
|
||||
</div>
|
||||
<div class="col">
|
||||
<button type="button" class="btn btn-secondary btn-lg p-3"
|
||||
data-bind="click: addTeamEvent.bind(this,'Away','DropGoal'), enable: isConnected">Drop
|
||||
Goal</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row justify-content-center mt-4 gx-4">
|
||||
<div class="col-2">
|
||||
<button type="button" class="btn btn-warning btn-lg p-4 mr-4"
|
||||
data-bind="click: addTeamEvent.bind(this,'Away','YellowCard'), enable: isConnected"></button>
|
||||
</div>
|
||||
<div class="col-2">
|
||||
<button type="button" class=" btn btn-danger btn-lg p-4 ml-4"
|
||||
data-bind="click: addTeamEvent.bind(this,'Away','RedCard'), enable: isConnected"></button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
|
||||
<div data-bind="if: gameOn" class="mt-5">
|
||||
<div class="scoreboard">
|
||||
<div class="border">
|
||||
<div class="team" data-bind="style:{'background-color': homeTeamColor}">
|
||||
<div class="team-info">
|
||||
<div class="team-name summary-team-label" data-bind="text: homeTeamName">Home</div>
|
||||
</div>
|
||||
<div class="team-details">
|
||||
<div class="team-score" data-bind="text: homeTeamPoints">0</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="timer-container">
|
||||
<!-- ko if: gameState() !== 'WaitingForStart' && gameState() !== 'Finished' && gameState() !== 'HalfTime'-->
|
||||
<div class="timer" id="match-timer" data-bind="text: calculateRemainingTime"></div>
|
||||
<div class="half-indicator" data-bind="text: halfIndicator"></div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: gameState() === 'WaitingForStart' -->
|
||||
<div class="kickoff-indicator" data-bind="text: halfIndicator"></div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: gameState() === 'Finished' -->
|
||||
<div class="finalscore-indicator">Full Time</div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: gameState() === 'HalfTime' -->
|
||||
<div class="kickoff-indicator">Half Time</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<div class="team" data-bind="style:{'background-color': awayTeamColor}">
|
||||
<div class="team-info">
|
||||
<div class="team-name summary-team-label" data-bind="text: awayTeamName">Away</div>
|
||||
</div>
|
||||
<div class="team-details">
|
||||
<div class="team-score" data-bind="text: awayTeamPoints">0</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ko if: eventList().length === 0 && gameState() !== 'WaitingForStart' -->
|
||||
<div class="noMatch">No events available yet.</div>
|
||||
<!-- /ko-->
|
||||
<!-- ko if: eventList().length > 0 -->
|
||||
<div class="timeline" data-bind="foreach: eventList">
|
||||
<!-- ko if: category === 'Match' -->
|
||||
<div class="timeline-item match">
|
||||
<div class="timeline-content-match">
|
||||
<p data-bind="text: $parent.getEventMessage($data)"></p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<!-- ko ifnot: category === 'Match' -->
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-content"
|
||||
data-bind="css: { away: category ==='Away' }, style: { 'border-color': category === 'Home' ? $parent.homeTeamColor() : $parent.awayTeamColor() }">
|
||||
<button class="delete-btn" data-bind="click: () => $parent.deleteEvent(id)">
|
||||
<i class="fa fa-trash"></i>
|
||||
</button>
|
||||
<p data-bind="text: $parent.getEventMessage($data)"></p>
|
||||
</div>
|
||||
<!-- ko if: eventType !== 'YellowCard' && eventType !== 'RedCard' -->
|
||||
<span class="score-panel" data-bind="text: $parent.getScoreAtEvent($data.id)"></span>
|
||||
<!-- /ko -->
|
||||
|
||||
<!-- ko if: eventType === 'YellowCard' || eventType === 'RedCard' -->
|
||||
<i class="fa fa-circle icon"
|
||||
data-bind="css:{ yc: eventType ==='YellowCard', rc: eventType ==='RedCard' }"></i>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<!-- /ko-->
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
|
||||
<script src="controller.js" type="text/javascript"></script>
|
||||
</body>
|
||||
291
HTML/Controller/controller.js
Normal file
291
HTML/Controller/controller.js
Normal file
@ -0,0 +1,291 @@
|
||||
function Controller(apikey, url) {
|
||||
const apiKey = apikey; // Replace with your actual API key
|
||||
const apiUrl = url ?? 'https://localhost:7005/api/Score'; // Replace with your API endpoint URL
|
||||
console.log(apiKey);
|
||||
var self = this;
|
||||
//API poll variables
|
||||
var INTERVAL = 5000;
|
||||
var timeout = null;
|
||||
var currentReq = null;
|
||||
this.isConnected = ko.observable(false);
|
||||
|
||||
//knockout variables
|
||||
this.gameState = ko.observable("");
|
||||
this.half = ko.observable("Pre");
|
||||
this.kickOffTime = ko.observable(new Date());
|
||||
|
||||
this.gameOn = ko.observable(false);
|
||||
this.eventList = ko.observableArray([]);
|
||||
|
||||
this.homeTeamName = ko.observable("Uckfield RFC");
|
||||
this.homeTeamColor = ko.observable("#ff0000");
|
||||
this.homeTeamPoints = ko.observable(0);
|
||||
this.homeTeamLogo = ko.observable("");
|
||||
|
||||
this.awayTeamName = ko.observable("Away team");
|
||||
this.awayTeamColor = ko.observable("#0000ff");
|
||||
this.awayTeamPoints = ko.observable(0);
|
||||
this.awayTeamLogo = ko.observable("");
|
||||
|
||||
self.calculateRemainingTime = ko.computed(function () {
|
||||
if (self.half() === 'Pre') { return "---"; }
|
||||
if (self.gameState() === 'HalfTime') { return '40:00'; }
|
||||
if (self.gameState() === 'Finished') { return '80:00'; }
|
||||
return calc();
|
||||
});
|
||||
var isSecondHalfEvent = function (matchEvts) {
|
||||
return !!matchEvts.find(e => e.eventType === 'SecondHalfStart');
|
||||
};
|
||||
var calc = function (eventId = 0, minsOnly = false) {
|
||||
var matchEvts = self.eventList().filter(x => (x.category === 'Match' && x.id <= eventId) || x.id === eventId);
|
||||
var initialTime = self.kickOffTime(); //IF FIRST HALF, WORK OUT FOR IF SECOND HALF
|
||||
var halfStart = self.kickOffTime();
|
||||
var offsetMins = 0;
|
||||
|
||||
if ((eventId != 0 && isSecondHalfEvent(matchEvts))
|
||||
|| (eventId == 0 && self.half() === 'Second')) {
|
||||
var secondHalfEvent = self.eventList().find(x => x.eventType === 'SecondHalfStart');
|
||||
if (!secondHalfEvent) {
|
||||
throw 'Invalid System Event State, Second Half without Second Half Event';
|
||||
}
|
||||
halfStart = new Date(secondHalfEvent.timeStamp);
|
||||
initialTime = new Date(secondHalfEvent.timeStamp);
|
||||
offsetMins = 40;
|
||||
matchEvts = self.eventList().filter(x => x.id >= secondHalfEvent.id && (x.category === 'Match' || x.id === eventId))
|
||||
}
|
||||
|
||||
if (!matchEvts || matchEvts.length <= 1) {
|
||||
const diff = calcDiff(initialTime, new Date());
|
||||
return `${String(diff.mins + offsetMins).padStart(2, "0")}:${String(diff.secs).padStart(2, "0")}`
|
||||
}
|
||||
|
||||
var totalMins = offsetMins;
|
||||
var totalSecs = 0;
|
||||
|
||||
matchEvts.forEach((evt, idx, src) => {
|
||||
if (eventId === 0 || evt.id <= eventId) {
|
||||
if (evt.eventType === 'TimeOff') {
|
||||
var t = calcDiff(initialTime, new Date(evt.timeStamp));
|
||||
totalMins += t.mins;
|
||||
totalSecs += t.secs;
|
||||
}
|
||||
if (evt.eventType === 'TimeOn') {
|
||||
initialTime = new Date(evt.timeStamp);
|
||||
if (idx === (src.length - 1)) {
|
||||
var t = calcDiff(new Date(evt.timeStamp), new Date());
|
||||
totalMins += t.mins;
|
||||
totalSecs += t.secs;
|
||||
}
|
||||
}
|
||||
if (eventId != 0 && eventId === evt.id) {
|
||||
var t = calcDiff(initialTime, new Date(evt.timeStamp));
|
||||
totalMins += t.mins;
|
||||
totalSecs += t.secs;
|
||||
}
|
||||
}
|
||||
});
|
||||
if (totalSecs >= 60) {
|
||||
totalMins += 1;
|
||||
totalSecs = totalSecs % 60;
|
||||
}
|
||||
if (minsOnly) {
|
||||
return `${String(totalMins).padStart(2, "0")}`;
|
||||
}
|
||||
return `${String(totalMins).padStart(2, "0")}:${String(totalSecs).padStart(2, "0")}`;
|
||||
}
|
||||
|
||||
self.halfIndicator = ko.computed(function () {
|
||||
const gameState = self.gameState();
|
||||
if (gameState === "WaitingForStart") {
|
||||
var dt = self.kickOffTime();
|
||||
return `${String(dt.getHours()).padStart(2, "0")}:${String(dt.getMinutes()).padStart(2, "0")} KO`;
|
||||
}
|
||||
if (gameState === "FirstHalf") {
|
||||
return "1st Half";
|
||||
}
|
||||
if (gameState === "SecondHalf") {
|
||||
return "2nd Half";
|
||||
}
|
||||
if (gameState === "TimeOff") {
|
||||
return "Time Off";
|
||||
}
|
||||
});
|
||||
|
||||
var fetchNewData = function () {
|
||||
currentReq = fetch(apiUrl, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'x-api-key': apiKey
|
||||
},
|
||||
});
|
||||
|
||||
currentReq
|
||||
.then(processResponse)
|
||||
.then(processJson)
|
||||
.catch((error) => {
|
||||
self.isConnected(false);
|
||||
console.log(`Error Occurred retrieving data ${error}`);
|
||||
})
|
||||
.then(scheduleNewDataFetch);
|
||||
};
|
||||
|
||||
var processResponse = function (response) {
|
||||
if (!response.ok) {
|
||||
self.isConnected(false);
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
self.isConnected(true);
|
||||
if (response.status === 204) {
|
||||
self.gameOn(false);
|
||||
INTERVAL = 60000;
|
||||
return Promise.reject('no game');
|
||||
}
|
||||
INTERVAL = 5000;
|
||||
return response.json();
|
||||
};
|
||||
|
||||
var processJson = function (data) {
|
||||
self.eventList(data.eventHistory);
|
||||
self.gameOn(true);
|
||||
self.gameState(data.state);
|
||||
self.half(data.half);
|
||||
self.kickOffTime(new Date(data.startedAt));
|
||||
|
||||
self.homeTeamName(data.home.name);
|
||||
self.awayTeamName(data.away.name);
|
||||
|
||||
self.homeTeamPoints(data.home.points);
|
||||
self.awayTeamPoints(data.away.points);
|
||||
};
|
||||
|
||||
self.deleteEvent = function (id) {
|
||||
console.log(`Call to delete event ${id}`);
|
||||
fetch(`${apiUrl}/event/${id}`, {
|
||||
method: 'DELETE',
|
||||
headers: {
|
||||
'x-api-key': apiKey
|
||||
}
|
||||
})
|
||||
.then(fetchNewData);
|
||||
};
|
||||
|
||||
var scheduleNewDataFetch = function () {
|
||||
if (timeout) {
|
||||
clearTimeout(timeout);
|
||||
}
|
||||
timeout = setTimeout(fetchNewData, INTERVAL);
|
||||
};
|
||||
|
||||
self.getMatchPendingMessage = function () {
|
||||
if (self.gameState() === "") {
|
||||
return "No Match has been configured at this time.";
|
||||
}
|
||||
return `The match has not started yet.. Kick off is scheduled for ${self.kickOffTime()}.`;
|
||||
};
|
||||
|
||||
self.addTeamEvent = function (team, evtType) {
|
||||
const eventData = {
|
||||
eventType: evtType,
|
||||
category: team,
|
||||
timeStamp: new Date().toISOString()
|
||||
};
|
||||
|
||||
fetch(`${apiUrl}/${selectedTeam}`, {
|
||||
method: 'PATCH',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'x-api-key': apiKey,
|
||||
},
|
||||
body: JSON.stringify(eventData),
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
console.log('Event data sent successfully:', data);
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error sending event data:', error);
|
||||
});
|
||||
};
|
||||
|
||||
self.getEventMessage = function (evt) {
|
||||
var eventMins = self.getEventTime(evt);
|
||||
var eventMsg = parseEventType(evt.eventType);
|
||||
|
||||
if (evt.category !== "Match") {
|
||||
if (evt.eventType === "YellowCard" || evt.eventType === "RedCard") {
|
||||
return `${eventMins} mins: ${eventMsg}`;
|
||||
}
|
||||
return `${eventMins} mins: ${eventMsg} Scored`;
|
||||
}
|
||||
return `${eventMsg}`;
|
||||
}
|
||||
|
||||
self.getScoreAtEvent = function (evtId) {
|
||||
var evts = self.eventList();
|
||||
var homeScore = 0;
|
||||
var awayScore = 0;
|
||||
evts.forEach(evt => {
|
||||
if (evt.id <= evtId) {
|
||||
if (evt.category === 'Home') {
|
||||
homeScore += evt.points;
|
||||
} else {
|
||||
awayScore += evt.points;
|
||||
}
|
||||
}
|
||||
});
|
||||
return `${homeScore} - ${awayScore}`;
|
||||
}
|
||||
|
||||
self.getEventTime = function (evt) {
|
||||
if (evt.category === 'Match') { return; }
|
||||
let t = calc(evt.id, true);
|
||||
return t;
|
||||
}
|
||||
|
||||
var parseEventType = function (evtType) {
|
||||
switch (evtType) {
|
||||
case 'DropGoal':
|
||||
return 'Drop Goal';
|
||||
case 'HalfTime':
|
||||
return 'Half Time';
|
||||
case 'MatchStart':
|
||||
return 'Match Start';
|
||||
case 'SecondHalfStart':
|
||||
return 'Second Half Start';
|
||||
case 'TimeOff':
|
||||
return 'Time Off';
|
||||
case 'TimeOn':
|
||||
return 'Time On';
|
||||
case 'YellowCard':
|
||||
return 'Yellow Card';
|
||||
case 'RedCard':
|
||||
return 'Red Card';
|
||||
case 'MatchEnd':
|
||||
return 'Full Time';
|
||||
default:
|
||||
return evtType;
|
||||
}
|
||||
}
|
||||
|
||||
var calcDiff = function (startTimeStamp, endTimeStamp) {
|
||||
var diff = endTimeStamp - startTimeStamp;
|
||||
const minutes = Math.floor(diff / 60000);
|
||||
const seconds = Math.floor((diff % 60000) / 1000);
|
||||
return { mins: minutes, secs: seconds }
|
||||
}
|
||||
|
||||
self.disconnectedMessage = function() {
|
||||
return `Unable to connect to server: ${apiUrl}`;
|
||||
};
|
||||
fetchNewData(); // Starts the update loop
|
||||
}
|
||||
|
||||
var paramsString = window.location.search.split("?")[1];
|
||||
var paramValues = paramsString.split("&");
|
||||
var params = {};
|
||||
paramValues.forEach((param) => {
|
||||
var paramValue = param.split("=");
|
||||
params[paramValue[0]] = paramValue[1];
|
||||
});
|
||||
|
||||
ko.applyBindings(new Controller(params.apiKey, params.url));
|
||||
283
HTML/HomePageScoreboard/scoreboard.css
Normal file
283
HTML/HomePageScoreboard/scoreboard.css
Normal file
@ -0,0 +1,283 @@
|
||||
.scoreboard {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 800px;
|
||||
margin: 0 auto;
|
||||
background-color: #e0e0e0;
|
||||
color: #333;
|
||||
padding: 10px;
|
||||
border: 4px solid #800080;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
.timer-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
background-color: #fff;
|
||||
border: 4px solid #800080;
|
||||
border-radius: 50%;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.timer {
|
||||
font-size: 38px;
|
||||
color: #333;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.half-indicator {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
color: #800080;
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
}
|
||||
|
||||
.kickoff-indicator {
|
||||
font-size: 25px;
|
||||
font-weight: bold;
|
||||
color: #800080;
|
||||
margin-top:auto;
|
||||
margin-bottom:auto;
|
||||
}
|
||||
.finalscore-indicator {
|
||||
font-size: 25px;
|
||||
font-weight: bold;
|
||||
color: #800080;
|
||||
margin-top:auto;
|
||||
margin-bottom:auto;
|
||||
}
|
||||
|
||||
.border {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.team-details {
|
||||
font-size: 48px;
|
||||
color: white;
|
||||
background-color: #000;
|
||||
padding: 0px;
|
||||
text-align: center;
|
||||
max-height: 100px;
|
||||
border-radius: 0px 0px 30px 30px;
|
||||
}
|
||||
|
||||
.team {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border-radius: 10px 10px 10px 10px;
|
||||
background-color: dimgrey;
|
||||
}
|
||||
|
||||
.team-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.team-logo {
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.team-logo svg {
|
||||
max-width: 60px;
|
||||
max-height: 60px;
|
||||
background-color: #800080;
|
||||
padding: 5px;
|
||||
margin-right:auto;
|
||||
margin-left:auto;
|
||||
}
|
||||
|
||||
.team-name {
|
||||
font-weight: bold;
|
||||
font-size: 20px;
|
||||
color: white;
|
||||
margin-bottom: 5px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.team-score {
|
||||
font-size: 48px;
|
||||
color: white;
|
||||
background-color: #000;
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
max-height: 100px;
|
||||
border-radius: 0 0 10px 10px;
|
||||
}
|
||||
|
||||
.score-history {
|
||||
font-size: 14px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
/* Uckfield RFC's background color */
|
||||
#home-team {
|
||||
background-color: #ff0000;
|
||||
}
|
||||
|
||||
/* Away Team's background color */
|
||||
#away-team {
|
||||
background-color: #0000ff;
|
||||
}
|
||||
|
||||
/*
|
||||
eventList
|
||||
*/
|
||||
.timeline {
|
||||
position: relative;
|
||||
padding: 20px;
|
||||
width: 50%;
|
||||
margin-top: 10px;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.timeline-item {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 40px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
background-color: #f9f9f9;
|
||||
padding: 20px;
|
||||
position: relative;
|
||||
border-radius: 8px;
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
.timeline-content-match {
|
||||
background-color: rgb(69, 69, 69);
|
||||
color: white;
|
||||
min-width: 100px;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
padding-left: 30px;
|
||||
padding-right: 30px;
|
||||
position: relative;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
border-radius: 8px;
|
||||
border: 1px solid purple;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.match:first-child {
|
||||
margin-top: -20px;
|
||||
}
|
||||
|
||||
.match:last-child {
|
||||
margin-bottom: -20px;
|
||||
}
|
||||
|
||||
.score-panel {
|
||||
font-size: 20px;
|
||||
color: white;
|
||||
background-color: gray;
|
||||
padding: 5px 10px 5px 10px;
|
||||
position: absolute;
|
||||
left: 50.1%;
|
||||
border-radius: 8px;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.delete-btn {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
background-color: #f00;
|
||||
/* background-color: #ff6347; */
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 5px 10px;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.icon {
|
||||
position: absolute;
|
||||
left: 50.1%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
color: black;
|
||||
/* Set the color of the icon */
|
||||
z-index: 1;
|
||||
/* Ensure the icon appears above the panel */
|
||||
}
|
||||
|
||||
.yc {
|
||||
color: yellow;
|
||||
text-shadow: 0 0 5px #000;
|
||||
}
|
||||
|
||||
.rc {
|
||||
color: red;
|
||||
text-shadow: 0 0 5px #000;
|
||||
}
|
||||
|
||||
.away {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.timeline:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
border-left: 2px solid black;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1500px) {
|
||||
.timeline-item {
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
width: 40%;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 1499px) {
|
||||
.timeline {
|
||||
width: 80%;
|
||||
}
|
||||
.timeline-item {
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
width: 40%;
|
||||
}
|
||||
}
|
||||
|
||||
.noMatch {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.summary-team-label {
|
||||
margin-top: 15px;
|
||||
margin-bottom: 15px;
|
||||
font-size: 25px;
|
||||
}
|
||||
76
HTML/HomePageScoreboard/scoreboard.html
Normal file
76
HTML/HomePageScoreboard/scoreboard.html
Normal file
@ -0,0 +1,76 @@
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="scoreboard.css">
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.1/knockout-latest.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<!-- <div class="scoreboard" data-bind="if: gameOn">
|
||||
<div class="border">
|
||||
<div class="team" data-bind="style:{'background-color': homeTeamColor}">
|
||||
<div class="team-info">
|
||||
<div class="team-logo">
|
||||
<img data-bind="attr:{src: homeTeamLogo}" src="https://png.pngtree.com/png-clipart/20210129/ourmid/pngtree-blue-square-button-png-image_2844356.jpg" alt="Home Team Logo">
|
||||
</div>
|
||||
<div class="team-name" data-bind="text: homeTeamName">Home</div>
|
||||
</div>
|
||||
<div class="team-details">
|
||||
<div class="team-score" data-bind="text: homeTeamPoints">0</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="timer-container">
|
||||
<div class="timer" id="match-timer" data-bind="text: timerValue"></div>
|
||||
<div class="half-indicator" data-bind="text: halfIndicator"></div>
|
||||
</div>
|
||||
<div class="team" data-bind="style:{'background-color': awayTeamColor}">
|
||||
<div class="team-info">
|
||||
<div class="team-logo">
|
||||
<img data-bind="attr:{src: homeTeamLogo}" src="https://png.pngtree.com/png-clipart/20210129/ourmid/pngtree-blue-square-button-png-image_2844356.jpg" alt="AWAY TEAM">
|
||||
<div class="team-name" data-bind="text: awayTeamName">Away</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="team-details">
|
||||
<div class="team-score" data-bind="text: awayTeamPoints">0</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
<div data-bind="if: gameOn">
|
||||
<div class="scoreboard">
|
||||
<div class="border">
|
||||
<div class="team" data-bind="style:{'background-color': homeTeamColor}">
|
||||
<div class="team-info">
|
||||
<div class="team-name summary-team-label" data-bind="text: homeTeamName">Home</div>
|
||||
</div>
|
||||
<div class="team-details">
|
||||
<div class="team-score" data-bind="text: homeTeamPoints">0</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="timer-container">
|
||||
<!-- ko if: gameState() !== 'WaitingForStart' && gameState() !== 'Finished' && gameState() !== 'HalfTime'-->
|
||||
<div class="timer" id="match-timer" data-bind="text: calculateRemainingTime"></div>
|
||||
<div class="half-indicator" data-bind="text: halfIndicator"></div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: gameState() === 'WaitingForStart' -->
|
||||
<div class="kickoff-indicator" data-bind="text: halfIndicator"></div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: gameState() === 'Finished' -->
|
||||
<div class="finalscore-indicator">Full Time</div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: gameState() === 'HalfTime' -->
|
||||
<div class="kickoff-indicator">Half Time</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<div class="team" data-bind="style:{'background-color': awayTeamColor}">
|
||||
<div class="team-info">
|
||||
<div class="team-name summary-team-label" data-bind="text: awayTeamName">Away</div>
|
||||
</div>
|
||||
<div class="team-details">
|
||||
<div class="team-score" data-bind="text: awayTeamPoints">0</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="scoreboardViewModel.js" type="text/javascript"></script>
|
||||
</body>
|
||||
179
HTML/HomePageScoreboard/scoreboardViewModel.js
Normal file
179
HTML/HomePageScoreboard/scoreboardViewModel.js
Normal file
@ -0,0 +1,179 @@
|
||||
function MatchEvent(event){
|
||||
var self = this;
|
||||
self.id = ko.observable(event.id);
|
||||
self.eventType = ko.observable(event.EventType);
|
||||
self.eventTimeStamp = ko.observable(event.TimeStamp);
|
||||
self.eventPoint = ko.observable(event.Points);
|
||||
}
|
||||
function Team (team){
|
||||
var self = this;
|
||||
self.name = ko.observable(team.name);
|
||||
self.points = ko.observable(team.points);
|
||||
self.eventHistory = ko.observableArray(team.EventHistory.map((evt) => new MatchEvent(evt)));
|
||||
}
|
||||
|
||||
function ScoreboardViewModel() {
|
||||
const apiKey = '396A62D6-0192-4738-8F45-8AAF7BCFA3EC'; // Replace with your actual API key
|
||||
const apiUrl = 'https://localhost:7005/api/Score'; // Replace with your API endpoint URL
|
||||
|
||||
var self = this;
|
||||
//API poll variables
|
||||
var INTERVAL = 5000;
|
||||
var timeout = null;
|
||||
var currentReq = null;
|
||||
|
||||
//knockout variables
|
||||
this.gameState = ko.observable("");
|
||||
this.half = ko.observable("Pre");
|
||||
this.kickOffTime = ko.observable(new Date());
|
||||
|
||||
this.gameOn = ko.observable(false);
|
||||
this.eventList = ko.observableArray([]);
|
||||
|
||||
this.homeTeamName = ko.observable("Uckfield RFC");
|
||||
this.homeTeamColor = ko.observable("#ff0000");
|
||||
this.homeTeamPoints = ko.observable(0);
|
||||
this.homeTeamLogo = ko.observable("");
|
||||
|
||||
this.awayTeamName = ko.observable("Away team");
|
||||
this.awayTeamColor = ko.observable("#0000ff");
|
||||
this.awayTeamPoints = ko.observable(0);
|
||||
this.awayTeamLogo = ko.observable("");
|
||||
|
||||
self.calculateRemainingTime = ko.computed(function () {
|
||||
if (self.half() === 'Pre') { return "---"; }
|
||||
if (self.gameState() === 'HalfTime') { return '40:00'; }
|
||||
if (self.gameState() === 'Finished') { return '80:00'; }
|
||||
return calc();
|
||||
});
|
||||
var isSecondHalfEvent=function(matchEvts){
|
||||
return !!matchEvts.find(e=>e.eventType === 'SecondHalfStart');
|
||||
};
|
||||
var calc = function (eventId = 0, minsOnly=false) {
|
||||
var matchEvts = self.eventList().filter(x => (x.category === 'Match' && x.id <= eventId) || x.id === eventId);
|
||||
var initialTime = self.kickOffTime(); //IF FIRST HALF, WORK OUT FOR IF SECOND HALF
|
||||
var halfStart = self.kickOffTime();
|
||||
var offsetMins = 0;
|
||||
|
||||
if ((eventId != 0 &&isSecondHalfEvent(matchEvts))
|
||||
|| (eventId == 0 && self.half() === 'Second')) {
|
||||
var secondHalfEvent = self.eventList().find(x => x.eventType === 'SecondHalfStart');
|
||||
if (!secondHalfEvent) {
|
||||
throw 'Invalid System Event State, Second Half without Second Half Event';
|
||||
}
|
||||
halfStart = new Date(secondHalfEvent.timeStamp);
|
||||
initialTime = new Date(secondHalfEvent.timeStamp);
|
||||
offsetMins = 40;
|
||||
matchEvts = self.eventList().filter(x=>x.id >= secondHalfEvent.id && (x.category === 'Match' || x.id === eventId))
|
||||
}
|
||||
|
||||
if (!matchEvts || matchEvts.length <= 1) {
|
||||
const diff = calcDiff(initialTime, new Date());
|
||||
return `${String(diff.mins + offsetMins).padStart(2, "0")}:${String(diff.secs).padStart(2, "0")}`
|
||||
}
|
||||
|
||||
var totalMins = offsetMins;
|
||||
var totalSecs = 0;
|
||||
|
||||
matchEvts.forEach((evt, idx, src) => {
|
||||
if (eventId === 0 || evt.id <= eventId) {
|
||||
if (evt.eventType === 'TimeOff') {
|
||||
var t = calcDiff(initialTime, new Date(evt.timeStamp));
|
||||
totalMins += t.mins;
|
||||
totalSecs += t.secs;
|
||||
}
|
||||
if (evt.eventType === 'TimeOn') {
|
||||
initialTime = new Date(evt.timeStamp);
|
||||
if(idx === (src.length-1)){
|
||||
var t = calcDiff(new Date(evt.timeStamp), new Date());
|
||||
totalMins += t.mins;
|
||||
totalSecs += t.secs;
|
||||
}
|
||||
}
|
||||
if (eventId != 0 && eventId === evt.id) {
|
||||
var t = calcDiff(initialTime, new Date(evt.timeStamp));
|
||||
totalMins += t.mins;
|
||||
totalSecs += t.secs;
|
||||
}
|
||||
}
|
||||
});
|
||||
if (totalSecs >= 60) {
|
||||
totalMins += 1;
|
||||
totalSecs = totalSecs % 60;
|
||||
}
|
||||
if(minsOnly){
|
||||
return `${String(totalMins).padStart(2, "0")}`;
|
||||
}
|
||||
return `${String(totalMins).padStart(2, "0")}:${String(totalSecs).padStart(2, "0")}`;
|
||||
}
|
||||
|
||||
self.halfIndicator = ko.computed(function () {
|
||||
const gameState = self.gameState();
|
||||
if (gameState === "WaitingForStart") {
|
||||
var dt = self.kickOffTime();
|
||||
return `${String(dt.getHours()).padStart(2, "0")}:${String(dt.getMinutes()).padStart(2, "0")} KO`;
|
||||
}
|
||||
if (gameState === "FirstHalf") {
|
||||
return "1st Half";
|
||||
}
|
||||
if (gameState === "SecondHalf") {
|
||||
return "2nd Half";
|
||||
}
|
||||
if (gameState === "TimeOff") {
|
||||
return "Time Off";
|
||||
}
|
||||
});
|
||||
|
||||
var fetchNewData = function() {
|
||||
currentReq = fetch(apiUrl, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'x-api-key': apiKey
|
||||
},
|
||||
});
|
||||
|
||||
currentReq
|
||||
.then(processResponse)
|
||||
.then(processJson)
|
||||
.catch((error)=>console.log(`Error Occurred retrieving data ${error}`))
|
||||
.then(scheduleNewDataFetch);
|
||||
};
|
||||
|
||||
var processResponse = function(response) {
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
if(response.status === 204){
|
||||
self.gameOn(false);
|
||||
INTERVAL = 60000;
|
||||
return Promise.reject('no game');
|
||||
}
|
||||
INTERVAL = 5000;
|
||||
return response.json();
|
||||
};
|
||||
|
||||
var processJson = function(data) {
|
||||
self.eventList(data.eventHistory);
|
||||
self.gameOn(true);
|
||||
self.gameState(data.state);
|
||||
self.half(data.half);
|
||||
self.kickOffTime(new Date(data.startedAt));
|
||||
|
||||
self.homeTeamName(data.home.name);
|
||||
self.awayTeamName(data.away.name);
|
||||
|
||||
self.homeTeamPoints(data.home.points);
|
||||
self.awayTeamPoints(data.away.points);
|
||||
};
|
||||
|
||||
var scheduleNewDataFetch = function() {
|
||||
if (timeout) {
|
||||
clearTimeout(timeout);
|
||||
}
|
||||
timeout = setTimeout(fetchNewData, INTERVAL);
|
||||
};
|
||||
|
||||
fetchNewData(); // Starts the update loop
|
||||
}
|
||||
|
||||
ko.applyBindings(new ScoreboardViewModel());
|
||||
25
HTML/Original/Scoreboard.sln
Normal file
25
HTML/Original/Scoreboard.sln
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.6.33723.286
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScoreboardApi", "ScoreboardApi\ScoreboardApi.csproj", "{9F80E54A-D08F-4FC5-A56D-ADE8EA381CAF}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{9F80E54A-D08F-4FC5-A56D-ADE8EA381CAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9F80E54A-D08F-4FC5-A56D-ADE8EA381CAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9F80E54A-D08F-4FC5-A56D-ADE8EA381CAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9F80E54A-D08F-4FC5-A56D-ADE8EA381CAF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {DE24DFDF-6F5A-4851-A186-66A1D1C52A87}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
5
HTML/Original/Scoreboard.v3.ncrunchsolution.user
Normal file
5
HTML/Original/Scoreboard.v3.ncrunchsolution.user
Normal file
@ -0,0 +1,5 @@
|
||||
<SolutionConfiguration>
|
||||
<Settings>
|
||||
<CurrentEngineMode>Run all tests automatically [Global]</CurrentEngineMode>
|
||||
</Settings>
|
||||
</SolutionConfiguration>
|
||||
2
HTML/Original/conversion.svg
Normal file
2
HTML/Original/conversion.svg
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<svg width="800px" height="800px" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path fill="#000000" d="M247 18v135.193c5.95-3.097 11.95-6.065 18-8.89V18h-18zm192 0v247.6l-174-.688v-60.457c-6.182 5.902-12.18 11.908-18 18V311h18v-28.088l174 .688V311h18V18h-18zm-80.1 71.914c-7.024-.18-15.588 2.472-20.54 6.463-7.925 6.386-14.468 22.533-9.155 29.127 5.313 6.594 22.48 3.634 30.406-2.752 7.926-6.386 14.47-22.533 9.158-29.127-1.993-2.473-5.653-3.602-9.868-3.71zm-54.125 57.334C168.5 198.266 48.38 324.17 25.043 471.803l17.316 3.365c15.157-100.106 61.737-149.502 92.28-179.856C120.173 337.77 79.376 405.92 78.27 482.145l21.605 4.2c4.238-108.047 78.028-244.59 204.902-339.097zM241.068 329v158h30V329h-30zm191.618 0v158h30V329h-30z"/></svg>
|
||||
|
After Width: | Height: | Size: 864 B |
123
HTML/Original/eventList.css
Normal file
123
HTML/Original/eventList.css
Normal file
@ -0,0 +1,123 @@
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* Set a background color */
|
||||
body {
|
||||
background-color: #b8b8ba;
|
||||
font-family: Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
/* The actual timeline (the vertical ruler) */
|
||||
.timeline {
|
||||
position: relative;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.timeline-item {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 40px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
background-color: #f9f9f9;
|
||||
padding: 20px;
|
||||
position: relative;
|
||||
border-radius: 8px;
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
.timeline-content-match {
|
||||
background-color: rgb(69, 69, 69);
|
||||
color: white;
|
||||
min-width: 100px;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
padding-left: 30px;
|
||||
padding-right: 30px;
|
||||
position: relative;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
border-radius: 8px;
|
||||
border: 1px solid purple;
|
||||
text-align:center;
|
||||
}
|
||||
.match:first-child {
|
||||
margin-top: -20px;
|
||||
}
|
||||
.match:last-child {
|
||||
margin-bottom: -20px;
|
||||
}
|
||||
|
||||
.score-panel {
|
||||
font-size: 20px;
|
||||
color: white;
|
||||
background-color: gray;
|
||||
padding: 5px 10px 5px 10px;
|
||||
position: absolute;
|
||||
left: 50.1%;
|
||||
border-radius: 8px;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.delete-btn {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
background-color: #f00;
|
||||
/* background-color: #ff6347; */
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 5px 10px;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.icon {
|
||||
position: absolute;
|
||||
left: 50.1%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
color: black;
|
||||
/* Set the color of the icon */
|
||||
z-index: 1;
|
||||
/* Ensure the icon appears above the panel */
|
||||
}
|
||||
.yc {
|
||||
color: yellow;
|
||||
}
|
||||
.rc {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.away+.icon {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.away {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.timeline:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
border-left: 2px solid black;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 768px) {
|
||||
.timeline-item {
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
width: 45%;
|
||||
}
|
||||
}
|
||||
58
HTML/Original/eventList.html
Normal file
58
HTML/Original/eventList.html
Normal file
@ -0,0 +1,58 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<head>
|
||||
<link href="eventList.css" rel="stylesheet" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css"
|
||||
integrity="5e2ESR8Ycmos6g3gAKr1Jvwye8sW4U1u/cAKulfVJnkakCcMqhOudbtPnvJ+nbv7" crossorigin="anonymous">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.1/knockout-latest.js"
|
||||
integrity="sha512-2AL/VEauKkZqQU9BHgnv48OhXcJPx9vdzxN1JrKDVc4FPU/MEE/BZ6d9l0mP7VmvLsjtYwqiYQpDskK9dG8KBA=="
|
||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"
|
||||
integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="
|
||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--
|
||||
TODO:
|
||||
Add kick off time when match not started
|
||||
Add match event support (across line) in black and white.
|
||||
|
||||
-->
|
||||
|
||||
<!-- ko if: eventList().length === 0 -->
|
||||
<div> no events yet </div>
|
||||
<!-- /ko-->
|
||||
<!-- ko if: eventList().length > 0 -->
|
||||
<div class="timeline" data-bind="foreach: eventList">
|
||||
<!-- ko if: category === 'Match' -->
|
||||
<div class="timeline-item match">
|
||||
<div class="timeline-content-match">
|
||||
<p data-bind="text: $parent.getEventMessage($data)"></p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<!-- ko ifnot: category === 'Match' -->
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-content"
|
||||
data-bind="css: { away: category ==='Away' }, style: { 'border-color': category === 'Home' ? $parent.homeTeamColor() : $parent.awayTeamColor() }">
|
||||
<button class="delete-btn" data-bind="click: () => $parent.deleteEvent(id)">
|
||||
<i class="fa fa-trash"></i>
|
||||
</button>
|
||||
<p data-bind="text: $parent.getEventMessage($data)"></p>
|
||||
</div>
|
||||
<!-- ko if: eventType !== 'YellowCard' && eventType !== 'RedCard' -->
|
||||
<span class="score-panel" data-bind="text: $parent.getScoreAtEvent($data.id)"></span>
|
||||
<!-- /ko -->
|
||||
|
||||
<!-- ko if: eventType === 'YellowCard' || eventType === 'RedCard' -->
|
||||
<i class="fa fa-circle icon" data-bind="css:{ yc: eventType ==='YellowCard', rc: eventType==='RedCard' }"></i>
|
||||
<!-- /ko -->
|
||||
|
||||
</div>
|
||||
<!-- /ko-->
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<script src="eventList.js" type="text/javascript"></script>
|
||||
</body>
|
||||
143
HTML/Original/eventList.js
Normal file
143
HTML/Original/eventList.js
Normal file
@ -0,0 +1,143 @@
|
||||
class eventModel {
|
||||
constructor(id, eventDate, points, type, team) {
|
||||
this.id = id;
|
||||
this.eventDate = eventDate;
|
||||
this.points = points;
|
||||
this.eventType = type;
|
||||
this.team = team;
|
||||
}
|
||||
}
|
||||
|
||||
function viewModel() {
|
||||
const apiKey = '396A62D6-0192-4738-8F45-8AAF7BCFA3EC'; // Replace with your actual API key
|
||||
const apiUrl = 'https://localhost:7005/api/Score'; // Replace with your API endpoint URL
|
||||
|
||||
var self = this;
|
||||
|
||||
//API poll variables
|
||||
var INTERVAL = 5000;
|
||||
var timeout = null;
|
||||
var currentReq = null;
|
||||
//knockout variables
|
||||
self.gameState = ko.observable("");
|
||||
self.kickOffTime = ko.observable(new Date());
|
||||
|
||||
self.homeTeamName = ko.observable("Uckfield RFC");
|
||||
self.homeTeamColor = ko.observable("#ff0000");
|
||||
self.awayTeamName = ko.observable("Away team");
|
||||
self.awayTeamColor = ko.observable("#0000ff");
|
||||
|
||||
self.eventsHome = ko.observableArray([]);
|
||||
self.eventsAway = ko.observableArray([]);
|
||||
|
||||
self.convertToUiEvent = function (team, evt) {
|
||||
return new eventModel(evt.id, evt.timeStamp, evt.points, evt.eventType, team);
|
||||
};
|
||||
|
||||
this.homeTeamColor = ko.observable("#ff0000");
|
||||
this.awayTeamColor = ko.observable("#0000ff");
|
||||
|
||||
self.eventList = ko.observableArray([]);
|
||||
// ko.computed(function () {
|
||||
// if (self.eventsHome().length === 0 && self.eventsAway().length === 0) {
|
||||
// return [];
|
||||
// }
|
||||
// var mappedHomeEvents = self.eventsHome().map(function (e) {
|
||||
// return self.convertToUiEvent("home", e);
|
||||
// });
|
||||
// var mappedAwayEvents = self.eventsAway().map(function (e) {
|
||||
// return self.convertToUiEvent("away", e);
|
||||
// });
|
||||
// var combinedEvents = mappedHomeEvents.concat(mappedAwayEvents);
|
||||
// var sortedEvents = combinedEvents.sort((evtA, evtB) => evtA.id - evtB.id);
|
||||
// return sortedEvents;
|
||||
// }, self);
|
||||
|
||||
self.deleteEvent = function (id) {
|
||||
console.log(`Call to delete event ${id}`);
|
||||
fetch(`${apiUrl}/event/${id}`, {
|
||||
method: 'DELETE',
|
||||
headers: {
|
||||
'x-api-key': apiKey
|
||||
}
|
||||
})
|
||||
.then(fetchNewData);
|
||||
};
|
||||
|
||||
var fetchNewData = function () {
|
||||
currentReq = fetch(apiUrl, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'x-api-key': apiKey
|
||||
},
|
||||
});
|
||||
|
||||
currentReq
|
||||
.then(processResponse)
|
||||
.then(processJson)
|
||||
.catch((error) => {
|
||||
return console.log(`Error Occurred retrieving data ${error}`);
|
||||
})
|
||||
.then(scheduleNewDataFetch);
|
||||
};
|
||||
|
||||
var processResponse = function (response) {
|
||||
if (!response.ok) {
|
||||
INTERVAL = 60000;
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
if (response.status === 204) {
|
||||
INTERVAL = 60000;
|
||||
return Promise.reject('No Game');
|
||||
}
|
||||
INTERVAL = 5000;
|
||||
return response.json();
|
||||
};
|
||||
|
||||
var processJson = function (data) {
|
||||
self.gameState(data.state);
|
||||
self.kickOffTime(new Date(data.startedAt));
|
||||
|
||||
self.homeTeamName(data.home.name);
|
||||
self.awayTeamName(data.away.name);
|
||||
|
||||
self.homeTeamColor(data.home.color);
|
||||
self.awayTeamColor(data.away.color);
|
||||
|
||||
self.eventList(data.eventHistory);
|
||||
};
|
||||
|
||||
var scheduleNewDataFetch = function () {
|
||||
if (timeout) {
|
||||
clearTimeout(timeout);
|
||||
}
|
||||
timeout = setTimeout(fetchNewData, INTERVAL);
|
||||
};
|
||||
|
||||
self.getEventMessage = function(evt) {
|
||||
var eventDate = new Date(evt.eventDate);
|
||||
var timeElapsed = eventDate - self.kickOffTime();
|
||||
var diffMins = Math.round(((timeElapsed % 86400000) % 3600000) / 60000);
|
||||
return `T${diffMins}: ${evt.eventType} Scored`
|
||||
}
|
||||
|
||||
self.getScoreAtEvent = function(evtId){
|
||||
var evts = self.eventList();
|
||||
var homeScore = 0;
|
||||
var awayScore = 0;
|
||||
evts.forEach(evt => {
|
||||
if(evt.id <= evtId){
|
||||
if(evt.category ==='Home'){
|
||||
homeScore += evt.points;
|
||||
} else {
|
||||
awayScore += evt.points;
|
||||
}
|
||||
}
|
||||
});
|
||||
return `${homeScore} - ${awayScore}`;
|
||||
}
|
||||
|
||||
fetchNewData(); // Starts the update loop
|
||||
};
|
||||
|
||||
ko.applyBindings(new viewModel());
|
||||
148
HTML/Original/gameController.html
Normal file
148
HTML/Original/gameController.html
Normal file
@ -0,0 +1,148 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Team and Event Selector</title>
|
||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN" crossorigin="anonymous">
|
||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-C6RzsynM9kWDrMNeT87bh95OGNyZPhcTNXj1NW7RuBCsyN/o0jlpcV8Qyq46cDfL" crossorigin="anonymous"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Team Information</h1>
|
||||
<form id="matchForm" class="container">
|
||||
<div class="mb-3 row">
|
||||
<label for="teamName" class="col-sm-2 col-form-label">Home Team Name:</label>
|
||||
<div class="col-sm-10">
|
||||
<input class="form-control" type="text" id="homeTeamName" name="homeTeamName" required>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="mb-3 row">
|
||||
<label for="homeTeamColor" class="col-sm-2 col-form-label">Home Team Colour:</label>
|
||||
<div class="col-sm-10">
|
||||
<input class="form-control form-control-color" type="color" id="homeTeamColor" name="homeTeamColor" required>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="mb-3 row">
|
||||
<label for="awayTeamName" class="col-sm-2 col-form-label">Away Team Name:</label>
|
||||
<div class="col-sm-10">
|
||||
<input class="form-control" type="text" id="awayTeamName" name="awayTeamName" required>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="mb-3 row">
|
||||
<label for="awayTeamColor" class="col-sm-2 col-form-label">Away Team Colour:</label>
|
||||
<div class="col-sm-10">
|
||||
<input class="form-control form-control-color" type="color" id="awayTeamColor" name="awayTeamColor" required>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="mb-3 row">
|
||||
<label for="kickOffTime" class="col-sm-2 col-form-label">Kick Off Time:</label>
|
||||
<div class="col-sm-10">
|
||||
<input class="form-control" type="datetime-local" id="kickOffTime" name="kickOffTime" required>
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="d-grid gap-2 d-md-flex justify-content-md-end">
|
||||
<input type="submit" value="Create Match" class="btn btn-primary float-right">
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<h1>Event Selector</h1>
|
||||
<form id="eventForm">
|
||||
<label for="eventType">Event Type:</label>
|
||||
<select id="eventType" name="eventType" required>
|
||||
<option value="" disabled selected>Select an Event</option>
|
||||
<option value="Try">Try</option>
|
||||
<option value="Penalty">Penalty</option>
|
||||
<option value="Conversion">Conversion</option>
|
||||
<option value="DropGoal">Drop Goal</option>
|
||||
<option value="SecondHalfStart">Second Half Start</option>
|
||||
</select>
|
||||
<br>
|
||||
<label for="team">Team:</label>
|
||||
<select id="team" name="team">
|
||||
<option value="">Select a Team (optional)</option>
|
||||
<option value="Home">Uckfield</option>
|
||||
<option value="Away">Away</option>
|
||||
</select>
|
||||
<br>
|
||||
<input type="submit" value="Submit Event">
|
||||
</form>
|
||||
|
||||
<script>
|
||||
// Replace 'YOUR_API_URL' and 'YOUR_API_KEY' with your actual API URL and API key
|
||||
const apiKey = '396A62D6-0192-4738-8F45-8AAF7BCFA3EC'; // Replace with your actual API key
|
||||
|
||||
document.getElementById("matchForm").addEventListener("submit", function (event) {
|
||||
event.preventDefault();
|
||||
const homeTeamName = document.getElementById("homeTeamName").value;
|
||||
const homeTeamColor = document.getElementById("homeTeamColor").value;
|
||||
const awayTeamName = document.getElementById("awayTeamName").value;
|
||||
const awayTeamColor = document.getElementById("awayTeamColor").value;
|
||||
const koTime = document.getElementById("kickOffTime").value;
|
||||
const apiUrl = 'https://localhost:7005/api/Score'; // Replace with your API endpoint URL
|
||||
|
||||
const matchData = {
|
||||
home: {
|
||||
name: homeTeamName,
|
||||
colour: homeTeamColor,
|
||||
abbreviation: homeTeamName.slice(0,3)
|
||||
},
|
||||
away:{
|
||||
name: awayTeamName,
|
||||
colour: awayTeamColor,
|
||||
abbreviation: awayTeamName.slice(0,3)
|
||||
},
|
||||
kickOffTime: koTime
|
||||
};
|
||||
|
||||
fetch(apiUrl, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'x-api-key': apiKey,
|
||||
},
|
||||
body: JSON.stringify(matchData),
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
console.log('Match data sent successfully:', data);
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error sending team data:', error);
|
||||
});
|
||||
});
|
||||
|
||||
document.getElementById("eventForm").addEventListener("submit", function (event) {
|
||||
event.preventDefault();
|
||||
const apiUrl = 'https://localhost:7005/api/Score/event'; // Replace with your API endpoint URL
|
||||
|
||||
const eventType = document.getElementById("eventType").value;
|
||||
const selectedTeam = document.getElementById("team").value;
|
||||
|
||||
const eventData = {
|
||||
eventType: eventType,
|
||||
timeStamp: new Date().toISOString()
|
||||
};
|
||||
|
||||
fetch(`${apiUrl}/${selectedTeam}`, {
|
||||
method: 'PATCH',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'x-api-key': apiKey,
|
||||
},
|
||||
body: JSON.stringify(eventData),
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
console.log('Event data sent successfully:', data);
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error sending event data:', error);
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
120
HTML/Original/scoreboard.css
Normal file
120
HTML/Original/scoreboard.css
Normal file
@ -0,0 +1,120 @@
|
||||
|
||||
.scoreboard {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 800px;
|
||||
margin: 0 auto;
|
||||
background-color: #e0e0e0;
|
||||
color: #333;
|
||||
padding: 10px;
|
||||
border: 4px solid #800080;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
.timer-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
background-color: #fff;
|
||||
border: 4px solid #800080;
|
||||
border-radius: 50%;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.timer {
|
||||
font-size: 38px;
|
||||
color: #333;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.half-indicator {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
color: #800080;
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
}
|
||||
|
||||
.border {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.team-details {
|
||||
font-size: 48px;
|
||||
color: white;
|
||||
background-color: #000;
|
||||
padding: 0px;
|
||||
text-align: center;
|
||||
max-height: 100px;
|
||||
border-radius: 0px 0px 30px 30px;
|
||||
}
|
||||
|
||||
.team {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border-radius: 10px 10px 10px 10px;
|
||||
}
|
||||
|
||||
.team-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.team-logo img {
|
||||
max-width: 50px;
|
||||
max-height: 50px;
|
||||
border-radius: 50%;
|
||||
background-color: #800080;
|
||||
padding: 5px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.team-name {
|
||||
font-weight: bold;
|
||||
font-size: 20px;
|
||||
color: white;
|
||||
margin-bottom: 5px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.team-score {
|
||||
font-size: 48px;
|
||||
color: white;
|
||||
background-color: #000;
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
max-height: 100px;
|
||||
border-radius: 0 0 10px 10px;
|
||||
}
|
||||
|
||||
.score-history {
|
||||
font-size: 14px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
/* Uckfield RFC's background color */
|
||||
#home-team {
|
||||
background-color: #ff0000;
|
||||
}
|
||||
|
||||
/* Away Team's background color */
|
||||
#away-team {
|
||||
background-color: #0000ff;
|
||||
}
|
||||
|
||||
39
HTML/Original/scoreboard.html
Normal file
39
HTML/Original/scoreboard.html
Normal file
@ -0,0 +1,39 @@
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="scoreboard.css">
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.1/knockout-latest.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="scoreboard" data-bind="if: gameOn">
|
||||
<div class="border">
|
||||
<div class="team" data-bind="style:{'background-color': homeTeamColor}">
|
||||
<div class="team-info">
|
||||
<div class="team-logo">
|
||||
<img data-bind="attr:{src: homeTeamLogo}" src="https://png.pngtree.com/png-clipart/20210129/ourmid/pngtree-blue-square-button-png-image_2844356.jpg" alt="Home Team Logo">
|
||||
</div>
|
||||
<div class="team-name" data-bind="text: homeTeamName">Home</div>
|
||||
</div>
|
||||
<div class="team-details">
|
||||
<div class="team-score" data-bind="text: homeTeamPoints">0</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="timer-container">
|
||||
<div class="timer" id="match-timer" data-bind="text: timerValue"></div>
|
||||
<div class="half-indicator" data-bind="text: halfIndicator"></div>
|
||||
</div>
|
||||
<div class="team" data-bind="style:{'background-color': awayTeamColor}">
|
||||
<div class="team-info">
|
||||
<div class="team-logo">
|
||||
<img data-bind="attr:{src: homeTeamLogo}" src="https://png.pngtree.com/png-clipart/20210129/ourmid/pngtree-blue-square-button-png-image_2844356.jpg" alt="AWAY TEAM">
|
||||
<div class="team-name" data-bind="text: awayTeamName">Away</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="team-details">
|
||||
<div class="team-score" data-bind="text: awayTeamPoints">0</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="scoreboardViewModel.js" type="text/javascript"></script>
|
||||
</body>
|
||||
118
HTML/Original/scoreboardViewModel.js
Normal file
118
HTML/Original/scoreboardViewModel.js
Normal file
@ -0,0 +1,118 @@
|
||||
function MatchEvent(event){
|
||||
var self = this;
|
||||
self.id = ko.observable(event.id);
|
||||
self.eventType = ko.observable(event.EventType);
|
||||
self.eventTimeStamp = ko.observable(event.TimeStamp);
|
||||
self.eventPoint = ko.observable(event.Points);
|
||||
}
|
||||
function Team (team){
|
||||
var self = this;
|
||||
self.name = ko.observable(team.name);
|
||||
self.points = ko.observable(team.points);
|
||||
self.eventHistory = ko.observableArray(team.EventHistory.map((evt) => new MatchEvent(evt)));
|
||||
}
|
||||
|
||||
function ScoreboardViewModel() {
|
||||
const apiKey = '396A62D6-0192-4738-8F45-8AAF7BCFA3EC'; // Replace with your actual API key
|
||||
const apiUrl = 'https://localhost:7005/api/Score'; // Replace with your API endpoint URL
|
||||
const matchDuration = 80 * 60 * 1000;
|
||||
|
||||
var self = this;
|
||||
//API poll variables
|
||||
var INTERVAL = 5000;
|
||||
var timeout = null;
|
||||
var currentReq = null;
|
||||
|
||||
//knockout variables
|
||||
this.gameState = ko.observable("");
|
||||
this.kickOffTime = ko.observable(new Date());
|
||||
|
||||
this.gameOn = ko.observable(false);
|
||||
|
||||
this.homeTeamName = ko.observable("Uckfield RFC");
|
||||
this.homeTeamColor = ko.observable("#ff0000");
|
||||
this.homeTeamPoints = ko.observable(0);
|
||||
this.homeTeamLogo = ko.observable("");
|
||||
this.homeTeamEvents = ko.observable([]);
|
||||
|
||||
this.awayTeamName = ko.observable("Away team");
|
||||
this.awayTeamColor = ko.observable("#0000ff");
|
||||
this.awayTeamPoints = ko.observable(0);
|
||||
this.awayTeamLogo = ko.observable("");
|
||||
this.awayEvents = ko.observableArray([]);
|
||||
|
||||
self.timerValue = ko.computed( function() {
|
||||
const currentTime = new Date();
|
||||
const elapsedTime = currentTime - self.kickOffTime();
|
||||
const remainingTime = Math.max(0, matchDuration - elapsedTime);
|
||||
|
||||
const minutes = Math.floor(remainingTime / 60000);
|
||||
const seconds = Math.floor((remainingTime % 60000) / 1000);
|
||||
return `${String(minutes).padStart(2, "0")}:${String(seconds).padStart(2, "0")}`;
|
||||
});
|
||||
|
||||
self.halfIndicator = ko.computed(function(){
|
||||
const gameState = self.gameState();
|
||||
if(gameState ==="WaitingForStart"){
|
||||
var dt = self.kickOffTime();
|
||||
return `KO @${String(dt.getHours()).padStart(2,"0")}:${String(dt.getMinutes()).padStart(2,"0")}`;
|
||||
}
|
||||
if(gameState === "FirstHalf"){
|
||||
return "1st Half";
|
||||
}
|
||||
if(gameState === "SecondHalf"){
|
||||
return "2nd Half";
|
||||
}
|
||||
});
|
||||
|
||||
var fetchNewData = function() {
|
||||
currentReq = fetch(apiUrl, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'x-api-key': apiKey
|
||||
},
|
||||
});
|
||||
|
||||
currentReq
|
||||
.then(processResponse)
|
||||
.then(processJson)
|
||||
.catch((error)=>console.log(`Error Occurred retrieving data ${error}`))
|
||||
.then(scheduleNewDataFetch);
|
||||
};
|
||||
|
||||
var processResponse = function(response) {
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
if(response.status === 204){
|
||||
self.gameOn(false);
|
||||
INTERVAL = 60000;
|
||||
return Promise.reject('no game');
|
||||
}
|
||||
INTERVAL = 5000;
|
||||
return response.json();
|
||||
};
|
||||
|
||||
var processJson = function(data) {
|
||||
self.gameOn(true);
|
||||
self.gameState(data.state);
|
||||
self.kickOffTime(new Date(data.startedAt));
|
||||
|
||||
self.homeTeamName(data.home.name);
|
||||
self.awayTeamName(data.away.name);
|
||||
|
||||
self.homeTeamPoints(data.home.points);
|
||||
self.awayTeamPoints(data.away.points);
|
||||
};
|
||||
|
||||
var scheduleNewDataFetch = function() {
|
||||
if (timeout) {
|
||||
clearTimeout(timeout);
|
||||
}
|
||||
timeout = setTimeout(fetchNewData, INTERVAL);
|
||||
};
|
||||
|
||||
fetchNewData(); // Starts the update loop
|
||||
}
|
||||
|
||||
ko.applyBindings(new ScoreboardViewModel());
|
||||
18
HTML/Original/try.svg
Normal file
18
HTML/Original/try.svg
Normal file
@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg fill="#000000" height="800px" width="800px" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
viewBox="0 0 434.979 434.979" xml:space="preserve">
|
||||
<path d="M406.43,28.55C387.752,9.872,360.395,0,327.317,0C258.74,0,174.729,41.409,108.069,108.068
|
||||
C5.654,210.485-30.761,347.117,28.55,406.43c18.676,18.676,46.031,28.548,79.11,28.55c0.004,0,0.005,0,0.01,0
|
||||
c68.57,0,152.578-41.41,219.238-108.07C429.325,224.493,465.741,87.861,406.43,28.55z M42.952,392.531
|
||||
c-0.084-0.083-0.175-0.16-0.259-0.243c-0.015-0.015-0.028-0.031-0.043-0.046c-11.927-12.018-7.169-44.407,12.431-84.564
|
||||
c22.416-45.925,60.796-97.253,108.07-144.526C250.426,75.875,332.301,36.124,371.44,36.124c9.469,0,16.479,2.208,20.839,6.56
|
||||
c0.003,0.003,0.006,0.005,0.009,0.008c11.982,11.984,7.234,44.403-12.389,84.608c-22.416,45.926-60.797,97.253-108.071,144.527
|
||||
c-87.279,87.28-169.153,127.029-208.288,127.026C54.244,398.853,47.325,396.722,42.952,392.531z M122.211,122.211
|
||||
C185.258,59.165,263.85,20,327.317,20c4.708,0,9.252,0.246,13.647,0.696c-53.443,14.506-126.1,62.457-191.956,128.313
|
||||
c-48.799,48.799-88.539,102.033-111.9,149.896c-7.542,15.452-13.045,29.755-16.511,42.717
|
||||
C14.077,280.355,52.43,191.993,122.211,122.211z M312.766,312.767c-63.05,63.051-141.642,102.216-205.104,102.213
|
||||
c-4.708,0-9.253-0.246-13.648-0.697c53.442-14.505,126.099-62.456,191.956-128.313c48.799-48.8,88.54-102.034,111.901-149.897
|
||||
c7.543-15.453,13.046-29.758,16.512-42.72C420.904,154.619,382.55,242.983,312.766,312.767z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
BIN
HTML/PublicScoreboardDetails/PublicScoreboardDetails_v1.zip
Normal file
BIN
HTML/PublicScoreboardDetails/PublicScoreboardDetails_v1.zip
Normal file
Binary file not shown.
123
HTML/PublicScoreboardDetails/eventList.css
Normal file
123
HTML/PublicScoreboardDetails/eventList.css
Normal file
@ -0,0 +1,123 @@
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* Set a background color */
|
||||
body {
|
||||
background-color: #b8b8ba;
|
||||
font-family: Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
/* The actual timeline (the vertical ruler) */
|
||||
.timeline {
|
||||
position: relative;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.timeline-item {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 40px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
background-color: #f9f9f9;
|
||||
padding: 20px;
|
||||
position: relative;
|
||||
border-radius: 8px;
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
.timeline-content-match {
|
||||
background-color: rgb(69, 69, 69);
|
||||
color: white;
|
||||
min-width: 100px;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
padding-left: 30px;
|
||||
padding-right: 30px;
|
||||
position: relative;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
border-radius: 8px;
|
||||
border: 1px solid purple;
|
||||
text-align:center;
|
||||
}
|
||||
.match:first-child {
|
||||
margin-top: -20px;
|
||||
}
|
||||
.match:last-child {
|
||||
margin-bottom: -20px;
|
||||
}
|
||||
|
||||
.score-panel {
|
||||
font-size: 20px;
|
||||
color: white;
|
||||
background-color: gray;
|
||||
padding: 5px 10px 5px 10px;
|
||||
position: absolute;
|
||||
left: 50.1%;
|
||||
border-radius: 8px;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.delete-btn {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
background-color: #f00;
|
||||
/* background-color: #ff6347; */
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 5px 10px;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.icon {
|
||||
position: absolute;
|
||||
left: 50.1%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
color: black;
|
||||
/* Set the color of the icon */
|
||||
z-index: 1;
|
||||
/* Ensure the icon appears above the panel */
|
||||
}
|
||||
.yc {
|
||||
color: yellow;
|
||||
}
|
||||
.rc {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.away+.icon {
|
||||
color: red;
|
||||
}
|
||||
|
||||
.away {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.timeline:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
border-left: 2px solid black;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 768px) {
|
||||
.timeline-item {
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
width: 45%;
|
||||
}
|
||||
}
|
||||
58
HTML/PublicScoreboardDetails/eventList.html
Normal file
58
HTML/PublicScoreboardDetails/eventList.html
Normal file
@ -0,0 +1,58 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<head>
|
||||
<link href="eventList.css" rel="stylesheet" />
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css"
|
||||
integrity="5e2ESR8Ycmos6g3gAKr1Jvwye8sW4U1u/cAKulfVJnkakCcMqhOudbtPnvJ+nbv7" crossorigin="anonymous">
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.1/knockout-latest.js"
|
||||
integrity="sha512-2AL/VEauKkZqQU9BHgnv48OhXcJPx9vdzxN1JrKDVc4FPU/MEE/BZ6d9l0mP7VmvLsjtYwqiYQpDskK9dG8KBA=="
|
||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"
|
||||
integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="
|
||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--
|
||||
TODO:
|
||||
Add kick off time when match not started
|
||||
Add match event support (across line) in black and white.
|
||||
|
||||
-->
|
||||
|
||||
<!-- ko if: eventList().length === 0 -->
|
||||
<div> no events yet </div>
|
||||
<!-- /ko-->
|
||||
<!-- ko if: eventList().length > 0 -->
|
||||
<div class="timeline" data-bind="foreach: eventList">
|
||||
<!-- ko if: category === 'Match' -->
|
||||
<div class="timeline-item match">
|
||||
<div class="timeline-content-match">
|
||||
<p data-bind="text: $parent.getEventMessage($data)"></p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<!-- ko ifnot: category === 'Match' -->
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-content"
|
||||
data-bind="css: { away: category ==='Away' }, style: { 'border-color': category === 'Home' ? $parent.homeTeamColor() : $parent.awayTeamColor() }">
|
||||
<button class="delete-btn" data-bind="click: () => $parent.deleteEvent(id)">
|
||||
<i class="fa fa-trash"></i>
|
||||
</button>
|
||||
<p data-bind="text: $parent.getEventMessage($data)"></p>
|
||||
</div>
|
||||
<!-- ko if: eventType !== 'YellowCard' && eventType !== 'RedCard' -->
|
||||
<span class="score-panel" data-bind="text: $parent.getScoreAtEvent($data.id)"></span>
|
||||
<!-- /ko -->
|
||||
|
||||
<!-- ko if: eventType === 'YellowCard' || eventType === 'RedCard' -->
|
||||
<i class="fa fa-circle icon" data-bind="css:{ yc: eventType ==='YellowCard', rc: eventType==='RedCard' }"></i>
|
||||
<!-- /ko -->
|
||||
|
||||
</div>
|
||||
<!-- /ko-->
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<script src="eventList.js" type="text/javascript"></script>
|
||||
</body>
|
||||
105
HTML/PublicScoreboardDetails/eventList.js
Normal file
105
HTML/PublicScoreboardDetails/eventList.js
Normal file
@ -0,0 +1,105 @@
|
||||
|
||||
function viewModel() {
|
||||
const apiKey = '396A62D6-0192-4738-8F45-8AAF7BCFA3EC'; // Replace with your actual API key
|
||||
const apiUrl = 'https://localhost:7005/api/Score'; // Replace with your API endpoint URL
|
||||
|
||||
var self = this;
|
||||
|
||||
//API poll variables
|
||||
var INTERVAL = 5000;
|
||||
var timeout = null;
|
||||
var currentReq = null;
|
||||
//knockout variables
|
||||
self.gameState = ko.observable("");
|
||||
self.kickOffTime = ko.observable(new Date());
|
||||
|
||||
self.homeTeamName = ko.observable("Uckfield RFC");
|
||||
self.homeTeamColor = ko.observable("#ff0000");
|
||||
self.awayTeamName = ko.observable("Away team");
|
||||
self.awayTeamColor = ko.observable("#0000ff");
|
||||
|
||||
self.eventsHome = ko.observableArray([]);
|
||||
self.eventsAway = ko.observableArray([]);
|
||||
|
||||
this.homeTeamColor = ko.observable("#ff0000");
|
||||
this.awayTeamColor = ko.observable("#0000ff");
|
||||
|
||||
self.eventList = ko.observableArray([]);
|
||||
|
||||
var fetchNewData = function () {
|
||||
currentReq = fetch(apiUrl, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'x-api-key': apiKey
|
||||
},
|
||||
});
|
||||
|
||||
currentReq
|
||||
.then(processResponse)
|
||||
.then(processJson)
|
||||
.catch((error) => {
|
||||
return console.log(`Error Occurred retrieving data ${error}`);
|
||||
})
|
||||
.then(scheduleNewDataFetch);
|
||||
};
|
||||
|
||||
var processResponse = function (response) {
|
||||
if (!response.ok) {
|
||||
INTERVAL = 60000;
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
if (response.status === 204) {
|
||||
INTERVAL = 60000;
|
||||
return Promise.reject('No Game');
|
||||
}
|
||||
INTERVAL = 5000;
|
||||
return response.json();
|
||||
};
|
||||
|
||||
var processJson = function (data) {
|
||||
self.gameState(data.state);
|
||||
self.kickOffTime(new Date(data.startedAt));
|
||||
|
||||
self.homeTeamName(data.home.name);
|
||||
self.awayTeamName(data.away.name);
|
||||
|
||||
self.homeTeamColor(data.home.color);
|
||||
self.awayTeamColor(data.away.color);
|
||||
|
||||
self.eventList(data.eventHistory);
|
||||
};
|
||||
|
||||
var scheduleNewDataFetch = function () {
|
||||
if (timeout) {
|
||||
clearTimeout(timeout);
|
||||
}
|
||||
timeout = setTimeout(fetchNewData, INTERVAL);
|
||||
};
|
||||
|
||||
self.getEventMessage = function(evt) {
|
||||
var eventDate = new Date(evt.eventDate);
|
||||
var timeElapsed = eventDate - self.kickOffTime();
|
||||
var diffMins = Math.round(((timeElapsed % 86400000) % 3600000) / 60000);
|
||||
return `T${diffMins}: ${evt.eventType} Scored`
|
||||
}
|
||||
|
||||
self.getScoreAtEvent = function(evtId){
|
||||
var evts = self.eventList();
|
||||
var homeScore = 0;
|
||||
var awayScore = 0;
|
||||
evts.forEach(evt => {
|
||||
if(evt.id <= evtId){
|
||||
if(evt.category ==='Home'){
|
||||
homeScore += evt.points;
|
||||
} else {
|
||||
awayScore += evt.points;
|
||||
}
|
||||
}
|
||||
});
|
||||
return `${homeScore} - ${awayScore}`;
|
||||
}
|
||||
|
||||
fetchNewData(); // Starts the update loop
|
||||
};
|
||||
|
||||
ko.applyBindings(new viewModel());
|
||||
20
HTML/PublicScoreboardDetails/logo.svg
Normal file
20
HTML/PublicScoreboardDetails/logo.svg
Normal file
@ -0,0 +1,20 @@
|
||||
<svg viewBox="0 0 35 40" version="1.1" width="32" length="auto">
|
||||
<g id="shield" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path
|
||||
d="M24.9440298,0.636942674 C26.6113155,0.922262685 29.0926587,1.55920537 32.3880597,2.5477707 C34.1293532,7.30360933 35,12.6539278 35,18.5987261 C35,23.4394904 32.6492537,29.1719745 28.3395523,33.2484077 C25.6413422,35.8005735 22.0281581,38.0511042 17.5,40 C12.9718419,38.0511042 9.35865783,35.8005735 6.66044775,33.2484077 C2.35074626,29.1719745 0,23.4394904 0,18.5987261 C0,12.6539278 0.870646769,7.30360933 2.6119403,2.5477707 C5.90734124,1.55920537 8.38868452,0.922262685 10.0559702,0.636942674 C11.7232557,0.351622651 14.204599,0.139308434 17.5,0 C20.795401,0.139308434 23.2767442,0.351622651 24.9440298,0.636942674 Z"
|
||||
id="Primary"
|
||||
fill="#000000" />
|
||||
<path
|
||||
d="m 30.033126,6.9745223 c 1.293532,3.6857747 1.940298,7.8322717 1.940298,12.4394907 0,3.751592 -1.746269,8.194267 -4.947761,11.353503 C 25.021278,32.745444 22.337199,34.489606 18.973424,36 V 5 c 2.448012,0.107964 4.291296,0.2725076 5.529851,0.4936306 1.238555,0.221123 3.081838,0.7147536 5.529851,1.4808917 z"
|
||||
id="Darkening"
|
||||
fill="#000000"
|
||||
opacity="0.24"
|
||||
style="fill:#ffffff" />
|
||||
<path
|
||||
d="M 4.752799,6.9745223 C 3.459266,10.660297 2.8125,14.806794 2.8125,19.414013 c 0,3.751592 1.746269,8.194267 4.947761,11.353503 C 9.764646,32.745444 12.448725,34.489606 15.8125,36 V 5 C 13.364488,5.107964 11.521204,5.2725076 10.282649,5.4936306 9.044094,5.7147536 7.200811,6.2083842 4.752799,6.9745223 Z"
|
||||
id="Darkening-3"
|
||||
fill="#000000"
|
||||
opacity="0.24"
|
||||
style="fill:#ffffff" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
20
HTML/PublicScoreboardDetails/logo_.svg
Normal file
20
HTML/PublicScoreboardDetails/logo_.svg
Normal file
@ -0,0 +1,20 @@
|
||||
<svg viewBox="0 0 35 40" version="1.1" width="32" length="auto">
|
||||
<g id="shield" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path
|
||||
d="M24.9440298,0.636942674 C26.6113155,0.922262685 29.0926587,1.55920537 32.3880597,2.5477707 C34.1293532,7.30360933 35,12.6539278 35,18.5987261 C35,23.4394904 32.6492537,29.1719745 28.3395523,33.2484077 C25.6413422,35.8005735 22.0281581,38.0511042 17.5,40 C12.9718419,38.0511042 9.35865783,35.8005735 6.66044775,33.2484077 C2.35074626,29.1719745 0,23.4394904 0,18.5987261 C0,12.6539278 0.870646769,7.30360933 2.6119403,2.5477707 C5.90734124,1.55920537 8.38868452,0.922262685 10.0559702,0.636942674 C11.7232557,0.351622651 14.204599,0.139308434 17.5,0 C20.795401,0.139308434 23.2767442,0.351622651 24.9440298,0.636942674 Z"
|
||||
id="Primary"
|
||||
fill="#000000" />
|
||||
<path
|
||||
d="m 30.033126,6.9745223 c 1.293532,3.6857747 1.940298,7.8322717 1.940298,12.4394907 0,3.751592 -1.746269,8.194267 -4.947761,11.353503 C 25.021278,32.745444 22.337199,34.489606 18.973424,36 V 5 c 2.448012,0.107964 4.291296,0.2725076 5.529851,0.4936306 1.238555,0.221123 3.081838,0.7147536 5.529851,1.4808917 z"
|
||||
id="Darkening"
|
||||
fill="#000000"
|
||||
opacity="0.24"
|
||||
style="fill:#ffffff" />
|
||||
<path
|
||||
d="M 4.752799,6.9745223 C 3.459266,10.660297 2.8125,14.806794 2.8125,19.414013 c 0,3.751592 1.746269,8.194267 4.947761,11.353503 C 9.764646,32.745444 12.448725,34.489606 15.8125,36 V 5 C 13.364488,5.107964 11.521204,5.2725076 10.282649,5.4936306 9.044094,5.7147536 7.200811,6.2083842 4.752799,6.9745223 Z"
|
||||
id="Darkening-3"
|
||||
fill="#000000"
|
||||
opacity="0.24"
|
||||
style="fill:#ffffff" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
80
HTML/PublicScoreboardDetails/logo_inkscape.svg
Normal file
80
HTML/PublicScoreboardDetails/logo_inkscape.svg
Normal file
@ -0,0 +1,80 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 35 40"
|
||||
version="1.1"
|
||||
width="32"
|
||||
length="auto"
|
||||
id="svg852"
|
||||
sodipodi:docname="logo.svg"
|
||||
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview854"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
showgrid="false"
|
||||
inkscape:snap-global="true"
|
||||
inkscape:snap-bbox="true"
|
||||
inkscape:snap-grids="false"
|
||||
inkscape:zoom="10.1125"
|
||||
inkscape:cx="3.8071693"
|
||||
inkscape:cy="20.519159"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1017"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="shield" />
|
||||
<defs
|
||||
id="defs845">
|
||||
<linearGradient
|
||||
x1="14.901048"
|
||||
y1="26.882449"
|
||||
x2="37.416574"
|
||||
y2="4.1454513"
|
||||
id="linearGradient-1"
|
||||
gradientTransform="matrix(0.93541435,0,0,1.069045,-11.951483,0.10815822)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
stop-color="#FFFFFF"
|
||||
stop-opacity="0"
|
||||
offset="0%"
|
||||
id="stop840" />
|
||||
<stop
|
||||
stop-color="#FFFFFF"
|
||||
stop-opacity="0.4"
|
||||
offset="100%"
|
||||
id="stop842" />
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g
|
||||
id="shield"
|
||||
stroke="none"
|
||||
stroke-width="1"
|
||||
fill="none"
|
||||
fill-rule="evenodd">
|
||||
<path
|
||||
d="M24.9440298,0.636942674 C26.6113155,0.922262685 29.0926587,1.55920537 32.3880597,2.5477707 C34.1293532,7.30360933 35,12.6539278 35,18.5987261 C35,23.4394904 32.6492537,29.1719745 28.3395523,33.2484077 C25.6413422,35.8005735 22.0281581,38.0511042 17.5,40 C12.9718419,38.0511042 9.35865783,35.8005735 6.66044775,33.2484077 C2.35074626,29.1719745 0,23.4394904 0,18.5987261 C0,12.6539278 0.870646769,7.30360933 2.6119403,2.5477707 C5.90734124,1.55920537 8.38868452,0.922262685 10.0559702,0.636942674 C11.7232557,0.351622651 14.204599,0.139308434 17.5,0 C20.795401,0.139308434 23.2767442,0.351622651 24.9440298,0.636942674 Z"
|
||||
id="Primary"
|
||||
fill="#000000" />
|
||||
<path
|
||||
d="m 30.033126,6.9745223 c 1.293532,3.6857747 1.940298,7.8322717 1.940298,12.4394907 0,3.751592 -1.746269,8.194267 -4.947761,11.353503 C 25.021278,32.745444 22.337199,34.489606 18.973424,36 V 5 c 2.448012,0.107964 4.291296,0.2725076 5.529851,0.4936306 1.238555,0.221123 3.081838,0.7147536 5.529851,1.4808917 z"
|
||||
id="Darkening"
|
||||
fill="#000000"
|
||||
opacity="0.24"
|
||||
style="fill:#ffffff" />
|
||||
<path
|
||||
d="M 4.752799,6.9745223 C 3.459266,10.660297 2.8125,14.806794 2.8125,19.414013 c 0,3.751592 1.746269,8.194267 4.947761,11.353503 C 9.764646,32.745444 12.448725,34.489606 15.8125,36 V 5 C 13.364488,5.107964 11.521204,5.2725076 10.282649,5.4936306 9.044094,5.7147536 7.200811,6.2083842 4.752799,6.9745223 Z"
|
||||
id="Darkening-3"
|
||||
fill="#000000"
|
||||
opacity="0.24"
|
||||
style="fill:#ffffff" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
120
HTML/PublicScoreboardDetails/scoreboard.css
Normal file
120
HTML/PublicScoreboardDetails/scoreboard.css
Normal file
@ -0,0 +1,120 @@
|
||||
|
||||
.scoreboard {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 800px;
|
||||
margin: 0 auto;
|
||||
background-color: #e0e0e0;
|
||||
color: #333;
|
||||
padding: 10px;
|
||||
border: 4px solid #800080;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
.timer-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
background-color: #fff;
|
||||
border: 4px solid #800080;
|
||||
border-radius: 50%;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.timer {
|
||||
font-size: 38px;
|
||||
color: #333;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.half-indicator {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
color: #800080;
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
}
|
||||
|
||||
.border {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.team-details {
|
||||
font-size: 48px;
|
||||
color: white;
|
||||
background-color: #000;
|
||||
padding: 0px;
|
||||
text-align: center;
|
||||
max-height: 100px;
|
||||
border-radius: 0px 0px 30px 30px;
|
||||
}
|
||||
|
||||
.team {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border-radius: 10px 10px 10px 10px;
|
||||
}
|
||||
|
||||
.team-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.team-logo img {
|
||||
max-width: 50px;
|
||||
max-height: 50px;
|
||||
border-radius: 50%;
|
||||
background-color: #800080;
|
||||
padding: 5px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.team-name {
|
||||
font-weight: bold;
|
||||
font-size: 20px;
|
||||
color: white;
|
||||
margin-bottom: 5px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.team-score {
|
||||
font-size: 48px;
|
||||
color: white;
|
||||
background-color: #000;
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
max-height: 100px;
|
||||
border-radius: 0 0 10px 10px;
|
||||
}
|
||||
|
||||
.score-history {
|
||||
font-size: 14px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
/* Uckfield RFC's background color */
|
||||
#home-team {
|
||||
background-color: #ff0000;
|
||||
}
|
||||
|
||||
/* Away Team's background color */
|
||||
#away-team {
|
||||
background-color: #0000ff;
|
||||
}
|
||||
|
||||
39
HTML/PublicScoreboardDetails/scoreboard.html
Normal file
39
HTML/PublicScoreboardDetails/scoreboard.html
Normal file
@ -0,0 +1,39 @@
|
||||
<!DOCTYPE html>
|
||||
<head>
|
||||
<link rel="stylesheet" href="scoreboard.css">
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
|
||||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.1/knockout-latest.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="scoreboard" data-bind="if: gameOn">
|
||||
<div class="border">
|
||||
<div class="team" data-bind="style:{'background-color': homeTeamColor}">
|
||||
<div class="team-info">
|
||||
<div class="team-logo">
|
||||
<img data-bind="attr:{src: homeTeamLogo}" src="https://png.pngtree.com/png-clipart/20210129/ourmid/pngtree-blue-square-button-png-image_2844356.jpg" alt="Home Team Logo">
|
||||
</div>
|
||||
<div class="team-name" data-bind="text: homeTeamName">Home</div>
|
||||
</div>
|
||||
<div class="team-details">
|
||||
<div class="team-score" data-bind="text: homeTeamPoints">0</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="timer-container">
|
||||
<div class="timer" id="match-timer" data-bind="text: timerValue"></div>
|
||||
<div class="half-indicator" data-bind="text: halfIndicator"></div>
|
||||
</div>
|
||||
<div class="team" data-bind="style:{'background-color': awayTeamColor}">
|
||||
<div class="team-info">
|
||||
<div class="team-logo">
|
||||
<img data-bind="attr:{src: homeTeamLogo}" src="https://png.pngtree.com/png-clipart/20210129/ourmid/pngtree-blue-square-button-png-image_2844356.jpg" alt="AWAY TEAM">
|
||||
<div class="team-name" data-bind="text: awayTeamName">Away</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="team-details">
|
||||
<div class="team-score" data-bind="text: awayTeamPoints">0</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="scoreboardViewModel.js" type="text/javascript"></script>
|
||||
</body>
|
||||
283
HTML/PublicScoreboardDetails/scoreboardDetails.css
Normal file
283
HTML/PublicScoreboardDetails/scoreboardDetails.css
Normal file
@ -0,0 +1,283 @@
|
||||
.scoreboard {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
width: 800px;
|
||||
margin: 0 auto;
|
||||
background-color: #e0e0e0;
|
||||
color: #333;
|
||||
padding: 10px;
|
||||
border: 4px solid #800080;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
.timer-container {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
position: relative;
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
background-color: #fff;
|
||||
border: 4px solid #800080;
|
||||
border-radius: 50%;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.timer {
|
||||
font-size: 38px;
|
||||
color: #333;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.half-indicator {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
color: #800080;
|
||||
position: absolute;
|
||||
bottom: 10px;
|
||||
}
|
||||
|
||||
.kickoff-indicator {
|
||||
font-size: 25px;
|
||||
font-weight: bold;
|
||||
color: #800080;
|
||||
margin-top:auto;
|
||||
margin-bottom:auto;
|
||||
}
|
||||
.finalscore-indicator {
|
||||
font-size: 25px;
|
||||
font-weight: bold;
|
||||
color: #800080;
|
||||
margin-top:auto;
|
||||
margin-bottom:auto;
|
||||
}
|
||||
|
||||
.border {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.team-details {
|
||||
font-size: 48px;
|
||||
color: white;
|
||||
background-color: #000;
|
||||
padding: 0px;
|
||||
text-align: center;
|
||||
max-height: 100px;
|
||||
border-radius: 0px 0px 30px 30px;
|
||||
}
|
||||
|
||||
.team {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border-radius: 10px 10px 10px 10px;
|
||||
background-color: dimgrey;
|
||||
}
|
||||
|
||||
.team-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.team-logo {
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.team-logo svg {
|
||||
max-width: 60px;
|
||||
max-height: 60px;
|
||||
background-color: #800080;
|
||||
padding: 5px;
|
||||
margin-right:auto;
|
||||
margin-left:auto;
|
||||
}
|
||||
|
||||
.team-name {
|
||||
font-weight: bold;
|
||||
font-size: 20px;
|
||||
color: white;
|
||||
margin-bottom: 5px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.team-score {
|
||||
font-size: 48px;
|
||||
color: white;
|
||||
background-color: #000;
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
max-height: 100px;
|
||||
border-radius: 0 0 10px 10px;
|
||||
}
|
||||
|
||||
.score-history {
|
||||
font-size: 14px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
/* Uckfield RFC's background color */
|
||||
#home-team {
|
||||
background-color: #ff0000;
|
||||
}
|
||||
|
||||
/* Away Team's background color */
|
||||
#away-team {
|
||||
background-color: #0000ff;
|
||||
}
|
||||
|
||||
/*
|
||||
eventList
|
||||
*/
|
||||
.timeline {
|
||||
position: relative;
|
||||
padding: 20px;
|
||||
width: 50%;
|
||||
margin-top: 10px;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.timeline-item {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 40px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
background-color: #f9f9f9;
|
||||
padding: 20px;
|
||||
position: relative;
|
||||
border-radius: 8px;
|
||||
border: 1px solid black;
|
||||
}
|
||||
|
||||
.timeline-content-match {
|
||||
background-color: rgb(69, 69, 69);
|
||||
color: white;
|
||||
min-width: 100px;
|
||||
padding-top: 5px;
|
||||
padding-bottom: 5px;
|
||||
padding-left: 30px;
|
||||
padding-right: 30px;
|
||||
position: relative;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
border-radius: 8px;
|
||||
border: 1px solid purple;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.match:first-child {
|
||||
margin-top: -20px;
|
||||
}
|
||||
|
||||
.match:last-child {
|
||||
margin-bottom: -20px;
|
||||
}
|
||||
|
||||
.score-panel {
|
||||
font-size: 20px;
|
||||
color: white;
|
||||
background-color: gray;
|
||||
padding: 5px 10px 5px 10px;
|
||||
position: absolute;
|
||||
left: 50.1%;
|
||||
border-radius: 8px;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.delete-btn {
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 10px;
|
||||
background-color: #f00;
|
||||
/* background-color: #ff6347; */
|
||||
color: white;
|
||||
border: none;
|
||||
padding: 5px 10px;
|
||||
border-radius: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.icon {
|
||||
position: absolute;
|
||||
left: 50.1%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
color: black;
|
||||
/* Set the color of the icon */
|
||||
z-index: 1;
|
||||
/* Ensure the icon appears above the panel */
|
||||
}
|
||||
|
||||
.yc {
|
||||
color: yellow;
|
||||
text-shadow: 0 0 5px #000;
|
||||
}
|
||||
|
||||
.rc {
|
||||
color: red;
|
||||
text-shadow: 0 0 5px #000;
|
||||
}
|
||||
|
||||
.away {
|
||||
margin-left: auto;
|
||||
}
|
||||
|
||||
.timeline:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 50%;
|
||||
border-left: 2px solid black;
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1500px) {
|
||||
.timeline-item {
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
width: 40%;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 1499px) {
|
||||
.timeline {
|
||||
width: 80%;
|
||||
}
|
||||
.timeline-item {
|
||||
flex-direction: row;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.timeline-content {
|
||||
width: 40%;
|
||||
}
|
||||
}
|
||||
|
||||
.noMatch {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.summary-team-label {
|
||||
margin-top: 15px;
|
||||
margin-bottom: 15px;
|
||||
font-size: 25px;
|
||||
}
|
||||
125
HTML/PublicScoreboardDetails/scoreboardDetails.html
Normal file
125
HTML/PublicScoreboardDetails/scoreboardDetails.html
Normal file
@ -0,0 +1,125 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<head>
|
||||
<link rel="stylesheet" href="scoreboardDetails.css">
|
||||
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
|
||||
integrity="sha512-DTOQO9RWCH3ppGqcWaEA1BIZOC6xxalwEsw9c2QQeAIftl+Vegovlnee1c9QX4TctnWMn13TZye+giMm8e2LwA=="
|
||||
crossorigin="anonymous">
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.1/knockout-latest.min.js"
|
||||
integrity="sha512-vs7+jbztHoMto5Yd/yinM4/y2DOkPLt0fATcN+j+G4ANY2z4faIzZIOMkpBmWdcxt+596FemCh9M18NUJTZwvw=="
|
||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"
|
||||
integrity="sha512-v2CJ7UaYy4JwqLDIrZUI/4hqeoQieOmAZNXBeQyjo21dadnwR+8ZaIJVT8EE2iyI61OV8e6M8PP2/4hpQINQ/g=="
|
||||
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="noMatch" data-bind="ifnot: gameOn">
|
||||
No matches are scheduled at the moment; please check back later!
|
||||
</div>
|
||||
<div data-bind="if: gameOn">
|
||||
<div class="scoreboard">
|
||||
<div class="border">
|
||||
<div class="team">
|
||||
<div class="team-info">
|
||||
<div class="team-logo">
|
||||
<svg viewBox="0 0 35 40" version="1.1" width="32" length="auto">
|
||||
<g id="shield" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path
|
||||
d="M24.9440298,0.636942674 C26.6113155,0.922262685 29.0926587,1.55920537 32.3880597,2.5477707 C34.1293532,7.30360933 35,12.6539278 35,18.5987261 C35,23.4394904 32.6492537,29.1719745 28.3395523,33.2484077 C25.6413422,35.8005735 22.0281581,38.0511042 17.5,40 C12.9718419,38.0511042 9.35865783,35.8005735 6.66044775,33.2484077 C2.35074626,29.1719745 0,23.4394904 0,18.5987261 C0,12.6539278 0.870646769,7.30360933 2.6119403,2.5477707 C5.90734124,1.55920537 8.38868452,0.922262685 10.0559702,0.636942674 C11.7232557,0.351622651 14.204599,0.139308434 17.5,0 C20.795401,0.139308434 23.2767442,0.351622651 24.9440298,0.636942674 Z"
|
||||
id="Background" fill="#000000" />
|
||||
<path
|
||||
d="m 30.033126,6.9745223 c 1.293532,3.6857747 1.940298,7.8322717 1.940298,12.4394907 0,3.751592 -1.746269,8.194267 -4.947761,11.353503 C 25.021278,32.745444 22.337199,34.489606 18.973424,36 V 5 c 2.448012,0.107964 4.291296,0.2725076 5.529851,0.4936306 1.238555,0.221123 3.081838,0.7147536 5.529851,1.4808917 z"
|
||||
id="Darkening" fill="#000000" opacity="0.24" style="fill:#000000" />
|
||||
<path
|
||||
d="M 4.752799,6.9745223 C 3.459266,10.660297 2.8125,14.806794 2.8125,19.414013 c 0,3.751592 1.746269,8.194267 4.947761,11.353503 C 9.764646,32.745444 12.448725,34.489606 15.8125,36 V 5 C 13.364488,5.107964 11.521204,5.2725076 10.282649,5.4936306 9.044094,5.7147536 7.200811,6.2083842 4.752799,6.9745223 Z"
|
||||
id="Darkening-3" fill="#000000" opacity="0.8"
|
||||
data-bind="style: { fill: homeTeamColor}" />
|
||||
</g>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="team-name" data-bind="text: homeTeamName">Home</div>
|
||||
</div>
|
||||
<div class="team-details">
|
||||
<div class="team-score" data-bind="text: homeTeamPoints">0</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="timer-container">
|
||||
<!-- ko if: gameState() !== 'WaitingForStart' && gameState() !== 'Finished' && gameState() !== 'HalfTime'-->
|
||||
<div class="timer" id="match-timer" data-bind="text: calculateRemainingTime"></div>
|
||||
<div class="half-indicator" data-bind="text: halfIndicator"></div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: gameState() === 'WaitingForStart' -->
|
||||
<div class="kickoff-indicator" data-bind="text: halfIndicator"></div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: gameState() === 'Finished' -->
|
||||
<div class="finalscore-indicator">Full Time</div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: gameState() === 'HalfTime' -->
|
||||
<div class="kickoff-indicator">Half Time</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<div class="team">
|
||||
<div class="team-info">
|
||||
<div class="team-logo">
|
||||
<svg viewBox="0 0 35 40" version="1.1" width="32" length="auto">
|
||||
<g id="shield" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<path
|
||||
d="M24.9440298,0.636942674 C26.6113155,0.922262685 29.0926587,1.55920537 32.3880597,2.5477707 C34.1293532,7.30360933 35,12.6539278 35,18.5987261 C35,23.4394904 32.6492537,29.1719745 28.3395523,33.2484077 C25.6413422,35.8005735 22.0281581,38.0511042 17.5,40 C12.9718419,38.0511042 9.35865783,35.8005735 6.66044775,33.2484077 C2.35074626,29.1719745 0,23.4394904 0,18.5987261 C0,12.6539278 0.870646769,7.30360933 2.6119403,2.5477707 C5.90734124,1.55920537 8.38868452,0.922262685 10.0559702,0.636942674 C11.7232557,0.351622651 14.204599,0.139308434 17.5,0 C20.795401,0.139308434 23.2767442,0.351622651 24.9440298,0.636942674 Z"
|
||||
id="Background" fill="#000000" />
|
||||
<path
|
||||
d="m 30.033126,6.9745223 c 1.293532,3.6857747 1.940298,7.8322717 1.940298,12.4394907 0,3.751592 -1.746269,8.194267 -4.947761,11.353503 C 25.021278,32.745444 22.337199,34.489606 18.973424,36 V 5 c 2.448012,0.107964 4.291296,0.2725076 5.529851,0.4936306 1.238555,0.221123 3.081838,0.7147536 5.529851,1.4808917 z"
|
||||
id="Darkening" fill="#000000" opacity="0.24" style="fill:#000000" />
|
||||
<path
|
||||
d="M 4.752799,6.9745223 C 3.459266,10.660297 2.8125,14.806794 2.8125,19.414013 c 0,3.751592 1.746269,8.194267 4.947761,11.353503 C 9.764646,32.745444 12.448725,34.489606 15.8125,36 V 5 C 13.364488,5.107964 11.521204,5.2725076 10.282649,5.4936306 9.044094,5.7147536 7.200811,6.2083842 4.752799,6.9745223 Z"
|
||||
id="Darkening-3" fill="#000000" opacity="0.8"
|
||||
data-bind="style: { fill: awayTeamColor}" />
|
||||
</g>
|
||||
</svg>
|
||||
<div class="team-name" data-bind="text: awayTeamName">Away</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="team-details">
|
||||
<div class="team-score" data-bind="text: awayTeamPoints">0</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- ko if: eventList().length === 0 && gameState() !== 'WaitingForStart' -->
|
||||
<div class="noMatch">No events available yet.</div>
|
||||
<!-- /ko-->
|
||||
<!-- ko if: eventList().length > 0 -->
|
||||
<div class="timeline" data-bind="foreach: eventList">
|
||||
<!-- ko if: category === 'Match' -->
|
||||
<div class="timeline-item match">
|
||||
<div class="timeline-content-match">
|
||||
<p data-bind="text: $parent.getEventMessage($data)"></p>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<!-- ko ifnot: category === 'Match' -->
|
||||
<div class="timeline-item">
|
||||
<div class="timeline-content"
|
||||
data-bind="css: { away: category ==='Away' }, style: { 'border-color': category === 'Home' ? $parent.homeTeamColor() : $parent.awayTeamColor() }">
|
||||
<p data-bind="text: $parent.getEventMessage($data)"></p>
|
||||
</div>
|
||||
<!-- ko if: eventType !== 'YellowCard' && eventType !== 'RedCard' -->
|
||||
<span class="score-panel" data-bind="text: $parent.getScoreAtEvent($data.id)"></span>
|
||||
<!-- /ko -->
|
||||
|
||||
<!-- ko if: eventType === 'YellowCard' || eventType === 'RedCard' -->
|
||||
<i class="fa fa-circle icon"
|
||||
data-bind="css:{ yc: eventType ==='YellowCard', rc: eventType ==='RedCard' }"></i>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<!-- /ko-->
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
|
||||
<script src="scoreboardDetails.js" type="text/javascript"></script>
|
||||
</body>
|
||||
241
HTML/PublicScoreboardDetails/scoreboardDetails.js
Normal file
241
HTML/PublicScoreboardDetails/scoreboardDetails.js
Normal file
@ -0,0 +1,241 @@
|
||||
|
||||
function ScoreboardDetails() {
|
||||
const apiKey = '396A62D6-0192-4738-8F45-8AAF7BCFA3EC'; // Replace with your actual API key
|
||||
const apiUrl = 'https://localhost:7005/api/Score'; // Replace with your API endpoint URL
|
||||
const matchDuration = 80 * 60 * 1000;
|
||||
|
||||
var self = this;
|
||||
//API poll variables
|
||||
var INTERVAL = 5000;
|
||||
var timeout = null;
|
||||
var currentReq = null;
|
||||
|
||||
//knockout variables
|
||||
this.gameState = ko.observable("");
|
||||
this.half = ko.observable("Pre");
|
||||
this.kickOffTime = ko.observable(new Date());
|
||||
|
||||
this.gameOn = ko.observable(false);
|
||||
this.eventList = ko.observableArray([]);
|
||||
|
||||
this.homeTeamName = ko.observable("Uckfield RFC");
|
||||
this.homeTeamColor = ko.observable("#ff0000");
|
||||
this.homeTeamPoints = ko.observable(0);
|
||||
this.homeTeamLogo = ko.observable("");
|
||||
|
||||
this.awayTeamName = ko.observable("Away team");
|
||||
this.awayTeamColor = ko.observable("#0000ff");
|
||||
this.awayTeamPoints = ko.observable(0);
|
||||
this.awayTeamLogo = ko.observable("");
|
||||
|
||||
self.calculateRemainingTime = ko.computed(function () {
|
||||
if (self.half() === 'Pre') { return "---"; }
|
||||
if (self.gameState() === 'HalfTime') { return '40:00'; }
|
||||
if (self.gameState() === 'Finished') { return '80:00'; }
|
||||
return calc();
|
||||
});
|
||||
var isSecondHalfEvent=function(matchEvts){
|
||||
return !!matchEvts.find(e=>e.eventType === 'SecondHalfStart');
|
||||
};
|
||||
var calc = function (eventId = 0, minsOnly=false) {
|
||||
var matchEvts = self.eventList().filter(x => (x.category === 'Match' && x.id <= eventId) || x.id === eventId);
|
||||
var initialTime = self.kickOffTime(); //IF FIRST HALF, WORK OUT FOR IF SECOND HALF
|
||||
var halfStart = self.kickOffTime();
|
||||
var offsetMins = 0;
|
||||
|
||||
if ((eventId != 0 &&isSecondHalfEvent(matchEvts))
|
||||
|| (eventId == 0 && self.half() === 'Second')) {
|
||||
var secondHalfEvent = self.eventList().find(x => x.eventType === 'SecondHalfStart');
|
||||
if (!secondHalfEvent) {
|
||||
throw 'Invalid System Event State, Second Half without Second Half Event';
|
||||
}
|
||||
halfStart = new Date(secondHalfEvent.timeStamp);
|
||||
initialTime = new Date(secondHalfEvent.timeStamp);
|
||||
offsetMins = 40;
|
||||
matchEvts = self.eventList().filter(x=>x.id >= secondHalfEvent.id && (x.category === 'Match' || x.id === eventId))
|
||||
}
|
||||
|
||||
if (!matchEvts || matchEvts.length <= 1) {
|
||||
const diff = calcDiff(initialTime, new Date());
|
||||
return `${String(diff.mins + offsetMins).padStart(2, "0")}:${String(diff.secs).padStart(2, "0")}`
|
||||
}
|
||||
|
||||
var totalMins = offsetMins;
|
||||
var totalSecs = 0;
|
||||
|
||||
matchEvts.forEach((evt, idx, src) => {
|
||||
if (eventId === 0 || evt.id <= eventId) {
|
||||
if (evt.eventType === 'TimeOff') {
|
||||
var t = calcDiff(initialTime, new Date(evt.timeStamp));
|
||||
totalMins += t.mins;
|
||||
totalSecs += t.secs;
|
||||
}
|
||||
if (evt.eventType === 'TimeOn') {
|
||||
initialTime = new Date(evt.timeStamp);
|
||||
if(idx === (src.length-1)){
|
||||
var t = calcDiff(new Date(evt.timeStamp), new Date());
|
||||
totalMins += t.mins;
|
||||
totalSecs += t.secs;
|
||||
}
|
||||
}
|
||||
if (eventId != 0 && eventId === evt.id) {
|
||||
var t = calcDiff(initialTime, new Date(evt.timeStamp));
|
||||
totalMins += t.mins;
|
||||
totalSecs += t.secs;
|
||||
}
|
||||
}
|
||||
});
|
||||
if (totalSecs >= 60) {
|
||||
totalMins += 1;
|
||||
totalSecs = totalSecs % 60;
|
||||
}
|
||||
if(minsOnly){
|
||||
return `${String(totalMins).padStart(2, "0")}`;
|
||||
}
|
||||
return `${String(totalMins).padStart(2, "0")}:${String(totalSecs).padStart(2, "0")}`;
|
||||
}
|
||||
|
||||
self.halfIndicator = ko.computed(function () {
|
||||
const gameState = self.gameState();
|
||||
if (gameState === "WaitingForStart") {
|
||||
var dt = self.kickOffTime();
|
||||
return `${String(dt.getHours()).padStart(2, "0")}:${String(dt.getMinutes()).padStart(2, "0")} KO`;
|
||||
}
|
||||
if (gameState === "FirstHalf") {
|
||||
return "1st Half";
|
||||
}
|
||||
if (gameState === "SecondHalf") {
|
||||
return "2nd Half";
|
||||
}
|
||||
if (gameState === "TimeOff") {
|
||||
return "Time Off";
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
var fetchNewData = function () {
|
||||
currentReq = fetch(apiUrl, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'x-api-key': apiKey
|
||||
},
|
||||
});
|
||||
|
||||
currentReq
|
||||
.then(processResponse)
|
||||
.then(processJson)
|
||||
.catch((error) => console.log(`Error Occurred retrieving data ${error}`))
|
||||
.then(scheduleNewDataFetch);
|
||||
};
|
||||
|
||||
var processResponse = function (response) {
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
if (response.status === 204) {
|
||||
self.gameOn(false);
|
||||
INTERVAL = 60000;
|
||||
return Promise.reject('no game');
|
||||
}
|
||||
INTERVAL = 5000;
|
||||
return response.json();
|
||||
};
|
||||
|
||||
var processJson = function (data) {
|
||||
self.eventList(data.eventHistory);
|
||||
self.gameOn(true);
|
||||
self.gameState(data.state);
|
||||
self.half(data.half);
|
||||
self.kickOffTime(new Date(data.startedAt));
|
||||
|
||||
self.homeTeamName(data.home.name);
|
||||
self.awayTeamName(data.away.name);
|
||||
|
||||
self.homeTeamPoints(data.home.points);
|
||||
self.awayTeamPoints(data.away.points);
|
||||
};
|
||||
|
||||
var scheduleNewDataFetch = function () {
|
||||
if (timeout) {
|
||||
clearTimeout(timeout);
|
||||
}
|
||||
timeout = setTimeout(fetchNewData, INTERVAL);
|
||||
};
|
||||
|
||||
self.getEventMessage = function (evt) {
|
||||
var eventMins = self.getEventTime(evt);
|
||||
var eventMsg = parseEventType(evt.eventType);
|
||||
|
||||
if (evt.category !== "Match") {
|
||||
if (evt.eventType === "YellowCard" || evt.eventType === "RedCard") {
|
||||
return `${eventMins} mins: ${eventMsg}`;
|
||||
}
|
||||
return `${eventMins} mins: ${eventMsg} Scored`;
|
||||
}
|
||||
return `${eventMsg}`;
|
||||
}
|
||||
|
||||
self.getScoreAtEvent = function (evtId) {
|
||||
var evts = self.eventList();
|
||||
var homeScore = 0;
|
||||
var awayScore = 0;
|
||||
evts.forEach(evt => {
|
||||
if (evt.id <= evtId) {
|
||||
if (evt.category === 'Home') {
|
||||
homeScore += evt.points;
|
||||
} else {
|
||||
awayScore += evt.points;
|
||||
}
|
||||
}
|
||||
});
|
||||
return `${homeScore} - ${awayScore}`;
|
||||
}
|
||||
|
||||
self.getEventTime = function (evt) {
|
||||
if (evt.category === 'Match') { return; }
|
||||
let t = calc(evt.id, true);
|
||||
return t;
|
||||
|
||||
var eventDate = new Date(evt.timeStamp);
|
||||
var diffMs = eventDate - self.kickOffTime();
|
||||
var timeMins = Math.round(((diffMs % 86400000) % 3600000) / 60000);
|
||||
return timeMins;
|
||||
}
|
||||
|
||||
var parseEventType = function(evtType){
|
||||
switch (evtType) {
|
||||
case 'DropGoal':
|
||||
return 'Drop Goal';
|
||||
case 'HalfTime':
|
||||
return 'Half Time';
|
||||
case 'MatchStart':
|
||||
return 'Match Start';
|
||||
case 'SecondHalfStart':
|
||||
return 'Second Half Start';
|
||||
case 'TimeOff':
|
||||
return 'Time Off';
|
||||
case 'TimeOn':
|
||||
return 'Time On';
|
||||
case 'YellowCard':
|
||||
return 'Yellow Card';
|
||||
case 'RedCard':
|
||||
return 'Red Card';
|
||||
case 'MatchEnd':
|
||||
return 'Full Time';
|
||||
default:
|
||||
return evtType;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var calcDiff = function (startTimeStamp, endTimeStamp) {
|
||||
var diff = endTimeStamp - startTimeStamp;
|
||||
const minutes = Math.floor(diff / 60000);
|
||||
const seconds = Math.floor((diff % 60000) / 1000);
|
||||
return { mins: minutes, secs: seconds }
|
||||
}
|
||||
|
||||
fetchNewData(); // Starts the update loop
|
||||
}
|
||||
|
||||
ko.applyBindings(new ScoreboardDetails());
|
||||
118
HTML/PublicScoreboardDetails/scoreboardViewModel.js
Normal file
118
HTML/PublicScoreboardDetails/scoreboardViewModel.js
Normal file
@ -0,0 +1,118 @@
|
||||
function MatchEvent(event){
|
||||
var self = this;
|
||||
self.id = ko.observable(event.id);
|
||||
self.eventType = ko.observable(event.EventType);
|
||||
self.eventTimeStamp = ko.observable(event.TimeStamp);
|
||||
self.eventPoint = ko.observable(event.Points);
|
||||
}
|
||||
function Team (team){
|
||||
var self = this;
|
||||
self.name = ko.observable(team.name);
|
||||
self.points = ko.observable(team.points);
|
||||
self.eventHistory = ko.observableArray(team.EventHistory.map((evt) => new MatchEvent(evt)));
|
||||
}
|
||||
|
||||
function ScoreboardViewModel() {
|
||||
const apiKey = '396A62D6-0192-4738-8F45-8AAF7BCFA3EC'; // Replace with your actual API key
|
||||
const apiUrl = 'https://localhost:7005/api/Score'; // Replace with your API endpoint URL
|
||||
const matchDuration = 80 * 60 * 1000;
|
||||
|
||||
var self = this;
|
||||
//API poll variables
|
||||
var INTERVAL = 5000;
|
||||
var timeout = null;
|
||||
var currentReq = null;
|
||||
|
||||
//knockout variables
|
||||
this.gameState = ko.observable("");
|
||||
this.kickOffTime = ko.observable(new Date());
|
||||
|
||||
this.gameOn = ko.observable(false);
|
||||
|
||||
this.homeTeamName = ko.observable("Uckfield RFC");
|
||||
this.homeTeamColor = ko.observable("#ff0000");
|
||||
this.homeTeamPoints = ko.observable(0);
|
||||
this.homeTeamLogo = ko.observable("");
|
||||
this.homeTeamEvents = ko.observable([]);
|
||||
|
||||
this.awayTeamName = ko.observable("Away team");
|
||||
this.awayTeamColor = ko.observable("#0000ff");
|
||||
this.awayTeamPoints = ko.observable(0);
|
||||
this.awayTeamLogo = ko.observable("");
|
||||
this.awayEvents = ko.observableArray([]);
|
||||
|
||||
self.timerValue = ko.computed( function() {
|
||||
const currentTime = new Date();
|
||||
const elapsedTime = currentTime - self.kickOffTime();
|
||||
const remainingTime = Math.max(0, matchDuration - elapsedTime);
|
||||
|
||||
const minutes = Math.floor(remainingTime / 60000);
|
||||
const seconds = Math.floor((remainingTime % 60000) / 1000);
|
||||
return `${String(minutes).padStart(2, "0")}:${String(seconds).padStart(2, "0")}`;
|
||||
});
|
||||
|
||||
self.halfIndicator = ko.computed(function(){
|
||||
const gameState = self.gameState();
|
||||
if(gameState ==="WaitingForStart"){
|
||||
var dt = self.kickOffTime();
|
||||
return `KO @${String(dt.getHours()).padStart(2,"0")}:${String(dt.getMinutes()).padStart(2,"0")}`;
|
||||
}
|
||||
if(gameState === "FirstHalf"){
|
||||
return "1st Half";
|
||||
}
|
||||
if(gameState === "SecondHalf"){
|
||||
return "2nd Half";
|
||||
}
|
||||
});
|
||||
|
||||
var fetchNewData = function() {
|
||||
currentReq = fetch(apiUrl, {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'x-api-key': apiKey
|
||||
},
|
||||
});
|
||||
|
||||
currentReq
|
||||
.then(processResponse)
|
||||
.then(processJson)
|
||||
.catch((error)=>console.log(`Error Occurred retrieving data ${error}`))
|
||||
.then(scheduleNewDataFetch);
|
||||
};
|
||||
|
||||
var processResponse = function(response) {
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
if(response.status === 204){
|
||||
self.gameOn(false);
|
||||
INTERVAL = 60000;
|
||||
return Promise.reject('no game');
|
||||
}
|
||||
INTERVAL = 5000;
|
||||
return response.json();
|
||||
};
|
||||
|
||||
var processJson = function(data) {
|
||||
self.gameOn(true);
|
||||
self.gameState(data.state);
|
||||
self.kickOffTime(new Date(data.startedAt));
|
||||
|
||||
self.homeTeamName(data.home.name);
|
||||
self.awayTeamName(data.away.name);
|
||||
|
||||
self.homeTeamPoints(data.home.points);
|
||||
self.awayTeamPoints(data.away.points);
|
||||
};
|
||||
|
||||
var scheduleNewDataFetch = function() {
|
||||
if (timeout) {
|
||||
clearTimeout(timeout);
|
||||
}
|
||||
timeout = setTimeout(fetchNewData, INTERVAL);
|
||||
};
|
||||
|
||||
fetchNewData(); // Starts the update loop
|
||||
}
|
||||
|
||||
ko.applyBindings(new ScoreboardViewModel());
|
||||
25
Scoreboard.sln
Normal file
25
Scoreboard.sln
Normal file
@ -0,0 +1,25 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.6.33723.286
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ScoreboardApi", "ScoreboardApi\ScoreboardApi.csproj", "{9F80E54A-D08F-4FC5-A56D-ADE8EA381CAF}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{9F80E54A-D08F-4FC5-A56D-ADE8EA381CAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9F80E54A-D08F-4FC5-A56D-ADE8EA381CAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9F80E54A-D08F-4FC5-A56D-ADE8EA381CAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9F80E54A-D08F-4FC5-A56D-ADE8EA381CAF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {DE24DFDF-6F5A-4851-A186-66A1D1C52A87}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
12
ScoreboardApi/.config/dotnet-tools.json
Normal file
12
ScoreboardApi/.config/dotnet-tools.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"version": 1,
|
||||
"isRoot": true,
|
||||
"tools": {
|
||||
"dotnet-ef": {
|
||||
"version": "7.0.11",
|
||||
"commands": [
|
||||
"dotnet-ef"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
84
ScoreboardApi/ApiKeyAuthMiddleware.cs
Normal file
84
ScoreboardApi/ApiKeyAuthMiddleware.cs
Normal file
@ -0,0 +1,84 @@
|
||||
using System.Globalization;
|
||||
|
||||
namespace ScoreboardApi
|
||||
{
|
||||
using Microsoft.Extensions.Primitives;
|
||||
using ScoreboardApi.Settings;
|
||||
//extend to make API keys have "permissions" - readonly/readwrite
|
||||
public class ApiKeyAuthMiddleware
|
||||
{
|
||||
private const string ApiKeyHeader = "x-api-key";
|
||||
private readonly RequestDelegate _next;
|
||||
private readonly ApplicationSettings settings;
|
||||
|
||||
public ApiKeyAuthMiddleware(RequestDelegate next, ApplicationSettings settings)
|
||||
{
|
||||
_next = next;
|
||||
this.settings = settings;
|
||||
}
|
||||
|
||||
public async Task InvokeAsync(HttpContext context)
|
||||
{
|
||||
//do auth
|
||||
if (!IsAuthenticated(context))
|
||||
{
|
||||
context.Response.Clear();
|
||||
context.Response.StatusCode = 401;
|
||||
context.Response.ContentType = "text/plain";
|
||||
await context.Response.WriteAsync("Unauthorized");
|
||||
return;
|
||||
}
|
||||
|
||||
// Call the next delegate/middleware in the pipeline.
|
||||
await _next(context);
|
||||
}
|
||||
|
||||
private bool IsAuthenticated(HttpContext context)
|
||||
{
|
||||
if (context.Request.Headers.TryGetValue(ApiKeyHeader, out StringValues values))
|
||||
{
|
||||
if (values.Count > 1)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
string? apiKeyValue = values.First();
|
||||
bool parseResult = Guid.TryParse(apiKeyValue, out Guid apiKey);
|
||||
if(!parseResult)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var keyEntry = settings.AllowedApiKeys.FirstOrDefault(x => x.ApiKey == apiKey);
|
||||
if(keyEntry == null
|
||||
|| keyEntry.Permission == Permissions.Disallowed)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!RequestIsReading(context.Request)
|
||||
&& keyEntry.Permission == Permissions.ReadOnly)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool RequestIsReading(HttpRequest request)
|
||||
{
|
||||
return request.Method == "GET";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class ApiKeyAuthMiddlewareExtensions
|
||||
{
|
||||
public static IApplicationBuilder UseApiKeyAuthentication(
|
||||
this IApplicationBuilder builder) =>
|
||||
builder.UseMiddleware<ApiKeyAuthMiddleware>();
|
||||
}
|
||||
}
|
||||
91
ScoreboardApi/Controllers/CompetitionController.cs
Normal file
91
ScoreboardApi/Controllers/CompetitionController.cs
Normal file
@ -0,0 +1,91 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using ScoreboardApi.Objects;
|
||||
using System.Net;
|
||||
|
||||
namespace ScoreboardApi.Controllers
|
||||
{
|
||||
//[Route("competition")]
|
||||
//[ApiController]
|
||||
public class CompetitionController
|
||||
{
|
||||
[HttpPost]
|
||||
public IActionResult Create(Competition comp, bool generateFixtures = true) =>
|
||||
new StatusCodeResult((int)HttpStatusCode.NotImplemented);
|
||||
}
|
||||
|
||||
public class Competition
|
||||
{
|
||||
public Format format { get; set; }
|
||||
public List<Team> Teams { get; set; }
|
||||
public List<Fixture> Fixtures { get; set; }
|
||||
public int MatchDurationMinutes { get; set; }
|
||||
}
|
||||
|
||||
public class Fixture
|
||||
{
|
||||
public Team Home { get; set; }
|
||||
public Team Away { get; set; }
|
||||
public int Round { get; set; }
|
||||
public DateTimeOffset KickOffTime { get; set; }
|
||||
}
|
||||
|
||||
public enum Format
|
||||
{
|
||||
RoundRobin = 1,
|
||||
Elimination = 2
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
/ko
|
||||
/toff
|
||||
/ton
|
||||
|
||||
/halftime
|
||||
/secondhalf
|
||||
|
||||
|
||||
/end
|
||||
|
||||
//get all match events from start point (second half/firsthalf)
|
||||
//iterate
|
||||
// if no event, use .now
|
||||
// else calculate diff from initial to event time.
|
||||
// iterate next
|
||||
|
||||
|
||||
self.calculateRemainingTime = ko.computed(function(){
|
||||
if(halftime){return '40:00';}
|
||||
if(matchend){return '80:00';}
|
||||
|
||||
var matchEvts = eventList.Filter(x=>x.category === 'Match');
|
||||
var initialTime = self.kickOffTime(); //IF FIRST HALF, WORK OUT FOR IF SECOND HALF
|
||||
|
||||
if(!matchEvts){
|
||||
return calcDiff(initialTime, new Date());
|
||||
}
|
||||
var totalMins = 0;
|
||||
var totalSecs = 0;
|
||||
|
||||
matchEvts.forEach((evt)=>{
|
||||
if(evt.eventType === 'timeOff'){
|
||||
var t = calcDiff(initialTime, timeoff.timestamp);
|
||||
totalMins += t.minutes;
|
||||
totalSecs += t.seconds;
|
||||
}
|
||||
if(evt.eventType === 'timeOn'){
|
||||
initialTime = timeon.timestamp;
|
||||
}
|
||||
});
|
||||
|
||||
return `${String(totalMins).padStart(2, "0")}:${String(totalSecs).padStart(2, "0")}`;
|
||||
});
|
||||
|
||||
var calcDiff = function (startTimeStamp, endTimeStamp){
|
||||
var diff = endTimeStamp - startTimeStamp;
|
||||
const minutes = Math.floor(remainingTime / 60000);
|
||||
const seconds = Math.floor((remainingTime % 60000) / 1000);
|
||||
return new {mins: minutes, secs:seconds}
|
||||
}
|
||||
*/
|
||||
134
ScoreboardApi/Controllers/ScoreController.cs
Normal file
134
ScoreboardApi/Controllers/ScoreController.cs
Normal file
@ -0,0 +1,134 @@
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace ScoreboardApi.Controllers
|
||||
{
|
||||
using ScoreboardApi.Extensions;
|
||||
using ScoreboardApi.Objects;
|
||||
|
||||
[Route("api/[controller]")]
|
||||
[ApiController]
|
||||
public class ScoreController : ControllerBase
|
||||
{
|
||||
private readonly IGameManager gameManager;
|
||||
|
||||
public ScoreController(IGameManager gameManager)
|
||||
{
|
||||
this.gameManager = gameManager;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get the current match score
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
[HttpGet]
|
||||
public ActionResult GetCurrentScore() =>
|
||||
Ok(gameManager.GetScore());
|
||||
|
||||
/// <summary>
|
||||
/// Abbreviated match summary for displays
|
||||
/// </summary>
|
||||
/// <returns>Simple Match summary indicating the match state, and the points for each team</returns>
|
||||
[HttpGet]
|
||||
[Route("summary")]
|
||||
public ActionResult GetScoreSummary()
|
||||
{
|
||||
var game = gameManager.GetScore();
|
||||
|
||||
return Ok(
|
||||
new
|
||||
{
|
||||
Home = game.Home.Points,
|
||||
Away = game.Away.Points,
|
||||
State = game.State
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Start a New Game
|
||||
/// </summary>
|
||||
/// <param name="request">
|
||||
/// Details about the game to start
|
||||
/// </param>
|
||||
[HttpPost]
|
||||
public ActionResult StartNewGame([FromBody] StartGameRequest request)
|
||||
{
|
||||
if (request.Home == null || request.Away == null)
|
||||
{
|
||||
return BadRequest();
|
||||
}
|
||||
|
||||
if (request.KickOffTime == default)
|
||||
{
|
||||
request.KickOffTime = DateTimeOffset.Now;
|
||||
}
|
||||
|
||||
gameManager.StartNew(request.Home, request.Away, request.KickOffTime);
|
||||
return Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Add new event to the given team.
|
||||
/// </summary>
|
||||
/// <param name="newEvent">The new event to add. Event Category indicates who the event belongs to.</param>
|
||||
[HttpPatch]
|
||||
[Route("event")]
|
||||
public ActionResult AddEvent([FromBody] Event newEvent)
|
||||
{
|
||||
if (!Enum.IsDefined(newEvent.EventType))
|
||||
{
|
||||
return BadRequest($"{nameof(EventType)} supplied is invalid.");
|
||||
}
|
||||
if(gameManager.GetScore().State == GameState.TimeOff && !newEvent.EventType.IsMatchEvent())
|
||||
{
|
||||
return BadRequest($"{newEvent.EventType} is not valid when Time is Off");
|
||||
}
|
||||
|
||||
if (newEvent.EventType.IsMatchEvent())
|
||||
{
|
||||
newEvent.Category = EventCategory.Match;
|
||||
}
|
||||
else if (!Enum.IsDefined(newEvent.Category))
|
||||
{
|
||||
return BadRequest($"{nameof(EventCategory)} supplied is invalid.");
|
||||
}
|
||||
|
||||
if (newEvent.TimeStamp == default)
|
||||
{
|
||||
newEvent.TimeStamp = DateTimeOffset.Now;
|
||||
}
|
||||
|
||||
gameManager.AddEvent(newEvent);
|
||||
return Ok();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// End the current game
|
||||
/// </summary>
|
||||
[HttpPatch]
|
||||
[Route("endGame")]
|
||||
public void EndGame()
|
||||
{
|
||||
gameManager.Finish();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Reset the system, remove all current data.
|
||||
/// </summary>
|
||||
[HttpDelete]
|
||||
public void ResetGame()
|
||||
{
|
||||
gameManager.ResetGame();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Remove the given event from the collection
|
||||
/// </summary>
|
||||
/// <param name="eventId"></param>
|
||||
[HttpDelete]
|
||||
[Route("event/{eventId}")]
|
||||
public void DeleteEvent(int eventId)
|
||||
{
|
||||
gameManager.DeleteEvent(eventId);
|
||||
}
|
||||
}
|
||||
}
|
||||
12
ScoreboardApi/Controllers/StartGameRequest.cs
Normal file
12
ScoreboardApi/Controllers/StartGameRequest.cs
Normal file
@ -0,0 +1,12 @@
|
||||
namespace ScoreboardApi.Controllers
|
||||
{
|
||||
using ScoreboardApi.Objects;
|
||||
|
||||
public class StartGameRequest
|
||||
{
|
||||
public Team Home { get; set; }
|
||||
public Team Away { get; set; }
|
||||
public DateTimeOffset KickOffTime { get; set; }
|
||||
}
|
||||
//Add Export.
|
||||
}
|
||||
22
ScoreboardApi/Dockerfile
Normal file
22
ScoreboardApi/Dockerfile
Normal file
@ -0,0 +1,22 @@
|
||||
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
|
||||
WORKDIR /app
|
||||
EXPOSE 80
|
||||
EXPOSE 443
|
||||
|
||||
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
|
||||
WORKDIR /src
|
||||
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
|
||||
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
|
||||
COPY . .
|
||||
WORKDIR "/src/WebApplication1"
|
||||
RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build
|
||||
|
||||
FROM build AS publish
|
||||
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish /p:UseAppHost=false
|
||||
|
||||
FROM base AS final
|
||||
WORKDIR /app
|
||||
COPY --from=publish /app/publish .
|
||||
ENTRYPOINT ["dotnet", "WebApplication1.dll"]
|
||||
23
ScoreboardApi/Extensions/AppSettingsExtensions.cs
Normal file
23
ScoreboardApi/Extensions/AppSettingsExtensions.cs
Normal file
@ -0,0 +1,23 @@
|
||||
namespace ScoreboardApi.Extensions
|
||||
{
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using Newtonsoft.Json;
|
||||
using ScoreboardApi.Settings;
|
||||
|
||||
[ExcludeFromCodeCoverage]
|
||||
public static class AppSettingsExtensions
|
||||
{
|
||||
public static void Verify<TApplicationSettings>(this ApplicationSettings appSettings)
|
||||
where TApplicationSettings : ApplicationSettings
|
||||
{
|
||||
try
|
||||
{
|
||||
JsonConvert.DeserializeObject<TApplicationSettings>(JsonConvert.SerializeObject((object)appSettings));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception(string.Format("There is a problem with the structure of the appsettings.json. Require sections or items may be missing or named incorrectly. Details: {0}", (object)ex.Message));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
18
ScoreboardApi/Extensions/EventTypeExtensions.cs
Normal file
18
ScoreboardApi/Extensions/EventTypeExtensions.cs
Normal file
@ -0,0 +1,18 @@
|
||||
using ScoreboardApi.Objects;
|
||||
|
||||
namespace ScoreboardApi.Extensions
|
||||
{
|
||||
public static class EventTypeExtensions
|
||||
{
|
||||
public static bool IsMatchEvent(this EventType eventType)
|
||||
{
|
||||
return eventType is
|
||||
EventType.MatchStart
|
||||
or EventType.HalfTime
|
||||
or EventType.SecondHalfStart
|
||||
or EventType.TimeOff
|
||||
or EventType.TimeOn
|
||||
or EventType.MatchEnd;
|
||||
}
|
||||
}
|
||||
}
|
||||
162
ScoreboardApi/Functions/GameManager.cs
Normal file
162
ScoreboardApi/Functions/GameManager.cs
Normal file
@ -0,0 +1,162 @@
|
||||
namespace ScoreboardApi.Functions
|
||||
{
|
||||
using ScoreboardApi.Objects;
|
||||
|
||||
public class GameManager : IGameManager
|
||||
{
|
||||
private readonly IPointsCalculator pointsCalculator;
|
||||
private Game? _game;
|
||||
|
||||
public GameManager(IPointsCalculator pointsCalculator)
|
||||
{
|
||||
this.pointsCalculator = pointsCalculator;
|
||||
}
|
||||
|
||||
public void StartNew(Team home, Team away, DateTimeOffset kickOffTime)
|
||||
{
|
||||
if (_game != null)
|
||||
{
|
||||
throw new InvalidOperationException("Game is already configured");
|
||||
}
|
||||
|
||||
_game = new Game
|
||||
{
|
||||
Half = HalfType.Pre,
|
||||
Home = home,
|
||||
Away = away,
|
||||
StartedAt = kickOffTime,
|
||||
State = GameState.WaitingForStart
|
||||
};
|
||||
}
|
||||
|
||||
public void Finish()
|
||||
{
|
||||
if (_game == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_game.FinishedAt = DateTimeOffset.UtcNow;
|
||||
_game.State = GameState.Finished;
|
||||
_game.Half = HalfType.End;
|
||||
|
||||
var evt = new Event
|
||||
{
|
||||
Category = EventCategory.Match,
|
||||
EventType = EventType.MatchEnd,
|
||||
TimeStamp = DateTimeOffset.Now
|
||||
};
|
||||
AddEvent(evt);
|
||||
}
|
||||
|
||||
public void AddEvent(Event newEvent)
|
||||
{
|
||||
if (_game == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
newEvent.Id = GetEventId();
|
||||
|
||||
newEvent.Points = pointsCalculator.GetEventScore(newEvent.EventType);
|
||||
|
||||
if (newEvent.Category == EventCategory.Match)
|
||||
{
|
||||
_game.MatchEvents.Add(newEvent);
|
||||
}
|
||||
else if (newEvent.Category == EventCategory.Home)
|
||||
{
|
||||
_game.Home.EventHistory.Add(newEvent);
|
||||
}
|
||||
else
|
||||
{
|
||||
_game.Away.EventHistory.Add(newEvent);
|
||||
}
|
||||
|
||||
switch (newEvent.EventType)
|
||||
{
|
||||
case EventType.HalfTime:
|
||||
_game.State = GameState.HalfTime;
|
||||
_game.Half = HalfType.First;
|
||||
return;
|
||||
case EventType.SecondHalfStart:
|
||||
_game.State = GameState.SecondHalf;
|
||||
_game.Half = HalfType.Second;
|
||||
return;
|
||||
case EventType.TimeOff:
|
||||
_game.State = GameState.TimeOff;
|
||||
return;
|
||||
case EventType.TimeOn:
|
||||
if (_game.Half == HalfType.First)
|
||||
{
|
||||
_game.State = GameState.FirstHalf;
|
||||
}
|
||||
else if (_game.Half == HalfType.Second)
|
||||
{
|
||||
_game.State = GameState.SecondHalf;
|
||||
}
|
||||
|
||||
break;
|
||||
case EventType.MatchEnd:
|
||||
_game.State = GameState.Finished;
|
||||
_game.Half = HalfType.End;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void DeleteEvent(int eventId)
|
||||
{
|
||||
if (_game == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_game.Teams.ForEach(
|
||||
(t) =>
|
||||
{
|
||||
Event? eventToRemove = t.EventHistory.FirstOrDefault(x => x.Id == eventId);
|
||||
if (eventToRemove != null)
|
||||
{
|
||||
t.EventHistory.Remove(eventToRemove);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void ResetGame() => _game = null;
|
||||
|
||||
public Game GetScore()
|
||||
{
|
||||
if (_game == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (_game.State == GameState.WaitingForStart
|
||||
&& DateTimeOffset.UtcNow.UtcDateTime.CompareTo(_game.StartedAt.UtcDateTime) >= 0)
|
||||
{
|
||||
var evt = new Event
|
||||
{
|
||||
Category = EventCategory.Match,
|
||||
EventType = EventType.MatchStart,
|
||||
TimeStamp = DateTimeOffset.Now
|
||||
};
|
||||
AddEvent(evt);
|
||||
_game.Half = HalfType.First;
|
||||
_game.State = GameState.FirstHalf;
|
||||
}
|
||||
|
||||
return _game;
|
||||
}
|
||||
|
||||
private int GetEventId()
|
||||
{
|
||||
IEnumerable<Event> events = _game.EventHistory;
|
||||
if (!events.Any())
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
return events.Max(x => x.Id) + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
19
ScoreboardApi/Functions/IGameManager.cs
Normal file
19
ScoreboardApi/Functions/IGameManager.cs
Normal file
@ -0,0 +1,19 @@
|
||||
namespace ScoreboardApi
|
||||
{
|
||||
using ScoreboardApi.Objects;
|
||||
|
||||
public interface IGameManager
|
||||
{
|
||||
void StartNew(Team home, Team away, DateTimeOffset kickOffTime);
|
||||
|
||||
void Finish();
|
||||
|
||||
void AddEvent(Event newEvent);
|
||||
|
||||
void ResetGame();
|
||||
|
||||
void DeleteEvent(int eventId);
|
||||
|
||||
Game GetScore();
|
||||
}
|
||||
}
|
||||
11
ScoreboardApi/Functions/IPointsCalculator.cs
Normal file
11
ScoreboardApi/Functions/IPointsCalculator.cs
Normal file
@ -0,0 +1,11 @@
|
||||
namespace ScoreboardApi
|
||||
{
|
||||
using ScoreboardApi.Objects;
|
||||
|
||||
public interface IPointsCalculator
|
||||
{
|
||||
int GetEventScore(EventType eventType);
|
||||
|
||||
int CalculateNewScore(EventType eventType, int currentScore);
|
||||
}
|
||||
}
|
||||
41
ScoreboardApi/Functions/PointsCalculator.cs
Normal file
41
ScoreboardApi/Functions/PointsCalculator.cs
Normal file
@ -0,0 +1,41 @@
|
||||
namespace ScoreboardApi
|
||||
{
|
||||
using ScoreboardApi.Objects;
|
||||
|
||||
public class PointsCalculator : IPointsCalculator
|
||||
{
|
||||
public int GetEventScore(EventType eventType)
|
||||
{
|
||||
switch (eventType)
|
||||
{
|
||||
case EventType.Penalty:
|
||||
return 3;
|
||||
case EventType.Try:
|
||||
return 5;
|
||||
case EventType.Conversion:
|
||||
return 2;
|
||||
case EventType.DropGoal:
|
||||
return 3;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public int CalculateNewScore(EventType eventType, int currentScore)
|
||||
{
|
||||
switch (eventType)
|
||||
{
|
||||
case EventType.Penalty:
|
||||
return currentScore + GetEventScore(eventType);
|
||||
case EventType.Try:
|
||||
return currentScore + GetEventScore(eventType);
|
||||
case EventType.Conversion:
|
||||
return currentScore + GetEventScore(eventType);
|
||||
case EventType.DropGoal:
|
||||
return currentScore + GetEventScore(eventType);
|
||||
default:
|
||||
return currentScore;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
11
ScoreboardApi/Objects/Event.cs
Normal file
11
ScoreboardApi/Objects/Event.cs
Normal file
@ -0,0 +1,11 @@
|
||||
namespace ScoreboardApi.Objects
|
||||
{
|
||||
public class Event
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public EventCategory Category { get; set; }
|
||||
public EventType EventType { get; set; }
|
||||
public DateTimeOffset TimeStamp { get; set; }
|
||||
public int Points { get; set; }
|
||||
}
|
||||
}
|
||||
9
ScoreboardApi/Objects/EventCategory.cs
Normal file
9
ScoreboardApi/Objects/EventCategory.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace ScoreboardApi.Objects
|
||||
{
|
||||
public enum EventCategory
|
||||
{
|
||||
Match = 1,
|
||||
Home = 2,
|
||||
Away = 3
|
||||
}
|
||||
}
|
||||
18
ScoreboardApi/Objects/EventType.cs
Normal file
18
ScoreboardApi/Objects/EventType.cs
Normal file
@ -0,0 +1,18 @@
|
||||
namespace ScoreboardApi.Objects
|
||||
{
|
||||
public enum EventType
|
||||
{
|
||||
Penalty = 1,
|
||||
Try = 2,
|
||||
Conversion = 3,
|
||||
DropGoal = 4,
|
||||
HalfTime = 5,
|
||||
MatchStart = 6,
|
||||
SecondHalfStart = 7,
|
||||
TimeOff = 8,
|
||||
TimeOn = 9,
|
||||
YellowCard = 10,
|
||||
RedCard = 11,
|
||||
MatchEnd = 12
|
||||
}
|
||||
}
|
||||
32
ScoreboardApi/Objects/Game.cs
Normal file
32
ScoreboardApi/Objects/Game.cs
Normal file
@ -0,0 +1,32 @@
|
||||
namespace ScoreboardApi.Objects
|
||||
{
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
public class Game
|
||||
{
|
||||
public GameState State { get; set; }
|
||||
public DateTimeOffset StartedAt { get; set; }
|
||||
public DateTimeOffset? FinishedAt { get; set; }
|
||||
public Team Home { get; set; } = new Team();
|
||||
public Team Away { get; set; } = new Team();
|
||||
public HalfType Half { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
public List<Event> MatchEvents { get; set; } = new List<Event>();
|
||||
|
||||
public IEnumerable<Event> EventHistory
|
||||
{
|
||||
get
|
||||
{
|
||||
var events = Home.EventHistory
|
||||
.Concat(Away.EventHistory)
|
||||
.Concat(MatchEvents)
|
||||
.OrderBy(x=>x.Id);
|
||||
return events.ToList();
|
||||
}
|
||||
}
|
||||
|
||||
[JsonIgnore]
|
||||
public List<Team> Teams => new() { Home, Away };
|
||||
}
|
||||
}
|
||||
20
ScoreboardApi/Objects/GameState.cs
Normal file
20
ScoreboardApi/Objects/GameState.cs
Normal file
@ -0,0 +1,20 @@
|
||||
namespace ScoreboardApi.Objects
|
||||
{
|
||||
public enum GameState
|
||||
{
|
||||
WaitingForStart = 1,
|
||||
FirstHalf = 2,
|
||||
HalfTime = 3,
|
||||
SecondHalf = 4,
|
||||
Finished = 5,
|
||||
TimeOff = 6
|
||||
}
|
||||
|
||||
public enum HalfType
|
||||
{
|
||||
Pre = 1,
|
||||
First = 2,
|
||||
Second = 3,
|
||||
End = 4
|
||||
}
|
||||
}
|
||||
15
ScoreboardApi/Objects/Team.cs
Normal file
15
ScoreboardApi/Objects/Team.cs
Normal file
@ -0,0 +1,15 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace ScoreboardApi.Objects
|
||||
{
|
||||
public class Team
|
||||
{
|
||||
public string Abbreviation { get; set; }
|
||||
public string Name { get; set; }
|
||||
public int Points => EventHistory.Sum(x => x.Points);
|
||||
public string Color { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
public List<Event> EventHistory { get; set; } = new();
|
||||
}
|
||||
}
|
||||
8
ScoreboardApi/Objects/TeamType.cs
Normal file
8
ScoreboardApi/Objects/TeamType.cs
Normal file
@ -0,0 +1,8 @@
|
||||
namespace ScoreboardApi.Objects
|
||||
{
|
||||
public enum TeamType
|
||||
{
|
||||
Home = 1,
|
||||
Away = 2
|
||||
}
|
||||
}
|
||||
90
ScoreboardApi/Program.cs
Normal file
90
ScoreboardApi/Program.cs
Normal file
@ -0,0 +1,90 @@
|
||||
namespace WebApplication1
|
||||
{
|
||||
using System.Net;
|
||||
using ScoreboardApi;
|
||||
using ScoreboardApi.Extensions;
|
||||
using ScoreboardApi.Functions;
|
||||
using ScoreboardApi.Settings;
|
||||
using System.Reflection;
|
||||
using System.Text.Json.Serialization;
|
||||
using Microsoft.AspNetCore.HttpOverrides;
|
||||
|
||||
public class Program
|
||||
{
|
||||
public static void Main(string[] args)
|
||||
{
|
||||
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
|
||||
builder.Services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.All; });
|
||||
|
||||
// Add services to the container.
|
||||
ApplicationSettings appSettings = DeserializeApplicationSettings();
|
||||
builder.Services.AddSingleton(appSettings);
|
||||
|
||||
builder.Services.AddControllers().AddJsonOptions(
|
||||
x =>
|
||||
{
|
||||
var enumConverter = new JsonStringEnumConverter();
|
||||
x.JsonSerializerOptions.Converters.Add(enumConverter);
|
||||
});
|
||||
|
||||
builder.Services.AddCors(
|
||||
options =>
|
||||
{
|
||||
options.AddPolicy(
|
||||
name: "allowedOrigins",
|
||||
policy =>
|
||||
{
|
||||
policy
|
||||
.AllowAnyOrigin()
|
||||
.WithHeaders("x-api-key")
|
||||
.WithHeaders("content-type")
|
||||
.AllowAnyMethod();
|
||||
});
|
||||
});
|
||||
|
||||
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
|
||||
builder.Services.AddEndpointsApiExplorer();
|
||||
|
||||
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
|
||||
string xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
||||
|
||||
builder.Services.AddSwaggerGen(
|
||||
x =>
|
||||
x.IncludeXmlComments(xmlPath));
|
||||
|
||||
builder.Services.AddSingleton<IPointsCalculator, PointsCalculator>();
|
||||
builder.Services.AddSingleton<IGameManager, GameManager>();
|
||||
|
||||
WebApplication app = builder.Build();
|
||||
app.UseForwardedHeaders();
|
||||
app.UseCors("allowedOrigins");
|
||||
// Configure the HTTP request pipeline.
|
||||
if (app.Environment.IsDevelopment())
|
||||
{
|
||||
app.UseSwagger();
|
||||
app.UseSwaggerUI();
|
||||
}
|
||||
|
||||
//app.UseHttpsRedirection();
|
||||
app.UseApiKeyAuthentication();
|
||||
app.UseAuthorization();
|
||||
|
||||
app.MapControllers();
|
||||
|
||||
app.Run();
|
||||
}
|
||||
|
||||
private static ApplicationSettings DeserializeApplicationSettings()
|
||||
{
|
||||
var applicationSettings = new ConfigurationBuilder()
|
||||
.SetBasePath(Directory.GetCurrentDirectory())
|
||||
.AddJsonFile("appsettings.json")
|
||||
.Build()
|
||||
.Get<ApplicationSettings>();
|
||||
|
||||
applicationSettings.Verify<ApplicationSettings>();
|
||||
|
||||
return applicationSettings;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<DeleteExistingFiles>true</DeleteExistingFiles>
|
||||
<ExcludeApp_Data>false</ExcludeApp_Data>
|
||||
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
|
||||
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
|
||||
<LastUsedPlatform>Any CPU</LastUsedPlatform>
|
||||
<PublishProvider>FileSystem</PublishProvider>
|
||||
<PublishUrl>bin\Release\net6.0\publish\</PublishUrl>
|
||||
<WebPublishMethod>FileSystem</WebPublishMethod>
|
||||
<_TargetId>Folder</_TargetId>
|
||||
<SiteUrlToLaunchAfterPublish />
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
|
||||
<ProjectGuid>9f80e54a-d08f-4fc5-a56d-ade8ea381caf</ProjectGuid>
|
||||
<SelfContained>true</SelfContained>
|
||||
<PublishSingleFile>true</PublishSingleFile>
|
||||
<PublishTrimmed>true</PublishTrimmed>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<_PublishTargetUrl>C:\Users\cwatts\Qsync\Projects\Scoreboard\ScoreboardApi\bin\Release\net6.0\publish\</_PublishTargetUrl>
|
||||
<History>True|2024-09-17T14:54:42.8657277Z;True|2024-09-12T16:55:16.7207289+01:00;False|2024-09-12T16:52:17.9833448+01:00;False|2024-09-12T16:50:59.2175994+01:00;True|2024-09-12T16:21:24.2272226+01:00;True|2023-09-28T10:15:23.8289186+01:00;</History>
|
||||
<LastFailureDetails />
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<DeleteExistingFiles>true</DeleteExistingFiles>
|
||||
<ExcludeApp_Data>false</ExcludeApp_Data>
|
||||
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
|
||||
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
|
||||
<LastUsedPlatform>Any CPU</LastUsedPlatform>
|
||||
<PublishProvider>FileSystem</PublishProvider>
|
||||
<PublishUrl>bin\Release\net6.0\publish\linux</PublishUrl>
|
||||
<WebPublishMethod>FileSystem</WebPublishMethod>
|
||||
<_TargetId>Folder</_TargetId>
|
||||
<SiteUrlToLaunchAfterPublish />
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
|
||||
<PublishSingleFile>true</PublishSingleFile>
|
||||
<PublishTrimmed>false</PublishTrimmed>
|
||||
<ProjectGuid>9f80e54a-d08f-4fc5-a56d-ade8ea381caf</ProjectGuid>
|
||||
<SelfContained>true</SelfContained>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<History>True|2024-07-22T22:14:34.7802209Z;True|2024-07-22T23:13:33.3458942+01:00;True|2024-07-22T23:09:24.3505807+01:00;False|2024-07-22T23:08:42.5287252+01:00;True|2024-07-22T23:01:46.2622372+01:00;True|2024-07-22T22:48:27.0047495+01:00;True|2024-07-22T22:46:58.6464286+01:00;False|2024-07-22T22:23:07.5888542+01:00;</History>
|
||||
<LastFailureDetails />
|
||||
<_PublishTargetUrl>C:\Users\chris\Qsync\Projects\Scoreboard\ScoreboardApi\bin\Release\net6.0\publish\linux</_PublishTargetUrl>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<DeleteExistingFiles>true</DeleteExistingFiles>
|
||||
<ExcludeApp_Data>false</ExcludeApp_Data>
|
||||
<LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
|
||||
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
|
||||
<LastUsedPlatform>Any CPU</LastUsedPlatform>
|
||||
<PublishProvider>FileSystem</PublishProvider>
|
||||
<PublishUrl>bin\Release\net6.0\publish\winx86</PublishUrl>
|
||||
<WebPublishMethod>FileSystem</WebPublishMethod>
|
||||
<_TargetId>Folder</_TargetId>
|
||||
<SiteUrlToLaunchAfterPublish />
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<RuntimeIdentifier>win-x86</RuntimeIdentifier>
|
||||
<ProjectGuid>9f80e54a-d08f-4fc5-a56d-ade8ea381caf</ProjectGuid>
|
||||
<SelfContained>true</SelfContained>
|
||||
<PublishSingleFile>true</PublishSingleFile>
|
||||
<PublishTrimmed>true</PublishTrimmed>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
-->
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<_PublishTargetUrl>C:\Users\chris\Qsync\Projects\Scoreboard\ScoreboardApi\bin\Release\net6.0\publish\winx86</_PublishTargetUrl>
|
||||
<History>True|2024-07-22T21:49:49.5152966Z;True|2024-07-22T22:46:24.3105978+01:00;False|2024-07-22T22:21:37.9039763+01:00;True|2023-09-28T10:15:23.8289186+01:00;</History>
|
||||
<LastFailureDetails />
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
38
ScoreboardApi/Properties/launchSettings.json
Normal file
38
ScoreboardApi/Properties/launchSettings.json
Normal file
@ -0,0 +1,38 @@
|
||||
{
|
||||
"profiles": {
|
||||
"WebApplication1": {
|
||||
"commandName": "Project",
|
||||
"launchBrowser": true,
|
||||
"launchUrl": "swagger",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
},
|
||||
"dotnetRunMessages": true,
|
||||
"applicationUrl": "https://*:7005;http://*:5023"
|
||||
},
|
||||
"IIS Express": {
|
||||
"commandName": "IISExpress",
|
||||
"launchBrowser": true,
|
||||
"launchUrl": "swagger",
|
||||
"environmentVariables": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
}
|
||||
},
|
||||
"Docker": {
|
||||
"commandName": "Docker",
|
||||
"launchBrowser": true,
|
||||
"launchUrl": "{Scheme}://{ServiceHost}:{ServicePort}/swagger",
|
||||
"publishAllPorts": true,
|
||||
"useSSL": true
|
||||
}
|
||||
},
|
||||
"$schema": "https://json.schemastore.org/launchsettings.json",
|
||||
"iisSettings": {
|
||||
"windowsAuthentication": false,
|
||||
"anonymousAuthentication": true,
|
||||
"iisExpress": {
|
||||
"applicationUrl": "http://localhost:36148",
|
||||
"sslPort": 44345
|
||||
}
|
||||
}
|
||||
}
|
||||
29
ScoreboardApi/ScoreboardApi.csproj
Normal file
29
ScoreboardApi/ScoreboardApi.csproj
Normal file
@ -0,0 +1,29 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<Version>1.0.0</Version>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<UserSecretsId>36416112-68b4-4d50-b910-285037f3f3ef</UserSecretsId>
|
||||
<PublishSingleFile>true</PublishSingleFile>
|
||||
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
|
||||
<GenerateDocumentationFile>True</GenerateDocumentationFile>
|
||||
<IncludeAllContentForSelfExtract>true</IncludeAllContentForSelfExtract>
|
||||
<InvariantGlobalization>true</InvariantGlobalization>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.18.1" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Update="appsettings.json">
|
||||
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
|
||||
<ExcludeFromSingleFile>true</ExcludeFromSingleFile>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
12
ScoreboardApi/ScoreboardApi.csproj.user
Normal file
12
ScoreboardApi/ScoreboardApi.csproj.user
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ActiveDebugProfile>WebApplication1</ActiveDebugProfile>
|
||||
<Controller_SelectedScaffolderID>MvcControllerEmptyScaffolder</Controller_SelectedScaffolderID>
|
||||
<Controller_SelectedScaffolderCategoryPath>root/Common/MVC/Controller</Controller_SelectedScaffolderCategoryPath>
|
||||
<NameOfLastUsedPublishProfile>C:\Users\cwatts\Qsync\Projects\Scoreboard\ScoreboardApi\Properties\PublishProfiles\Folder Publish.pubxml</NameOfLastUsedPublishProfile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
|
||||
<DebuggerFlavor>ProjectDebugger</DebuggerFlavor>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
10
ScoreboardApi/Settings/ApplicationSettings.cs
Normal file
10
ScoreboardApi/Settings/ApplicationSettings.cs
Normal file
@ -0,0 +1,10 @@
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace ScoreboardApi.Settings
|
||||
{
|
||||
public class ApplicationSettings
|
||||
{
|
||||
[JsonProperty(Required = Required.Always)]
|
||||
public List<Key> AllowedApiKeys { get; set; } = new();
|
||||
}
|
||||
}
|
||||
13
ScoreboardApi/Settings/Key.cs
Normal file
13
ScoreboardApi/Settings/Key.cs
Normal file
@ -0,0 +1,13 @@
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
|
||||
namespace ScoreboardApi.Settings
|
||||
{
|
||||
public class Key
|
||||
{
|
||||
public Guid ApiKey { get; set; }
|
||||
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public Permissions Permission { get; set; }
|
||||
}
|
||||
}
|
||||
9
ScoreboardApi/Settings/Permissions.cs
Normal file
9
ScoreboardApi/Settings/Permissions.cs
Normal file
@ -0,0 +1,9 @@
|
||||
namespace ScoreboardApi.Settings
|
||||
{
|
||||
public enum Permissions
|
||||
{
|
||||
Disallowed,
|
||||
ReadOnly,
|
||||
ReadWrite
|
||||
}
|
||||
}
|
||||
8
ScoreboardApi/appsettings.Development.json
Normal file
8
ScoreboardApi/appsettings.Development.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
||||
38
ScoreboardApi/appsettings.json
Normal file
38
ScoreboardApi/appsettings.json
Normal file
@ -0,0 +1,38 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
"AllowedApiKeys": [
|
||||
{
|
||||
"Description": "TestKey",
|
||||
"apiKey": "396A62D6-0192-4738-8F45-8AAF7BCFA3EC",
|
||||
"permission": "ReadWrite"
|
||||
},
|
||||
{
|
||||
"Description": "ControllerUI",
|
||||
"apiKey": "22A94377-F90F-4361-8836-8FC8B604FE6C",
|
||||
"permission": "ReadWrite"
|
||||
},
|
||||
{
|
||||
"Description": "ColinBradley",
|
||||
"apiKey": "DE57305F-B3D0-438E-A76D-ADF4DC6EAE02",
|
||||
"permission": "ReadWrite"
|
||||
},
|
||||
{
|
||||
"Description": "WebsitePublicUI",
|
||||
"apiKey": "57BF5C10-6CD0-4E02-B7A5-93F1896CE0F8",
|
||||
"permission": "ReadOnly"
|
||||
}
|
||||
],
|
||||
"Kestrel": {
|
||||
"Endpoints": {
|
||||
"Http": {
|
||||
"Url": "http://*:5000"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
297
ScoreboardNumbers/ScoreboardNumbers.ino
Normal file
297
ScoreboardNumbers/ScoreboardNumbers.ino
Normal file
@ -0,0 +1,297 @@
|
||||
#include <WiFi.h>
|
||||
#include <ArduinoJson.h>
|
||||
#include <Wire.h>
|
||||
#include <U8g2lib.h>
|
||||
#include <U8x8lib.h>
|
||||
#include <HTTPClient.h>
|
||||
#include "objects.h"
|
||||
|
||||
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // High speed I2C
|
||||
|
||||
// Define pins for the 7-segment displays
|
||||
const int digitPins[4] = {19, 18, 5, 4}; // Common anode pins
|
||||
const int segmentPins[7] = {32, 33, 25, 26, 27, 14, 12}; // Segment pins (a, b, c, d, e, f, g)
|
||||
|
||||
// Define the 7-segment display patterns
|
||||
const byte digitPatterns[10] = {
|
||||
B11111100, // 0
|
||||
B01100000, // 1
|
||||
B11011010, // 2
|
||||
B11110010, // 3
|
||||
B01100110, // 4
|
||||
B10110110, // 5
|
||||
B10111110, // 6
|
||||
B11100000, // 7
|
||||
B11111110, // 8
|
||||
B11110110 // 9
|
||||
};
|
||||
|
||||
// Wi-Fi settings
|
||||
const char* ssid = "study";
|
||||
const char* password = "abcde54321";
|
||||
|
||||
const char* displayQueue = "dQ";
|
||||
const char* jsonPoints = "points";
|
||||
|
||||
const int wifiLoopDelay = 5000 / portTICK_PERIOD_MS;
|
||||
const int displayLoopDelay = 1000 / portTICK_PERIOD_MS;
|
||||
const int httpPollDelay = 3000 / portTICK_PERIOD_MS;
|
||||
|
||||
//FreeRTOS Queue Handles
|
||||
QueueHandle_t scoreQueue;
|
||||
|
||||
// FreeRTOS task handles
|
||||
TaskHandle_t networkTaskHandle = NULL;
|
||||
TaskHandle_t displayTaskHandle = NULL;
|
||||
portMUX_TYPE critical = portMUX_INITIALIZER_UNLOCKED;
|
||||
|
||||
// FreeRTOS Event Handles
|
||||
EventGroupHandle_t wifi_event_group;
|
||||
const int CONNECTED_BIT = BIT0;
|
||||
|
||||
void networkTask(void * parameter);
|
||||
void displayTask(void * parameter);
|
||||
|
||||
void setup() {
|
||||
try {
|
||||
// Initialize Serial port
|
||||
Serial.begin(115200);
|
||||
#ifdef DEBUG
|
||||
Serial.println("Starting");
|
||||
#endif
|
||||
//start display driver
|
||||
u8g2.begin();
|
||||
u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
|
||||
|
||||
#ifdef DEBUG
|
||||
Serial.println("end dispInit");
|
||||
#endif
|
||||
// Initialize the pins
|
||||
for (int i = 0; i < 4; i++) {
|
||||
pinMode(digitPins[i], OUTPUT);
|
||||
digitalWrite(digitPins[i], HIGH); // Turn off all displays initially
|
||||
}
|
||||
|
||||
for (int i = 0; i < 7; i++) {
|
||||
pinMode(segmentPins[i], OUTPUT);
|
||||
digitalWrite(segmentPins[i], LOW); // Turn off all segments initially
|
||||
}
|
||||
WiFi.onEvent( WiFiEvent );
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.disconnect();
|
||||
|
||||
#ifdef DEBUG
|
||||
Serial.println("end IO init");
|
||||
#endif
|
||||
scoreQueue = xQueueCreate(2, sizeof( Scores ) );
|
||||
wifi_event_group = xEventGroupCreate();
|
||||
|
||||
// Start the network task
|
||||
xTaskCreatePinnedToCore(networkTask, "Network Task", 20000, NULL, 3, &networkTaskHandle, 1);
|
||||
|
||||
// Start the display task
|
||||
xTaskCreatePinnedToCore(displayTask, "Display Task", 20000, NULL, 4, &displayTaskHandle, 1 );
|
||||
#ifdef DEBUG
|
||||
Serial.println("ended init");
|
||||
#endif
|
||||
vTaskStartScheduler();
|
||||
} catch(String err){
|
||||
Serial.print("SetupError: ");
|
||||
Serial.println(err);
|
||||
}
|
||||
}
|
||||
|
||||
void WiFiEvent(WiFiEvent_t event)
|
||||
{
|
||||
switch (event) {
|
||||
case SYSTEM_EVENT_STA_CONNECTED:
|
||||
Serial.println("Connected to access point");
|
||||
break;
|
||||
case SYSTEM_EVENT_STA_DISCONNECTED:
|
||||
Serial.println("Disconnected from WiFi access point");
|
||||
break;
|
||||
case SYSTEM_EVENT_AP_STADISCONNECTED:
|
||||
Serial.println("WiFi client disconnected");
|
||||
break;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
|
||||
void networkTask(void * parameter) {
|
||||
try {
|
||||
while(true){
|
||||
while ( WiFi.status() != WL_CONNECTED )
|
||||
{
|
||||
#ifdef DEBUG
|
||||
Serial.println("disconnected, connecting");
|
||||
#endif
|
||||
WiFi.disconnect();
|
||||
WiFi.begin( ssid, password );
|
||||
#ifdef DEBUG
|
||||
Serial.println(" waiting on wifi connection" );
|
||||
#endif
|
||||
vTaskDelay( 4000 );
|
||||
}
|
||||
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
xEventGroupClearBits(wifi_event_group, CONNECTED_BIT);
|
||||
#ifdef DEBUG
|
||||
Serial.println("Connecting to WiFi...");
|
||||
#endif
|
||||
}
|
||||
|
||||
xEventGroupSetBits(wifi_event_group, CONNECTED_BIT);
|
||||
#ifdef DEBUG
|
||||
Serial.println("Connected to WiFi");
|
||||
#endif
|
||||
|
||||
HTTPClient http;
|
||||
const String url = "https://192.168.1.141:7005/api/score/summary";
|
||||
|
||||
for (;;) {
|
||||
if(WiFi.status() != WL_CONNECTED){
|
||||
continue;
|
||||
}
|
||||
#ifdef DEBUG
|
||||
Serial.println(url);
|
||||
#endif
|
||||
http.useHTTP10(true);
|
||||
http.begin(url.c_str());
|
||||
http.addHeader("x-api-key", "396A62D6-0192-4738-8F45-8AAF7BCFA3EC");
|
||||
int httpResponseCode = http.GET();
|
||||
|
||||
DynamicJsonDocument doc(2048);
|
||||
if (httpResponseCode>0) { //if no game, what code?
|
||||
#ifdef DEBUG
|
||||
Serial.print("HTTP Response code: ");
|
||||
Serial.println(httpResponseCode);
|
||||
#endif
|
||||
deserializeJson(doc, http.getStream());
|
||||
} else {
|
||||
Serial.print("HTTP Req Error code: ");
|
||||
Serial.println(httpResponseCode);
|
||||
vTaskDelay(httpPollDelay);
|
||||
continue;
|
||||
}
|
||||
// Parse JSON
|
||||
Scores pts;
|
||||
pts.home = doc["home"].as<int>();
|
||||
pts.away = doc["away"].as<int>();
|
||||
pts.state = doc["state"].as<String>();
|
||||
|
||||
#ifdef DEBUG
|
||||
Serial.print("Match State: ");
|
||||
Serial.print(doc["state"].as<String>());
|
||||
Serial.print("| Home: ");
|
||||
Serial.print(doc["home"].as<int>());
|
||||
Serial.print(" Away: ");
|
||||
Serial.println(doc["away"].as<int>());
|
||||
#endif
|
||||
|
||||
http.end();
|
||||
// Send the number to the display task
|
||||
xQueueSend(scoreQueue, &pts, portMAX_DELAY);
|
||||
|
||||
vTaskDelay(httpPollDelay); // Wait before fetching the next update
|
||||
}
|
||||
|
||||
vTaskDelay(wifiLoopDelay);
|
||||
}
|
||||
}
|
||||
catch (String err){
|
||||
Serial.print("NetworkTaskError: ");
|
||||
Serial.println(err);
|
||||
}
|
||||
}
|
||||
|
||||
void displayTask(void * parameter) {
|
||||
try {
|
||||
Scores matchScore;
|
||||
int wifiStateY = 10;
|
||||
int matchStateY = 35;
|
||||
int scoreY = 74-u8g2.getMaxCharHeight();
|
||||
while(true) {
|
||||
u8g2.clearBuffer(); // clear the internal memory
|
||||
int bits = (xEventGroupGetBits( wifi_event_group));
|
||||
|
||||
if (bits & CONNECTED_BIT) {
|
||||
#ifdef DEBUG
|
||||
Serial.println("Connected");
|
||||
#endif
|
||||
u8g2.drawStr(0,wifiStateY,"Connected! ;)"); // write something to the internal memory
|
||||
} else {
|
||||
#ifdef DEBUG
|
||||
Serial.println("Disconnected");
|
||||
#endif
|
||||
u8g2.drawStr(0,wifiStateY,"Not Connected! :("); // write something to the internal memory
|
||||
}
|
||||
|
||||
if (xQueueReceive(scoreQueue, &matchScore, portMAX_DELAY)) {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
//pass the digit index (0/1 is home, 1/2 is away)
|
||||
int pts = i>2?matchScore.away:matchScore.home;
|
||||
if(i%2 == 0){
|
||||
displayNumber(i, pts%10);
|
||||
} else{
|
||||
displayNumber(i, pts)
|
||||
}
|
||||
//displayNumber(i, );
|
||||
//displayNumber(i, number / (int)pow(10, 3 - i) % 10); // Display the number
|
||||
delay(5); // Delay to display the number
|
||||
}
|
||||
u8g2.drawStr(0, matchStateY, matchScore.state.c_str());
|
||||
|
||||
String scoreMsg = "Home " + String(matchScore.home) + " Away " + String(matchScore.away);
|
||||
u8g2.drawStr(0,scoreY, scoreMsg.c_str());
|
||||
}
|
||||
u8g2.sendBuffer(); // transfer internal memory to the display
|
||||
|
||||
vTaskDelay(displayLoopDelay);
|
||||
// if (xQueueReceive(scoreQueue, &number, portMAX_DELAY)) {
|
||||
// for (int i = 0; i < 4; i++) {
|
||||
// displayNumber(i, number / (int)pow(10, 3 - i) % 10); // Display the number
|
||||
// delay(5); // Delay to display the number
|
||||
// }
|
||||
// }
|
||||
}
|
||||
} catch (String err){
|
||||
Serial.print("DisplayLoopError: ");
|
||||
Serial.println(err);
|
||||
}
|
||||
}
|
||||
|
||||
// Function to display a number on a specific 7-segment display
|
||||
void displayNumber(int display, int digitValue) {
|
||||
for (int i = 0; i < 7; i++) {
|
||||
if (bitRead(digitPatterns[digitValue], i)) {
|
||||
digitalWrite(segmentPins[i], HIGH); // Turn on the segment
|
||||
} else {
|
||||
digitalWrite(segmentPins[i], LOW); // Turn off the segment
|
||||
}
|
||||
}
|
||||
|
||||
digitalWrite(digitPins[display], LOW); // Turn on the display
|
||||
}
|
||||
|
||||
// String getStateString(GameState state){
|
||||
// switch(state){
|
||||
// case GameState::WaitingForStart:
|
||||
// return "Pending";
|
||||
// case GameState::FirstHalf:
|
||||
// return "First Half";
|
||||
// case GameState::SecondHalf:
|
||||
// return "Second Half";
|
||||
// case GameState::HalfTime:
|
||||
// return "Half Time";
|
||||
// case GameState::Finished:
|
||||
// return "Full Time";
|
||||
// case GameState::None:
|
||||
// return "Not Configured";
|
||||
// default:
|
||||
// "Other";
|
||||
// }
|
||||
// }
|
||||
|
||||
void loop() {
|
||||
// Empty loop, tasks handle everything
|
||||
}
|
||||
17
ScoreboardNumbers/objects.h
Normal file
17
ScoreboardNumbers/objects.h
Normal file
@ -0,0 +1,17 @@
|
||||
// enum GameState
|
||||
// {
|
||||
// None = 0,
|
||||
// WaitingForStart = 1,
|
||||
// FirstHalf = 2,
|
||||
// HalfTime = 3,
|
||||
// SecondHalf = 4,
|
||||
// Finished = 5,
|
||||
// TimeOff = 6
|
||||
// };
|
||||
|
||||
class Scores{
|
||||
public:
|
||||
int home;
|
||||
int away;
|
||||
String state;
|
||||
};
|
||||
86
WifiTest/WifiTest.ino
Normal file
86
WifiTest/WifiTest.ino
Normal file
@ -0,0 +1,86 @@
|
||||
/*
|
||||
* This sketch demonstrates how to scan WiFi networks.
|
||||
* The API is based on the Arduino WiFi Shield library, but has significant changes as newer WiFi functions are supported.
|
||||
* E.g. the return value of `encryptionType()` different because more modern encryption is supported.
|
||||
*/
|
||||
#include <WiFi.h>
|
||||
|
||||
void setup()
|
||||
{
|
||||
Serial.begin(115200);
|
||||
Serial.println("Starting");
|
||||
// Set WiFi to station mode and disconnect from an AP if it was previously connected.
|
||||
WiFi.mode(WIFI_STA);
|
||||
WiFi.disconnect();
|
||||
delay(100);
|
||||
|
||||
Serial.println("Setup done");
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
Serial.println("Scan start");
|
||||
|
||||
// WiFi.scanNetworks will return the number of networks found.
|
||||
int n = WiFi.scanNetworks();
|
||||
Serial.println("Scan done");
|
||||
if (n == 0) {
|
||||
Serial.println("no networks found");
|
||||
} else {
|
||||
Serial.print(n);
|
||||
Serial.println(" networks found");
|
||||
Serial.println("Nr | SSID | RSSI | CH | Encryption");
|
||||
for (int i = 0; i < n; ++i) {
|
||||
// Print SSID and RSSI for each network found
|
||||
Serial.printf("%2d",i + 1);
|
||||
Serial.print(" | ");
|
||||
Serial.printf("%-32.32s", WiFi.SSID(i).c_str());
|
||||
Serial.print(" | ");
|
||||
Serial.printf("%4d", WiFi.RSSI(i));
|
||||
Serial.print(" | ");
|
||||
Serial.printf("%2d", WiFi.channel(i));
|
||||
Serial.print(" | ");
|
||||
switch (WiFi.encryptionType(i))
|
||||
{
|
||||
case WIFI_AUTH_OPEN:
|
||||
Serial.print("open");
|
||||
break;
|
||||
case WIFI_AUTH_WEP:
|
||||
Serial.print("WEP");
|
||||
break;
|
||||
case WIFI_AUTH_WPA_PSK:
|
||||
Serial.print("WPA");
|
||||
break;
|
||||
case WIFI_AUTH_WPA2_PSK:
|
||||
Serial.print("WPA2");
|
||||
break;
|
||||
case WIFI_AUTH_WPA_WPA2_PSK:
|
||||
Serial.print("WPA+WPA2");
|
||||
break;
|
||||
case WIFI_AUTH_WPA2_ENTERPRISE:
|
||||
Serial.print("WPA2-EAP");
|
||||
break;
|
||||
case WIFI_AUTH_WPA3_PSK:
|
||||
Serial.print("WPA3");
|
||||
break;
|
||||
case WIFI_AUTH_WPA2_WPA3_PSK:
|
||||
Serial.print("WPA2+WPA3");
|
||||
break;
|
||||
case WIFI_AUTH_WAPI_PSK:
|
||||
Serial.print("WAPI");
|
||||
break;
|
||||
default:
|
||||
Serial.print("unknown");
|
||||
}
|
||||
Serial.println();
|
||||
delay(10);
|
||||
}
|
||||
}
|
||||
Serial.println("");
|
||||
|
||||
// Delete the scan result to free memory for code below.
|
||||
WiFi.scanDelete();
|
||||
|
||||
// Wait a bit before scanning again.
|
||||
delay(5000);
|
||||
}
|
||||
29
displaytest/displaytest.ino
Normal file
29
displaytest/displaytest.ino
Normal file
@ -0,0 +1,29 @@
|
||||
#include <U8g2lib.h>
|
||||
#include <U8x8lib.h>
|
||||
|
||||
|
||||
#define U8X8_HAVE_HW_I2C
|
||||
|
||||
#ifdef U8X8_HAVE_HW_SPI
|
||||
#include <SPI.h>
|
||||
#endif
|
||||
#ifdef U8X8_HAVE_HW_I2C
|
||||
#include <Wire.h>
|
||||
#endif
|
||||
|
||||
|
||||
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // High speed I2C
|
||||
|
||||
// U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); //Low spped I2C
|
||||
|
||||
void setup(void) {
|
||||
u8g2.begin();
|
||||
}
|
||||
|
||||
void loop(void) {
|
||||
u8g2.clearBuffer(); // clear the internal memory
|
||||
u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
|
||||
u8g2.drawStr(0,10,"Hey Sexy! ;)"); // write something to the internal memory
|
||||
u8g2.sendBuffer(); // transfer internal memory to the display
|
||||
delay(1000);
|
||||
}
|
||||
BIN
scoreboardoutput/ScoreboardNumbers.ino.bin
Normal file
BIN
scoreboardoutput/ScoreboardNumbers.ino.bin
Normal file
Binary file not shown.
BIN
scoreboardoutput/ScoreboardNumbers.ino.bootloader.bin
Normal file
BIN
scoreboardoutput/ScoreboardNumbers.ino.bootloader.bin
Normal file
Binary file not shown.
BIN
scoreboardoutput/ScoreboardNumbers.ino.elf
Normal file
BIN
scoreboardoutput/ScoreboardNumbers.ino.elf
Normal file
Binary file not shown.
125288
scoreboardoutput/ScoreboardNumbers.ino.map
Normal file
125288
scoreboardoutput/ScoreboardNumbers.ino.map
Normal file
File diff suppressed because one or more lines are too long
241
scoreboardoutput/libraries/HTTPClient/HTTPClient.cpp.d
Normal file
241
scoreboardoutput/libraries/HTTPClient/HTTPClient.cpp.d
Normal file
@ -0,0 +1,241 @@
|
||||
C:\Users\chris\Qsync\Projects\Scoreboard\scoreboardoutput\libraries\HTTPClient\HTTPClient.cpp.o: \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\HTTPClient\src\HTTPClient.cpp \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/HardwareSerial.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Stream.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Print.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/WString.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/pgmspace.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Printable.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_system/include/esp_system.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_err.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_compiler.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_attr.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_bit_defs.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_idf_version.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_mac.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_chip_info.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_random.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_sleep.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/touch_sensor_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/soc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_assert.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/soc_caps.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/gpio_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/include/soc/gpio_periph.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/io_mux_reg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/gpio_struct.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/gpio_reg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/gpio_sig_map.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/FreeRTOS.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/esp_additions/freertos/FreeRTOSConfig.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_compiler.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/FreeRTOSConfig_arch.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/xtensa_config.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/hal.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/core.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtensa-versions.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/core-isa.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/core-matmap.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/tie.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/system.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/xtensa_context.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtensa_context.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/corebits.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtruntime-frames.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_rom/include/esp_rom_sys.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/reset_reasons.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_rom/include/esp32/rom/ets_sys.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/projdefs.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/portable.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/deprecated_definitions.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/portmacro.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtruntime.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/specreg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtruntime-core-state.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xt_instr_macros.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtruntime.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/soc/spinlock.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/soc/cpu.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_cpu.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/cpu_hal.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/cpu_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/esp32/include/hal/cpu_ll.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/extreg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/soc/compare_set.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/include/soc/soc_memory_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_system/include/esp_private/crosscore_int.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_timer/include/esp_timer.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/newlib/platform_include/esp_newlib.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/heap/include/esp_heap_caps.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/heap/include/multi_heap.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/portbenchmark.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtensa_api.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtensa_context.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/portmacro_deprecated.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/mpu_wrappers.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/task.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/list.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/esp_additions/freertos/task_snapshot.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/queue.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/task.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/semphr.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/queue.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/event_groups.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/timers.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-log.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/log/include/esp_log.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/log/include/esp_log_internal.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-matrix.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-uart.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/uart_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-gpio.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\variants\esp32da/pins_arduino.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-touch.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-dac.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/driver/include/driver/gpio.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_intr_alloc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_rom/include/esp32/rom/gpio.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-adc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-spi.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-i2c.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-ledc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-rmt.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-sigmadelta.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-timer.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-bt.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-psram.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-rgb-led.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-cpu.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/HWCDC.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/USBCDC.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Arduino.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp_arduino_version.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp8266-compat.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/stdlib_noniso.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/binary.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/WCharacter.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/IPAddress.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/WString.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Printable.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Client.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Server.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Udp.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Stream.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/IPAddress.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/HardwareSerial.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Esp.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/spi_flash/include/esp_partition.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/spi_flash/include/esp_flash.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/spi_flash_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/esp_flash_err.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/spi_flash/include/esp_spi_flash.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/spi_flash/include/esp_spi_flash_counters.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/soc/esp32/spiram.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/io_pin_remap.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Arduino.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-log.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/StreamString.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/base64.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\HTTPClient\src\HTTPClient.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\WiFi\src/WiFiClient.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Client.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\WiFiClientSecure\src/WiFiClientSecure.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\WiFi\src/WiFi.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Print.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/IPv6Address.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\WiFi\src/WiFiType.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_wifi/include/esp_wifi_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_wifi/include/esp_private/esp_wifi_types_private.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_interface.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_event/include/esp_event_base.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\WiFi\src/WiFiSTA.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\WiFi\src/WiFiGeneric.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_event/include/esp_event.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_event/include/esp_event_base.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_event/include/esp_event_legacy.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_netif/include/esp_netif.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_netif/include/esp_netif_ip_addr.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_netif/include/esp_netif_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_netif/include/esp_netif_defaults.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_eth/include/esp_eth_netif_glue.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_eth/include/esp_eth.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_eth/include/esp_eth_com.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/eth_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_eth/include/esp_eth_mac.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_eth/include/esp_eth_phy.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/tcpip_adapter/include/tcpip_adapter.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/tcpip_adapter/include/tcpip_adapter_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/lwip/src/include/lwip/ip_addr.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/lwip/src/include/lwip/opt.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/port/esp32/include/lwipopts.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/newlib/platform_include/sys/ioctl.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_system/include/esp_task.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/esp_additions/freertos/FreeRTOSConfig.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/port/esp32/include/netif/dhcp_state.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/port/esp32/include/sntp/sntp_get_set_time.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/lwip/src/include/lwip/debug.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/lwip/src/include/lwip/arch.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/port/esp32/include/arch/cc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/port/esp32/include/arch/sys_arch.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/port/esp32/include/arch/vfs_lwip.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/lwip/src/include/lwip/def.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/lwip/src/include/lwip/ip4_addr.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/lwip/src/include/lwip/ip6_addr.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/lwip/src/include/lwip/def.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/lwip/src/include/lwip/ip6_zone.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/include/apps/dhcpserver/dhcpserver.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/lwip/lwip/src/include/lwip/err.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_netif/include/esp_netif_sta_list.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_wifi/include/esp_smartconfig.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/wifi_provisioning/include/wifi_provisioning/manager.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/protocomm/include/common/protocomm.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/protocomm/include/security/protocomm_security.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/wifi_provisioning/include/wifi_provisioning/wifi_config.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\WiFi\src/WiFiAP.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\WiFi\src/WiFiScan.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\WiFi\src/WiFiClient.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\WiFi\src/WiFiServer.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Server.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\WiFi\src/WiFiUdp.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Udp.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/cbuf.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\WiFiClientSecure\src/ssl_client.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/platform.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/port/include/mbedtls/esp_config.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/config.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/check_config.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/port/include/esp_mem.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/platform_time.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/net.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/net_sockets.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/ssl.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/port/include/mbedtls/bignum.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/bignum.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/ecp.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/ssl_ciphersuites.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/pk.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/md.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/platform_util.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/rsa.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/ecdsa.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/cipher.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/x509_crt.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/x509.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/asn1.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/x509_crl.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/dhm.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/ecdh.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/debug.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/entropy.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/sha512.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/port/include/sha512_alt.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/sha_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_rom/include/esp32/rom/sha.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/ctr_drbg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/aes.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/port/include/aes_alt.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/port/include/aes/esp_aes.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/aes_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/mbedtls/mbedtls/include/mbedtls/error.h
|
||||
BIN
scoreboardoutput/libraries/HTTPClient/HTTPClient.cpp.o
Normal file
BIN
scoreboardoutput/libraries/HTTPClient/HTTPClient.cpp.o
Normal file
Binary file not shown.
140
scoreboardoutput/libraries/SPI/SPI.cpp.d
Normal file
140
scoreboardoutput/libraries/SPI/SPI.cpp.d
Normal file
@ -0,0 +1,140 @@
|
||||
C:\Users\chris\Qsync\Projects\Scoreboard\scoreboardoutput\libraries\SPI\SPI.cpp.o: \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\SPI\src\SPI.cpp \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\SPI\src\SPI.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\variants\esp32da/pins_arduino.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-spi.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/FreeRTOS.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/esp_additions/freertos/FreeRTOSConfig.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_compiler.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/FreeRTOSConfig_arch.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/xtensa_config.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/hal.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/core.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtensa-versions.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/core-isa.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/core-matmap.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/tie.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/system.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/xtensa_context.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtensa_context.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/corebits.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtruntime-frames.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_rom/include/esp_rom_sys.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/reset_reasons.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_rom/include/esp32/rom/ets_sys.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/projdefs.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/portable.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/deprecated_definitions.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/portmacro.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtruntime.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/specreg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtruntime-core-state.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xt_instr_macros.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtruntime.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/soc/spinlock.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/soc/cpu.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_cpu.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/cpu_hal.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_err.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_compiler.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/soc_caps.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/cpu_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/esp32/include/hal/cpu_ll.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_attr.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/extreg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_bit_defs.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/soc/compare_set.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/include/soc/soc_memory_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/soc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_assert.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_system/include/esp_private/crosscore_int.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_timer/include/esp_timer.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/newlib/platform_include/esp_newlib.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/heap/include/esp_heap_caps.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/heap/include/multi_heap.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_system/include/esp_system.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_idf_version.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_mac.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_chip_info.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_random.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/portbenchmark.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtensa_api.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtensa_context.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/portmacro_deprecated.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/mpu_wrappers.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/semphr.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/queue.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/task.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/list.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/esp_additions/freertos/task_snapshot.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/task.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/io_pin_remap.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Arduino.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp_arduino_version.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_sleep.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/touch_sensor_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/gpio_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/include/soc/gpio_periph.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/io_mux_reg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/gpio_struct.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/gpio_reg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/gpio_sig_map.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/queue.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/event_groups.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/timers.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-log.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/log/include/esp_log.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/log/include/esp_log_internal.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-matrix.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-uart.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/uart_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-gpio.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-touch.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-dac.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/driver/include/driver/gpio.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_intr_alloc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_rom/include/esp32/rom/gpio.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-adc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-spi.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-i2c.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-ledc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-rmt.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-sigmadelta.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-timer.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-bt.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-psram.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-rgb-led.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-cpu.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp8266-compat.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/stdlib_noniso.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/binary.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/WCharacter.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/WString.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/pgmspace.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Stream.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Print.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Printable.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/IPAddress.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/WString.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Printable.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Client.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Server.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Udp.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Stream.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/IPAddress.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/HardwareSerial.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/HWCDC.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/USBCDC.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Esp.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Arduino.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/spi_flash/include/esp_partition.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/spi_flash/include/esp_flash.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/spi_flash_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/esp_flash_err.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/spi_flash/include/esp_spi_flash.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/spi_flash/include/esp_spi_flash_counters.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/soc/esp32/spiram.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/io_pin_remap.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-log.h
|
||||
BIN
scoreboardoutput/libraries/SPI/SPI.cpp.o
Normal file
BIN
scoreboardoutput/libraries/SPI/SPI.cpp.o
Normal file
Binary file not shown.
142
scoreboardoutput/libraries/U8g2/U8g2lib.cpp.d
Normal file
142
scoreboardoutput/libraries/U8g2/U8g2lib.cpp.d
Normal file
@ -0,0 +1,142 @@
|
||||
C:\Users\chris\Qsync\Projects\Scoreboard\scoreboardoutput\libraries\U8g2\U8g2lib.cpp.o: \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\U8g2lib.cpp \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\U8g2lib.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Arduino.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp_arduino_version.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/FreeRTOS.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/esp_additions/freertos/FreeRTOSConfig.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_compiler.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/FreeRTOSConfig_arch.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/xtensa_config.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/hal.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/core.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtensa-versions.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/core-isa.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/core-matmap.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/tie.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/system.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/xtensa_context.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtensa_context.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/corebits.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtruntime-frames.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_rom/include/esp_rom_sys.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/reset_reasons.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_rom/include/esp32/rom/ets_sys.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/projdefs.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/portable.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/deprecated_definitions.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/portmacro.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtruntime.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/specreg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtruntime-core-state.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xt_instr_macros.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtruntime.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/soc/spinlock.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/soc/cpu.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_cpu.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/cpu_hal.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_err.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_compiler.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/soc_caps.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/cpu_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/esp32/include/hal/cpu_ll.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_attr.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/extreg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_bit_defs.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/soc/compare_set.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/include/soc/soc_memory_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/soc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_assert.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_system/include/esp_private/crosscore_int.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_timer/include/esp_timer.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/newlib/platform_include/esp_newlib.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/heap/include/esp_heap_caps.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/heap/include/multi_heap.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_system/include/esp_system.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_idf_version.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_mac.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_chip_info.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_random.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/portbenchmark.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtensa_api.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtensa_context.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/portmacro_deprecated.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/mpu_wrappers.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/task.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/list.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/esp_additions/freertos/task_snapshot.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/semphr.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/queue.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/task.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_sleep.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/touch_sensor_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/gpio_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/include/soc/gpio_periph.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/io_mux_reg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/gpio_struct.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/gpio_reg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/gpio_sig_map.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/queue.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/event_groups.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/timers.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-log.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/log/include/esp_log.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/log/include/esp_log_internal.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-matrix.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-uart.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/uart_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-gpio.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\variants\esp32da/pins_arduino.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-touch.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-dac.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/driver/include/driver/gpio.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_intr_alloc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_rom/include/esp32/rom/gpio.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-adc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-spi.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-i2c.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-ledc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-rmt.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-sigmadelta.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-timer.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-bt.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-psram.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-rgb-led.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-cpu.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp8266-compat.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/stdlib_noniso.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/binary.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/WCharacter.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/WString.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/pgmspace.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Stream.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Print.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Printable.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/IPAddress.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/WString.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Printable.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Client.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Server.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Udp.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Stream.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/IPAddress.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/HardwareSerial.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/HWCDC.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/USBCDC.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Esp.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/spi_flash/include/esp_partition.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/spi_flash/include/esp_flash.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/spi_flash_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/esp_flash_err.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/spi_flash/include/esp_spi_flash.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/spi_flash/include/esp_spi_flash_counters.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/soc/esp32/spiram.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/io_pin_remap.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Arduino.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Print.h \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\U8x8lib.h \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib/u8x8.h \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib/u8g2.h \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib/u8x8.h
|
||||
BIN
scoreboardoutput/libraries/U8g2/U8g2lib.cpp.o
Normal file
BIN
scoreboardoutput/libraries/U8g2/U8g2lib.cpp.o
Normal file
Binary file not shown.
143
scoreboardoutput/libraries/U8g2/U8x8lib.cpp.d
Normal file
143
scoreboardoutput/libraries/U8g2/U8x8lib.cpp.d
Normal file
@ -0,0 +1,143 @@
|
||||
C:\Users\chris\Qsync\Projects\Scoreboard\scoreboardoutput\libraries\U8g2\U8x8lib.cpp.o: \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\U8x8lib.cpp \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\U8x8lib.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Arduino.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp_arduino_version.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/FreeRTOS.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/esp_additions/freertos/FreeRTOSConfig.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_compiler.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/FreeRTOSConfig_arch.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/xtensa_config.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/hal.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/core.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtensa-versions.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/core-isa.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/core-matmap.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/tie.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/system.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/xtensa_context.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtensa_context.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/corebits.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtruntime-frames.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_rom/include/esp_rom_sys.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/reset_reasons.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_rom/include/esp32/rom/ets_sys.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/projdefs.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/portable.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/deprecated_definitions.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/portmacro.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtruntime.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/specreg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtruntime-core-state.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xt_instr_macros.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtruntime.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/soc/spinlock.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/soc/cpu.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_cpu.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/cpu_hal.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_err.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_compiler.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/soc_caps.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/cpu_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/esp32/include/hal/cpu_ll.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_attr.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/esp32/include/xtensa/config/extreg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_bit_defs.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/soc/compare_set.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/include/soc/soc_memory_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/soc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_assert.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_system/include/esp_private/crosscore_int.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_timer/include/esp_timer.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/newlib/platform_include/esp_newlib.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/heap/include/esp_heap_caps.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/heap/include/multi_heap.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_system/include/esp_system.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_idf_version.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_mac.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_chip_info.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_random.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/portbenchmark.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtensa_api.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/xtensa/include/xtensa/xtensa_context.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/port/xtensa/include/freertos/portmacro_deprecated.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/mpu_wrappers.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/task.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/list.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/esp_additions/freertos/task_snapshot.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/semphr.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/queue.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/task.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_sleep.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/touch_sensor_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/gpio_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/include/soc/gpio_periph.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/io_mux_reg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/gpio_struct.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/gpio_reg.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/soc/esp32/include/soc/gpio_sig_map.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/queue.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/event_groups.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/freertos/include/freertos/timers.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-log.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/log/include/esp_log.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/log/include/esp_log_internal.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-matrix.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-uart.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/uart_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-gpio.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\variants\esp32da/pins_arduino.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-touch.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-dac.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/driver/include/driver/gpio.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/esp_intr_alloc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_common/include/esp_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_rom/include/esp32/rom/gpio.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-adc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-spi.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-i2c.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-ledc.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-rmt.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-sigmadelta.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-timer.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-bt.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-psram.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-rgb-led.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-cpu.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp8266-compat.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/stdlib_noniso.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/binary.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/WCharacter.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/WString.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/pgmspace.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Stream.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Print.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Printable.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/IPAddress.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/WString.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Printable.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Client.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Server.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Udp.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Stream.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/IPAddress.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/HardwareSerial.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/HWCDC.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/USBCDC.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Esp.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/spi_flash/include/esp_partition.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/spi_flash/include/esp_flash.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/spi_flash_types.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/hal/include/hal/esp_flash_err.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/spi_flash/include/esp_spi_flash.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/spi_flash/include/esp_spi_flash_counters.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16/tools/sdk/esp32/include/esp_hw_support/include/soc/esp32/spiram.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/io_pin_remap.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Arduino.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/Print.h \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib/u8x8.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\SPI\src/SPI.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal-spi.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\libraries\Wire\src/Wire.h \
|
||||
C:\Users\chris\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.16\cores\esp32/esp32-hal.h
|
||||
BIN
scoreboardoutput/libraries/U8g2/U8x8lib.cpp.o
Normal file
BIN
scoreboardoutput/libraries/U8g2/U8x8lib.cpp.o
Normal file
Binary file not shown.
3
scoreboardoutput/libraries/U8g2/clib/mui.c.d
Normal file
3
scoreboardoutput/libraries/U8g2/clib/mui.c.d
Normal file
@ -0,0 +1,3 @@
|
||||
C:\Users\chris\Qsync\Projects\Scoreboard\scoreboardoutput\libraries\U8g2\clib\mui.c.o: \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\mui.c \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\mui.h
|
||||
BIN
scoreboardoutput/libraries/U8g2/clib/mui.c.o
Normal file
BIN
scoreboardoutput/libraries/U8g2/clib/mui.c.o
Normal file
Binary file not shown.
6
scoreboardoutput/libraries/U8g2/clib/mui_u8g2.c.d
Normal file
6
scoreboardoutput/libraries/U8g2/clib/mui_u8g2.c.d
Normal file
@ -0,0 +1,6 @@
|
||||
C:\Users\chris\Qsync\Projects\Scoreboard\scoreboardoutput\libraries\U8g2\clib\mui_u8g2.c.o: \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\mui_u8g2.c \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\mui.h \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8g2.h \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8x8.h \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\mui_u8g2.h
|
||||
BIN
scoreboardoutput/libraries/U8g2/clib/mui_u8g2.c.o
Normal file
BIN
scoreboardoutput/libraries/U8g2/clib/mui_u8g2.c.o
Normal file
Binary file not shown.
4
scoreboardoutput/libraries/U8g2/clib/u8g2_bitmap.c.d
Normal file
4
scoreboardoutput/libraries/U8g2/clib/u8g2_bitmap.c.d
Normal file
@ -0,0 +1,4 @@
|
||||
C:\Users\chris\Qsync\Projects\Scoreboard\scoreboardoutput\libraries\U8g2\clib\u8g2_bitmap.c.o: \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8g2_bitmap.c \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8g2.h \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8x8.h
|
||||
BIN
scoreboardoutput/libraries/U8g2/clib/u8g2_bitmap.c.o
Normal file
BIN
scoreboardoutput/libraries/U8g2/clib/u8g2_bitmap.c.o
Normal file
Binary file not shown.
4
scoreboardoutput/libraries/U8g2/clib/u8g2_box.c.d
Normal file
4
scoreboardoutput/libraries/U8g2/clib/u8g2_box.c.d
Normal file
@ -0,0 +1,4 @@
|
||||
C:\Users\chris\Qsync\Projects\Scoreboard\scoreboardoutput\libraries\U8g2\clib\u8g2_box.c.o: \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8g2_box.c \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8g2.h \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8x8.h
|
||||
BIN
scoreboardoutput/libraries/U8g2/clib/u8g2_box.c.o
Normal file
BIN
scoreboardoutput/libraries/U8g2/clib/u8g2_box.c.o
Normal file
Binary file not shown.
4
scoreboardoutput/libraries/U8g2/clib/u8g2_buffer.c.d
Normal file
4
scoreboardoutput/libraries/U8g2/clib/u8g2_buffer.c.d
Normal file
@ -0,0 +1,4 @@
|
||||
C:\Users\chris\Qsync\Projects\Scoreboard\scoreboardoutput\libraries\U8g2\clib\u8g2_buffer.c.o: \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8g2_buffer.c \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8g2.h \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8x8.h
|
||||
BIN
scoreboardoutput/libraries/U8g2/clib/u8g2_buffer.c.o
Normal file
BIN
scoreboardoutput/libraries/U8g2/clib/u8g2_buffer.c.o
Normal file
Binary file not shown.
4
scoreboardoutput/libraries/U8g2/clib/u8g2_button.c.d
Normal file
4
scoreboardoutput/libraries/U8g2/clib/u8g2_button.c.d
Normal file
@ -0,0 +1,4 @@
|
||||
C:\Users\chris\Qsync\Projects\Scoreboard\scoreboardoutput\libraries\U8g2\clib\u8g2_button.c.o: \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8g2_button.c \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8g2.h \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8x8.h
|
||||
BIN
scoreboardoutput/libraries/U8g2/clib/u8g2_button.c.o
Normal file
BIN
scoreboardoutput/libraries/U8g2/clib/u8g2_button.c.o
Normal file
Binary file not shown.
4
scoreboardoutput/libraries/U8g2/clib/u8g2_circle.c.d
Normal file
4
scoreboardoutput/libraries/U8g2/clib/u8g2_circle.c.d
Normal file
@ -0,0 +1,4 @@
|
||||
C:\Users\chris\Qsync\Projects\Scoreboard\scoreboardoutput\libraries\U8g2\clib\u8g2_circle.c.o: \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8g2_circle.c \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8g2.h \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8x8.h
|
||||
BIN
scoreboardoutput/libraries/U8g2/clib/u8g2_circle.c.o
Normal file
BIN
scoreboardoutput/libraries/U8g2/clib/u8g2_circle.c.o
Normal file
Binary file not shown.
@ -0,0 +1,4 @@
|
||||
C:\Users\chris\Qsync\Projects\Scoreboard\scoreboardoutput\libraries\U8g2\clib\u8g2_cleardisplay.c.o: \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8g2_cleardisplay.c \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8g2.h \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8x8.h
|
||||
BIN
scoreboardoutput/libraries/U8g2/clib/u8g2_cleardisplay.c.o
Normal file
BIN
scoreboardoutput/libraries/U8g2/clib/u8g2_cleardisplay.c.o
Normal file
Binary file not shown.
4
scoreboardoutput/libraries/U8g2/clib/u8g2_d_memory.c.d
Normal file
4
scoreboardoutput/libraries/U8g2/clib/u8g2_d_memory.c.d
Normal file
@ -0,0 +1,4 @@
|
||||
C:\Users\chris\Qsync\Projects\Scoreboard\scoreboardoutput\libraries\U8g2\clib\u8g2_d_memory.c.o: \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8g2_d_memory.c \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8g2.h \
|
||||
C:\Users\chris\Documents\Arduino\libraries\U8g2\src\clib\u8x8.h
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user