Ignore leading zeros in modbus messages, Handle older PWR firmwares, Support for...
authorJoseph Coffland <joseph@cauldrondevelopment.com>
Wed, 16 May 2018 18:26:31 +0000 (11:26 -0700)
committerJoseph Coffland <joseph@cauldrondevelopment.com>
Wed, 16 May 2018 18:26:31 +0000 (11:26 -0700)
CHANGELOG.md
package.json
scripts/setup_rpi.sh
scripts/xinitrc [new file with mode: 0644]
src/py/bbctrl/I2C.py
src/py/bbctrl/Jog.py
src/py/bbctrl/Mach.py
src/py/bbctrl/Pwr.py
src/splash/buildbotics.plymouth [new file with mode: 0644]
src/splash/buildbotics.script [new file with mode: 0644]
src/splash/splash.png [new file with mode: 0644]

index 6f3be1878a1190f1ec6d3bd37a7fd3438e8f8bca..57d76b917c5a72cf7c3397b4bd6ab83e5d0e9d77 100644 (file)
@@ -1,10 +1,15 @@
 Buildbotics CNC Controller Firmware Changelog
 ==============================================
 
+## v0.3.24
+ -
+
 ## v0.3.23
  - Fix for modbus read operation.
  - Finalized AC-Tech VFD support.
  - Preliminary FR-D700 VFD support.
+ - Ignore leading zeros in modbus messages.
+ - Handle older PWR firmwares.
 
 ## v0.3.22
  - Fix position loss after program pause.  #130
