├── .gitignore
├── ELKM1DesktopApp
└── ElkM1DesktopApp.csproj.user
├── ElkM1API.sln
├── ElkM1API
├── ElkC1M1Tunnel.cpp
├── ElkC1M1Tunnel.h
├── ElkM1API.h
├── ElkM1API.vcxproj
├── ElkM1API.vcxproj.filters
├── ElkM1AsciiAPI.cpp
├── ElkM1AsciiAPI.h
├── ElkM1Connection.cpp
├── ElkM1Connection.h
├── ElkM1Definition.h
├── ElkM1Monitor.cpp
├── ElkM1Monitor.h
├── ElkM1SirenWords.h
├── SwigCallbacks.cpp
├── SwigCallbacks.h
├── setup.py
├── swig.i
├── swig_wrap_csharp.cpp
└── swig_wrap_csharp.h
├── ElkM1APITester
├── ElkM1APITester.vcxproj
├── ElkM1APITester.vcxproj.filters
├── ElkM1CLI.cpp
├── ElkM1TCP.cpp
└── ElkM1TCP.h
├── ElkM1AndroidExample
├── .gitignore
├── .idea
│ ├── .name
│ ├── compiler.xml
│ ├── copyright
│ │ └── profiles_settings.xml
│ ├── encodings.xml
│ ├── gradle.xml
│ ├── misc.xml
│ ├── modules.xml
│ └── runConfigurations.xml
├── app
│ ├── .gitignore
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ │ ├── androidTest
│ │ └── java
│ │ │ └── elkm1androidexample
│ │ │ └── elk
│ │ │ └── org
│ │ │ └── elkm1androidexample
│ │ │ └── ApplicationTest.java
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ ├── elkm1androidexample
│ │ │ │ └── elk
│ │ │ │ │ └── org
│ │ │ │ │ └── elkm1androidexample
│ │ │ │ │ ├── ConnectionWrapper.java
│ │ │ │ │ ├── MainActivity.java
│ │ │ │ │ └── SecureConnectionWrapper.java
│ │ │ └── elkm1api
│ │ │ │ ├── AlarmState.java
│ │ │ │ ├── ArmMode.java
│ │ │ │ ├── ArmStatus.java
│ │ │ │ ├── ArmStatusVector.java
│ │ │ │ ├── ArmStatusVectorCallback.java
│ │ │ │ ├── ArmUpMode.java
│ │ │ │ ├── AudioData.java
│ │ │ │ ├── BoolCallback.java
│ │ │ │ ├── BoolVector.java
│ │ │ │ ├── C1M1Tunnel.java
│ │ │ │ ├── CharVector.java
│ │ │ │ ├── ChimeMode.java
│ │ │ │ ├── ChimeModeVector.java
│ │ │ │ ├── ElkM1API.java
│ │ │ │ ├── ElkM1APIJNI.java
│ │ │ │ ├── FKEY.java
│ │ │ │ ├── IntCallback.java
│ │ │ │ ├── IntVector.java
│ │ │ │ ├── KeypadFkeyStatus.java
│ │ │ │ ├── LogEntry.java
│ │ │ │ ├── LogEntryVector.java
│ │ │ │ ├── LogicalZoneState.java
│ │ │ │ ├── M1API.java
│ │ │ │ ├── M1AsciiAPI.java
│ │ │ │ ├── M1Connection.java
│ │ │ │ ├── M1Monitor.java
│ │ │ │ ├── NetworkType.java
│ │ │ │ ├── PhysicalZoneState.java
│ │ │ │ ├── RTCData.java
│ │ │ │ ├── SChimeMode.java
│ │ │ │ ├── SWIGTYPE_p_Elk__KeypadFkeyStatus__FkeyIllumination.java
│ │ │ │ ├── SZoneDefinition.java
│ │ │ │ ├── SirenPhrase.java
│ │ │ │ ├── SirenWord.java
│ │ │ │ ├── SystemTroubleStatus.java
│ │ │ │ ├── TempDevicePair.java
│ │ │ │ ├── TempDevicePairVector.java
│ │ │ │ ├── TemperatureDevice.java
│ │ │ │ ├── TextDescriptionType.java
│ │ │ │ ├── ThermostatData.java
│ │ │ │ ├── UShortVector.java
│ │ │ │ ├── UserCodeAccess.java
│ │ │ │ ├── UserCodeSuccess.java
│ │ │ │ ├── Weekday.java
│ │ │ │ ├── ZoneDefinition.java
│ │ │ │ ├── ZoneDefinitionVector.java
│ │ │ │ ├── ZoneState.java
│ │ │ │ ├── ZoneStateVector.java
│ │ │ │ └── clearMethod.java
│ │ ├── jni
│ │ │ ├── swig_wrap_java.cpp
│ │ │ └── swig_wrap_java.h
│ │ └── res
│ │ │ ├── layout
│ │ │ └── activity_main.xml
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── values-w820dp
│ │ │ └── dimens.xml
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ │ └── test
│ │ └── java
│ │ └── elkm1androidexample
│ │ └── elk
│ │ └── org
│ │ └── elkm1androidexample
│ │ └── ExampleUnitTest.java
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── swig-generate.sh
├── ElkM1DesktopApp
├── App.config
├── ElkM1Desktop.Designer.cs
├── ElkM1Desktop.cs
├── ElkM1Desktop.resx
├── ElkM1DesktopApp.csproj
├── M1ConnectionWrappers.cs
├── Program.cs
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
└── Resources
│ ├── armaway_image_c.png
│ ├── armnight_image_c.png
│ ├── armstay_image_c.png
│ ├── disarm_image_c.png
│ ├── off_symbol.png
│ ├── on_symbol.png
│ ├── zone_bypassed.png
│ ├── zone_normal.png
│ ├── zone_trouble.png
│ └── zone_violated.png
├── LICENSE
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | *.suo
2 | Debug
3 | ElkM1DesktopApp/obj
4 | ElkM1APITester/Debug
5 | ElkM1API/Debug
6 | ElkM1API/build
7 | ElkM1API/ElkM1API.py
8 | ElkM1API/swig_wrap.cpp
9 | ElkM1API/swig_wrap.h
10 | ElkM1API/csharp
11 | ElkM1API.VC.opendb
12 | ElkM1API.sdf
--------------------------------------------------------------------------------
/ELKM1DesktopApp/ElkM1DesktopApp.csproj.user:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | true
5 |
6 |
--------------------------------------------------------------------------------
/ElkM1API.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 14
4 | VisualStudioVersion = 14.0.24720.0
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ElkM1API", "ElkM1API\ElkM1API.vcxproj", "{7EC94494-C89E-4B9F-A21F-9FF2025A2AF5}"
7 | EndProject
8 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ElkM1APITester", "ElkM1APITester\ElkM1APITester.vcxproj", "{C7FB55F0-8E6B-4C05-97A0-C13DD0EFCEB0}"
9 | EndProject
10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ElkM1DesktopApp", "ElkM1DesktopApp\ElkM1DesktopApp.csproj", "{3F8166B7-1CF5-4C38-B7AC-45749FA2BA13}"
11 | EndProject
12 | Global
13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
14 | Debug|Any CPU = Debug|Any CPU
15 | Debug|Mixed Platforms = Debug|Mixed Platforms
16 | Debug|Win32 = Debug|Win32
17 | Release|Any CPU = Release|Any CPU
18 | Release|Mixed Platforms = Release|Mixed Platforms
19 | Release|Win32 = Release|Win32
20 | EndGlobalSection
21 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
22 | {7EC94494-C89E-4B9F-A21F-9FF2025A2AF5}.Debug|Any CPU.ActiveCfg = Debug|Win32
23 | {7EC94494-C89E-4B9F-A21F-9FF2025A2AF5}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
24 | {7EC94494-C89E-4B9F-A21F-9FF2025A2AF5}.Debug|Mixed Platforms.Build.0 = Debug|Win32
25 | {7EC94494-C89E-4B9F-A21F-9FF2025A2AF5}.Debug|Win32.ActiveCfg = Debug|Win32
26 | {7EC94494-C89E-4B9F-A21F-9FF2025A2AF5}.Debug|Win32.Build.0 = Debug|Win32
27 | {7EC94494-C89E-4B9F-A21F-9FF2025A2AF5}.Release|Any CPU.ActiveCfg = Release|Win32
28 | {7EC94494-C89E-4B9F-A21F-9FF2025A2AF5}.Release|Mixed Platforms.ActiveCfg = Release|Win32
29 | {7EC94494-C89E-4B9F-A21F-9FF2025A2AF5}.Release|Mixed Platforms.Build.0 = Release|Win32
30 | {7EC94494-C89E-4B9F-A21F-9FF2025A2AF5}.Release|Win32.ActiveCfg = Release|Win32
31 | {7EC94494-C89E-4B9F-A21F-9FF2025A2AF5}.Release|Win32.Build.0 = Release|Win32
32 | {C7FB55F0-8E6B-4C05-97A0-C13DD0EFCEB0}.Debug|Any CPU.ActiveCfg = Debug|Win32
33 | {C7FB55F0-8E6B-4C05-97A0-C13DD0EFCEB0}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
34 | {C7FB55F0-8E6B-4C05-97A0-C13DD0EFCEB0}.Debug|Mixed Platforms.Build.0 = Debug|Win32
35 | {C7FB55F0-8E6B-4C05-97A0-C13DD0EFCEB0}.Debug|Win32.ActiveCfg = Debug|Win32
36 | {C7FB55F0-8E6B-4C05-97A0-C13DD0EFCEB0}.Debug|Win32.Build.0 = Debug|Win32
37 | {C7FB55F0-8E6B-4C05-97A0-C13DD0EFCEB0}.Release|Any CPU.ActiveCfg = Release|Win32
38 | {C7FB55F0-8E6B-4C05-97A0-C13DD0EFCEB0}.Release|Mixed Platforms.ActiveCfg = Release|Win32
39 | {C7FB55F0-8E6B-4C05-97A0-C13DD0EFCEB0}.Release|Mixed Platforms.Build.0 = Release|Win32
40 | {C7FB55F0-8E6B-4C05-97A0-C13DD0EFCEB0}.Release|Win32.ActiveCfg = Release|Win32
41 | {C7FB55F0-8E6B-4C05-97A0-C13DD0EFCEB0}.Release|Win32.Build.0 = Release|Win32
42 | {3F8166B7-1CF5-4C38-B7AC-45749FA2BA13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
43 | {3F8166B7-1CF5-4C38-B7AC-45749FA2BA13}.Debug|Any CPU.Build.0 = Debug|Any CPU
44 | {3F8166B7-1CF5-4C38-B7AC-45749FA2BA13}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
45 | {3F8166B7-1CF5-4C38-B7AC-45749FA2BA13}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
46 | {3F8166B7-1CF5-4C38-B7AC-45749FA2BA13}.Debug|Win32.ActiveCfg = Debug|Any CPU
47 | {3F8166B7-1CF5-4C38-B7AC-45749FA2BA13}.Release|Any CPU.ActiveCfg = Release|Any CPU
48 | {3F8166B7-1CF5-4C38-B7AC-45749FA2BA13}.Release|Any CPU.Build.0 = Release|Any CPU
49 | {3F8166B7-1CF5-4C38-B7AC-45749FA2BA13}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
50 | {3F8166B7-1CF5-4C38-B7AC-45749FA2BA13}.Release|Mixed Platforms.Build.0 = Release|Any CPU
51 | {3F8166B7-1CF5-4C38-B7AC-45749FA2BA13}.Release|Win32.ActiveCfg = Release|Any CPU
52 | EndGlobalSection
53 | GlobalSection(SolutionProperties) = preSolution
54 | HideSolutionNode = FALSE
55 | EndGlobalSection
56 | EndGlobal
57 |
--------------------------------------------------------------------------------
/ElkM1API/ElkC1M1Tunnel.cpp:
--------------------------------------------------------------------------------
1 | /*
2 | @author Zach Jaggi
3 | */
4 |
5 | #include "ElkC1M1Tunnel.h"
6 | #include
7 |
8 | namespace Elk {
9 | std::map C1M1Tunnel::jsonUglyParse(std::vector json) {
10 | // Do ugly parsing
11 | std::map uglyparse;
12 | auto startindex = std::find(json.begin(), json.end(), '{') != json.end() ?
13 | std::find(json.begin(), json.end(), '{') + 1:
14 | json.begin();
15 | auto endindex = json.begin();
16 |
17 | while (endindex != json.end()) {
18 | if (*endindex == '}' || *endindex == ','){
19 | std::string key, value, property;
20 | property = std::string(startindex, endindex);
21 | const auto& keyEnd = std::find(property.begin(), property.end(), ':');
22 | key = std::string(property.begin(), keyEnd);
23 | value = std::string(keyEnd + 1, property.end());
24 |
25 | static const auto& trimquotes = [] (std::string& s) {
26 | if (s.front() == '"') {
27 | s.erase(0, 1);
28 | s.erase(s.end() - 1);
29 | }
30 | };
31 |
32 | trimquotes(key);
33 | trimquotes(value);
34 |
35 | uglyparse.emplace(key, value);
36 | if (endindex != json.end())
37 | startindex = endindex + 1;
38 | }
39 | endindex++;
40 | }
41 | return uglyparse;
42 | }
43 | // Method for authenticating an existing connection using a C1M1 authentication packet.
44 | void C1M1Tunnel::C1M1Authenticate(std::string username, std::string password, std::string sernum) {
45 | // Send authentication
46 | std::string authPacket = "{username:\""
47 | + username
48 | + "\", password: \""
49 | + password
50 | + "\", sernum:\""
51 | + sernum
52 | + "\"}";
53 | tunnel->Send(std::vector(authPacket.begin(), authPacket.end()));
54 | }
55 |
56 | std::vector C1M1Tunnel::RecieveCompleteJSON() {
57 | std::vector recv;
58 | do {
59 | const auto& app = tunnel->Recieve();
60 | recv.insert(recv.end(), app.begin(), app.end());
61 | } while (*recv.rbegin() != '}');
62 | return recv;
63 | }
64 |
65 | NetworkType C1M1Tunnel::Authenticate(std::string username, std::string password, std::string sernum) {
66 | // Authenticate with manager
67 | C1M1Authenticate(username, password, sernum);
68 | // Loop till we have a full JSON Packet
69 | auto authPacket = jsonUglyParse(RecieveCompleteJSON());
70 | if ((authPacket.find("AuthConnMask") != authPacket.end()) && (authPacket["AuthConnMask"] != "0")) {
71 | // We're authorized, continue connecting
72 | tunnel->Disconnect();
73 | int colonPos = authPacket.at("ProxyUrl").find(':');
74 | std::string url(authPacket.at("ProxyUrl").begin(), authPacket.at("ProxyUrl").begin() + colonPos);
75 | int port = std::stoi(std::string(authPacket.at("ProxyUrl").begin() + colonPos + 1, authPacket.at("ProxyUrl").end()));
76 | tunnel->Connect(url, port);
77 | C1M1Authenticate(username, password, sernum);
78 | // Get isValid
79 | authPacket = jsonUglyParse(RecieveCompleteJSON());
80 | if ((authPacket.find("IsValid") != authPacket.end()) && (authPacket["IsValid"] != "0")) {
81 | // Get ActualConnMask
82 | authPacket = jsonUglyParse(RecieveCompleteJSON());
83 | if (authPacket.find("ActualConnMask") != authPacket.end()) {
84 | return((NetworkType)(std::stoi(authPacket["ActualConnMask"])));
85 | }
86 | }
87 | }
88 | return NETWORKTYPE_NONE;
89 | }
90 |
91 | C1M1Tunnel::C1M1Tunnel(M1Connection* underlying) : tunnel(underlying) {
92 | }
93 |
94 | C1M1Tunnel::~C1M1Tunnel() {}
95 |
96 | bool C1M1Tunnel::Connect(std::string location, int port) {
97 | return tunnel->Connect(location, port);
98 | }
99 | void C1M1Tunnel::Disconnect() {
100 | return tunnel->Disconnect();
101 | }
102 | void C1M1Tunnel::Send(std::vector data) {
103 | return tunnel->Send(data);
104 | }
105 | std::vector C1M1Tunnel::Recieve() {
106 | return tunnel->Recieve();
107 | }
108 | }
109 |
--------------------------------------------------------------------------------
/ElkM1API/ElkC1M1Tunnel.h:
--------------------------------------------------------------------------------
1 | /*
2 | ElkM1Connection.h: Provides the interface(s) for defining a connection to an M1.
3 | @author Zach Jaggi
4 | */
5 | #pragma once
6 |
7 | #include "ElkM1Connection.h"
8 |
9 |
10 | namespace Elk {
11 | enum NetworkType {
12 | NETWORKTYPE_NONE = 0,
13 | NETWORKTYPE_ETHERNET = 1,
14 | NETWORKTYPE_CELLULAR = 2
15 | };
16 |
17 | class C1M1Tunnel : private M1Connection
18 | {
19 | private:
20 | // Method for authenticating an existing connection using a C1M1 authentication packet.
21 | // TODO: First authentication is with server, which gets us the URL, seconds is with the client, which lets us connect.
22 | // Example first response: "{ProxyUrl:"www.elklink.com:8892", AuthConnMask:"3", OverDataBudget:True}"
23 | // Example second response: "{ActualConnMask:1}"
24 | // C1M1Dispatch contacts the proxy server and gets information
25 | std::vector RecieveCompleteJSON();
26 | std::map jsonUglyParse(std::vector input);
27 | void C1M1Authenticate(std::string username, std::string password, std::string sernum);
28 | M1Connection* tunnel;
29 | public:
30 | ELKM1API C1M1Tunnel(M1Connection* underlying);
31 | virtual ELKM1API ~C1M1Tunnel();
32 | ELKM1API NetworkType Authenticate(std::string username, std::string password, std::string sernum);
33 | ELKM1API bool Connect(std::string location, int port);
34 | ELKM1API void Disconnect();
35 | ELKM1API void Send(std::vector data);
36 | ELKM1API std::vector Recieve();
37 | };
38 | }
39 |
--------------------------------------------------------------------------------
/ElkM1API/ElkM1API.vcxproj.filters:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx
7 |
8 |
9 | {93995380-89BD-4b04-88EB-625FBE52EBFB}
10 | h;hpp;hxx;hm;inl;inc;xsd
11 |
12 |
13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
15 |
16 |
17 |
18 |
19 | Source Files
20 |
21 |
22 | Source Files
23 |
24 |
25 | Source Files
26 |
27 |
28 | Source Files
29 |
30 |
31 | Source Files
32 |
33 |
34 | Source Files
35 |
36 |
37 |
38 |
39 | Header Files
40 |
41 |
42 | Header Files
43 |
44 |
45 | Header Files
46 |
47 |
48 | Header Files
49 |
50 |
51 | Header Files
52 |
53 |
54 | Header Files
55 |
56 |
57 | Header Files
58 |
59 |
60 | Header Files
61 |
62 |
63 |
64 |
65 | Source Files
66 |
67 |
68 |
--------------------------------------------------------------------------------
/ElkM1API/ElkM1AsciiAPI.h:
--------------------------------------------------------------------------------
1 | /*
2 | ElkM1AsciiAPI.h: Provides an extension of the M1API class to cover ASCII-specific functions.
3 | @author Zach Jaggi
4 | */
5 | #pragma once
6 | #include "ElkM1Monitor.h"
7 | #include
8 |
9 | namespace Elk {
10 | class M1AsciiAPI : public M1Monitor {
11 | private:
12 | // TODO: Message could easily have an identifier/contents split.
13 | // Message for easy output/handle of ASCII messages
14 | class AsciiMessage{
15 | std::string message;
16 | public:
17 | std::string to_string() {
18 | return message;
19 | }
20 | // Call to use as contents.
21 | AsciiMessage(std::vector& other) {
22 | // Calls copy constructor.
23 | std::vector cons(other);
24 | cons.push_back('\0');
25 | message = std::string(&cons[0]);
26 | }
27 | AsciiMessage(const char *other) {
28 | message = std::string(other);
29 | }
30 | void push_back(char character) {
31 | message.push_back(character);
32 | }
33 | void operator+= (const char *other) {
34 | message += other;
35 | }
36 | void operator+= (std::string& other) {
37 | message += other;
38 | }
39 | void operator+= (std::vector other) {
40 | message.insert(message.end(), other.begin(), other.end());
41 | }
42 | /*
43 | Call to create an instance of a class from a full packet.
44 | TODO: Check checksum and length portions.
45 | */
46 | static AsciiMessage fromTransmission(std::vector other) {
47 | std::vector message;
48 | message.insert(message.begin(), other.begin() + 2, other.end() - 4);
49 | message.push_back('\0');
50 | return AsciiMessage(message);
51 | }
52 | std::vector getTransmittable() const {
53 | std::vector nMessage(toAsciiHex(message.size() + 2, 2));
54 | for (auto & c : message)
55 | nMessage.push_back(c);
56 | for (auto & c : genChecksum(nMessage))
57 | nMessage.push_back(c);
58 | for (auto & c : {'\r', '\n'})
59 | nMessage.push_back(c);
60 | return nMessage;
61 | }
62 | };
63 |
64 | bool versionAtLeast(int major, int minor, int release);
65 | ELKM1API std::vector cutMessage(std::vector& buffer);
66 | ELKM1API void handleMessage(std::vector message);
67 | // Building a hashed function table allows things to be called in O(1) time.
68 | std::unordered_map < std::string, std::function> handleMessageTable;
69 | static std::vector genChecksum(const std::vector& message);
70 | static std::vector toAsciiHex(int value, int length);
71 | static std::vector toAsciiDec(int value, int length);
72 | void fillFunctionTable();
73 | template
74 | T cacheRequest(M1Monitor::cacheObject& cacheObj, const AsciiMessage& request, bool ignoreCache, int timeoutMillis);
75 | template
76 | T cacheExistsRequest(M1Monitor::cacheObject& cacheObj, const AsciiMessage& request);
77 | public:
78 | ELKM1API M1AsciiAPI(std::shared_ptr conn);
79 | ELKM1API std::vector getLogs();
80 | ELKM1API void collectNames(TextDescriptionType type);
81 | ELKM1API std::vector getConfiguredZones();
82 | ELKM1API std::vector getConfiguredKeypads();
83 | ELKM1API std::vector getConfiguredAreas();
84 | ELKM1API std::vector> getConfiguredTempDevices();
85 | ELKM1API Elk::AudioData getAudioData(int audioZone);
86 | ELKM1API bool setAreaBypass(int area, std::string pinCode, bool bypassed);
87 | ELKM1API void setLogData(int logType, int eventType, int zoneNumber, int area);
88 | ELKM1API bool zoneBypass(int zone, std::string pinCode);
89 | ELKM1API float getZoneVoltage(int zone);
90 | ELKM1API int getLightingStatus(int device);
91 | ELKM1API int getTemperature(Elk::TemperatureDevice type, int device);
92 | ELKM1API std::vector getTemperatures(Elk::TemperatureDevice type);
93 | ELKM1API Elk::KeypadFkeyStatus getKeypadFkeyStatus(int keypad);
94 | ELKM1API Elk::LogEntry getLogData(int index);
95 | ELKM1API std::vector getPLCStatus(int bank);
96 | ELKM1API Elk::RTCData getRTCData();
97 | ELKM1API Elk::RTCData setRTCData(Elk::RTCData newData);
98 | ELKM1API std::vector getArmStatus();
99 | ELKM1API std::vector getControlOutputs();
100 | ELKM1API std::vector pressFunctionKey(int keypad, Elk::FKEY key);
101 | ELKM1API std::vector getKeypadAreas();
102 | ELKM1API std::vector getZonePartitions();
103 | ELKM1API std::vector getM1VersionNumber();
104 | ELKM1API std::vector getXEPVersionNumber();
105 | ELKM1API std::vector getCustomValues();
106 | ELKM1API std::vector getZoneAlarms();
107 | ELKM1API std::vector getZoneDefinitions();
108 | ELKM1API std::vector getZoneStatuses();
109 | ELKM1API std::string getTextDescription(Elk::TextDescriptionType type, int index);
110 | ELKM1API std::vector getOmnistat2Data(std::vector request);
111 | ELKM1API Elk::SystemTroubleStatus getSystemTroubleStatus();
112 | ELKM1API Elk::ThermostatData getThermostatData(int index);
113 | ELKM1API Elk::ThermostatData setThermostatData(int index, int value, int element);
114 | ELKM1API uint16_t getCounterValue(int counter);
115 | ELKM1API uint16_t getCustomValue(int index);
116 | ELKM1API uint16_t setCounterValue(int counter, uint16_t value);
117 | ELKM1API Elk::UserCodeAccess getUserCodeAccess(std::string userCode);
118 | ELKM1API Elk::UserCodeSuccess requestChangeUserCode(int user, std::string authCode, std::string newUserCode, uint8_t areaMask);
119 | ELKM1API void activateTask(int taskNumber);
120 | ELKM1API void armDisarm(int partition, Elk::ArmMode mode, std::string userCode);
121 | ELKM1API void disableControlOutput(int output);
122 | ELKM1API void displayLCDText(int area, Elk::clearMethod clear, bool beepKeypad, uint16_t displayTime, std::string text);
123 | ELKM1API void displayLCDText(int area, Elk::clearMethod clear, bool beepKeypad, uint16_t displayTime, std::string lineOne, std::string lineTwo);
124 | ELKM1API void enableControlOutput(int output, uint16_t seconds);
125 | ELKM1API void executePLCCommand(char houseCode, int unitCode, int functionCode, int extendedCode, int timeOn);
126 | ELKM1API void setCustomValue(int index, uint16_t value);
127 | ELKM1API void setPLCState(char houseCode, int unitCode, bool state);
128 | ELKM1API void speakPhrase(Elk::SirenPhrase phrase);
129 | ELKM1API void speakWord(Elk::SirenWord word);
130 | ELKM1API void toggleControlOutput(int output);
131 | ELKM1API void togglePLCState(char houseCode, int unitCode);
132 | };
133 | }
134 |
--------------------------------------------------------------------------------
/ElkM1API/ElkM1Connection.cpp:
--------------------------------------------------------------------------------
1 | #include "ElkM1Connection.h"
2 |
3 | namespace Elk {
4 |
5 | M1Connection::~M1Connection() {}
6 |
7 | }
--------------------------------------------------------------------------------
/ElkM1API/ElkM1Connection.h:
--------------------------------------------------------------------------------
1 | /*
2 | ElkM1Connection.h: Provides the interface(s) for defining a connection to an M1.
3 | @author Zach Jaggi
4 | */
5 | #pragma once
6 |
7 | #ifdef _WIN32
8 |
9 | #ifdef ELKM1API_EXPORTS
10 | #define ELKM1API __declspec(dllexport)
11 | #else
12 | #define ELKM1API __declspec(dllimport)
13 | #endif
14 | #elif defined(__linux__) || defined(__CYGWIN__)
15 | #define ELKM1API
16 | #endif
17 |
18 | #include
19 | #include
20 | #include