Skip to content

Commit adc6b7a

Browse files
fix: fix serial and logging
1 parent ee0e861 commit adc6b7a

File tree

5 files changed

+51
-39
lines changed

5 files changed

+51
-39
lines changed

FlyweightPool.cs

+1-6
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,9 @@
77

88
namespace toucca
99
{
10-
public class FlyweightPool<T>
10+
public class FlyweightPool<T>(Func<T> factory)
1111
{
12-
public FlyweightPool(Func<T> factory)
13-
{
14-
this.factory = factory;
15-
}
1612
private readonly ConcurrentBag<T> values = new();
17-
private readonly Func<T> factory;
1813

1914
public T Get()
2015
{

Logger.cs

+4-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,10 @@ private static void Log(string level, string message)
7878
lock (lockObj)
7979
{
8080
using var sw = new StreamWriter(GetLogFilePath(), true, Encoding.UTF8);
81-
sw.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} [{level}] {message}");
81+
using var stderr = Console.Error;
82+
var msg = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} [{level}] {message}";
83+
sw.WriteLine(msg);
84+
stderr.WriteLine(msg);
8285
}
8386
}
8487
catch

MainWindow.xaml.cs

+3-5
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,11 @@ namespace toucca
1414
/// </summary>
1515
public partial class MainWindow : Window
1616
{
17-
SerialManager serialManager = new();
18-
1917
public MainWindow()
2018
{
2119
this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
2220
Task.Run(StartWebHost);
23-
Task.Run(serialManager.Start);
21+
Task.Run(SerialManager.Start);
2422
Topmost = true;
2523
InitializeComponent();
2624
}
@@ -117,8 +115,8 @@ private async Task HandleWebSocketClient(WebSocket webSocket)
117115

118116
private void WriteKeyState(byte key, bool enabled)
119117
{
120-
serialManager.SetTouch(key, enabled);
121-
serialManager.TouchEvent.Set();
118+
SerialManager.SetTouch(key, enabled);
119+
SerialManager.TouchEvent.Set();
122120
}
123121
}
124122
}

Properties/PublishProfiles/FolderProfile.pubxml.user

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
44
-->
55
<Project>
66
<PropertyGroup>
7-
<History>True|2024-08-30T04:34:37.2813591Z||;True|2024-08-29T23:04:49.4163001+08:00||;True|2024-08-29T22:42:53.5270213+08:00||;True|2024-08-29T20:24:37.5384138+08:00||;True|2024-08-29T20:16:00.3914013+08:00||;True|2024-08-29T20:11:01.1196527+08:00||;True|2024-08-29T20:10:32.3578464+08:00||;True|2024-08-29T20:08:35.3608360+08:00||;True|2024-08-29T20:06:49.5647389+08:00||;True|2024-08-29T15:36:12.5638340+08:00||;True|2024-08-29T15:28:46.3827243+08:00||;True|2024-08-29T15:26:53.6192789+08:00||;</History>
7+
<History>True|2025-02-26T03:42:34.4983529Z||;True|2025-02-26T09:27:33.8640428+08:00||;True|2025-02-12T09:52:50.2078290+08:00||;True|2025-02-12T09:45:36.2379958+08:00||;True|2024-08-31T12:56:35.1490990+08:00||;True|2024-08-30T12:34:37.2813591+08:00||;True|2024-08-29T23:04:49.4163001+08:00||;True|2024-08-29T22:42:53.5270213+08:00||;True|2024-08-29T20:24:37.5384138+08:00||;True|2024-08-29T20:16:00.3914013+08:00||;True|2024-08-29T20:11:01.1196527+08:00||;True|2024-08-29T20:10:32.3578464+08:00||;True|2024-08-29T20:08:35.3608360+08:00||;True|2024-08-29T20:06:49.5647389+08:00||;True|2024-08-29T15:36:12.5638340+08:00||;True|2024-08-29T15:28:46.3827243+08:00||;True|2024-08-29T15:26:53.6192789+08:00||;</History>
88
<LastFailureDetails />
99
</PropertyGroup>
1010
</Project>

SerialManager.cs

+42-26
Original file line numberDiff line numberDiff line change
@@ -21,34 +21,31 @@ public class SerialManager
2121
const byte CMD_MYSTERY1 = 0xa2;
2222
const byte CMD_MYSTERY2 = 0x94;
2323
const byte CMD_START_AUTO_SCAN = 0xc9;
24-
// const byte CMD_BEGIN_WRITE = 0x77;
25-
// const byte CMD_NEXT_WRITE = 0x20;
24+
const byte CMD_BEGIN_WRITE = 0x77;
25+
const byte CMD_NEXT_WRITE = 0x20;
2626

27-
private Thread _sendThread;
28-
public AutoResetEvent TouchEvent = new(false);
27+
private static Thread _sendThread;
28+
public static AutoResetEvent TouchEvent = new(false);
2929

3030
private static SerialPort ComL = new("COM5", 115200);
3131
private static SerialPort ComR = new("COM6", 115200);
3232

33-
bool init = false;
33+
static bool init = false;
3434
const string SYNC_BOARD_VER = "190523";
3535
const string UNIT_BOARD_VER = "190514";
36-
const string read1 = " 0 0 1 2 3 4 5 15 15 15 15 15 15 11 11 11";
37-
const string read2 = " 11 11 11 128 103 103 115 138 127 103 105 111 126 113 95 100";
38-
const string read3 = " 101 115 98 86 76 67 68 48 117 0 82 154 0 6 35 4";
39-
private readonly Dictionary<byte, List<byte>> readMap = new() {
40-
{ 0x31, ByteHelper.ConvertStringToByteArray(read1) },
41-
{ 0x32, ByteHelper.ConvertStringToByteArray(read2) },
42-
{ 0x33, ByteHelper.ConvertStringToByteArray(read3) }
36+
private static readonly Dictionary<byte, string> readMap = new() {
37+
{ 0x30, " 0 0 1 2 3 4 5 15 15 15 15 15 15 11 11 11" },
38+
{ 0x31, " 11 11 11 128 103 103 115 138 127 103 105 111 126 113 95 100" },
39+
{ 0x33, " 101 115 98 86 76 67 68 48 117 0 82 154 0 6 35 4" }
4340
};
4441
// private readonly byte[] SettingData_160 = new byte[8] { 160, 49, 57, 48, 53, 50, 51, 44 };
45-
private readonly byte[] SettingData_162 = [162, 63, 29];
46-
private readonly byte[] SettingData_148 = [148, 0, 20];
47-
private readonly byte[] SettingData_201 = [201, 0, 73];
48-
private readonly byte[] TouchPackL = new byte[36];
49-
private readonly byte[] TouchPackR = new byte[36];
42+
private static readonly byte[] SettingData_162 = [162, 63, 29];
43+
private static readonly byte[] SettingData_148 = [148, 0, 20];
44+
private static readonly byte[] SettingData_201 = [201, 0, 73];
45+
private static byte[] TouchPackL = new byte[36];
46+
private static byte[] TouchPackR = new byte[36];
5047

51-
public void Start()
48+
public static void Start()
5249
{
5350
try
5451
{
@@ -64,7 +61,7 @@ public void Start()
6461
_sendThread = new Thread(SendLoop);
6562
}
6663

67-
private void SendLoop()
64+
private static void SendLoop()
6865
{
6966
while (true)
7067
{
@@ -73,7 +70,7 @@ private void SendLoop()
7370
}
7471
}
7572

76-
public void SetTouch(int area, bool state)
73+
public static void SetTouch(int area, bool state)
7774
{
7875
area++; // area: 1 - 240
7976
if (area < 121)
@@ -89,7 +86,7 @@ public void SetTouch(int area, bool state)
8986
}
9087
}
9188

92-
private void SendTouchState()
89+
private static void SendTouchState()
9390
{
9491
if (!init)
9592
{
@@ -109,7 +106,7 @@ private static byte[] ToTouchPack(byte[] Pack)
109106
Pack[34] = 0;
110107
return Pack;
111108
}
112-
private async Task PeriodicReadPortLoop()
109+
private static async Task PeriodicReadPortLoop()
113110
{
114111
while (true)
115112
{
@@ -120,7 +117,7 @@ private async Task PeriodicReadPortLoop()
120117
await Task.Delay(16);
121118
}
122119
}
123-
private void ReadAndResp(SerialPort Serial, int side)
120+
private static void ReadAndResp(SerialPort Serial, int side)
124121
{
125122
if (Serial.BytesToRead <= 0)
126123
return;
@@ -130,23 +127,31 @@ private void ReadAndResp(SerialPort Serial, int side)
130127
List<byte> respBytes = new();
131128
switch (inByte)
132129
{
130+
133131
case CMD_GET_SYNC_BOARD_VER:
134132
init = false;
133+
Logger.Info($"CMD_GET_SYNC_BOARD_VER {side}");
135134
respBytes.Add(inByte);
136135
respBytes.AddRange(ByteHelper.ConvertStringToByteArray(SYNC_BOARD_VER));
137136
respBytes.Add(44);
138137

139138
break;
140139
case CMD_NEXT_READ:
141140
init = false;
142-
if (readMap.TryGetValue(Convert.ToByte(data[2]), out respBytes))
141+
Logger.Info($"CMD_NEXT_READ {side} {Convert.ToByte(data[2])}");
142+
if (readMap.TryGetValue(Convert.ToByte(data[2]), out string readData))
143143
{
144+
respBytes.AddRange(ByteHelper.ConvertStringToByteArray(readData));
144145
respBytes.Add(ByteHelper.CalCheckSum(respBytes.ToArray(), respBytes.Count));
145146
}
146-
else return;
147+
else
148+
{
149+
Logger.Info($"EXTRA READ {side} {Convert.ToByte(data[2])}");
150+
};
147151
break;
148152
case CMD_GET_UNIT_BOARD_VER:
149153
init = false;
154+
Logger.Info($"CMD_GET_UNIT_BOARD_VER {side}");
150155
byte sideByte = side == 0 ? Convert.ToByte('R') : Convert.ToByte('L');
151156
byte unitCheckSum = side == 0 ? (byte)118 : (byte)104;
152157
respBytes.Add(inByte);
@@ -160,13 +165,16 @@ private void ReadAndResp(SerialPort Serial, int side)
160165
break;
161166
case CMD_MYSTERY1:
162167
init = false;
168+
Logger.Info($"CMD_MYSTERY1 {side}");
163169
respBytes.AddRange(SettingData_162);
164170
break;
165171
case CMD_MYSTERY2:
166172
init = false;
173+
Logger.Info($"CMD_MYSTERY2 {side}");
167174
respBytes.AddRange(SettingData_148);
168175
break;
169176
case CMD_START_AUTO_SCAN:
177+
Logger.Info($"CMD_START_AUTO_SCAN {side}");
170178
respBytes.AddRange(SettingData_201);
171179
init = true;
172180
if (!_sendThread.IsAlive)
@@ -178,7 +186,15 @@ private void ReadAndResp(SerialPort Serial, int side)
178186
init = false;
179187
Logger.Warn("BAD");
180188
break;
181-
189+
case CMD_BEGIN_WRITE:
190+
Logger.Info($"CMD_BEGIN_WRITE {side}");
191+
break;
192+
case CMD_NEXT_WRITE:
193+
Logger.Info($"CMD_NEXT_WRITE {side}");
194+
break;
195+
default:
196+
Logger.Info($"COMMAND {Convert.ToByte(inByte)} {side}");
197+
break;
182198
}
183199
Serial.Write(respBytes.ToArray(), 0, respBytes.Count);
184200
}

0 commit comments

Comments
 (0)