67 lines
2.2 KiB
C#
67 lines
2.2 KiB
C#
using System;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.IO.Ports;
|
|
using System.Text;
|
|
using System.Timers;
|
|
|
|
namespace SSTServoPlayer
|
|
{
|
|
public class Program
|
|
{
|
|
static INIFile Config;
|
|
static string PathPrefix="/";
|
|
static byte[] Signals;
|
|
static SerialPort port = null;
|
|
static System.Timers.Timer FrameTimer;
|
|
static long index = 0;
|
|
static int frameSkip = 6;
|
|
|
|
static void Main(string[] args)
|
|
{
|
|
Config = INIFile.Load(args[0]);
|
|
PathPrefix = Path.GetFullPath(args[0]).Replace("manifest.ini", "");
|
|
Signals = File.ReadAllBytes(PathPrefix+Config.Data["data"]);
|
|
port = new SerialPort(args[1], 9600, Parity.None, 8, StopBits.One);
|
|
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
|
|
port.Open();
|
|
FrameTimer = new System.Timers.Timer((1000d/double.Parse(Config.Data["frames-per-second"]))*frameSkip);
|
|
FrameTimer.Elapsed += PlaySignal;
|
|
FrameTimer.AutoReset = true;
|
|
|
|
PlayAudio();
|
|
FrameTimer.Start();
|
|
Console.ReadLine();
|
|
port.Close();
|
|
}
|
|
|
|
private static void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
|
|
{
|
|
Console.Write(port.ReadExisting());
|
|
}
|
|
|
|
static void PlayAudio()
|
|
{
|
|
Process.Start("mpv", PathPrefix+Config.Data["audio"]);
|
|
}
|
|
|
|
static void PlaySignal(Object sender, ElapsedEventArgs e)
|
|
{
|
|
if (index == Signals.Length)
|
|
{
|
|
FrameTimer.Stop();
|
|
Console.WriteLine("Complete!");
|
|
return;
|
|
}
|
|
byte b = Signals[index];
|
|
|
|
byte byte1 = (byte)(64 | ((b & 8) | (b & 4) | (b & 2) | (b & 1)));
|
|
byte byte2 = (byte)(64 | (((b & 128) | (b & 64) | (b & 32) | (b & 16)) >> 4));
|
|
port.Write(((char)byte1).ToString());
|
|
port.Write(((char)byte2).ToString());
|
|
//port.Write(((char)b).ToString());
|
|
//Console.WriteLine(byte1.ToString("B8") + " " + byte2.ToString("B8"));
|
|
index+=frameSkip;
|
|
}
|
|
}
|
|
}
|