/* Copyright 2012, Sebastian Reichel * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ public class AtmostripeMotorController : SerialDevice, MotorController { public uint8 min { get { return 0; } } public uint8 max { get { return 255; } } public void init(KeyFile cfg) throws Error { var device = cfg.get_string("AtmostripeMotorController", "device"); setup(device, 9600, 8, 1); nop(); nop(); nop(); enable(); } ~AtmostripeMotorController() { disable(); } public bool disable() { uint8[4] buf = new uint8[4]; buf[0] = 0xDE; buf[1] = 0xAD; buf[2] = 0xBA; buf[3] = 0xBE; log("Atmostripe", LogLevelFlags.LEVEL_DEBUG, "disable"); write(buf, 4); read(buf, 1); if(buf[0] == '.') return true; else return false; } public bool enable() { uint8[4] buf = new uint8[4]; buf[0] = 0xCA; buf[1] = 0xFE; buf[2] = 0xBA; buf[3] = 0xBE; log("Atmostripe", LogLevelFlags.LEVEL_DEBUG, "enable"); write(buf, 4); read(buf, 1); if(buf[0] == '.') return true; else return false; } public bool nop() { uint8[1] buf = new uint8[1]; buf[0] = 0x00; write(buf, 1); read(buf, 1); log("Atmostripe", LogLevelFlags.LEVEL_DEBUG, "nop"); if(buf[0] == '.') return true; else return false; } public bool set_single(uint8 engine, uint8 speed) { uint8[2] buf = new uint8[2]; buf[0] = engine+1; buf[1] = speed; if(engine > 5) return false; log("Atmostripe", LogLevelFlags.LEVEL_DEBUG, "set single"); write(buf, 2); read(buf, 2); if(buf[0] == '.') return true; else return false; } public bool set_all(uint8 speed) { uint8[2] buf = new uint8[2]; buf[0] = 0xff; buf[1] = speed; log("Atmostripe", LogLevelFlags.LEVEL_DEBUG, "set all"); write(buf, 2); read(buf, 2); if(buf[0] == '.') return true; else return false; } } public Type register_plugin(Module module) { // types are registered automatically return typeof(AtmostripeMotorController); }