internal TactonicFrameEvent(TactonicDevice deviceInfo) { device = new TactonicDevice(); device.cols = deviceInfo.cols; device.rows = deviceInfo.rows; device.serialNumber = deviceInfo.serialNumber; device.rowSpacingUM = deviceInfo.rowSpacingUM; device.colSpacingUM = deviceInfo.colSpacingUM; frame = new TactonicFrame(device); }
public static void CopyFrame(TactonicFrame srcFrame, TactonicFrame dstFrame) { if (srcFrame.numForces == dstFrame.numForces) { for (int i = 0; i < srcFrame.numForces; i++) { dstFrame.forces[i] = srcFrame.forces[i]; } } }
// Use this for initialization void Start() { rend = GetComponent<Renderer> (); tex = new Texture2D (1,1,TextureFormat.RGBAFloat,false); rend.material.mainTexture = tex; TactonicDeviceList dl = Tactonic.GetDeviceList (); if (dl.GetNumDevices () > id) { device = dl.GetDevice (id); Debug.Log ("id: " + id + ", serial number: " + device.serialNumber); frame = new TactonicFrame (device); Tactonic.AddFrameCallback (device, this); Tactonic.StartDevice (device); newFrame = false; tex.Resize (device.GetRows (), device.GetCols ()); Debug.Log ("rows: " + device.GetRows() + ", cols: " + device.GetCols()); } else { Debug.Log ("id " + id + " not found! " + dl.GetNumDevices () + " devices found."); } }
internal bool StartDevice() { FTDI.FT_STATUS ftStatus = FTDI.FT_STATUS.FT_OK; UInt32 numBytesRW = 0; byte [] command = new byte[1]; command[0] = (byte)COMMAND_START; byte[] data = new byte[1]; if (isTiles) { for (int i = 0; i < numTiles; i++) { command[0] = (byte)(COMMAND_START | tileID[i]); ftStatus = ftdi.Write(command, 1, ref numBytesRW); command[0] = 0; ftStatus = ftdi.Read(command, 1, ref numBytesRW); } } else { ftStatus = ftdi.Write(command, 1, ref numBytesRW); ftStatus = ftdi.Read(data, 1, ref numBytesRW); Console.WriteLine("Start "+data[0]); } writeFrame = 0; prevFrame = 1; deviceFrames[writeFrame] = new TactonicFrame(deviceFrameInfo); deviceFrames[prevFrame] = new TactonicFrame(deviceFrameInfo); buffer = new byte[4096]; for (int i = 0; i < deviceFrameInfo.rows * deviceFrameInfo.cols; i++) { deviceFrames[writeFrame].forces[i] = 0; deviceFrames[prevFrame].forces[i] = 0; } frameSize = deviceFrameInfo.rows * deviceFrameInfo.cols + 1; readPos = 0; fillPos = 0; frameBufferPos = 0; frameBuffer = new int[tileFrameInfo.rows * tileFrameInfo.cols + 4]; ftStatus = ftdi.Purge(FTDI.FT_PURGE.FT_PURGE_RX | FTDI.FT_PURGE.FT_PURGE_RX) | ftStatus; if(!CreateLoopThread()) return false; ready = true; return true; }
internal void Update(TactonicFrame frame) { frameEvent.frame = frame; Tactonic.CopyFrame(frameEvent.frame, forceFrames[fillFrame]); if((fillFrame+1)%8 != readFrame) fillFrame = (fillFrame+1)%8; // else // fprintf(stderr, "Warning, data loss experienced. Increase buffer size or decrease update frame rate."); }
internal void SetTouchInfo(TactonicDevice deviceInfo) { frameEvent = new TactonicFrameEvent(device); touchEvent = new TactonicTouchEvent(device); device.serialNumber = deviceInfo.serialNumber; device.rows = deviceInfo.rows; device.cols = deviceInfo.cols; device.rowSpacingUM = deviceInfo.rowSpacingUM; device.colSpacingUM = deviceInfo.colSpacingUM; frameEvent.device = device; for(int i = 0; i < 8; i++){ forceFrames[i] = new TactonicFrame(device); touchFrames[i] = new TactonicTouchFrame(); } }