Skip to content

Commit f576eea

Browse files
committed
More work.
1 parent 071aeef commit f576eea

File tree

9 files changed

+320
-23
lines changed

9 files changed

+320
-23
lines changed

src/HeboTech.ATLib.TestConsole/Program.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
using HeboTech.ATLib.Communication;
22
using HeboTech.ATLib.Inputs;
3-
using HeboTech.ATLib.Modems;
3+
using HeboTech.ATLib.Modems.Adafruit;
44
using HeboTech.ATLib.Parsers;
55
using HeboTech.ATLib.Results;
66
using System;
77
using System.IO.Ports;
8-
using System.Threading.Tasks;
98

109
namespace HeboTech.ATLib.TestConsole
1110
{
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netcoreapp3.1</TargetFramework>
5+
6+
<IsPackable>false</IsPackable>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
11+
<PackageReference Include="Moq" Version="4.14.5" />
12+
<PackageReference Include="MSTest.TestAdapter" Version="2.1.0" />
13+
<PackageReference Include="MSTest.TestFramework" Version="2.1.0" />
14+
<PackageReference Include="coverlet.collector" Version="1.2.0" />
15+
</ItemGroup>
16+
17+
<ItemGroup>
18+
<ProjectReference Include="..\HeboTech.ATLib\HeboTech.ATLib.csproj" />
19+
</ItemGroup>
20+
21+
</Project>
Lines changed: 200 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,200 @@
1+
using HeboTech.ATLib.Communication;
2+
using HeboTech.ATLib.Parsers;
3+
using Microsoft.VisualStudio.TestTools.UnitTesting;
4+
using System.Threading;
5+
using System.Threading.Tasks;
6+
7+
namespace HeboTech.ATLib.Tests.Parsers
8+
{
9+
[TestClass]
10+
public class AtLineReaderTests
11+
{
12+
[TestMethod]
13+
public void OkResultTest()
14+
{
15+
var commMock = new CommunicatorMock();
16+
commMock.AppendReturnValue("\r\nOK\r\n");
17+
18+
AtLineReader dut = new AtLineReader(commMock);
19+
20+
string result = dut.ReadLine();
21+
22+
Assert.AreEqual("OK", result);
23+
}
24+
25+
[TestMethod]
26+
public void SimReadyTest()
27+
{
28+
var commMock = new CommunicatorMock();
29+
commMock.AppendReturnValue("\r\n\r\n\r\n\r\nOK\r\n\r\n\r\n\r\n\r\n\r\n+CP READY\r\n\r\nOK\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n+SPIC: 3,10,1,10\r\n\r\nOK\r\n\r\n\r\n\r\n\r\n\r\n+CSQ: 16,99\r\n\r\nOK\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n+CBC: 0,100,4.232V\r\n\r\nOK\r\n\r\n\r\n\r\n\r\n\r\nManufacturer: SIMCOM INCORPORATED\r\nModel: SIMCOM_SIM5320E\r\nRevision: SIM5320E_V1.5\r\nIMEI: 012345678901234\r\n+GCAP: +CGSM,+DS,+ES\r\n\r\nOK\r\n\r\n\r\n\r\n\r\n\r\n\r\n");
30+
31+
AtLineReader dut = new AtLineReader(commMock);
32+
33+
string result;
34+
35+
result = dut.ReadLine();
36+
Assert.AreEqual("OK", result);
37+
38+
result = dut.ReadLine();
39+
Assert.AreEqual("+CP READY", result);
40+
41+
result = dut.ReadLine();
42+
Assert.AreEqual("OK", result);
43+
44+
result = dut.ReadLine();
45+
Assert.AreEqual("+SPIC: 3,10,1,10", result);
46+
47+
result = dut.ReadLine();
48+
Assert.AreEqual("OK", result);
49+
50+
result = dut.ReadLine();
51+
Assert.AreEqual("+CSQ: 16,99", result);
52+
53+
result = dut.ReadLine();
54+
Assert.AreEqual("OK", result);
55+
56+
result = dut.ReadLine();
57+
Assert.AreEqual("+CBC: 0,100,4.232V", result);
58+
59+
result = dut.ReadLine();
60+
Assert.AreEqual("OK", result);
61+
62+
result = dut.ReadLine();
63+
Assert.AreEqual("Manufacturer: SIMCOM INCORPORATED", result);
64+
65+
result = dut.ReadLine();
66+
Assert.AreEqual("Model: SIMCOM_SIM5320E", result);
67+
68+
result = dut.ReadLine();
69+
Assert.AreEqual("Revision: SIM5320E_V1.5", result);
70+
71+
result = dut.ReadLine();
72+
Assert.AreEqual("IMEI: 012345678901234", result);
73+
74+
result = dut.ReadLine();
75+
Assert.AreEqual("+GCAP: +CGSM,+DS,+ES", result);
76+
77+
result = dut.ReadLine();
78+
Assert.AreEqual("OK", result);
79+
}
80+
81+
[TestMethod]
82+
public void SimPinTest()
83+
{
84+
var commMock = new CommunicatorMock();
85+
commMock.AppendReturnValue("\r\n\r\nSTART\r\n\r\n+ST 25\r\n\r\n+ST 25\r\n\r\n+CP SIM PIN\r\n\r\n\r\nATE0\r\r\nOK\r\n\r\n\r\n\r\n\r\n\r\n+CP SIM PIN\r\n\r\nOK\r\n\r\n\r\n\r\n\r\n\r\n+SPIC: 3,10,1,10\r\n\r\nOK\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nOK\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n+CP READY\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nSMS DONE\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nPB DONE\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n+CP READY\r\n\r\nOK\r\n\r\n\r\n\r\n\r\n\r\n+CSQ: 16,99\r\n\r\nOK\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n+CBC: 0,100,4.232V\r\n\r\nOK\r\n\r\n\r\n\r\n\r\n\r\nManufacturer: SIMCOM INCORPORATED\r\nModel: SIMCOM_SIM5320E\r\nRevision: SIM5320E_V1.5\r\nIMEI: 012345678901234\r\n+GCAP: +CGSM,+DS,+ES\r\n\r\nOK\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n");
86+
87+
AtLineReader dut = new AtLineReader(commMock);
88+
89+
string result;
90+
91+
result = dut.ReadLine();
92+
Assert.AreEqual("START", result);
93+
94+
result = dut.ReadLine();
95+
Assert.AreEqual("+ST 25", result);
96+
97+
result = dut.ReadLine();
98+
Assert.AreEqual("+ST 25", result);
99+
100+
result = dut.ReadLine();
101+
Assert.AreEqual("+CP SIM PIN", result);
102+
103+
result = dut.ReadLine();
104+
Assert.AreEqual("ATE0", result);
105+
106+
result = dut.ReadLine();
107+
Assert.AreEqual("OK", result);
108+
109+
result = dut.ReadLine();
110+
Assert.AreEqual("+CP SIM PIN", result);
111+
112+
result = dut.ReadLine();
113+
Assert.AreEqual("OK", result);
114+
115+
result = dut.ReadLine();
116+
Assert.AreEqual("+SPIC: 3,10,1,10", result);
117+
118+
result = dut.ReadLine();
119+
Assert.AreEqual("OK", result);
120+
121+
result = dut.ReadLine();
122+
Assert.AreEqual("OK", result);
123+
124+
result = dut.ReadLine();
125+
Assert.AreEqual("+CP READY", result);
126+
127+
result = dut.ReadLine();
128+
Assert.AreEqual("SMS DONE", result);
129+
130+
result = dut.ReadLine();
131+
Assert.AreEqual("PB DONE", result);
132+
133+
result = dut.ReadLine();
134+
Assert.AreEqual("+CP READY", result);
135+
136+
result = dut.ReadLine();
137+
Assert.AreEqual("OK", result);
138+
139+
result = dut.ReadLine();
140+
Assert.AreEqual("+CSQ: 16,99", result);
141+
142+
result = dut.ReadLine();
143+
Assert.AreEqual("OK", result);
144+
145+
result = dut.ReadLine();
146+
Assert.AreEqual("+CBC: 0,100,4.232V", result);
147+
148+
result = dut.ReadLine();
149+
Assert.AreEqual("OK", result);
150+
151+
result = dut.ReadLine();
152+
Assert.AreEqual("Manufacturer: SIMCOM INCORPORATED", result);
153+
154+
result = dut.ReadLine();
155+
Assert.AreEqual("Model: SIMCOM_SIM5320E", result);
156+
157+
result = dut.ReadLine();
158+
Assert.AreEqual("Revision: SIM5320E_V1.5", result);
159+
160+
result = dut.ReadLine();
161+
Assert.AreEqual("IMEI: 012345678901234", result);
162+
163+
result = dut.ReadLine();
164+
Assert.AreEqual("+GCAP: +CGSM,+DS,+ES", result);
165+
166+
result = dut.ReadLine();
167+
Assert.AreEqual("OK", result);
168+
}
169+
170+
private class CommunicatorMock : ICommunicator
171+
{
172+
private string returnValue;
173+
public void AppendReturnValue(string value)
174+
{
175+
returnValue += value;
176+
}
177+
178+
public ValueTask<int> Read(char[] buffer, int offset, int count, CancellationToken cancellationToken = default)
179+
{
180+
var chars = returnValue.ToCharArray();
181+
int i;
182+
for (i = 0; i < count && i < chars.Length; i++)
183+
{
184+
buffer[offset + i] = chars[i];
185+
}
186+
return new ValueTask<int>(i);
187+
}
188+
189+
public ValueTask<bool> Write(string input, CancellationToken cancellationToken = default)
190+
{
191+
return new ValueTask<bool>(true);
192+
}
193+
194+
public ValueTask<bool> Write(char[] input, int offset, int count, CancellationToken cancellationToken = default)
195+
{
196+
return new ValueTask<bool>(true);
197+
}
198+
}
199+
}
200+
}

src/HeboTech.ATLib.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HeboTech.ATLib", "HeboTech.
77
EndProject
88
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HeboTech.ATLib.TestConsole", "HeboTech.ATLib.TestConsole\HeboTech.ATLib.TestConsole.csproj", "{82A5A7D4-9AD3-4B95-AD72-CD1B48017AC3}"
99
EndProject
10+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeboTech.ATLib.Tests", "HeboTech.ATLib.Tests\HeboTech.ATLib.Tests.csproj", "{41750DAD-B364-4E47-8338-F6A6DECB3638}"
11+
EndProject
1012
Global
1113
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1214
Debug|Any CPU = Debug|Any CPU
@@ -21,6 +23,10 @@ Global
2123
{82A5A7D4-9AD3-4B95-AD72-CD1B48017AC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
2224
{82A5A7D4-9AD3-4B95-AD72-CD1B48017AC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
2325
{82A5A7D4-9AD3-4B95-AD72-CD1B48017AC3}.Release|Any CPU.Build.0 = Release|Any CPU
26+
{41750DAD-B364-4E47-8338-F6A6DECB3638}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
27+
{41750DAD-B364-4E47-8338-F6A6DECB3638}.Debug|Any CPU.Build.0 = Debug|Any CPU
28+
{41750DAD-B364-4E47-8338-F6A6DECB3638}.Release|Any CPU.ActiveCfg = Release|Any CPU
29+
{41750DAD-B364-4E47-8338-F6A6DECB3638}.Release|Any CPU.Build.0 = Release|Any CPU
2430
EndGlobalSection
2531
GlobalSection(SolutionProperties) = preSolution
2632
HideSolutionNode = FALSE
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
using System.IO;
2+
using System.Threading;
3+
using System.Threading.Tasks;
4+
5+
namespace HeboTech.ATLib.Communication
6+
{
7+
public class FileDumper : ICommunicator
8+
{
9+
private readonly ICommunicator communicator;
10+
private readonly bool dumpInput;
11+
private readonly bool dumpOutput;
12+
private readonly StreamWriter writer;
13+
14+
public FileDumper(ICommunicator communicator, string path, bool dumpInput = true, bool dumpOutput = false)
15+
{
16+
this.communicator = communicator;
17+
this.dumpInput = dumpInput;
18+
this.dumpOutput = dumpOutput;
19+
writer = new StreamWriter(path);
20+
}
21+
22+
public async ValueTask<int> Read(char[] buffer, int offset, int count, CancellationToken cancellationToken = default)
23+
{
24+
var retVal = await communicator.Read(buffer, offset, count, cancellationToken);
25+
var input = new string(buffer, offset, retVal);
26+
27+
if (dumpInput)
28+
{
29+
writer.WriteLine("IN:");
30+
writer.WriteLine(input);
31+
}
32+
33+
return retVal;
34+
}
35+
36+
public ValueTask<bool> Write(string input, CancellationToken cancellationToken = default)
37+
{
38+
var retVal = communicator.Write(input, cancellationToken);
39+
40+
if (dumpOutput)
41+
{
42+
writer.WriteLine("OUT:");
43+
writer.WriteLine(input);
44+
}
45+
46+
return retVal;
47+
}
48+
49+
public async ValueTask<bool> Write(char[] input, int offset, int count, CancellationToken cancellationToken = default)
50+
{
51+
var retVal = await communicator.Write(input, offset, count, cancellationToken);
52+
var output = new string(input, offset, count);
53+
54+
if (dumpOutput)
55+
{
56+
writer.WriteLine("OUT:");
57+
writer.WriteLine(output);
58+
}
59+
60+
return retVal;
61+
}
62+
63+
public void Close()
64+
{
65+
writer.Close();
66+
}
67+
}
68+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using HeboTech.ATLib.Modems.SIMCOM;
2+
using HeboTech.ATLib.Parsers;
3+
4+
namespace HeboTech.ATLib.Modems.Adafruit
5+
{
6+
public class AdafruitFona3G : SIMCOM_SIM5320
7+
{
8+
public AdafruitFona3G(AtChannel channel)
9+
: base(channel)
10+
{
11+
}
12+
}
13+
}

src/HeboTech.ATLib/Modems/AdafruitFona3G.cs

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)