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 %}