summaryrefslogtreecommitdiff
path: root/nuttx/tools
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-09-12 20:14:46 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2012-09-12 20:14:46 +0000
commit6649286b2f4917b87ecdd790eba138aefcf2b210 (patch)
tree92a86ff9d6ca32ab4ebc6c485a3bfd2fdc594925 /nuttx/tools
parentd660afc8fd83a630d0a223dd2796003024ce4f11 (diff)
downloadpx4-nuttx-6649286b2f4917b87ecdd790eba138aefcf2b210.tar.gz
px4-nuttx-6649286b2f4917b87ecdd790eba138aefcf2b210.tar.bz2
px4-nuttx-6649286b2f4917b87ecdd790eba138aefcf2b210.zip
Add UDP discovery configuration for the STM3240G-EVAL (from Max Holtzberg)
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5138 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/tools')
-rwxr-xr-xnuttx/tools/README.txt6
-rwxr-xr-xnuttx/tools/discover.py98
2 files changed, 104 insertions, 0 deletions
diff --git a/nuttx/tools/README.txt b/nuttx/tools/README.txt
index ae19be273..5d52eaeff 100755
--- a/nuttx/tools/README.txt
+++ b/nuttx/tools/README.txt
@@ -17,6 +17,12 @@ configure.sh
target board. See configs/README.txt or Documentation/NuttxPortingGuide.html
for a description of how to configure NuttX with this script.
+discover.py
+
+ Example script for discovering devices in the local network.
+ It is the counter part to apps/netutils/discover
+
+
mkconfig.c, cfgparser.c, and cfgparser.h
These are Cs file that are used to build mkconfig program. The mkconfig
diff --git a/nuttx/tools/discover.py b/nuttx/tools/discover.py
new file mode 100755
index 000000000..3279fe871
--- /dev/null
+++ b/nuttx/tools/discover.py
@@ -0,0 +1,98 @@
+#!/usr/bin/env python
+############################################################################
+# tools/indent.sh
+#
+# Copyright (C) 2012 Max Holtzberg. All rights reserved.
+# Author: Max Holtzberg <mh@uvc.de>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+# 3. Neither the name NuttX nor the names of its contributors may be
+# used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+#
+############################################################################
+
+import array
+import time
+from socket import *
+
+PORT = 96
+
+DISCOVER_PROTO_ID = 0x99
+DISCOVER_ALL = 0xff # 0xff means all devices
+DISCOVER_REQUEST = 0x01
+DISCOVER_RESPONSE = 0x02
+DISCOVER_REQUEST_SIZE = 4
+DISCOVER_RESPONSE_SIZE = 35
+
+def check_sum(data):
+ chksum = 0
+ for c in data[:-1]:
+ chksum -= c
+ return (chksum & 0xff) == data[-1]
+
+def send_discover(socket):
+ cmd = array.array('B', [0] * DISCOVER_REQUEST_SIZE)
+ cmd[0] = DISCOVER_PROTO_ID # Tag for identification of the protocol
+ cmd[1] = DISCOVER_REQUEST # Request command
+ cmd[2] = DISCOVER_ALL
+ chksum = 0
+ for c in cmd[:3]:
+ chksum -= c;
+ cmd[3] = chksum & 0xff
+
+ socket.sendto(cmd, ('<broadcast>', PORT))
+
+def read_responses(socket):
+ res = []
+ response = array.array('B', [0] * DISCOVER_RESPONSE_SIZE)
+ try:
+ while 1:
+ size, src = socket.recvfrom_into(response)
+ if (size == DISCOVER_RESPONSE_SIZE
+ and response[0] == DISCOVER_PROTO_ID
+ and response[1] == DISCOVER_RESPONSE
+ and check_sum(response)):
+
+ dev = {}
+ dev['addr'] = src[0]
+ dev['descr'] = response[2:-1].tostring().rstrip('\0')
+ res.append(dev)
+
+ except timeout:
+ return res
+
+if __name__ == '__main__':
+ print 'Sending discover...'
+
+ s = socket(AF_INET, SOCK_DGRAM)
+ s.bind(('0.0.0.0', PORT))
+ s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
+ s.settimeout(1.0);
+ send_discover(s)
+ devices = read_responses(s)
+ socket.close(s)
+
+ print devices