index 648aca8248a868ded5cbfa446de5c073ae81b587..b7cf4264b6f08cae7dbc9c781de44ea0d4dedde4 100644 (file)
@@ -1,6 +1,6 @@
 {
   "name": "bbctrl",
-  "version": "0.3.23",
+  "version": "0.3.24",
   "homepage": "http://buildbotics.com/",
   "repository": "https://github.com/buildbotics/bbctrl-firmware",
   "license": "GPL-3.0+",
index efd80da6399b5cba4149a987c3aa93305dc682cc..f1530f138f273822ffd5a3467c3042024f3b10b5 100755 (executable)
@@ -9,7 +9,8 @@ apt-get dist-upgrade -y
 
 # Install packages
 apt-get install -y avahi-daemon avrdude minicom python3-pip python3-smbus \
-  i2c-tools python3-rpi.gpio libjpeg8 wiringpi
+  i2c-tools python3-rpi.gpio libjpeg8 wiringpi dnsmasq hostapd \
+  iptables-persistent chromium-browser xorg rpd-plym-splash
 pip3 install --upgrade tornado sockjs-tornado pyserial
 
 # Clean
@@ -55,10 +56,8 @@ adduser hawkeye video
 
 # Disable HDMI to save power and remount /boot read-only
 sed -i 's/^exit 0$//' /etc/rc.local
-echo "/usr/bin/tvservice -o" >> /etc/rc.local
 echo "mount -o remount,ro /boot" >> /etc/rc.local
 echo "gpio mode 27 alt3" >> /etc/rc.local # Enable serial CTS on pin 27
-echo "exit 0" >> /etc/rc.local
 
 # Dynamic clock to save power
 echo -e "\n# Dynamic clock\nnohz=on" >> /boot/config.txt
@@ -66,12 +65,37 @@ echo -e "\n# Dynamic clock\nnohz=on" >> /boot/config.txt
 # Shave 2 sec off of boot time
 echo -e "\n# Faster boot\ndtparam=sd_overclock=100" >> /boot/config.txt
 
-# TODO Forward 80 -> 8080 and moving bbctrl Web port
-
 # Enable ssh
 touch /boot/ssh
 
+# Fix boot
+sed -i 's/ root=[^ ]* / root=\/dev\/mmcblk0p2/' /boot/cmdline.txt
+sed -i 's/^PARTUUID=.*\/boot/\/dev\/mmcblk0p1 \/boot/' /etc/fstab
+sed -i 's/^PARTUUID=.*\//\/dev\/mmcblk0p2 \//' /etc/fstab
+
+# Enable browser in xorg
+sed -i 's/allowed_users=console/allowed_users=anybody/' /etc/X11/Xwrapper.config
+echo "sudo -u pi startx" >> /etc/rc.local
+cp /mnt/host/xinitrc /home/pi/.xinitrc
+
+# Set screen resolution
+sed -i 's/^#disable_overscan/disable_overscan/' /boot/config.txt
+sed -i 's/^#framebuffer_/framebuffer_/' /boot/config.txt
+
+# Boot splash
+mkdir -p /usr/share/plymouth/themes/buildbotics/
+cp -av /mnt/host/splash/* /usr/share/plymouth/themes/buildbotics/
+echo -n " quiet splash logo.nologo plymouth.ignore-serial-consoles" >> /boot/cmdline.txt
+plymouth-set-default-theme -R buildbotics
+
 # Install bbctrl
-tar xf bbctrl-*.tar.bz2
+tar xf /mnt/host/bbctrl-*.tar.bz2
 cd $(basename bbctrl-*.tar.bz2 .tar.bz2)
 ./setup.py install
+cd ..
+rm -rf $(basename bbctrl-*.tar.bz2 .tar.bz2)
+
+
+# Clean up
+apt-get autoremove -y
+apt-get autoclean -y
diff --git a/scripts/xinitrc b/scripts/xinitrc
new file mode 100644 (file)
index 0000000..cd6aee7
--- /dev/null
@@ -0,0 +1,10 @@
+ratpoison &
+
+xset -dpms
+xset s off
+xset s noblank
+
+while true; do
+  chromium-browser http://localhost/ \
+    --user-data-dir=/tmp/browse --no-first-run
+done
index 9cf9f41fa28f8f5c5effa8525bab1fc07fc36cf8..abf31d96bf680fa1e94f60e116069ed153268359 100644 (file)
 #                                                                              #
 ################################################################################
 
-import logging
-
 try:
     import smbus
 except:
     import smbus2 as smbus
 
-log = logging.getLogger('I2C')
-
 
 class I2C(object):
     def __init__(self, port):
@@ -48,8 +44,7 @@ class I2C(object):
 
             except OSError as e:
                 self.i2c_bus = None
-                log.info('Failed to open device: %s', e)
-                raise e
+                raise type(e)('I2C failed to open device: %s' % e)
 
 
     def read_word(self, addr):
@@ -59,10 +54,9 @@ class I2C(object):
             return self.i2c_bus.read_word_data(addr, 0)
 
         except IOError as e:
-            log.info('I2C read word failed: %s' % e)
             self.i2c_bus.close()
             self.i2c_bus = None
-            raise e
+            raise type(e)('I2C read word failed: %s' % e)
 
 
     def write(self, addr, cmd, byte = None, word = None, block = None):
@@ -82,7 +76,6 @@ class I2C(object):
             else: self.i2c_bus.write_byte(addr, cmd)
 
         except IOError as e:
-            log.info('I2C write failed: %s' % e)
             self.i2c_bus.close()
             self.i2c_bus = None
-            raise e
+            raise type(e)('I2C write failed: %s' % e)
index 36ef78aa37e59d714c26f722daf04a007f279fc0..04a5d08950781f3f4f3ffdd3561de59b6fcf159a 100644 (file)
@@ -63,8 +63,7 @@ class Jog(inevent.JogHandler):
         self.lastV = self.v
         self.callback()
 
-        self.processor = inevent.InEvent(ctrl.ioloop, self,
-                                         types = 'js kbd'.split())
+        self.processor = inevent.InEvent(ctrl.ioloop, self, types = ['js'])
 
 
     def up(self): self.ctrl.lcd.page_up()
index dc0d2a968e3c8f099a0fe29f0c6d1ed92a0fa351..6c6d843e48403aea4e091a65ef074aeaafec2cf9 100644 (file)
@@ -93,7 +93,7 @@ class Mach(Comm):
             self.ctrl.state.set('cycle', cycle)
 
         else:
-            raise Exception('Cannot enter %s cycle during %s' %
+            raise Exception('Cannot enter %s cycle while in %s cycle' %
                             (cycle, current))
 
 
index bf40db5fd1f8e9c77c09a108b50985cc63fba6a6..c980c5bb4d7d47c3c1bd92f8d10d3c6a04816734 100644 (file)
@@ -130,13 +130,14 @@ class Pwr():
                 if i == FLAGS_REG: self.check_faults()
 
         except Exception as e:
-            self.failures += 1
-            msg = 'Pwr communication failed: %s' % e
-            if self.failures != 5: log.info(msg)
-            else:
-                log.warning(msg)
-                self.failures = 0
-            return
+            if i < 6: # Older pwr firmware does not have regs > 5
+                self.failures += 1
+                msg = 'Pwr communication failed: %s' % e
+                if self.failures != 5: log.info(msg)
+                else:
+                    log.warning(msg)
+                    self.failures = 0
+                return
 
         self.lcd_page.text('%3dC   Tmp' % self.regs[TEMP_REG],  0, 0)
         self.lcd_page.text('%5.1fV  In' % self.regs[VIN_REG],   0, 1)
diff --git a/src/splash/buildbotics.plymouth b/src/splash/buildbotics.plymouth
new file mode 100644 (file)
index 0000000..5ce2ae8
--- /dev/null
@@ -0,0 +1,8 @@
+[Plymouth Theme]
+Name=buildbotics
+Description=Buildbotics boot splash
+ModuleName=script
+
+[script]
+ImageDir=/usr/share/plymouth/themes/buildbotics
+ScriptFile=/usr/share/plymouth/themes/buildbotics/buildbotics.script
diff --git a/src/splash/buildbotics.script b/src/splash/buildbotics.script
new file mode 100644 (file)
index 0000000..51fb51d
--- /dev/null
@@ -0,0 +1,32 @@
+screenW = Window.GetWidth();
+screenH = Window.GetHeight();
+
+image = Image("splash.png");
+imageW = image.GetWidth();
+imageH = image.GetHeight();
+
+scaleX = imageW / screenW;
+scaleY = imageH / screenH;
+
+flag = 1;
+
+if (scaleX > 1 || scaleY > 1) {
+  if (scaleX > scaleY) {
+    resized = image.Scale(screenW, imageH / scaleX);
+    imageX = 0;
+    imageY = (screenH - ((imageH  * screenW) / imageW)) / 2;
+
+  } else {
+    resized = image.Scale(imageW / scaleY, screenH);
+    imageX = (screenW - ((imageW  * screenH) / imageH)) / 2;
+    imageY = 0;
+  }
+
+} else {
+  resized = image.Scale(imageW, imageH);
+  imageX = (screenW - imageW) / 2;
+  imageY = (screenH - imageH) / 2;
+}
+
+sprite = Sprite(resized);
+sprite.SetPosition(imageX, imageY, -100);
diff --git a/src/splash/splash.png b/src/splash/splash.png
new file mode 100644 (file)
index 0000000..274371e
Binary files /dev/null and b/src/splash/splash.png differ