From: Joseph Coffland Date: Wed, 16 May 2018 18:26:31 +0000 (-0700) Subject: Ignore leading zeros in modbus messages, Handle older PWR firmwares, Support for... X-Git-Url: https://git.buildbotics.com/?a=commitdiff_plain;h=0b20469f2e91341573172a61c2cc404140432ac9;p=bbctrl-firmware Ignore leading zeros in modbus messages, Handle older PWR firmwares, Support for HDMI --- diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f3be18..57d76b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/package.json b/package.json index 648aca8..b7cf426 100644 --- a/package.json +++ b/package.json @@ -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+", diff --git a/scripts/setup_rpi.sh b/scripts/setup_rpi.sh index efd80da..f1530f1 100755 --- a/scripts/setup_rpi.sh +++ b/scripts/setup_rpi.sh @@ -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 index 0000000..cd6aee7 --- /dev/null +++ b/scripts/xinitrc @@ -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 diff --git a/src/py/bbctrl/I2C.py b/src/py/bbctrl/I2C.py index 9cf9f41..abf31d9 100644 --- a/src/py/bbctrl/I2C.py +++ b/src/py/bbctrl/I2C.py @@ -25,15 +25,11 @@ # # ################################################################################ -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) diff --git a/src/py/bbctrl/Jog.py b/src/py/bbctrl/Jog.py index 36ef78a..04a5d08 100644 --- a/src/py/bbctrl/Jog.py +++ b/src/py/bbctrl/Jog.py @@ -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() diff --git a/src/py/bbctrl/Mach.py b/src/py/bbctrl/Mach.py index dc0d2a9..6c6d843 100644 --- a/src/py/bbctrl/Mach.py +++ b/src/py/bbctrl/Mach.py @@ -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)) diff --git a/src/py/bbctrl/Pwr.py b/src/py/bbctrl/Pwr.py index bf40db5..c980c5b 100644 --- a/src/py/bbctrl/Pwr.py +++ b/src/py/bbctrl/Pwr.py @@ -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 index 0000000..5ce2ae8 --- /dev/null +++ b/src/splash/buildbotics.plymouth @@ -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 index 0000000..51fb51d --- /dev/null +++ b/src/splash/buildbotics.script @@ -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 index 0000000..274371e Binary files /dev/null and b/src/splash/splash.png differ