using System; using System.Threading; using System.Text; using System.Collections; using Microsoft.SPOT; using Microsoft.SPOT.Hardware; namespace miniCPF { public static class MTS { private static byte[] txData = new byte[3]; private static byte[] rxData = new byte[3]; private static SPI.Configuration config = new SPI.Configuration(Cpu.Pin.GPIO_Pin1, false, 0, 0, true, false, 200, SPI.SPI_module.SPI1); private static SPI MTS_R = new SPI(config); private static Object MTSlock = new Object(); private static Timer MTSTimer = null; private static Program.CPFStates cpfState; private static DateTime timeStamp; private static StructQueue.qStruct qS = new StructQueue.qStruct(); private static int MTSPositionUint = 0; public static double bellowsPosition = 0; public static void init() { MTSTimer = new Timer(new TimerCallback(sampleMTS), null, 500, configFile.MTSSamplePeriod); qS.byteArray = new byte[StructQueue.qRecordWidth]; } public static void sampleMTS(object sender) { Array.Clear(rxData, 0, rxData.Length); MTS_R.WriteRead(txData, rxData); qS.byteArray = rxData; qS.timeStamp = DateTime.Now; qS.state = Program.CPFState; qS.qRecordType = StructQueue.QRecordType.MTS; lock (MTSlock) { Program.sQueue.Enqueue(qS); } } public static double parse(byte[] inBytes) { MTSPositionUint = (((inBytes[0] & 0x7F) << 16) | ((inBytes[1] & 0xFF) << 8) | (inBytes[2] & 0xFF)) * 2; bellowsPosition = 0.0005 * MTSPositionUint; //in mm //Debug.Print("MTS Position = " + bellowsPosition.ToString("f4")); return (bellowsPosition); } } }