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
{
"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+",
# 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
# 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
# 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
--- /dev/null
+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
# #
################################################################################
-import logging
-
try:
import smbus
except:
import smbus2 as smbus
-log = logging.getLogger('I2C')
-
class I2C(object):
def __init__(self, port):
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):
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):
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)
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()
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))
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)
--- /dev/null
+[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
--- /dev/null
+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);