Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: hbjorgo/ATLib
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 7.0.0
Choose a base ref
...
head repository: hbjorgo/ATLib
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: main
Choose a head ref
Loading
Showing with 3,304 additions and 1,326 deletions.
  1. +2 −2 .github/workflows/ci.yml
  2. +2 −2 .github/workflows/release.yml
  3. +2 −0 .gitignore
  4. +75 −35 README.md
  5. +109 −38 src/HeboTech.ATLib.TestConsole/FunctionalityTest.cs
  6. +75 −0 src/HeboTech.ATLib.TestConsole/GetStartedExample.cs
  7. +1 −5 src/HeboTech.ATLib.TestConsole/HeboTech.ATLib.TestConsole.csproj
  8. +26 −18 src/HeboTech.ATLib.TestConsole/Program.cs
  9. +6 −5 src/HeboTech.ATLib.TestConsole/StressTest.cs
  10. +17 −0 src/HeboTech.ATLib.Tests/Calls/CallDetailsTests.cs
  11. +0 −59 src/HeboTech.ATLib.Tests/DTOs/PhoneNumberTests.cs
  12. +26 −0 src/HeboTech.ATLib.Tests/Extensions/EnumExtensionsTests.cs
  13. +11 −1 src/HeboTech.ATLib.Tests/Extensions/StringExtensionsTests.cs
  14. +4 −8 src/HeboTech.ATLib.Tests/HeboTech.ATLib.Tests.csproj
  15. +39 −0 src/HeboTech.ATLib.Tests/Messaging/CharacterSetHelpersTests.cs
  16. +16 −0 src/HeboTech.ATLib.Tests/Messaging/CharacterSetTests.cs
  17. +20 −0 src/HeboTech.ATLib.Tests/Messaging/CodingGroupTests.cs
  18. +30 −0 src/HeboTech.ATLib.Tests/Messaging/DataCodingSchemeTests.cs
  19. +28 −0 src/HeboTech.ATLib.Tests/Messaging/Gsm7ExtensionTests.cs
  20. +69 −85 src/HeboTech.ATLib.Tests/{CodingSchemes → Messaging}/Gsm7Tests.cs
  21. +19 −0 src/HeboTech.ATLib.Tests/Messaging/MessageClassTests.cs
  22. +28 −0 src/HeboTech.ATLib.Tests/Messaging/MessageTypeIndicatorTests.cs
  23. +33 −0 src/HeboTech.ATLib.Tests/Messaging/PhoneNumberDecoderTests.cs
  24. +49 −0 src/HeboTech.ATLib.Tests/Messaging/SmsDecoderTests.cs
  25. +35 −0 src/HeboTech.ATLib.Tests/Messaging/SmsDeliverDecoderTests.cs
  26. +28 −0 src/HeboTech.ATLib.Tests/Messaging/SmsStatusReportDecoderTests.cs
  27. +85 −0 src/HeboTech.ATLib.Tests/Messaging/SmsSubmitEncoderTests.cs
  28. +3 −3 src/HeboTech.ATLib.Tests/{PDU → Messaging}/TpduTimeTests.cs
  29. +2 −2 src/HeboTech.ATLib.Tests/{CodingSchemes → Messaging}/UCS2Tests.cs
  30. +3 −3 src/HeboTech.ATLib.Tests/{PDU → Messaging}/UdhTests.cs
  31. +5 −5 src/HeboTech.ATLib.Tests/{DTOs → Messaging}/ValidityPeriodTests.cs
  32. +29 −0 src/HeboTech.ATLib.Tests/Misc/BatteryChargeStatusTests.cs
  33. +29 −0 src/HeboTech.ATLib.Tests/Misc/BatteryStatusTests.cs
  34. +16 −0 src/HeboTech.ATLib.Tests/Misc/ImsiTests.cs
  35. +30 −0 src/HeboTech.ATLib.Tests/Misc/PersonalIdentificationNumberTests.cs
  36. +35 −0 src/HeboTech.ATLib.Tests/Numbering/AbbreviatedPhoneNumberTests.cs
  37. +31 −0 src/HeboTech.ATLib.Tests/Numbering/AlphaNumericPhoneNumberTests.cs
  38. +37 −0 src/HeboTech.ATLib.Tests/Numbering/InternationalPhoneNumberTests.cs
  39. +36 −0 src/HeboTech.ATLib.Tests/Numbering/NationalPhoneNumberTests.cs
  40. +36 −0 src/HeboTech.ATLib.Tests/Numbering/NetworkSpecificPhoneNumberTests.cs
  41. +24 −0 src/HeboTech.ATLib.Tests/Numbering/NumberingPlanIdentificationTests.cs
  42. +66 −0 src/HeboTech.ATLib.Tests/Numbering/PhoneNumberFactoryTests.cs
  43. +36 −0 src/HeboTech.ATLib.Tests/Numbering/SubscriberPhoneNumberTests.cs
  44. +22 −0 src/HeboTech.ATLib.Tests/Numbering/TypeOfNumberTests.cs
  45. +36 −0 src/HeboTech.ATLib.Tests/Numbering/UnknownPhoneNumberTests.cs
  46. +0 −25 src/HeboTech.ATLib.Tests/PDU/SmsDeliverDecoderTests.cs
  47. +0 −66 src/HeboTech.ATLib.Tests/PDU/SmsSubmitEncoderTests.cs
  48. +2 −2 src/HeboTech.ATLib.Tests/{Parsers → Parsing}/AtChannelTests.cs
  49. +2 −2 src/HeboTech.ATLib.Tests/{Parsers → Parsing}/AtErrorParsersTests.cs
  50. +2 −2 src/HeboTech.ATLib.Tests/{Parsers → Parsing}/AtReaderTests.cs
  51. +2 −2 src/HeboTech.ATLib.Tests/{Parsers → Parsing}/AtWriterTests.cs
  52. +2 −2 src/HeboTech.ATLib.Tests/{Parsers → Parsing}/DummyAtReader.cs
  53. +34 −0 src/HeboTech.ATLib.Tests/Storage/MessageStorageTests.cs
  54. +24 −0 src/HeboTech.ATLib.Tests/Storage/PreferredMessageStorageTests.cs
  55. +1 −1 src/HeboTech.ATLib/{DTOs → Calls}/CallDetails.cs
  56. +0 −32 src/HeboTech.ATLib/CodingSchemes/DataCodingScheme.cs
  57. +0 −80 src/HeboTech.ATLib/DTOs/PhoneNumber.cs
  58. +0 −23 src/HeboTech.ATLib/DTOs/PhoneNumberDTO.cs
  59. +0 −36 src/HeboTech.ATLib/DTOs/Sms.cs
  60. +0 −37 src/HeboTech.ATLib/DTOs/SmsDeliver.cs
  61. +0 −26 src/HeboTech.ATLib/DTOs/SmsWithIndex.cs
  62. +0 −54 src/HeboTech.ATLib/DTOs/ValidityPeriod.cs
  63. +27 −0 src/HeboTech.ATLib/Events/BroadcastMessageReceivedEventArgs.cs
  64. +28 −0 src/HeboTech.ATLib/Events/BroadcastMessageStorageReferenceReceivedEventArgs.cs
  65. +1 −1 src/HeboTech.ATLib/Events/CallEndedEventArgs.cs
  66. +13 −12 src/HeboTech.ATLib/Events/SmsReceivedEventArgs.cs
  67. +29 −0 src/HeboTech.ATLib/Events/SmsStatusReportEventArgs.cs
  68. +30 −0 src/HeboTech.ATLib/Events/SmsStatusReportStorageReferenceEventArgs.cs
  69. +28 −0 src/HeboTech.ATLib/Events/SmsStorageReferenceReceivedEventArgs.cs
  70. +1 −1 src/HeboTech.ATLib/Events/UssdResponseEventArgs.cs
  71. +0 −17 src/HeboTech.ATLib/Extensions/SmsDeliverExtensions.cs
  72. +3 −1 src/HeboTech.ATLib/Extensions/StringExtensions.cs
  73. +17 −9 src/HeboTech.ATLib/HeboTech.ATLib.csproj
  74. +9 −0 src/HeboTech.ATLib/Messaging/BroadcastMessage.cs
  75. +1 −1 src/HeboTech.ATLib/{CodingSchemes → Messaging}/CharacterSet.cs
  76. +3 −3 src/HeboTech.ATLib/{CodingSchemes → Messaging}/CharacterSetHelpers.cs
  77. +1 −1 src/HeboTech.ATLib/{CodingSchemes → Messaging}/CodingGroup.cs
  78. +33 −0 src/HeboTech.ATLib/Messaging/DataCodingScheme.cs
  79. +30 −17 src/HeboTech.ATLib/{CodingSchemes → Messaging}/Gsm7.cs
  80. +2 −2 src/HeboTech.ATLib/{CodingSchemes → Messaging}/Gsm7Extension.cs
  81. +1 −1 src/HeboTech.ATLib/{CodingSchemes → Messaging}/MessageClass.cs
  82. +38 −0 src/HeboTech.ATLib/Messaging/MessageTypeIndicator.cs
  83. +59 −0 src/HeboTech.ATLib/Messaging/PhoneNumberDecoder.cs
  84. +24 −0 src/HeboTech.ATLib/Messaging/Sms.cs
  85. +36 −0 src/HeboTech.ATLib/Messaging/SmsDecoder.cs
  86. +47 −0 src/HeboTech.ATLib/Messaging/SmsDeliver.cs
  87. +17 −59 src/HeboTech.ATLib/{PDU → Messaging}/SmsDeliverDecoder.cs
  88. +55 −0 src/HeboTech.ATLib/Messaging/SmsDeliveryStatus.cs
  89. +1 −1 src/HeboTech.ATLib/{DTOs → Messaging}/SmsReference.cs
  90. +1 −1 src/HeboTech.ATLib/{DTOs → Messaging}/SmsStatus.cs
  91. +29 −0 src/HeboTech.ATLib/Messaging/SmsStatusReport.cs
  92. +82 −0 src/HeboTech.ATLib/Messaging/SmsStatusReportDecoder.cs
  93. +40 −39 src/HeboTech.ATLib/{PDU → Messaging}/SmsSubmitEncoder.cs
  94. +3 −24 src/HeboTech.ATLib/{DTOs → Messaging}/SmsSubmitRequest.cs
  95. +1 −1 src/HeboTech.ATLib/{DTOs → Messaging}/SmsTextFormat.cs
  96. +14 −0 src/HeboTech.ATLib/Messaging/SmsWithIndex.cs
  97. +2 −2 src/HeboTech.ATLib/{PDU → Messaging}/TpduTime.cs
  98. +1 −1 src/HeboTech.ATLib/{CodingSchemes → Messaging}/UCS2.cs
  99. +1 −1 src/HeboTech.ATLib/{PDU/UDH.cs → Messaging/Udh.cs}
  100. +315 −0 src/HeboTech.ATLib/Messaging/ValidityPeriod.cs
  101. +1 −1 src/HeboTech.ATLib/{DTOs → Misc}/BatteryChargeStatus.cs
  102. +1 −1 src/HeboTech.ATLib/{DTOs → Misc}/BatteryStatus.cs
  103. +1 −1 src/HeboTech.ATLib/{DTOs → Misc}/Imsi.cs
  104. +2 −2 src/HeboTech.ATLib/{DTOs → Misc}/PersonalIdentificationNumber.cs
  105. +1 −1 src/HeboTech.ATLib/{DTOs → Misc}/ProductIdentificationInformation.cs
  106. +1 −1 src/HeboTech.ATLib/{DTOs → Misc}/RemainingPinPukAttempts.cs
  107. +1 −1 src/HeboTech.ATLib/{DTOs → Misc}/SignalStrength.cs
  108. +1 −1 src/HeboTech.ATLib/{DTOs → Misc}/SimStatus.cs
  109. +7 −164 src/HeboTech.ATLib/Modems/Adafruit/Fona3G.cs
  110. +1 −1 src/HeboTech.ATLib/Modems/Cinterion/IMC55i.cs
  111. +34 −51 src/HeboTech.ATLib/Modems/Cinterion/MC55i.cs
  112. +1 −1 src/HeboTech.ATLib/Modems/D_LINK/DWM222.cs
  113. +112 −92 src/HeboTech.ATLib/Modems/Generic/ModemBase.cs
  114. +26 −18 src/HeboTech.ATLib/Modems/IModem.cs
  115. +5 −11 src/HeboTech.ATLib/Modems/Qualcomm/MDM9225.cs
  116. +2 −2 src/HeboTech.ATLib/Modems/SIMCOM/ISIM5320.cs
  117. +13 −19 src/HeboTech.ATLib/Modems/SIMCOM/SIM5320.cs
  118. +5 −11 src/HeboTech.ATLib/Modems/TP-LINK/MA260.cs
  119. +6 −0 src/HeboTech.ATLib/Modems/Telit/IME910C1.cs
  120. +38 −0 src/HeboTech.ATLib/Modems/Telit/ME910C1.cs
  121. +19 −0 src/HeboTech.ATLib/Numbering/AbbreviatedPhoneNumber.cs
  122. +17 −0 src/HeboTech.ATLib/Numbering/AlphaNumericPhoneNumber.cs
  123. +235 −0 src/HeboTech.ATLib/Numbering/CountryCodes.cs
  124. +51 −0 src/HeboTech.ATLib/Numbering/InternationalPhoneNumber.cs
  125. +28 −0 src/HeboTech.ATLib/Numbering/NationalPhoneNumber.cs
  126. +19 −0 src/HeboTech.ATLib/Numbering/NetworkSpecificPhoneNumber.cs
  127. +2 −2 src/HeboTech.ATLib/{DTOs/NumberPlanIdentification.cs → Numbering/NumberingPlanIdentification.cs}
  128. +52 −0 src/HeboTech.ATLib/Numbering/PhoneNumber.cs
  129. +60 −0 src/HeboTech.ATLib/Numbering/PhoneNumberFactory.cs
  130. +19 −0 src/HeboTech.ATLib/Numbering/SubscriberPhoneNumber.cs
  131. +1 −1 src/HeboTech.ATLib/{DTOs → Numbering}/TypeOfNumber.cs
  132. +19 −0 src/HeboTech.ATLib/Numbering/UnknownPhoneNumber.cs
  133. +0 −13 src/HeboTech.ATLib/PDU/MessageTypeIndicator.cs
  134. +13 −11 src/HeboTech.ATLib/{Parsers → Parsing}/AtChannel.cs
  135. +1 −1 src/HeboTech.ATLib/{Parsers → Parsing}/AtCommand.cs
  136. +1 −1 src/HeboTech.ATLib/{Parsers → Parsing}/AtCommandType.cs
  137. +1 −1 src/HeboTech.ATLib/{Parsers → Parsing}/AtError.cs
  138. +3 −3 src/HeboTech.ATLib/{Parsers → Parsing}/AtErrorParsers.cs
  139. +5 −5 src/HeboTech.ATLib/{Parsers → Parsing}/AtReader.cs
  140. +1 −1 src/HeboTech.ATLib/{Parsers → Parsing}/AtResponse.cs
  141. +8 −8 src/HeboTech.ATLib/{Parsers → Parsing}/AtWriter.cs
  142. +1 −1 src/HeboTech.ATLib/{Parsers → Parsing}/IAtChannel.cs
  143. +2 −2 src/HeboTech.ATLib/{Parsers → Parsing}/IAtReader.cs
  144. +2 −2 src/HeboTech.ATLib/{Parsers → Parsing}/IAtWriter.cs
  145. +2 −2 src/HeboTech.ATLib/{Parsers → Parsing}/InvalidResponseException.cs
  146. +1 −1 src/HeboTech.ATLib/{Parsers → Parsing}/ModemResponse.cs
  147. +1 −1 src/HeboTech.ATLib/{Parsers → Parsing}/UnsolicitedEventArgs.cs
  148. +52 −0 src/HeboTech.ATLib/README.md
  149. +2 −3 src/HeboTech.ATLib/{Modems/Generic → Storage}/MessageStorage.cs
  150. +21 −0 src/HeboTech.ATLib/Storage/PreferredMessageStorage.cs
  151. +2 −31 src/HeboTech.ATLib/{DTOs/PreferredMessageStorage.cs → Storage/PreferredMessageStorages.cs}
  152. +1 −1 src/HeboTech.ATLib/{DTOs → Storage}/SupportedPreferredMessageStorages.cs
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -12,12 +12,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v4
- name: Build and Test
run: ./Build.ps1
shell: pwsh
- name: Artifacts
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: artifacts
path: artifacts/**/*
4 changes: 2 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
uses: actions/checkout@v4
- name: Build and Test
run: ./Build.ps1
shell: pwsh
@@ -20,7 +20,7 @@ jobs:
run: ./Push.ps1
shell: pwsh
- name: Artifacts
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v4
with:
name: artifacts
path: artifacts/**/*
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -4,6 +4,8 @@
#Log folders
Logs/

**/*/launchSettings.json

# User-specific files
*.suo
*.user
110 changes: 75 additions & 35 deletions README.md
Original file line number Diff line number Diff line change
@@ -9,15 +9,14 @@ Hayes command set (commonly known as AT commands) is a command set frequently us

Feedback is very much welcome and please request features 🙂

[HeboTech.GsmApi](https://github.com/hbjorgo/GsmApi) is a REST API wrapping this library.

## Supported commands:
- Send SMS in PDU format (GSM 7 bit or UCS2 encoding)
- Send concatenated SMS (message that spans over multiple SMSs) in PDU format (GSM 7 bit or UCS2 encoding)
- SMS supports emojies
- List SMSs
- Read SMS (PDU format (GSM 7 bit or UCS2 encoding))
- Delete SMS
- Get SMS Status Report (delivery status)
- Dial number
- Answer incoming call
- Hang up call
@@ -40,6 +39,7 @@ Feedback is very much welcome and please request features 🙂
- Call started
- Call ended
- SMS received
- SMS Status Report received
- Error received
- USSD response received
- Generic event
@@ -62,41 +62,81 @@ dotnet add package HeboTech.ATLib

Using a serial port to communicate with a modem is easy:
```csharp
// Set up serial port
using SerialPort serialPort = new SerialPort(args[0], 9600, Parity.None, 8, StopBits.One)
{
Handshake = Handshake.RequestToSend
};
serialPort.Open();

// Create AT channel
using AtChannel atChannel = AtChannel.Create(serialPort.BaseStream);

// Create the modem
using IModem modem = new Fona3G(atChannel);

// Open AT channel
atChannel.Open();

// Configure modem with required settings before PIN
var requiredSettingsBeforePin = await modem.SetRequiredSettingsBeforePinAsync();

// Get SIM status
var simStatus = await modem.GetSimStatusAsync();
Console.WriteLine($"SIM Status: {simStatus}");

if (simStatus == SimStatus.SIM_PIN)
using HeboTech.ATLib.Messaging;
using HeboTech.ATLib.Misc;
using HeboTech.ATLib.Modems;
using HeboTech.ATLib.Modems.Adafruit;
using HeboTech.ATLib.Numbering;
using HeboTech.ATLib.Parsing;
using System;
using System.IO.Ports;
using System.Threading.Tasks;

namespace HeboTech.ATLib.TestConsole
{
var simPinStatus = await modem.EnterSimPinAsync(new PersonalIdentificationNumber("<PIN>"));
Console.WriteLine($"SIM PIN Status: {simPinStatus}");
public class GetStartedExample
{
public static async Task RunAsync(string portName, int baudRate, string pin, string recepientPhoneNumber)
{
// Set up serial port
using SerialPort serialPort = new SerialPort(portName, baudRate, Parity.None, 8, StopBits.One)
{
Handshake = Handshake.RequestToSend
};
serialPort.Open();

// Create AT channel
using AtChannel atChannel = AtChannel.Create(serialPort.BaseStream);

// Create the modem
using IModem modem = new Fona3G(atChannel);

// Listen to incoming SMSs
modem.SmsReceived += (sender, args) =>
{
Console.WriteLine($"SMS received: {args.SmsDeliver}");
};

// Listen to incoming SMSs stored in memory
modem.SmsStorageReferenceReceived += (sender, args) =>
{
Console.WriteLine($"SMS received. Index {args.Index} at storage location {args.Storage}");
};

// Open AT channel
atChannel.Open();

// Configure modem with required settings before PIN
var requiredSettingsBeforePin = await modem.SetRequiredSettingsBeforePinAsync();

// Get SIM status
var simStatus = await modem.GetSimStatusAsync();
Console.WriteLine($"SIM Status: {simStatus}");

// Check if SIM needs PIN
if (simStatus.Result == SimStatus.SIM_PIN)
{
var simPinStatus = await modem.EnterSimPinAsync(new PersonalIdentificationNumber(pin));
Console.WriteLine($"SIM PIN Status: {simPinStatus}");
}

// Configure modem with required settings after PIN
var requiredSettingsAfterPin = await modem.SetRequiredSettingsAfterPinAsync();

// Read SMS at index 1
var sms = await modem.ReadSmsAsync(1);
if (sms.Success)
Console.WriteLine(sms.Result);

// Send SMS to the specified number
PhoneNumber phoneNumber = PhoneNumberFactory.CreateCommonIsdn(recepientPhoneNumber);
string message = "Hello ATLib!";
var smsReferences = await modem.SendSmsAsync(new SmsSubmitRequest(phoneNumber, message));
foreach (var smsReference in smsReferences)
Console.WriteLine($"SMS Reference: {smsReference}");
}
}
}

// Configure modem with required settings after PIN
var requiredSettingsAfterPin = await modem.SetRequiredSettingsAfterPinAsync();

// Send SMS to the specified number
var smsReference = await modem.SendSmsAsync(new PhoneNumber("123456789"), "Hello ATLib!");
Console.WriteLine($"SMS Reference: {smsReference}");
```
Because it relies on a stream, you can even control a modem over a network! Either use a network attached modem, or forward a modem serial port to a network port.

Loading