Skip to content
Snippets Groups Projects
Commit 91810e0c authored by Augustin Jaujay's avatar Augustin Jaujay
Browse files

New initial commit

parent 9f488ce5
No related branches found
No related tags found
No related merge requests found
config.xml 100644 → 100755
File mode changed from 100644 to 100755
jsconfig.json 100644 → 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
package.json 100644 → 100755
File mode changed from 100644 to 100755
File mode changed from 100644 to 100755
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
* {
-webkit-tap-highlight-color: rgba(0,0,0,0); /* make transparent link selection, adjust last value opacity 0 to 1.0 */
}
body {
-webkit-touch-callout: none; /* prevent callout to copy image, etc when tap to hold */
-webkit-text-size-adjust: none; /* prevent webkit from resizing text to fit */
-webkit-user-select: none; /* prevent copy paste, to allow, change 'none' to 'text' */
background-color:#E4E4E4;
background-image:linear-gradient(to bottom, #A7A7A7 0%, #E4E4E4 51%);
font-family: system-ui, -apple-system, -apple-system-font, 'Segoe UI', 'Roboto', sans-serif;
font-size:12px;
height:100vh;
margin:0px;
padding:0px;
/* Padding to avoid the "unsafe" areas behind notches in the screen */
padding: env(safe-area-inset-top, 0px) env(safe-area-inset-right, 0px) env(safe-area-inset-bottom, 0px) env(safe-area-inset-left, 0px);
text-transform:uppercase;
width:100%;
}
/* Portrait layout (default) */
.app {
background:url(../img/logo.png) no-repeat center top; /* 170px x 200px */
position:absolute; /* position in the center of the screen */
left:50%;
top:50%;
height:150px; /* text area height */
width:225px; /* text area width */
text-align:center;
padding:180px 0px 0px 0px; /* image height is 200px (bottom 20px are overlapped with text) */
margin:-115px 0px 0px -112px; /* offset vertical: half of image height and text area height */
/* offset horizontal: half of text area width */
}
/* Landscape layout (with min-width) */
@media screen and (min-aspect-ratio: 1/1) and (min-width:400px) {
.app {
background-position:left center;
padding:75px 0px 75px 170px; /* padding-top + padding-bottom + text area = image height */
margin:-90px 0px 0px -198px; /* offset vertical: half of image height */
/* offset horizontal: half of image width and text area width */
}
}
h1 {
font-size:24px;
font-weight:normal;
margin:0px;
overflow:visible;
padding:0px;
text-align:center;
}
.event {
border-radius:4px;
color:#FFFFFF;
font-size:12px;
margin:0px 30px;
padding:2px 0px;
}
.event.listening {
background-color:#333333;
display:block;
}
.event.received {
background-color:#4B946A;
display:none;
}
#deviceready.ready .event.listening { display: none; }
#deviceready.ready .event.received { display: block; }
@keyframes fade {
from { opacity: 1.0; }
50% { opacity: 0.4; }
to { opacity: 1.0; }
}
.blink {
animation:fade 3000ms infinite;
-webkit-animation:fade 3000ms infinite;
}
@media screen and (prefers-color-scheme: dark) {
body {
background-image:linear-gradient(to bottom, #585858 0%, #1B1B1B 51%);
}
}
www/img/logo.png

6.96 KiB

www/index.html 100644 → 100755
......@@ -54,7 +54,7 @@
<h3>Magnetometer</h3>
<pre><code id="magnetometerData"></code></pre>
<!-- <button onclick="startOrStopTimer()">Start 10Hz signal</button> -->
<button onclick="startOrStopTimer()">Start 10Hz signal</button>
</div>
<script src="cordova.js"></script>
<script type="text/javascript" src="js/APIKeys.js"></script>
......
/*
* IndoorAtlas Cordova Plugin Examples
* https://github.com/IndoorAtlas/cordova-plugin
* https://github.com/IndoorAtlas/sdk-cordova-examples
*/
// rename this file to APIKeys.js and insert your API keys
// This can be left blank if you do not want to show Mapbox outdoor maps
// underneath the floor plans. Otherwise get a token at https://www.mapbox.com/
var MAPBOX_ACCESS_TOKEN = "";
// Get IndoorAtlas API Key and Secret from here https://app.indooratlas.com/apps
var IA_API_KEY = '7a372a4d-2c40-4cc8-927b-95a0c1b0fb7c';
var IA_API_SECRET = 'tS0+QHXPTn8xw5+vVDGBc9WgTmtc9VRCYUB/GnRMW8J3S8qTgyouVpLR5KPk+4UqoDEX/RbE+LDfGLGOp9hwYAXjlkEDAGokk8gm5yA4v0zKGlVGgSTENrZia2aWZg==';
\ No newline at end of file
angular
.module('deviceGyroscope', [])
.factory('$deviceGyroscope', ['$q', function($q) {
return {
getCurrent: function() {
var q = $q.defer();
if (angular.isUndefined(navigator.gyroscope) ||
!angular.isFunction(navigator.gyroscope.getCurrent)) {
q.reject('Device do not support watch');
}
navigator.gyroscope.getCurrent(function(result) {
q.resolve(result);
}, function(err) {
q.reject(err);
});
return q.promise;
},
watch: function(options) {
var q = $q.defer();
if (angular.isUndefined(navigator.gyroscope) ||
!angular.isFunction(navigator.gyroscope.watch)) {
q.reject('Device do not support watchGyroscope');
}
var watchID = navigator.gyroscope.watch(function(result) {
q.notify(result);
}, function(err) {
q.reject(err);
}, options);
q.promise.cancel = function() {
navigator.gyroscope.clearWatch(watchID);
};
q.promise.clearWatch = function(id) {
navigator.gyroscope.clearWatch(id || watchID);
};
q.promise.watchID = watchID;
return q.promise;
},
clearWatch: function(watchID) {
return navigator.gyroscope.clearWatch(watchID);
}
};
}]);
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/*
* Author: Julien Caverne
* Date: 24/09/2020
*/
// Wait for the deviceready event before using any of Cordova's device APIs.
// See https://cordova.apache.org/docs/en/latest/cordova/events/events.html#deviceready
document.addEventListener('deviceready', onDeviceReady, false);
var timer = null;
var position;
var acceleration = navigator.accelerometer;
var gyroscope = navigator.gyroscope;
var magnetometer = navigator.magnetometer;
var sensors = navigator.orientation;
var rotation = navigator.rotationvector;
///var IndoorAtlas = navigator.indooratlas;
function onDeviceReady() {
// Cordova is now initialized. Have fun!
console.log('Running cordova-' + cordova.platformId + '@' + cordova.version);
//Add volume buttons events:
document.addEventListener("volumeupbutton", handleButtonEvent, false);
document.addEventListener("volumedownbutton", handleButtonEvent, false);
//start watching gps
navigator.geolocation.watchPosition((pos) => {position = pos;}, (error) => handleError(error), {timeout: 100, enableHighAccuracy: true });
//start watching acceleration
navigator.accelerometer.watchAcceleration((acc) => {acceleration = acc;}, (error) => handleError(error), { frequency: 100 });
//start watching gyroscope
navigator.gyroscope.watch((gyro) => {gyroscope = gyro;}, (error) => handleError(error), { frequency: 100 });
//start watching magneto
cordova.plugins.magnetometer.watchReadings((magn) => {magnetometer = magn;}, (error) => handleError(error), { frequency: 100 });
}
function handleButtonEvent() {
//Set position in html
if (position) {
document.getElementById('gpsData').innerHTML = ""
+ " timestamp: " + position.timestamp
+ "\n lati: " + position.coords.latitude
+ "\n long: " + position.coords.longitude
+ "\n alti: " + position.coords.altitude
+ "\n heading: " + position.coords.heading
+ "\n speed: " + position.coords.speed
+ "\n accuracy: " + position.coords.accuracy;
}
//Set acceleration in html
document.getElementById('accelerometerData').innerHTML = ""
+ " timestamp: " + acceleration.timestamp
+ "\n X: " + acceleration.x
+ "\n Y: " + acceleration.y
+ "\n Z: " + acceleration.z;
//Set gyroscope in html
document.getElementById('gyroscopeData').innerHTML = ""
+ " timestamp: " + gyroscope.timestamp
+ "\n X: " + gyroscope.x
+ "\n Y: " + gyroscope.y
+ "\n Z: " + gyroscope.z;
//Set magnetometer in html
document.getElementById('magnetometerData').innerHTML = ""
+ " timestamp: " + acceleration.timestamp
+ "\n X: " + magnetometer.x
+ "\n Y: " + magnetometer.y
+ "\n Z: " + magnetometer.z;
//TODO: save to file / db
}
function handleError(error) {
//TODO: log error to error file / db
console.log('error');
}
function startOrStopTimer() {
if (!timer) {
timer = setInterval(handleButtonEvent, 100)
} else {
clearInterval(timer);
timer = null;
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment