diff --git a/.gitignore b/.gitignore index 854f5ab..748a6af 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,6 @@ dist/ .DS_Store *.pyc *.sqlite3 -*.db \ No newline at end of file +*.db +static_root/ +test.html \ No newline at end of file diff --git a/pins/serializers.py b/pins/serializers.py index d243b92..d576842 100644 --- a/pins/serializers.py +++ b/pins/serializers.py @@ -44,3 +44,8 @@ class PinSerializer(serializers.Serializer): read_only=True, allow_null=True ) + + is_gpio = serializers.BooleanField( + read_only=True, + label="Is pin gpio?" + ) diff --git a/restpi/settings/pin_settings.py b/restpi/settings/pin_settings.py index fdb6348..1e70880 100644 --- a/restpi/settings/pin_settings.py +++ b/restpi/settings/pin_settings.py @@ -1,46 +1,46 @@ from RPi.GPIO import * PINS = [ - {"physical": 1, "name": "3.3v", "mode": None, "value": None, "BCM": None}, - {"physical": 2, "name": "5v", "mode": None, "value": None, "BCM": None}, - {"physical": 3, "name": "SDA.1", "mode": None, "value": None, "BCM": 2}, - {"physical": 4, "name": "5v", "mode": None, "value": None, "BCM": None}, - {"physical": 5, "name": "SCL.1", "mode": None, "value": None, "BCM": 3}, - {"physical": 6, "name": "0v", "mode": None, "value": None, "BCM": None}, - {"physical": 7, "name": "GPIO.7", "mode": None, "value": None, "BCM": 4}, - {"physical": 8, "name": "TxD", "mode": "ALT0", "value": None, "BCM": 14}, - {"physical": 9, "name": "0v", "mode": None, "value": None, "BCM": None}, - {"physical": 10, "name": "RxD", "mode": "ALT0", "value": None, "BCM": 15}, - {"physical": 11, "name": "GPIO.0", "mode": None, "value": None, "BCM": 17}, - {"physical": 12, "name": "GPIO.1", "mode": None, "value": None, "BCM": 18}, - {"physical": 13, "name": "GPIO.2", "mode": None, "value": None, "BCM": 27}, - {"physical": 14, "name": "0v", "mode": None, "value": None, "BCM": None}, - {"physical": 15, "name": "GPIO.3", "mode": None, "value": None, "BCM": 22}, - {"physical": 16, "name": "GPIO.4", "mode": None, "value": None, "BCM": 23}, - {"physical": 17, "name": "3.3v", "mode": None, "value": None, "BCM": None}, - {"physical": 18, "name": "GPIO.5", "mode": None, "value": None, "BCM": 24}, - {"physical": 19, "name": "MOSI", "mode": None, "value": None, "BCM": 10}, - {"physical": 20, "name": "0v", "mode": None, "value": None, "BCM": None}, - {"physical": 21, "name": "MISO", "mode": None, "value": None, "BCM": 9}, - {"physical": 22, "name": "GPIO.6", "mode": None, "value": None, "BCM": 25}, - {"physical": 23, "name": "SCLK", "mode": None, "value": None, "BCM": 11}, - {"physical": 24, "name": "CE0", "mode": None, "value": None, "BCM": 8}, - {"physical": 25, "name": "0v", "mode": None, "value": None, "BCM": None}, - {"physical": 26, "name": "CE1", "mode": None, "value": None, "BCM": 7}, - {"physical": 27, "name": "SDA.0", "mode": None, "value": None, "BCM": 0}, - {"physical": 28, "name": "SCL.0", "mode": None, "value": None, "BCM": 1}, - {"physical": 29, "name": "GPIO.21", "mode": None, "value": None, "BCM": 5}, - {"physical": 30, "name": "0v", "mode": None, "value": None, "BCM": None}, - {"physical": 31, "name": "GPIO.22", "mode": None, "value": None, "BCM": 6}, - {"physical": 32, "name": "GPIO.26", "mode": None, "value": None, "BCM": 12}, - {"physical": 33, "name": "GPIO.23", "mode": None, "value": None, "BCM": 13}, - {"physical": 34, "name": "0v", "mode": None, "value": None, "BCM": None}, - {"physical": 35, "name": "GPIO.24", "mode": None, "value": None, "BCM": 19}, - {"physical": 36, "name": "GPIO.27", "mode": None, "value": None, "BCM": 16}, - {"physical": 37, "name": "GPIO.25", "mode": None, "value": None, "BCM": 26}, - {"physical": 38, "name": "GPIO.28", "mode": None, "value": None, "BCM": 20}, - {"physical": 39, "name": "0v", "mode": None, "value": None, "BCM": None}, - {"physical": 40, "name": "GPIO.29", "mode": None, "value": None, "BCM": 21}, + {"physical": 1, "name": "3.3v", "mode": None, "value": None, "BCM": None, "is_gpio": False}, + {"physical": 2, "name": "5v", "mode": None, "value": None, "BCM": None, "is_gpio": False}, + {"physical": 3, "name": "SDA.1", "mode": None, "value": None, "BCM": 2, "is_gpio": False}, + {"physical": 4, "name": "5v", "mode": None, "value": None, "BCM": None, "is_gpio": False}, + {"physical": 5, "name": "SCL.1", "mode": None, "value": None, "BCM": 3, "is_gpio": False}, + {"physical": 6, "name": "0v", "mode": None, "value": None, "BCM": None, "is_gpio": False}, + {"physical": 7, "name": "GPIO.7", "mode": None, "value": None, "BCM": 4, "is_gpio": True}, + {"physical": 8, "name": "TxD", "mode": "ALT0", "value": None, "BCM": 14, "is_gpio": False}, + {"physical": 9, "name": "0v", "mode": None, "value": None, "BCM": None, "is_gpio": False}, + {"physical": 10, "name": "RxD", "mode": "ALT0", "value": None, "BCM": 15, "is_gpio": False}, + {"physical": 11, "name": "GPIO.0", "mode": None, "value": None, "BCM": 17, "is_gpio": True}, + {"physical": 12, "name": "GPIO.1", "mode": None, "value": None, "BCM": 18, "is_gpio": True}, + {"physical": 13, "name": "GPIO.2", "mode": None, "value": None, "BCM": 27, "is_gpio": True}, + {"physical": 14, "name": "0v", "mode": None, "value": None, "BCM": None, "is_gpio": False}, + {"physical": 15, "name": "GPIO.3", "mode": None, "value": None, "BCM": 22, "is_gpio": True}, + {"physical": 16, "name": "GPIO.4", "mode": None, "value": None, "BCM": 23, "is_gpio": True}, + {"physical": 17, "name": "3.3v", "mode": None, "value": None, "BCM": None, "is_gpio": False}, + {"physical": 18, "name": "GPIO.5", "mode": None, "value": None, "BCM": 24, "is_gpio": True}, + {"physical": 19, "name": "MOSI", "mode": None, "value": None, "BCM": 10, "is_gpio": False}, + {"physical": 20, "name": "0v", "mode": None, "value": None, "BCM": None, "is_gpio": False}, + {"physical": 21, "name": "MISO", "mode": None, "value": None, "BCM": 9, "is_gpio": False}, + {"physical": 22, "name": "GPIO.6", "mode": None, "value": None, "BCM": 25, "is_gpio": True}, + {"physical": 23, "name": "SCLK", "mode": None, "value": None, "BCM": 11, "is_gpio": False}, + {"physical": 24, "name": "CE0", "mode": None, "value": None, "BCM": 8, "is_gpio": False}, + {"physical": 25, "name": "0v", "mode": None, "value": None, "BCM": None, "is_gpio": False}, + {"physical": 26, "name": "CE1", "mode": None, "value": None, "BCM": 7, "is_gpio": False}, + {"physical": 27, "name": "SDA.0", "mode": None, "value": None, "BCM": 0, "is_gpio": False}, + {"physical": 28, "name": "SCL.0", "mode": None, "value": None, "BCM": 1, "is_gpio": False}, + {"physical": 29, "name": "GPIO.21", "mode": None, "value": None, "BCM": 5, "is_gpio": True}, + {"physical": 30, "name": "0v", "mode": None, "value": None, "BCM": None, "is_gpio": False}, + {"physical": 31, "name": "GPIO.22", "mode": None, "value": None, "BCM": 6, "is_gpio": True}, + {"physical": 32, "name": "GPIO.26", "mode": None, "value": None, "BCM": 12, "is_gpio": True}, + {"physical": 33, "name": "GPIO.23", "mode": None, "value": None, "BCM": 13, "is_gpio": True}, + {"physical": 34, "name": "0v", "mode": None, "value": None, "BCM": None, "is_gpio": False}, + {"physical": 35, "name": "GPIO.24", "mode": None, "value": None, "BCM": 19, "is_gpio": True}, + {"physical": 36, "name": "GPIO.27", "mode": None, "value": None, "BCM": 16, "is_gpio": True}, + {"physical": 37, "name": "GPIO.25", "mode": None, "value": None, "BCM": 26, "is_gpio": True}, + {"physical": 38, "name": "GPIO.28", "mode": None, "value": None, "BCM": 20, "is_gpio": True}, + {"physical": 39, "name": "0v", "mode": None, "value": None, "BCM": None, "is_gpio": False}, + {"physical": 40, "name": "GPIO.29", "mode": None, "value": None, "BCM": 21, "is_gpio": True}, ] BOARD_PORTS = [3, 5, 7, 8, 10, 11, 12, 13, 15, 16, 18, 19, 21, 22, 23, 24, 26, 29, 31, 32, 33, 35, 36, 37, 38, 40] diff --git a/restpi/settings/shared.py b/restpi/settings/shared.py index 0be7d7f..a983478 100644 --- a/restpi/settings/shared.py +++ b/restpi/settings/shared.py @@ -38,17 +38,19 @@ INSTALLED_APPS = [ # 3rd party 'rest_framework', - 'tokenauth' + 'tokenauth', + 'corsheaders' ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', + 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware' ] ROOT_URLCONF = 'restpi.urls' @@ -145,3 +147,10 @@ REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 40, } + +CORS_ALLOW_CREDENTIALS = True +CORS_ORIGIN_ALLOW_ALL = True +CORS_ORIGIN_WHITELIST = ( + 'localhost', + 'http//:localhost:63342' +) \ No newline at end of file diff --git a/statics/static_dirs/css/checkbox.css b/statics/static_dirs/css/checkbox.css index 8e74c81..045a59d 100644 --- a/statics/static_dirs/css/checkbox.css +++ b/statics/static_dirs/css/checkbox.css @@ -51,7 +51,7 @@ input[type="checkbox"].switch_1{ } input[type="checkbox"].switch_1:checked{ - background: #0ebeff; + background: #0062cc; } input[type="checkbox"].switch_1:after{ @@ -344,4 +344,5 @@ svg.checkbox .is_unchecked{ transform: translateX(-190%) translateY(-30%) scale(0); } /* REF: https://bootsnipp.com/snippets/xrnNM */ -/* Switch 4 Specific Style End */ \ No newline at end of file +/* Switch 4 Specific Style End */ + diff --git a/statics/static_dirs/css/style.css b/statics/static_dirs/css/style.css index 246196c..f4075f4 100644 --- a/statics/static_dirs/css/style.css +++ b/statics/static_dirs/css/style.css @@ -49,7 +49,22 @@ table{ th[scope="row"]:nth-child(2n){ border-left: 0.75rem solid black; } +.table-left{ + text-align: right; +} input[type="checkbox"].switch_1 { font-size: 0.75rem; + -webkit-border-radius: 0.1rem; + -moz-border-radius: 0.1rem; + border-radius: 0.1rem; +} + +.radioBtn .notActive{ + color: #3276b1; + background-color: #fff; +} +.radioBtn a.btn{ + font-size: 0.5rem; + border: 0px; } \ No newline at end of file diff --git a/statics/static_dirs/js/pintable.js b/statics/static_dirs/js/pintable.js index 1dc720c..1e7b596 100644 --- a/statics/static_dirs/js/pintable.js +++ b/statics/static_dirs/js/pintable.js @@ -1,19 +1,48 @@ var app = angular.module('pinTableApp', []); - app.controller('pinTableController', function($scope, $http) { - $http.get("/pins/api/") - .then(function(response) { - var pins = response.data.results; - var new_pinlist = []; - var temp_pinlist = []; - pins.forEach(function (item, index) { - if(index % 2 == 0){ - temp_pinlist.push(item); - }else{ - temp_pinlist.push(item); - new_pinlist.push(temp_pinlist); - temp_pinlist = [] - } - }); - $scope.pins = new_pinlist; - }); - }); \ No newline at end of file +app.controller('pinTableController', function($scope, $http) { + $scope.refresh_list = function(pin_list){ + var new_pinlist = []; + var temp_pinlist = []; + $scope.pinlist.forEach(function (item, index) { + if(index % 2 == 0){ + temp_pinlist.push(item); + }else{ + temp_pinlist.push(item); + new_pinlist.push(temp_pinlist); + temp_pinlist = [] + } + }); + return new_pinlist; + }; + + $http.get("/pins/api/") + .then(function(response) { + $scope.pinlist = response.data.results; + $scope.pins = $scope.refresh_list($scope.pinlist); + }); + + $scope.change_mode = function (physical, mode_code) { + var url = "/pins/api/" + physical; + $http.post(url, {mode: mode_code}, {headers: {'Content-Type': 'application/json'}}) + .then(function (response) { + if(response.status == 200 && response.data.operation){ + $scope.pinlist[physical-1] = response.data.pin; + $scope.pins = $scope.refresh_list($scope.pinlist); + } + }) + .catch((err) => { + $scope.pins = $scope.refresh_list($scope.pinlist); + }) + } + +}); + +$(document).ready(function() { + $('.container').on('click', '.radioBtn a', function() { + var sel = $(this).data('title'); + var tog = $(this).data('toggle'); + $(this).parent().next('.' + tog).prop('value', sel); + $(this).parent().find('a[data-toggle="' + tog + '"]').not('[data-title="' + sel + '"]').removeClass('active').addClass('notActive'); + $(this).parent().find('a[data-toggle="' + tog + '"][data-title="' + sel + '"]').removeClass('notActive').addClass('active'); + }); +}); \ No newline at end of file diff --git a/templates/base.html b/templates/base.html index 5d461e9..06b2c0c 100644 --- a/templates/base.html +++ b/templates/base.html @@ -5,9 +5,7 @@ - - @@ -26,5 +24,6 @@ + {% block extraFoot %}{% endblock %} \ No newline at end of file diff --git a/templates/pins/index.html b/templates/pins/index.html index 3537192..fa2674d 100644 --- a/templates/pins/index.html +++ b/templates/pins/index.html @@ -1,6 +1,6 @@ {% extends 'base.html' %} {% load staticfiles %} -{% block title %}Login{% endblock %} +{% block title %}Pins{% endblock %} {% block mainarea %}
@@ -27,12 +27,56 @@ {{ pin[0].BCM }} {{ pin[0].name }} - {{ pin[0].hr_mode }} - + +
+
+ IN + + OUT +
+
+ + + + {{ pin[0].physical }} + {{ pin[1].physical }} - - {{ pin[1].hr_mode }} + + + + +
+ IN + + OUT +
+ + {{ pin[1].name }} {{ pin[1].BCM }} @@ -43,5 +87,9 @@
+ + +{% endblock %} +{% block extraFoot %} {% endblock %} \ No newline at end of file