as django project, first commit
This commit is contained in:
commit
154efd3115
0
__init__.py
Normal file
0
__init__.py
Normal file
11
manage.py
Executable file
11
manage.py
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
from django.core.management import execute_manager
|
||||||
|
try:
|
||||||
|
import settings # Assumed to be in the same directory.
|
||||||
|
except ImportError:
|
||||||
|
import sys
|
||||||
|
sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
execute_manager(settings)
|
196
run_socket.py
Normal file
196
run_socket.py
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
import SocketServer
|
||||||
|
import sys
|
||||||
|
|
||||||
|
class IncomingPacketHandler(SocketServer.BaseRequestHandler):
|
||||||
|
|
||||||
|
def handle(self):
|
||||||
|
self.data = self.request.recv(6).strip()
|
||||||
|
handler_keyboard_cmd(self.data)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
#TODO
|
||||||
|
#1. get serial port parameter from command line arguements
|
||||||
|
#2. print usage with examples before Enter your input
|
||||||
|
#3. add debug mode
|
||||||
|
|
||||||
|
#initialize global vars
|
||||||
|
sys_up = False
|
||||||
|
run = True
|
||||||
|
valid_cmd = False
|
||||||
|
int_ser_data = [0,0,0,0,0,0,0,0,0,0,0,0,0]
|
||||||
|
hex_ser_data = [0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0]
|
||||||
|
|
||||||
|
#functions defined here
|
||||||
|
def write_serial(ser, out_ser_pkt):
|
||||||
|
#function writes 13 bytes to serial port
|
||||||
|
# ser.write(out_ser_pkt)
|
||||||
|
import time
|
||||||
|
time.sleep(5 / 1000000.0)
|
||||||
|
for i in range(0, 13):
|
||||||
|
ser.write(chr(out_ser_pkt[i]))
|
||||||
|
# ser.write(out_ser_pkt[i])
|
||||||
|
# print "wrote i=%i out_ser_pkt=%i" % (i,out_ser_pkt[i])
|
||||||
|
# time.sleep(5)
|
||||||
|
|
||||||
|
#serial port packet handler
|
||||||
|
def handler_serial_pkt():
|
||||||
|
global sys_up
|
||||||
|
global int_ser_data
|
||||||
|
global out_ser_pkt
|
||||||
|
global valid_cmd
|
||||||
|
|
||||||
|
#print "in hsp int_ser_data[4]= %i", (int_ser_data[4])
|
||||||
|
#print "in hsp valid_cmd= %i", (valid_cmd)
|
||||||
|
#do the needful for sys up
|
||||||
|
if sys_up == False and int_ser_data[4] == 01:
|
||||||
|
out_ser_pkt=[0x7e,0x7e,0xff,0xfa,0x0,0x01,0x01,0x0,0x61,0x0,0x0,0xff,0x7e]
|
||||||
|
write_serial(ser,out_ser_pkt)
|
||||||
|
sys_up = True
|
||||||
|
print "sent packet sys up"
|
||||||
|
else:
|
||||||
|
#the basic switch which was used in c is here
|
||||||
|
#print "looping back"
|
||||||
|
if int_ser_data[4] == 01:
|
||||||
|
#send device cmd & data to panel
|
||||||
|
if valid_cmd == True:
|
||||||
|
out_ser_pkt=[0x7e,0x7e,0xff,0xfa,0x0,0x01,dev_cmd,0x01,0xAA,panel_dev,dev_no,0xff,0x7e]
|
||||||
|
print "prepared out_ser_pkt "
|
||||||
|
write_serial(ser,out_ser_pkt)
|
||||||
|
print "sent packet out_ser_pkt "
|
||||||
|
#if device cmd & data ack from panel
|
||||||
|
elif int_ser_data[4] == 0x5a:
|
||||||
|
valid_cmd = False
|
||||||
|
print "Done device cmd"
|
||||||
|
elif int_ser_data[4] == 0x55:
|
||||||
|
valid_cmd = False
|
||||||
|
print "FATAL ERROR!!! Received NAK from panel"
|
||||||
|
#no data for panel send keep alive
|
||||||
|
else:
|
||||||
|
out_ser_pkt=[0x7e,0x7e,0xff,0xfa,0x0,0x01,0x0,0x01,0xAA,0x52,0x01,0xff,0x7e]
|
||||||
|
write_serial(ser,out_ser_pkt)
|
||||||
|
|
||||||
|
#keyboard command handler
|
||||||
|
def handler_keyboard_cmd(kbd_cmd):
|
||||||
|
# global kdb_cmd
|
||||||
|
|
||||||
|
global dev
|
||||||
|
global str_dev_no
|
||||||
|
global dev_no
|
||||||
|
global dev_cmd
|
||||||
|
global str_dev_cmd
|
||||||
|
global valid_cmd
|
||||||
|
global panel_dev
|
||||||
|
print kbd_cmd
|
||||||
|
#if lenght of keyboard cmd equals 6, parse keyboard input
|
||||||
|
if kbd_cmd[0] == 'r' or kbd_cmd[0] == 'R'or kbd_cmd[0] == 'd' or kbd_cmd[0] == 'D':
|
||||||
|
import string
|
||||||
|
dev=string.upper(kbd_cmd[0])
|
||||||
|
print "dev=%s" % (dev)
|
||||||
|
str_dev_no=kbd_cmd[1] + kbd_cmd[2]
|
||||||
|
print "str_dev_no=%s" %str_dev_no
|
||||||
|
if str_dev_no =='01':
|
||||||
|
dev_no=1
|
||||||
|
elif str_dev_no =='02':
|
||||||
|
dev_no=2
|
||||||
|
elif str_dev_no =='03':
|
||||||
|
dev_no=3
|
||||||
|
elif str_dev_no =='04':
|
||||||
|
dev_no=4
|
||||||
|
elif str_dev_no =='05':
|
||||||
|
dev_no=5
|
||||||
|
elif str_dev_no =='06':
|
||||||
|
dev_no=6
|
||||||
|
elif str_dev_no =='07':
|
||||||
|
dev_no=7
|
||||||
|
elif str_dev_no =='08':
|
||||||
|
dev_no=8
|
||||||
|
elif str_dev_no =='09':
|
||||||
|
dev_no=9
|
||||||
|
elif str_dev_no =='10':
|
||||||
|
#print "debug in 10"
|
||||||
|
dev_no=0xa
|
||||||
|
elif str_dev_no =='11':
|
||||||
|
#print "debug in 11"
|
||||||
|
dev_no=0xb
|
||||||
|
elif str_dev_no =='12':
|
||||||
|
#print "debug in 12"
|
||||||
|
dev_no=0xc
|
||||||
|
elif str_dev_no =='13':
|
||||||
|
#print "debug in 13"
|
||||||
|
dev_no=0xd
|
||||||
|
elif str_dev_no =='14':
|
||||||
|
#print "debug in 14"
|
||||||
|
dev_no=0xe
|
||||||
|
elif str_dev_no =='15':
|
||||||
|
#print "debug in 15"
|
||||||
|
dev_no=0xf
|
||||||
|
elif str_dev_no =='16':
|
||||||
|
#print "debug in 16"
|
||||||
|
dev_no=0x10
|
||||||
|
else:
|
||||||
|
dev_no=0
|
||||||
|
#print "invalid device no"
|
||||||
|
if dev_no >= 1 and dev_no <= 0x10:
|
||||||
|
print "--- valid device no.---"
|
||||||
|
str_dev_cmd = kbd_cmd[4] + kbd_cmd[5]
|
||||||
|
dev_cmd=int(str_dev_cmd, 16)
|
||||||
|
print "str_dev_cmd=%s" % (str_dev_cmd)
|
||||||
|
print "dev_cmd= %x " %(dev_cmd)
|
||||||
|
if dev == 'R':
|
||||||
|
if dev_cmd == 00 or dev_cmd == 01:
|
||||||
|
valid_cmd = True
|
||||||
|
panel_dev=0x52
|
||||||
|
#print "valid_cmd = %s" % (valid_cmd)
|
||||||
|
else:
|
||||||
|
valid_cmd = False
|
||||||
|
print "for relay valid_cmd = %s" % (valid_cmd)
|
||||||
|
else:
|
||||||
|
if dev_cmd >= 0x0 and dev_cmd <= 0xff:
|
||||||
|
valid_cmd = True
|
||||||
|
panel_dev=0x44
|
||||||
|
dev_no=dev_no-1
|
||||||
|
#print "for dac valid_cmd = %s" % (valid_cmd)
|
||||||
|
else:
|
||||||
|
valid_cmd = False
|
||||||
|
print "valid_cmd = %s" % (valid_cmd)
|
||||||
|
else:
|
||||||
|
print "Invlaid device"
|
||||||
|
else:
|
||||||
|
print "Invalid Command"
|
||||||
|
|
||||||
|
|
||||||
|
#---- main program here
|
||||||
|
|
||||||
|
#init serial port
|
||||||
|
import serial
|
||||||
|
ser = serial.Serial('/dev/ttyS0', 115200,timeout=20)#init serial port TODO serial port params should be command line arguements
|
||||||
|
sys_up=False;
|
||||||
|
print "Connecting to Panel. Please wait..."
|
||||||
|
while run:
|
||||||
|
ser_data = ser.read(13)#read 1 packet of 13bytes from panel
|
||||||
|
for i in range(0, 13):
|
||||||
|
int_ser_data[i]=ord(ser_data[i])#convert packet received from char to integer
|
||||||
|
# print "i = %i int_ser_data = %i" % (i,int_ser_data[i])
|
||||||
|
|
||||||
|
#validate packet byte 1, byte 2, byte 13 =126 viz 0x7e
|
||||||
|
if int_ser_data[0] == 126 and int_ser_data[1] == 126 and int_ser_data[12] == 126:
|
||||||
|
#print "b4 hsp int_ser_data[4]= %i", (int_ser_data[4])
|
||||||
|
handler_serial_pkt()
|
||||||
|
# else:
|
||||||
|
# print "imporper packet"
|
||||||
|
if valid_cmd == False:
|
||||||
|
HOST, PORT = "127.0.0.1", 4321
|
||||||
|
server = SocketServer.TCPServer((HOST, PORT), IncomingPacketHandler)
|
||||||
|
server.serve_forever()
|
||||||
|
|
||||||
|
|
||||||
|
# l=len(kbd_cmd)
|
||||||
|
# print "kbd_cmd=%s l=%i " % (kbd_cmd,l)
|
||||||
|
# if l==6:
|
||||||
|
# handler_keyboard_cmd(kbd_cmd)
|
||||||
|
# else:
|
||||||
|
# print "Invalid Input"
|
||||||
|
|
||||||
|
|
||||||
|
|
0
sendmsg/__init__.py
Normal file
0
sendmsg/__init__.py
Normal file
3
sendmsg/models.py
Normal file
3
sendmsg/models.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
23
sendmsg/tests.py
Normal file
23
sendmsg/tests.py
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
"""
|
||||||
|
This file demonstrates two different styles of tests (one doctest and one
|
||||||
|
unittest). These will both pass when you run "manage.py test".
|
||||||
|
|
||||||
|
Replace these with more appropriate tests for your application.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
class SimpleTest(TestCase):
|
||||||
|
def test_basic_addition(self):
|
||||||
|
"""
|
||||||
|
Tests that 1 + 1 always equals 2.
|
||||||
|
"""
|
||||||
|
self.failUnlessEqual(1 + 1, 2)
|
||||||
|
|
||||||
|
__test__ = {"doctest": """
|
||||||
|
Another way to test that 1 + 1 is equal to 2.
|
||||||
|
|
||||||
|
>>> 1 + 1 == 2
|
||||||
|
True
|
||||||
|
"""}
|
||||||
|
|
17
sendmsg/views.py
Normal file
17
sendmsg/views.py
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
# Create your views here.
|
||||||
|
from django.http import HttpResponse
|
||||||
|
import socket
|
||||||
|
from django.shortcuts import render_to_response
|
||||||
|
|
||||||
|
def sendMsg(request):
|
||||||
|
msg = request.GET.get("msg", "")
|
||||||
|
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
s.connect(("localhost", 4321))
|
||||||
|
s.send(msg)
|
||||||
|
return HttpResponse("ok")
|
||||||
|
|
||||||
|
def index(request):
|
||||||
|
d = {
|
||||||
|
'foo': 'jtd'
|
||||||
|
}
|
||||||
|
return render_to_response("index.html", d)
|
101
settings.py
Normal file
101
settings.py
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
# Django settings for jtd project.
|
||||||
|
import os
|
||||||
|
from os.path import join
|
||||||
|
|
||||||
|
DEBUG = True
|
||||||
|
TEMPLATE_DEBUG = DEBUG
|
||||||
|
|
||||||
|
ADMINS = (
|
||||||
|
# ('Your Name', 'your_email@domain.com'),
|
||||||
|
)
|
||||||
|
PROJECT_PATH = os.path.dirname(__file__)
|
||||||
|
|
||||||
|
MANAGERS = ADMINS
|
||||||
|
|
||||||
|
DATABASES = {
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
|
||||||
|
'NAME': '', # Or path to database file if using sqlite3.
|
||||||
|
'USER': '', # Not used with sqlite3.
|
||||||
|
'PASSWORD': '', # Not used with sqlite3.
|
||||||
|
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
|
||||||
|
'PORT': '', # Set to empty string for default. Not used with sqlite3.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Local time zone for this installation. Choices can be found here:
|
||||||
|
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
|
||||||
|
# although not all choices may be available on all operating systems.
|
||||||
|
# On Unix systems, a value of None will cause Django to use the same
|
||||||
|
# timezone as the operating system.
|
||||||
|
# If running in a Windows environment this must be set to the same as your
|
||||||
|
# system time zone.
|
||||||
|
TIME_ZONE = 'America/Chicago'
|
||||||
|
|
||||||
|
# Language code for this installation. All choices can be found here:
|
||||||
|
# http://www.i18nguy.com/unicode/language-identifiers.html
|
||||||
|
LANGUAGE_CODE = 'en-us'
|
||||||
|
|
||||||
|
SITE_ID = 1
|
||||||
|
|
||||||
|
# If you set this to False, Django will make some optimizations so as not
|
||||||
|
# to load the internationalization machinery.
|
||||||
|
USE_I18N = True
|
||||||
|
|
||||||
|
# If you set this to False, Django will not format dates, numbers and
|
||||||
|
# calendars according to the current locale
|
||||||
|
USE_L10N = True
|
||||||
|
|
||||||
|
# Absolute path to the directory that holds media.
|
||||||
|
# Example: "/home/media/media.lawrence.com/"
|
||||||
|
MEDIA_ROOT = ''
|
||||||
|
|
||||||
|
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
|
||||||
|
# trailing slash if there is a path component (optional in other cases).
|
||||||
|
# Examples: "http://media.lawrence.com", "http://example.com/media/"
|
||||||
|
MEDIA_URL = ''
|
||||||
|
|
||||||
|
# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
|
||||||
|
# trailing slash.
|
||||||
|
# Examples: "http://foo.com/media/", "/media/".
|
||||||
|
ADMIN_MEDIA_PREFIX = '/media/'
|
||||||
|
|
||||||
|
# Make this unique, and don't share it with anybody.
|
||||||
|
SECRET_KEY = 'lr5&u!qf%kxmkvd9uxg=i_n8+&0r7@5j*76e9z+)m^z9(zdu-m'
|
||||||
|
|
||||||
|
# List of callables that know how to import templates from various sources.
|
||||||
|
TEMPLATE_LOADERS = (
|
||||||
|
'django.template.loaders.filesystem.Loader',
|
||||||
|
'django.template.loaders.app_directories.Loader',
|
||||||
|
# 'django.template.loaders.eggs.Loader',
|
||||||
|
)
|
||||||
|
|
||||||
|
MIDDLEWARE_CLASSES = (
|
||||||
|
'django.middleware.common.CommonMiddleware',
|
||||||
|
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||||
|
'django.middleware.csrf.CsrfViewMiddleware',
|
||||||
|
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||||
|
'django.contrib.messages.middleware.MessageMiddleware',
|
||||||
|
)
|
||||||
|
|
||||||
|
ROOT_URLCONF = 'jtd.urls'
|
||||||
|
|
||||||
|
TEMPLATE_DIRS = (
|
||||||
|
join(PROJECT_PATH, 'templates')
|
||||||
|
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
|
||||||
|
# Always use forward slashes, even on Windows.
|
||||||
|
# Don't forget to use absolute paths, not relative paths.
|
||||||
|
)
|
||||||
|
|
||||||
|
INSTALLED_APPS = (
|
||||||
|
'django.contrib.auth',
|
||||||
|
'django.contrib.contenttypes',
|
||||||
|
'django.contrib.sessions',
|
||||||
|
'django.contrib.sites',
|
||||||
|
'django.contrib.messages',
|
||||||
|
'sendmsg',
|
||||||
|
# Uncomment the next line to enable the admin:
|
||||||
|
# 'django.contrib.admin',
|
||||||
|
# Uncomment the next line to enable admin documentation:
|
||||||
|
# 'django.contrib.admindocs',
|
||||||
|
)
|
22
templates/index.html
Normal file
22
templates/index.html
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<script type="text/javascript" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#sendmsg').click(function() {
|
||||||
|
var msg = $('#msg').val();
|
||||||
|
$.get("/testmsg/", {
|
||||||
|
'msg': msg
|
||||||
|
}, function(response) {
|
||||||
|
alert(response);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
Hello {{ foo }}: <br />
|
||||||
|
Cmd: <input type="text" id="msg" /> <button id="sendmsg">Send</button>
|
||||||
|
</body>
|
||||||
|
</html>
|
18
urls.py
Normal file
18
urls.py
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
from django.conf.urls.defaults import *
|
||||||
|
|
||||||
|
# Uncomment the next two lines to enable the admin:
|
||||||
|
# from django.contrib import admin
|
||||||
|
# admin.autodiscover()
|
||||||
|
|
||||||
|
urlpatterns = patterns('',
|
||||||
|
(r'testmsg/', 'sendmsg.views.sendMsg'),
|
||||||
|
(r'^$', 'sendmsg.views.index'),
|
||||||
|
# Example:
|
||||||
|
# (r'^jtd/', include('jtd.foo.urls')),
|
||||||
|
|
||||||
|
# Uncomment the admin/doc line below to enable admin documentation:
|
||||||
|
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),
|
||||||
|
|
||||||
|
# Uncomment the next line to enable the admin:
|
||||||
|
# (r'^admin/', include(admin.site.urls)),
|
||||||
|
)
|
Loading…
Reference in New Issue
Block a user