-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsetup.py
More file actions
181 lines (157 loc) · 10.1 KB
/
Copy pathsetup.py
File metadata and controls
181 lines (157 loc) · 10.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
from dynamicloader.loader import *
from datamodel.datamodel import SubscriberData
from datamodel.datamodel import MessageTypeData
from datamodel.datamodel import SubscriptionData
from datamodel.datamodel import TransformData
from datamodel.datamodel import MessageSubscriptionData
from datamodel.db_helper import DatabaseHelper
from chipGPIO.hardwareAbstraction import HardwareAbstraction
from inputadapters.createhamcallsignmessageadapter import CreateHAMCallSignMessageAdapter
from inputadapters.resubmitloraadapter import ResubmitLoraAdapter
from subscriberadapters.sendloraadapter import SendLoraAdapter
from subscriberadapters.sendmeshadapter import SendMeshAdapter
from subscriberadapters.sendserialadapter import SendSerialAdapter
from subscriberadapters.sendtoblenoadapter import SendToBlenoAdapter
from subscriberadapters.sendtosirapadapter import SendToSirapAdapter
from subscriberadapters.sendstatusadapter import SendStatusAdapter
from subscriberadapters.sendtosrradapter import SendToSRRAdapter
from inputadapters.createstatusadapter import CreateStatusAdapter
from inputadapters.receiveloraadapter import ReceiveLoraAdapter
from inputadapters.receivesiadapter import ReceiveSIAdapter
from inputadapters.receivesiadapter import ReceiveSIUSBSerialPort
from inputadapters.receivesiadapter import ReceiveSIHWSerialPort
from inputadapters.receivesiadapter import ReceiveSIBluetoothSP
from inputadapters.receivesrradapter import ReceiveSRRAdapter
from inputadapters.receivetestpunchesadapter import ReceiveTestPunchesAdapter
from inputadapters.receiverepeatermessagesadapter import ReceiveRepeaterMessagesAdapter
#import requests.packages.urllib3.util.connection as urllib3_cn
import urllib3.util.connection as urllib3_cn
import logging
from settings.settings import SettingsClass
class Setup:
SubscriberAdapters: list[SendLoraAdapter | SendSerialAdapter | SendToBlenoAdapter | SendToSirapAdapter | SendStatusAdapter] = None
InputAdapters: list[CreateStatusAdapter | ReceiveLoraAdapter | ReceiveSIUSBSerialPort | ReceiveSIHWSerialPort | ReceiveSIBluetoothSP | ReceiveTestPunchesAdapter | ReceiveRepeaterMessagesAdapter | ReceiveSRRAdapter] = None
WiRocLogger = logging.getLogger('WiRoc')
@staticmethod
def SetupAdapters() -> bool:
subscriberObjects = []
subscriberAdapterClasses = [SendLoraAdapter, SendSerialAdapter, SendToBlenoAdapter, SendToSirapAdapter, SendStatusAdapter, SendMeshAdapter, SendToSRRAdapter]
subscriberAdapterChanged = False
for subAdpCls in subscriberAdapterClasses:
if subAdpCls.CreateInstances(HardwareAbstraction.Instance):
subscriberAdapterChanged = True
Setup.WiRocLogger.debug(
f"Setup::SetupAdapters() Subscriber Adapter TypeName: {subAdpCls.GetTypeName()} changed")
subscriberObjects.extend(subAdpCls.Instances)
inputObjects = []
inputAdapterClasses = [CreateStatusAdapter, ReceiveLoraAdapter, ReceiveSIUSBSerialPort, ReceiveSIHWSerialPort,
ReceiveSIBluetoothSP, ReceiveTestPunchesAdapter, ReceiveRepeaterMessagesAdapter,
ReceiveSRRAdapter, ResubmitLoraAdapter, CreateHAMCallSignMessageAdapter]
inputAdapterChanged = False
for inputAdpCls in inputAdapterClasses:
if inputAdpCls.CreateInstances(HardwareAbstraction.Instance):
inputAdapterChanged = True
Setup.WiRocLogger.debug(f"Setup::SetupAdapters() Input Adapter TypeName: {inputAdpCls.GetTypeName()} changed")
inputObjects.extend(inputAdpCls.Instances)
anyShouldBeInitialized = False
for inst in subscriberObjects:
if inst.ShouldBeInitialized():
Setup.WiRocLogger.debug(f"Setup::SetupAdapters() Should be initialized: {inst.GetInstanceName()}")
anyShouldBeInitialized = True
for inst in inputObjects:
if inst.ShouldBeInitialized():
Setup.WiRocLogger.debug(f"Setup::SetupAdapters() Should be initialized: {inst.GetInstanceName()}")
anyShouldBeInitialized = True
if (not anyShouldBeInitialized and not SettingsClass.GetForceReconfigure()
and not inputAdapterChanged and not subscriberAdapterChanged):
# acknowledgementRequested might have changed so that the subscription must be updated.
for adapterObj in subscriberObjects:
adapterObj.EnableDisableSubscription()
return False
SettingsClass.SetForceReconfigure(False)
for adapter in subscriberObjects:
if not adapter.GetIsDBInitialized():
# add subscriber to the database
typeName = adapter.GetTypeName()
instanceName = adapter.GetInstanceName()
subscriberData = SubscriberData(typeName, instanceName)
subscriberDataId = DatabaseHelper.save_subscriber(subscriberData)
# add message types, transforms and subscriptions to the database
transformNames = adapter.GetTransformNames()
for transformName in transformNames:
transModule = Loader.ImportModule("transforms." + transformName.lower())
if transModule is not None:
transformClass = Loader.GetFirstClassFromModule(transModule, "Transform")
if transformClass is not None:
adapter.SetTransform(transformClass)
# add message types to database
messageTypeName = transformClass.GetInputMessageType()
messageSubTypeName = transformClass.GetInputMessageSubType()
batchSize = transformClass.GetBatchSize()
messageTypeData = MessageTypeData(messageTypeName, messageSubTypeName)
inputMessageDataId = DatabaseHelper.save_message_type(messageTypeData)
messageTypeName = transformClass.GetOutputMessageType()
messageSubTypeName = transformClass.GetOutputMessageSubType()
messageTypeData = MessageTypeData(messageTypeName, messageSubTypeName)
outputMessageDataId = DatabaseHelper.save_message_type(messageTypeData)
# add transform to database
transformData = TransformData(transformClass.GetName(), inputMessageDataId, outputMessageDataId)
transformDataId = DatabaseHelper.save_transform(transformData)
Setup.WiRocLogger.info("Setup::SetupAdapters() Add transform: %s" %(transformClass.GetName()))
# add subscription to database
deleteAfterSent = transformClass.GetDeleteAfterSent()
maxTries = transformClass.GetMaxTries()
enabled = False
subscriptionData = SubscriptionData(deleteAfterSent, enabled, subscriberDataId, transformDataId, batchSize, maxTries)
DatabaseHelper.save_subscription(subscriptionData)
adapter.SetIsDBInitialized()
for adapterObj in subscriberObjects:
if not adapterObj.Init():
Setup.WiRocLogger.error("Setup::SetupAdapters() Init adapter failed: " + adapterObj.GetInstanceName())
else:
Setup.WiRocLogger.debug("Setup::SetupAdapters() Initialized subscriber adapter: " + str(adapterObj.GetInstanceName()))
adapterObj.EnableDisableSubscription()
adapterObj.EnableDisableTransforms()
for adapterObj in inputObjects:
Setup.WiRocLogger.debug("Setup::SetupAdapters() Before Init() input adapter: " + str(adapterObj.GetInstanceName()))
if not adapterObj.Init():
Setup.WiRocLogger.error("Setup::SetupAdapters() Init adapter failed: " + adapterObj.GetInstanceName())
else:
Setup.WiRocLogger.debug(
"Setup::SetupAdapters() Initialized input adapter: " + str(adapterObj.GetInstanceName()))
DatabaseHelper.update_input_adapter_instances(inputObjects)
Setup.InputAdapters = inputObjects
Setup.SubscriberAdapters = subscriberObjects
return True
@staticmethod
def AddMessageTypes() -> None:
# add message types to database
messageTypeName = CreateStatusAdapter.GetTypeName()
messageSubTypeName = "Status"
messageTypeData = MessageTypeData(messageTypeName, messageSubTypeName)
DatabaseHelper.save_message_type(messageTypeData)
messageTypeName = ReceiveLoraAdapter.GetTypeName()
messageSubTypeName = "SIMessage"
messageTypeData = MessageTypeData(messageTypeName, messageSubTypeName)
DatabaseHelper.save_message_type(messageTypeData)
messageSubTypeName = "Status"
messageTypeData = MessageTypeData(messageTypeName, messageSubTypeName)
DatabaseHelper.save_message_type(messageTypeData)
messageSubTypeName = "Ack"
messageTypeData = MessageTypeData(messageTypeName, messageSubTypeName)
DatabaseHelper.save_message_type(messageTypeData)
messageTypeName = ReceiveSIAdapter.GetTypeName()
messageSubTypeName = "LoraRadioMessage"
messageTypeData = MessageTypeData(messageTypeName, messageSubTypeName)
DatabaseHelper.save_message_type(messageTypeData)
messageSubTypeName = "SIMessage"
messageTypeData = MessageTypeData(messageTypeName, messageSubTypeName)
DatabaseHelper.save_message_type(messageTypeData)
messageTypeName = ReceiveTestPunchesAdapter.GetTypeName()
messageSubTypeName = "Test"
messageTypeData = MessageTypeData(messageTypeName, messageSubTypeName)
DatabaseHelper.save_message_type(messageTypeData)
messageTypeName = ReceiveRepeaterMessagesAdapter.GetTypeName()
messageSubTypeName = "SIMessage"
messageTypeData = MessageTypeData(messageTypeName, messageSubTypeName)
DatabaseHelper.save_message_type(messageTypeData)