mitzi player and incomplete client firmware
This commit is contained in:
parent
97a2ea19f0
commit
6bb1c855b6
8 changed files with 220 additions and 3 deletions
28
MitziPlayer/INIFile.cs
Normal file
28
MitziPlayer/INIFile.cs
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace MitziPlayer
|
||||||
|
{
|
||||||
|
public class INIFile
|
||||||
|
{
|
||||||
|
public Dictionary<string, string> Data { get; set; }
|
||||||
|
|
||||||
|
public INIFile(Dictionary<string, string> data)
|
||||||
|
{
|
||||||
|
Data = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static INIFile Load(string inPath)
|
||||||
|
{
|
||||||
|
Dictionary<string, string> outData = new Dictionary<string, string>();
|
||||||
|
string[] rawFile = File.ReadAllLines(inPath);
|
||||||
|
foreach (string line in rawFile)
|
||||||
|
{
|
||||||
|
if (line.StartsWith(";") || line.Trim() == "") continue;
|
||||||
|
outData.Add(line.Split("=")[0].Trim(), line.Split("=")[1].Trim());
|
||||||
|
}
|
||||||
|
return new INIFile(outData);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
14
MitziPlayer/MitziPlayer.csproj
Normal file
14
MitziPlayer/MitziPlayer.csproj
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net8.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="System.IO.Ports" Version="10.0.0-preview.2.25163.2" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
72
MitziPlayer/Program.cs
Normal file
72
MitziPlayer/Program.cs
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.IO;
|
||||||
|
using System.IO.Ports;
|
||||||
|
|
||||||
|
using System.Timers;
|
||||||
|
|
||||||
|
namespace MitziPlayer
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
static INIFile Config;
|
||||||
|
static string PathPrefix="/";
|
||||||
|
static int[] 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 = LoadSignals(File.ReadAllLines(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 int[] LoadSignals(string[] inData)
|
||||||
|
{
|
||||||
|
List<int> tmpOut = new List<int>();
|
||||||
|
foreach (string frame in inData) tmpOut.Add(int.Parse(frame, NumberStyles.HexNumber));
|
||||||
|
return tmpOut.ToArray();
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
int b = Signals[index];
|
||||||
|
|
||||||
|
char[] bytesOut = { (char)(64 | ((b & 8) | (b & 4) | (b & 2) | (b & 1))), (char)(64 | (((b & 128) | (b & 64) | (b & 32) | (b & 16)) >> 4)), (char)(64 | (((b & 2048) | (b & 1024) | (b & 512) | (b & 256)) >> 8)), (char)(64 | (((b & 32768) | (b & 16384) | (b & 8192) | (b & 4096)) >> 12)), (char)(64 | (((b & 262144) | (b & 131072) | (b & 65536)) >> 16)) };
|
||||||
|
port.Write(new string(bytesOut));
|
||||||
|
index+=frameSkip;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,7 +2,7 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace SSTServoPlayer
|
namespace PC2SSTPlayer
|
||||||
{
|
{
|
||||||
public class INIFile
|
public class INIFile
|
||||||
{
|
{
|
||||||
|
|
|
@ -5,7 +5,7 @@ using System.IO.Ports;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Timers;
|
using System.Timers;
|
||||||
|
|
||||||
namespace SSTServoPlayer
|
namespace PC2SSTPlayer
|
||||||
{
|
{
|
||||||
public class Program
|
public class Program
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
// PINKCONNECTION2 Client Program for Helen Henny/Mitzi Mozzarella Servo
|
||||||
|
|
||||||
|
#include <Servo.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
Servo servoChannel[19];
|
||||||
|
byte onDegrees[19] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; // these are incomplete, i need to tune them when i get the servos in
|
||||||
|
byte offDegrees[19] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||||
|
|
||||||
|
int byte1 = 0;
|
||||||
|
int byte2 = 0;
|
||||||
|
int byte3 = 0;
|
||||||
|
int byte4 = 0;
|
||||||
|
int byte5 = 0;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
servoChannel[0].attach(2);
|
||||||
|
servoChannel[1].attach(3);
|
||||||
|
servoChannel[2].attach(4);
|
||||||
|
servoChannel[3].attach(5);
|
||||||
|
servoChannel[4].attach(6);
|
||||||
|
servoChannel[5].attach(7);
|
||||||
|
servoChannel[6].attach(8);
|
||||||
|
servoChannel[7].attach(9);
|
||||||
|
for (int i = 0; i < 19; i++) servoChannel[i].write(offDegrees[i]);
|
||||||
|
Serial.begin(9600);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
if (Serial.available() > 4) {
|
||||||
|
byte1 = Serial.read();
|
||||||
|
byte2 = Serial.read();
|
||||||
|
byte3 = Serial.read();
|
||||||
|
byte4 = Serial.read();
|
||||||
|
byte5 = Serial.read();
|
||||||
|
|
||||||
|
if ((byte1 & 64) && (byte2 & 64))
|
||||||
|
if (byte1 & 1) {
|
||||||
|
servoChannel[0].write(onDegrees[0]);
|
||||||
|
digitalWrite(A0, 1);
|
||||||
|
} else {
|
||||||
|
servoChannel[0].write(offDegrees[0]);
|
||||||
|
digitalWrite(A0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (byte1 & 2) {
|
||||||
|
servoChannel[1].write(onDegrees[1]);
|
||||||
|
digitalWrite(A1, 1);
|
||||||
|
} else {
|
||||||
|
servoChannel[1].write(offDegrees[1]);
|
||||||
|
digitalWrite(A1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (byte1 & 4) {
|
||||||
|
servoChannel[2].write(onDegrees[2]);
|
||||||
|
digitalWrite(A2, 1);
|
||||||
|
} else {
|
||||||
|
servoChannel[2].write(offDegrees[2]);
|
||||||
|
digitalWrite(A2, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (byte1 & 8) {
|
||||||
|
servoChannel[2].write(onDegrees[3]);
|
||||||
|
digitalWrite(A3, 1);
|
||||||
|
} else {
|
||||||
|
//servoChannel[2].write(offDegrees[3]); dont
|
||||||
|
digitalWrite(A3, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (byte2 & 1) {
|
||||||
|
servoChannel[4].write(onDegrees[4]);
|
||||||
|
digitalWrite(A4, 1);
|
||||||
|
} else {
|
||||||
|
servoChannel[4].write(offDegrees[4]);
|
||||||
|
digitalWrite(A4, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (byte2 & 2) {
|
||||||
|
servoChannel[4].write(onDegrees[5]);
|
||||||
|
digitalWrite(A5, 1);
|
||||||
|
} else {
|
||||||
|
//servoChannel[4].write(offDegrees[5]); dont
|
||||||
|
digitalWrite(A5, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (byte2 & 4) {
|
||||||
|
servoChannel[6].write(onDegrees[6]);
|
||||||
|
digitalWrite(10, 1);
|
||||||
|
} else {
|
||||||
|
servoChannel[6].write(offDegrees[6]);
|
||||||
|
digitalWrite(10, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (byte2 & 8) {
|
||||||
|
servoChannel[7].write(onDegrees[7]);
|
||||||
|
digitalWrite(11, 1);
|
||||||
|
} else {
|
||||||
|
servoChannel[7].write(offDegrees[7]);
|
||||||
|
digitalWrite(11, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,7 +2,7 @@
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
namespace rshw2sst
|
namespace mitzifier
|
||||||
{
|
{
|
||||||
public class Program
|
public class Program
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue