Slashdot Mirror


The NetBSD Toaster

kv9 writes "Finally after many, many yeas of running on everything-but-your-toaster NetBSD is there too. Technologic Systems has made a toaster that is controlled by NetBSD and powered by one of their ARM boards, the TS-7200. Everything is controlled through sysctl, there are LEDs that show you what is going on, the toaster can play MP3s while it fries the bread and even has Apache/PHP installed. More information in the press release [pdf warning] and on this running NetBSD on the TS-7200 page."

1 of 229 comments (clear)

  1. Re:So... by cvk · · Score: 5, Informative

    Yes, actually! I'm Christian von Kleist and I'm with The NetBSD Foundation, manning the booth at LinuxWorld SF '05 and operating our sweet, sweet toaster demo. The script that does the toasting is /usr/local/bin/toast (seriously). Scripts interface with the toaster device drivers (the burner relay, the buttons, the LED bank, the toastiness knob, and the relay that turns on the latch electromagnet) through sysctl.

    Pictures I took: http://wickedways.org/articles/linuxworld2005/

    Here's what's available to a script from sysctl:

    # sysctl -a | grep hw.t
    hw.toaster0.led0_duty = 1 hw.toaster0.led0_width = 8
    hw.toaster0.led1_duty = 2 hw.toaster0.led1_width = 16
    hw.toaster0.led2_duty = 4 hw.toaster0.led2_width = 32
    hw.toaster0.led3_duty = 8 hw.toaster0.led3_width = 64
    hw.toaster0.magnetic_latch = 0 hw.toaster0.burner_element = 0
    hw.toastersensors0.burnlevel_knob = 1593 hw.toastersensors0.cancel_key = 0 hw.toastersensors0.cancel_key_ticks = 13 hw.toastersensors0.toast_key = 0
    hw.toastersensors0.toast_key_ticks = 4 hw.toastersensors0.bagel_key = 0
    hw.toastersensors0.bagel_key_ticks = 6
    hw.toastersensors0.warm_key = 0 hw.toastersensors0.warm_key_ticks = 7 hw.toastersensors0.frozen_key = 0 hw.toastersensors0.frozen_key_ticks = 10 hw.toastersensors0.toast_down = 0 hw.toastersensors0.toast_down_ticks = 50965 hw.tspld0.board_temp = 40250000 hw.tspld0.board_temp_5s = 40290128
    hw.tspld0.board_temp_30s = 40477805

    (The board_temp are the temperature in C, multiplied by 10^6, so right now it's at 40.25 degrees C.) /usr/local/bin/toast is pretty complicated, but a basic toast script works like this:

    #! /bin/sh
    sysctl -w hw.toaster0.magnetic_latch=1
    # user presses toast lever down now...
    sysctl -w hw.toaster0.burner_element = 1
    sleep 60
    sysctl -w hw.toaster0.burner_element = 0
    sysctl -w hw.toaster0.magnetic_latch=0
    echo "Toast is done!"

    Only root has write access to hw.toaster0.burner_element! :D

    The real script uses trap to prevent the sleep line from being interrupted, since that could result in a fire!

    Just FYI:
    # dmesg
    NetBSD 3.0_BETA (TS7200) #57: Mon Aug 8 00:34:41 MST 2005
    joff@sayan.wifi.home:/home/joff/NetBSD-toaster/obj /sys/arch/evbarm/compi
    le/TS7200
    total memory = 32768 KB
    avail memory = 28196 KB
    mainbus0 (root)
    cpu0 at mainbus0: ARM920T rev 0 (ARM9TDMI core)
    cpu0: DC enabled IC enabled WB enabled EABT
    cpu0: 16KB/32B 64-way Instruction cache
    cpu0: 16KB/32B 64-way write-back-locking-A Data cache
    epsoc0 at mainbus0: Cirrus Logic EP93xx SoC rev E0
    epsoc0: fclk 200.03 Mhz hclk 100.01 Mhz pclk 50.01 Mhz
    ohci0 at epsoc0 addr 0x80020000-0x80020fff intr 56
    epclk0 at epsoc0 addr 0x80810000-0x8081008f intr 35
    epe0 at epsoc0 addr 0x80010000-0x8001ffff intr 39
    epe0: MAC address 00:d0:69:4f:af:76
    ukphy0 at epe0 phy 1: Generic IEEE 802.3u media interface
    ukphy0: OUI 0x0010a1, model 0x0021, rev. 9
    ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
    epcom0 at epsoc0 addr 0x808c0000-0x808c0fff intr 52
    epcom1 at epsoc0 addr 0x808d0000-0x808d0fff intr 54
    epcom1: console
    ohci0: OHCI version 1.0
    usb0 at ohci0: USB revision 1.0
    uhub0 at usb0
    uhub0: Cirrus Logic OHCI root hub, class 9/0, rev 1.00/1.00, addr 1
    uhub0: 3 ports with 3 removable, self powered
    tspld0 at mainbus0: Technologic Systems TS-7200 rev C, features 0x1
    tspld0: jumpers 0x7
    tspld0: board temperature 21.93 degC (71.48 degF)
    isa0 at tspld0: PC/104 expansion bus
    tsdio0 at isa0 port 0x100-0x107: Technologic Systems TS-DIO24
    toasterlcd0 at tsdio0: 4x40 text-mode hd44780 LCD
    toasterlcd0: using port C, bits 0-7 as DB0-DB7
    toasterlcd0: using port B, bits 0-3 as RS, WR, EN1, EN2
    wsdisplay0 at toasterlcd0 kbdmux 1
    wsmux1: connecting to wsdisplay0
    toaster0 at ts