Skip to content

Commit a7d7570

Browse files
authored
Add modem Cinterion MC55i (#32)
1 parent 118c2a7 commit a7d7570

File tree

28 files changed

+1007
-303
lines changed

28 files changed

+1007
-303
lines changed

src/HeboTech.ATLib.TestConsole/FunctionalityTest.cs

Lines changed: 38 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
using HeboTech.ATLib.DTOs;
33
using HeboTech.ATLib.Events;
44
using HeboTech.ATLib.Modems;
5-
using HeboTech.ATLib.Modems.D_LINK;
5+
using HeboTech.ATLib.Modems.Cinterion;
6+
using HeboTech.ATLib.Modems.Generic;
67
using HeboTech.ATLib.Parsers;
78
using System;
89
using System.Collections.Generic;
@@ -19,7 +20,7 @@ public static async Task RunAsync(System.IO.Stream stream, string pin)
1920

2021
using AtChannel atChannel = AtChannel.Create(stream);
2122
//atChannel.EnableDebug((string line) => Console.WriteLine(line));
22-
using IModem modem = new DWM222(atChannel);
23+
using IMC55i modem = new MC55i(atChannel);
2324
atChannel.Open();
2425
await atChannel.ClearAsync();
2526

@@ -32,23 +33,23 @@ public static async Task RunAsync(System.IO.Stream stream, string pin)
3233
modem.ErrorReceived += Modem_ErrorReceived;
3334
modem.GenericEvent += Modem_GenericEvent;
3435

35-
// Configure modem with required settings
36-
await modem.SetRequiredSettingsAsync();
37-
38-
await modem.SetSmsMessageFormatAsync(smsTextFormat);
36+
// Configure modem with required settings before PIN
37+
var requiredSettingsBeforePin = await modem.SetRequiredSettingsBeforePinAsync();
38+
Console.WriteLine($"Successfully set required settings before PIN: {requiredSettingsBeforePin}");
39+
await Task.Delay(TimeSpan.FromSeconds(2));
3940

4041
var simStatus = await modem.GetSimStatusAsync();
4142
Console.WriteLine($"SIM Status: {simStatus}");
4243

43-
await modem.ReInitializeSimAsync();
44+
//await modem.ReInitializeSimAsync();
4445

4546
simStatus = await modem.GetSimStatusAsync();
4647
Console.WriteLine($"SIM Status: {simStatus}");
4748

48-
if (simStatus.IsSuccess && simStatus.Result == SimStatus.SIM_READY)
49+
if (simStatus.Success && simStatus.Result == SimStatus.SIM_READY)
4950
{
5051
}
51-
else if (simStatus.IsSuccess && simStatus.Result == SimStatus.SIM_PIN)
52+
else if (simStatus.Success && simStatus.Result == SimStatus.SIM_PIN)
5253
{
5354
var simPinStatus = await modem.EnterSimPinAsync(new PersonalIdentificationNumber(pin));
5455
Console.WriteLine($"SIM PIN Status: {simPinStatus}");
@@ -57,9 +58,9 @@ public static async Task RunAsync(System.IO.Stream stream, string pin)
5758
{
5859
simStatus = await modem.GetSimStatusAsync();
5960
Console.WriteLine($"SIM Status: {simStatus}");
60-
if (simStatus.IsSuccess && simStatus.Result == SimStatus.SIM_READY)
61+
if (simStatus.Success && simStatus.Result == SimStatus.SIM_READY)
6162
break;
62-
await Task.Delay(TimeSpan.FromMilliseconds(1000));
63+
await Task.Delay(TimeSpan.FromSeconds(1));
6364
}
6465
}
6566
else
@@ -68,21 +69,33 @@ public static async Task RunAsync(System.IO.Stream stream, string pin)
6869
return;
6970
}
7071

72+
await Task.Delay(TimeSpan.FromSeconds(2));
73+
7174
for (int i = 0; i < 10; i++)
7275
{
7376
var imsi = await modem.GetImsiAsync();
7477
Console.WriteLine($"IMSI: {imsi}");
75-
if (imsi.IsSuccess)
78+
if (imsi.Success)
7679
break;
7780
await Task.Delay(TimeSpan.FromMilliseconds(1000));
7881
}
7982

83+
// Configure modem with required settings after PIN
84+
var requiredSettingsAfterPin = await modem.SetRequiredSettingsAfterPinAsync();
85+
Console.WriteLine($"Successfully set required settings after PIN: {requiredSettingsAfterPin}");
86+
87+
var smsMessageFormat = await modem.SetSmsMessageFormatAsync(smsTextFormat);
88+
Console.WriteLine($"Setting SMS message format: {smsMessageFormat}");
89+
8090
var signalStrength = await modem.GetSignalStrengthAsync();
8191
Console.WriteLine($"Signal Strength: {signalStrength}");
8292

8393
var batteryStatus = await modem.GetBatteryStatusAsync();
8494
Console.WriteLine($"Battery Status: {batteryStatus}");
8595

96+
//var mc55iBatteryStatus = await modem.MC55i_GetBatteryStatusAsync();
97+
//Console.WriteLine($"MC55i Battery Status: {mc55iBatteryStatus}");
98+
8699
var productInfo = await modem.GetProductIdentificationInformationAsync();
87100
Console.WriteLine($"Product Information:{Environment.NewLine}{productInfo}");
88101

@@ -92,34 +105,21 @@ public static async Task RunAsync(System.IO.Stream stream, string pin)
92105
var dateTime = await modem.GetDateTimeAsync();
93106
Console.WriteLine($"Date and time: {dateTime}");
94107

95-
var newSmsIndicationResult = await modem.SetNewSmsIndication(2, 1, 0, 0, 0);
108+
var newSmsIndicationResult = await modem.SetNewSmsIndication(2, 1, 0, 0, 1);
96109
Console.WriteLine($"Setting new SMS indication: {newSmsIndicationResult}");
97110

98111
var supportedStorages = await modem.GetSupportedPreferredMessageStoragesAsync();
99112
Console.WriteLine($"Supported storages:{Environment.NewLine}{supportedStorages}");
100113
var currentStorages = await modem.GetPreferredMessageStoragesAsync();
101114
Console.WriteLine($"Current storages:{Environment.NewLine}{currentStorages}");
102-
var setPreferredStorages = await modem.SetPreferredMessageStorageAsync("ME", "ME", "ME");
115+
var setPreferredStorages = await modem.SetPreferredMessageStorageAsync(MessageStorage.SM, MessageStorage.SM, MessageStorage.SM);
103116
Console.WriteLine($"Storages set:{Environment.NewLine}{setPreferredStorages}");
104117

105-
//var singleSms = await modem.ReadSmsAsync(2, smsTextFormat);
106-
//Console.WriteLine($"Single SMS: {singleSms}");
107-
108-
var smss = await modem.ListSmssAsync(SmsStatus.ALL);
109-
if (smss.IsSuccess)
110-
{
111-
foreach (var sms in smss.Result)
112-
{
113-
Console.WriteLine($"SMS: {sms}");
114-
var smsDeleteStatus = await modem.DeleteSmsAsync(sms.Index);
115-
Console.WriteLine($"Delete SMS #{sms.Index} - {smsDeleteStatus}");
116-
}
117-
}
118-
119-
Console.WriteLine("Done. Press 'a' to answer call, 'd' to dial, 'h' to hang up, 's' to send SMS, 'r' to read an SMS, 'u' to send USSD code, '+' to enable debug, '-' to disable debug and 'q' to exit...");
118+
Console.WriteLine("Done. Press 'a' to answer call, 'd' to dial, 'h' to hang up, 's' to send SMS, 'r' to read an SMS, 'l' to list all SMSs, 'u' to send USSD code, '+' to enable debug, '-' to disable debug and 'q' to exit...");
120119
ConsoleKey key;
121120
while ((key = Console.ReadKey().Key) != ConsoleKey.Q)
122121
{
122+
Console.WriteLine();
123123
switch (key)
124124
{
125125
case ConsoleKey.A:
@@ -186,6 +186,13 @@ public static async Task RunAsync(System.IO.Stream stream, string pin)
186186
var ussdResult = await modem.SendUssdAsync(ussd);
187187
Console.WriteLine($"USSD Status: {ussdResult}");
188188
break;
189+
case ConsoleKey.L:
190+
Console.WriteLine("List all SMSs:");
191+
var smss = await modem.ListSmssAsync(SmsStatus.ALL);
192+
if (smss.Success)
193+
foreach (var sms in smss.Result)
194+
Console.WriteLine($"SMS: {sms}");
195+
break;
189196
case ConsoleKey.OemPlus:
190197
atChannel.EnableDebug((string line) => Console.WriteLine(line));
191198
Console.WriteLine("Debug enabled");
@@ -210,7 +217,8 @@ private static void Modem_ErrorReceived(object sender, ErrorEventArgs e)
210217

211218
private static void Modem_UssdResponseReceived(object sender, UssdResponseEventArgs e)
212219
{
213-
Console.WriteLine($"USSD Response: {e.Status} - {e.Response} - ({e.CodingScheme})");
220+
if (e != null)
221+
Console.WriteLine($"USSD Response: {e.Status} - {e.Response} - ({e.CodingScheme})");
214222
}
215223

216224
private static void Modem_CallEnded(object sender, CallEndedEventArgs e)

src/HeboTech.ATLib.TestConsole/Program.cs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,22 @@ static async Task Main(string[] args)
3434

3535

3636
/* ######## UNCOMMENT THIS SECTION TO USE SERIAL PORT ######## */
37-
using SerialPort serialPort = new("COM1", 9600, Parity.None, 8, StopBits.One)
38-
{
39-
Handshake = Handshake.RequestToSend
40-
};
41-
serialPort.Open();
42-
Console.WriteLine("Serialport opened");
43-
Stream stream;
44-
stream = serialPort.BaseStream;
37+
//using SerialPort serialPort = new("COM1", 9600, Parity.None, 8, StopBits.One)
38+
//{
39+
// Handshake = Handshake.RequestToSend
40+
//};
41+
//serialPort.Open();
42+
//Console.WriteLine("Serialport opened");
43+
//Stream stream;
44+
//stream = serialPort.BaseStream;
4545

4646

4747
/* ######## UNCOMMENT THIS SECTION TO USE NETWORK SOCKET ######## */
48-
//using Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
49-
//socket.Connect("192.168.1.144", 7000);
50-
//Console.WriteLine("Network socket opened");
51-
//Stream stream;
52-
//stream = new NetworkStream(socket);
48+
using Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
49+
socket.Connect("192.168.1.144", 7000);
50+
Console.WriteLine("Network socket opened");
51+
Stream stream;
52+
stream = new NetworkStream(socket);
5353

5454

5555
// ### Choose what to run

src/HeboTech.ATLib.TestConsole/StressTest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public static async Task RunAsync(System.IO.Stream stream, string pin)
6464
Console.WriteLine($"Single SMS: {singleSms}");
6565

6666
var smss = await modem.ListSmssAsync(SmsStatus.ALL);
67-
if (smss.IsSuccess)
67+
if (smss.Success)
6868
{
6969
foreach (var sms in smss.Result)
7070
{

src/HeboTech.ATLib/CodingSchemes/UCS2.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ namespace HeboTech.ATLib.CodingSchemes
1212
/// </summary>
1313
public class UCS2
1414
{
15-
public const CodingScheme DataCodingSchemeCode = CodingScheme.UCS2;
16-
1715
/// <summary>
1816
/// Encode to UCS2
1917
/// </summary>

src/HeboTech.ATLib/DTOs/PreferredMessageStorage.cs

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
1-
using System;
1+
using HeboTech.ATLib.Modems.Generic;
2+
using System;
23

34
namespace HeboTech.ATLib.DTOs
45
{
56
public class PreferredMessageStorages
67
{
8+
/// <summary>
9+
///
10+
/// </summary>
11+
/// <param name="storage1Name">Storage area to be used when reading or deleting SMS messages</param>
12+
/// <param name="storage2Name">Storage area to be used when sending SMS messages from message storage or writing SMS messages</param>
13+
/// <param name="storage3Name">Storage area to be used when storing newly received SMS messages</param>
714
public PreferredMessageStorages(
815
PreferredMessageStorage storage1Name,
916
PreferredMessageStorage storage2Name,
@@ -27,22 +34,31 @@ public override string ToString()
2734
}
2835
}
2936

37+
3038
public class PreferredMessageStorage
3139
{
32-
public PreferredMessageStorage(string storage1Name, int storage1Messages, int storage1MessageLocations)
40+
/// <summary>
41+
/// SM: SIM card storage area
42+
/// ME: Modem storage area
43+
/// MT: All storage combined
44+
/// BM: Broadcast message storage area
45+
/// SR: Status report storage area
46+
/// TA: Terminal adaptor storage area
47+
/// </summary>
48+
public PreferredMessageStorage(MessageStorage storageName, int storageMessages, int storageMessageLocations)
3349
{
34-
Storage1Name = storage1Name;
35-
Storage1Messages = storage1Messages;
36-
Storage1MessageLocations = storage1MessageLocations;
50+
StorageName = storageName;
51+
StorageMessages = storageMessages;
52+
StorageMessageLocations = storageMessageLocations;
3753
}
3854

39-
public string Storage1Name { get; }
40-
public int Storage1Messages { get; }
41-
public int Storage1MessageLocations { get; }
55+
public MessageStorage StorageName { get; }
56+
public int StorageMessages { get; }
57+
public int StorageMessageLocations { get; }
4258

4359
public override string ToString()
4460
{
45-
return $"Name:{Storage1Name}, Messages:{Storage1Messages}, Locations:{Storage1MessageLocations}";
61+
return $"Name:{StorageName}, Messages:{StorageMessages}, Locations:{StorageMessageLocations}";
4662
}
4763
}
4864
}

src/HeboTech.ATLib/DTOs/SmsStatus.cs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ namespace HeboTech.ATLib.DTOs
55
{
66
public enum SmsStatus
77
{
8-
REC_UNREAD,
9-
REC_READ,
10-
STO_UNSENT,
11-
STO_SENT,
12-
ALL
8+
REC_UNREAD = 0,
9+
REC_READ = 1,
10+
STO_UNSENT = 2,
11+
STO_SENT = 3,
12+
ALL = 4
1313
}
1414

1515
public static class SmsStatusHelpers
@@ -23,11 +23,6 @@ public static class SmsStatusHelpers
2323
{ SmsStatus.STO_UNSENT, "STO UNSENT" },
2424
};
2525

26-
public static SmsStatus ToSmsStatus(int statusCode)
27-
{
28-
return LUT.First(x => (int)x.Key == statusCode).Key;
29-
}
30-
3126
public static SmsStatus ToSmsStatus(string text)
3227
{
3328
return LUT.First(x => x.Value == text).Key;

src/HeboTech.ATLib/Events/UssdResponseEventArgs.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public UssdResponseEventArgs(int status, string response, int codingScheme)
1717

1818
public static UssdResponseEventArgs CreateFromResponse(string response)
1919
{
20-
var match = Regex.Match(response, @"\+CUSD:\s(?<status>\d),""(?<message>(?s).*)"",(?<codingScheme>\d+)");
20+
var match = Regex.Match(response, @"\+CUSD:\s(?<status>\d)(,""(?<message>(?s).*)"",(?<codingScheme>\d+))?");
2121
if (match.Success)
2222
{
2323
int status = int.Parse(match.Groups["status"].Value);

src/HeboTech.ATLib/Exceptions/CmeException.cs

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

src/HeboTech.ATLib/HeboTech.ATLib.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
<TargetFramework>netstandard2.1</TargetFramework>
55
<Authors>HeboTech</Authors>
66
<Product>HeboTech ATLib</Product>
7-
<Version>7.0.0-RC1</Version>
8-
<PackageVersion>7.0.0-RC1</PackageVersion>
7+
<Version>7.0.0-RC2</Version>
8+
<PackageVersion>7.0.0-RC2</PackageVersion>
99
<AssemblyVersion>7.0.0.0</AssemblyVersion>
1010
<FileVersion>7.0.0.0</FileVersion>
1111
<PackageId>HeboTech.ATLib</PackageId>

0 commit comments

Comments
 (0)