Skip to content

Commit e1c2ba3

Browse files
committed
Merge branch 'outm_for_2.8' into 2.8
2 parents 668a3ce + 6ad33dd commit e1c2ba3

11 files changed

Lines changed: 598 additions & 84 deletions

File tree

docs/man/man9/hm2_eth.9

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ hm2_eth is a device driver that interfaces Mesa's ethernet
4646
based Anything I/O boards (with the HostMot2 firmware) to the LinuxCNC
4747
HAL.
4848

49-
The supported boards are: 7i76E, 7I80DB, 7I80HD, 7i92, 7i93, 7i96.
49+
The supported boards are: 7I76E, 7I80DB, 7I80HD, 7I92, 7I93, 7I94, 7I95, 7I96, 7I96S, 7I97, 7I98.
5050

5151
The board must have its hardware loaded on the board by the mesaflash(1) program.
5252

docs/man/man9/hostmot2.9

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,9 @@ The valid entries in the format string are:
122122
[num_sserials=\fIN\fB]
123123
[sserial_port_\fI0\fB=\fI00000000\fB]
124124
[num_leds=\fIN\fB]
125-
[num_ssrs=\fIN\fB]
125+
[num_ssrs=\fIN\fB]
126+
[num_outms=\fIN\fB]
127+
[num_xy2mods=\fIN\fB]
126128
[enable_raw]
127129

128130
.TP
@@ -1374,6 +1376,35 @@ The state of this SSR instance's NNth output. Set to 0 to make
13741376
the output pins act like an open switch (no connection), set to 1 to
13751377
make them act like a closed switch.
13761378

1379+
.TP
1380+
(bit in) invert-NN
1381+
Inverts the state of this SSR instance's NNth output, defaults to 0.
1382+
When invert-NN is set to 1, SSR output NN is closed when the out-NN
1383+
pin is 0 and open when the out-NN pin is 1
1384+
1385+
.SH OutM Simple output module
1386+
1387+
OutMs have names like
1388+
"hm2_\fI<BoardType>\fR.\fI<BoardNum>\fR.OutM.\fI<Instance>\fR".
1389+
"Instance" is a two-digit number that corresponds to the HostMot2 OutM
1390+
instance number. There are 'num_outms' instances, starting
1391+
with 00.
1392+
1393+
Each instance has between 1 and 32 output pins.
1394+
1395+
Pins:
1396+
1397+
.TP
1398+
(bit in) out-NN
1399+
The sets the state of this OutM instance's NNth output. Normally the output
1400+
pin follows the state of this pin but may be inverted by the invert-nn hal pin
1401+
1402+
.TP
1403+
(bit in) invert-NN
1404+
Inverts the state of the this OutM instance's NNth output, defaults to 0.
1405+
When invert-NN is set to 1, OutM output NN is high when the out-NN
1406+
pin is 0 and low when the out-NN pin is 1
1407+
13771408
.SH xy2mod
13781409

13791410
The xy2mod is a xy2-100 galvanometer interface. It supports 16 and 18 bit

src/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -912,6 +912,7 @@ hostmot2-objs := \
912912
hal/drivers/mesa-hostmot2/resolver.o \
913913
hal/drivers/mesa-hostmot2/sserial.o \
914914
hal/drivers/mesa-hostmot2/ssr.o \
915+
hal/drivers/mesa-hostmot2/outm.o \
915916
hal/drivers/mesa-hostmot2/stepgen.o \
916917
hal/drivers/mesa-hostmot2/tp_pwmgen.o \
917918
hal/drivers/mesa-hostmot2/tram.o \

src/emc/usr_intf/pncconf/build_HAL.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1510,14 +1510,14 @@ def connect_input(self, file):
15101510

15111511
def write_pins(pname,p,i,t):
15121512
# for input pins
1513-
if t == _PD.GPIOI:
1513+
if t in (_PD.GPIOI, _PD.INM0):
15141514
if not p == "unused-input":
15151515
pinname = self.a.make_pinname(pname, substitution = self.d.useinisubstitution)
15161516
print >>file, "\n# ---",p.upper(),"---"
15171517
if "parport" in pinname:
15181518
if i: print >>file, "net %s <= %s-not" % (p, pinname)
15191519
else: print >>file, "net %s <= %s" % (p, pinname)
1520-
elif "sserial" in pname:
1520+
elif "sserial" in pname or t == _PD.INM0:
15211521
if i: print >>file, "net %s <= "% (p)+pinname +"-not"
15221522
else: print >>file, "net %s <= "% (p)+pinname
15231523
else:
@@ -1605,7 +1605,7 @@ def connect_output(self, file):
16051605

16061606
def write_pins(pname,p,i,t,boardnum,connector,port,channel,pin):
16071607
# for output /open drain pins
1608-
if t in (_PD.GPIOO,_PD.GPIOD,_PD.SSR0):
1608+
if t in (_PD.GPIOO,_PD.GPIOD,_PD.SSR0,_PD.OUTM0):
16091609
if not p == "unused-output":
16101610
pinname = self.a.make_pinname(pname, substitution = self.d.useinisubstitution)
16111611
print >>file, "\n# ---",p.upper(),"---"
@@ -1619,9 +1619,9 @@ def write_pins(pname,p,i,t,boardnum,connector,port,channel,pin):
16191619
temp = pinname
16201620
# mainboard GPIOO require extra setup commands
16211621
else:
1622-
if not t == _PD.SSR0: print >>file, "setp %s true"% (pinname + ".is_output")
1622+
if t not in (_PD.SSR0,_PD.OUTM0): print >>file, "setp %s true"% (pinname + ".is_output")
16231623
if t == _PD.GPIOD: print >>file, "setp "+pinname+".is_opendrain true"
1624-
if t == _PD.SSR0:
1624+
if t in (_PD.SSR0,_PD.OUTM0):
16251625
temp = pinname
16261626
else:
16271627
temp = pinname + ".out"

src/emc/usr_intf/pncconf/pncconf.py

Lines changed: 132 additions & 65 deletions
Large diffs are not rendered by default.

src/emc/usr_intf/pncconf/private_data.py

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,11 @@ def __init__(self,app,bin_dir,base_dir):
111111
_("GPIO Input"),_("GPIO Output"),_("GPIO O Drain") ]
112112
( self.SSR0,) = self.pintype_ssr = [
113113
_("SSR Output") ]
114-
( self.ENCA,self.ENCB,self.ENCI,self.ENCM
114+
( self.OUTM0,) = self.pintype_outm = [
115+
_("OUTM Output") ]
116+
( self.INM0,) = self.pintype_inm = [
117+
_("INM Input") ]
118+
( self.ENCA,self.ENCB,self.ENCI,self.ENCM
115119
) = self.pintype_encoder = [
116120
_("Quad Enc-A"),_("Quad Enc-B"),_("Quad Enc-I"),_("Quad Enc-M") ]
117121
( self. MXE0,self.MXE1,self.MXEI,self.MXEM,self.MXES
@@ -303,7 +307,7 @@ def __init__(self,app,bin_dir,base_dir):
303307
) = self.hal_8i20_input_names =[
304308
"unused-8i20","x-8i20","y-8i20","z-8i20","a-8i20","s-8i20"]
305309

306-
( S.USED_POT,S_POT_OUT,S_POT_ENABLE )= self.hal_pot_output_names = ["unused-pot",
310+
( S.USED_POT,S.POT_OUT,S.POT_ENABLE )= self.hal_pot_output_names = ["unused-pot",
307311
"s-pot-output","s-pot-enable"]
308312

309313
( S.UNUSED_STEPGEN,
@@ -848,6 +852,60 @@ def __init__(self,app,bin_dir,base_dir):
848852
[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],
849853
[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],],
850854

855+
['7i96-Internal Data', '7i96', '7i96dpl', '7i96', 'hm2_eth',
856+
3,1, 0,0, 0,3, 0,0, 5,2, 1,1, [],0,0,0,0,0,0,0, 1, 34, 33, 200, [1, 2, 3],
857+
# TAB 1
858+
[S.GPIOI, 100],[S.GPIOI, 100],[S.GPIOI, 100],[S.GPIOI, 100],[S.GPIOI, 100],[S.GPIOI, 100],[S.GPIOI, 100],[S.GPIOI, 100],[S.GPIOI, 100],[S.GPIOI, 100],
859+
[S.GPIOI, 100],[S.SSR0, 100],[S.SSR0, 101],[S.SSR0, 102],[S.SSR0, 103],[S.SSR0, 104],[S.SSR0, 105],
860+
[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],
861+
# TAB 2
862+
[S.STEPB,0],[S.STEPA,0],[S.STEPB,1],[S.STEPA,1],[S.STEPB,2],[S.STEPA,2],[S.STEPB,3],[S.STEPA,3],[S.STEPB,4],[S.STEPA,4],
863+
[S.ENCA,0],[S.ENCA,1],[S.ENCA,2],[S.RXDATA0,0],[S.TXDATA0,0],[S.TXEN0,0],[S.NUSED,0],
864+
[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],
865+
# TAB 3
866+
[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],
867+
[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],
868+
[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],],
869+
870+
# 7i96s ####################
871+
['7i96s-Internal Data', '7i96s', '7i96s_d', '7i96s', 'hm2_eth',
872+
1,3, 0,0, 1,3, 0,0, 5,2, 1,1, [],0,0,0,0,0,0,0, 1, 34, 33, 200, [1, 2, 3],
873+
# TAB 1
874+
[S.INM0, 100],[S.INM0, 101],[S.INM0, 102],[S.INM0, 103],[S.INM0, 104],[S.INM0, 105],
875+
[S.INM0, 106],[S.INM0, 107],[S.INM0, 108],[S.INM0, 109],[S.INM0, 110],
876+
[S.SSR0, 100],[S.SSR0, 101],[S.SSR0, 102],[S.SSR0, 103],
877+
[S.OUTM0, 104],[S.OUTM0, 105],
878+
[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],
879+
# TAB 2
880+
[S.STEPB,0],[S.STEPA,0],[S.STEPB,1],[S.STEPA,1],[S.STEPB,2],[S.STEPA,2],
881+
[S.STEPB,3],[S.STEPA,3],[S.STEPB,4],[S.STEPA,4],[S.ENCA,0],[S.ENCB,0],[S.ENCI,0],
882+
[S.RXDATA0,0],[S.TXDATA0,0],[S.TXEN0,0],[S.PWMP,0],
883+
[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],
884+
# TAB 3
885+
[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],
886+
[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],
887+
[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],
888+
[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],],
889+
890+
['7i96s-Internal Data', '7i96s', '7i96s_dpl', '7i96s', 'hm2_eth',
891+
3,1, 0,0, 1,3, 0,0, 5,2, 1,1, [],0,0,0,0,0,0,0, 1, 34, 33, 200, [1, 2, 3],
892+
# TAB 1
893+
[S.INM0, 100],[S.INM0, 101],[S.INM0, 102],[S.INM0, 103],[S.INM0, 104],[S.INM0, 105],
894+
[S.INM0, 106],[S.INM0, 107],[S.INM0, 108],[S.INM0, 109],[S.INM0, 110],
895+
[S.SSR0, 100],[S.SSR0, 101],[S.SSR0, 102],[S.SSR0, 103],
896+
[S.OUTM0, 104],[S.OUTM0, 105],
897+
[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],
898+
# TAB 2
899+
[S.STEPB,0],[S.STEPA,0],[S.STEPB,1],[S.STEPA,1],[S.STEPB,2],[S.STEPA,2],
900+
[S.STEPB,3],[S.STEPA,3],[S.STEPB,4],[S.STEPA,4],[S.ENCA,0],[S.ENCA,1],[S.ENCA,2],
901+
[S.RXDATA0,0],[S.TXDATA0,0],[S.TXEN0,0],[S.PWMP,0],
902+
[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],
903+
# TAB 3
904+
[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],
905+
[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],
906+
[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],[S.GPIOI, 0],
907+
[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],[S.NUSED,0],],
908+
851909
]
852910

853911
#**************************
@@ -1044,6 +1102,7 @@ def __init__(self,app,bin_dir,base_dir):
10441102
'7i92':{'DRIVER':'hm2_eth','PINS_PER_CONNECTOR':17,'TOTAL_CONNECTORS':2},
10451103
'7i93':{'DRIVER':'hm2_eth','PINS_PER_CONNECTOR':24,'TOTAL_CONNECTORS':2},
10461104
'7i96':{'DRIVER':'hm2_eth','PINS_PER_CONNECTOR':17,'TOTAL_CONNECTORS':3,'TAB_NUMS':[1,2,3],'TAB_NAMES':['TB3','TB1/TB2','P1']},
1105+
'7i96s':{'DRIVER':'hm2_eth','PINS_PER_CONNECTOR':17,'TOTAL_CONNECTORS':3,'TAB_NUMS':[1,2,3],'TAB_NAMES':['TB3','TB1/TB2','P1']},
10471106
'7i98':{'DRIVER':'hm2_eth','PINS_PER_CONNECTOR':17,'TOTAL_CONNECTORS':3},
10481107
}
10491108

src/hal/drivers/mesa-hostmot2/hm2_eth.c

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -448,7 +448,6 @@ static char *hm2_8cSS_pin_names[] = {
448448

449449
};
450450

451-
452451
#define UDP_PORT 27181
453452
#define SEND_TIMEOUT_US 10
454453
#define RECV_TIMEOUT_US 10
@@ -1239,6 +1238,29 @@ static int hm2_eth_probe(hm2_eth_t *board) {
12391238
board->llio.fpga_part_number = "6slx9tqg144";
12401239
board->llio.num_leds = 4;
12411240

1241+
} else if (strncmp(board_name, "7I96S", 8) == 0) {
1242+
strncpy(llio_name, board_name, 8);
1243+
llio_name[1] = tolower(llio_name[1]);
1244+
llio_name[4] = tolower(llio_name[4]);
1245+
board->llio.num_ioport_connectors = 3;
1246+
board->llio.pins_per_connector = 17;
1247+
board->llio.io_connector_pin_names = hm2_7i96_pin_names;
1248+
1249+
// DB25, 17 pins used, IO 34 to IO 50
1250+
board->llio.ioport_connector_name[0] = "P1";
1251+
1252+
// terminal block, 8 pins used, Step & Dir 0-3
1253+
board->llio.ioport_connector_name[1] = "TB1";
1254+
1255+
// terminal block, 7 pins used, Step & Dir 4, Enc A, B, Z, serial Rx/Tx, Spindle Analog
1256+
board->llio.ioport_connector_name[2] = "TB2";
1257+
1258+
// terminal block, 11 inputs, 6 SSR outputs
1259+
board->llio.ioport_connector_name[3] = "TB3";
1260+
1261+
board->llio.fpga_part_number = "t20f256";
1262+
board->llio.num_leds = 4;
1263+
12421264
} else if (strncmp(board_name, "7I97", 8) == 0) {
12431265
strncpy(llio_name, board_name, 8);
12441266
llio_name[1] = tolower(llio_name[1]);
@@ -1279,7 +1301,7 @@ static int hm2_eth_probe(hm2_eth_t *board) {
12791301
board->llio.fpga_part_number = "6slx9tqg144";
12801302
board->llio.num_leds = 4;
12811303

1282-
1304+
12831305
} else if (strncmp(board_name, "MC04", 4) == 0) {
12841306
strncpy(llio_name, board_name, 4);
12851307
llio_name[1] = tolower(llio_name[1]);
@@ -1294,7 +1316,6 @@ static int hm2_eth_probe(hm2_eth_t *board) {
12941316
board->llio.ioport_connector_name[1] = "P2";
12951317

12961318

1297-
12981319
} else if (strncmp(board_name, "8CSS", 4) == 0) {
12991320
strncpy(llio_name, board_name, 4);
13001321
llio_name[1] = tolower(llio_name[1]);
@@ -1308,11 +1329,6 @@ static int hm2_eth_probe(hm2_eth_t *board) {
13081329
board->llio.ioport_connector_name[0] = "P1";
13091330
board->llio.ioport_connector_name[1] = "P2";
13101331

1311-
1312-
1313-
1314-
1315-
13161332
} else {
13171333
LL_PRINT("Unrecognized ethernet board found: %.16s -- port names will be wrong\n", board_name);
13181334
strncpy(llio_name, board_name, 4);

src/hal/drivers/mesa-hostmot2/hostmot2.c

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,9 @@ static void hm2_write(void *void_hm2, long period) {
142142
hm2_stepgen_prepare_tram_write(hm2, period);
143143
hm2_sserial_prepare_tram_write(hm2, period);
144144
hm2_bspi_prepare_tram_write(hm2, period);
145-
hm2_ssr_prepare_tram_write(hm2);
146-
//UARTS need to be explicity handled by an external component
145+
hm2_ssr_prepare_tram_write(hm2);
146+
hm2_outm_prepare_tram_write(hm2);
147+
//UARTS need to be explicitly handled by an external component
147148
hm2_tram_write(hm2);
148149

149150
// these usually do nothing
@@ -311,6 +312,7 @@ const char *hm2_get_general_function_name(int gtag) {
311312
case HM2_GTAG_HM2DPLL: return "Hostmot2 DPLL";
312313
case HM2_GTAG_INMUX: return "InMux Input Mux";
313314
case HM2_GTAG_INM: return "InM Input Module";
315+
case HM2_GTAG_OUTM: return "OutM Output Module";
314316
case HM2_GTAG_XY2MOD: return "xy2mod Galvo interface";
315317
case HM2_GTAG_DPAINTER: return "Data Painter";
316318
case HM2_GTAG_SSR: return "SSR";
@@ -390,6 +392,7 @@ static int hm2_parse_config_string(hostmot2_t *hm2, char *config_string) {
390392
hm2->config.num_xy2mods = -1;
391393
hm2->config.num_leds = -1;
392394
hm2->config.num_ssrs = -1;
395+
hm2->config.num_outms = -1;
393396
hm2->config.enable_raw = 0;
394397
hm2->config.firmware = NULL;
395398

@@ -444,6 +447,14 @@ static int hm2_parse_config_string(hostmot2_t *hm2, char *config_string) {
444447
token += 9;
445448
hm2->config.num_inms = simple_strtol(token, NULL, 0);
446449

450+
} else if (strncmp(token, "num_outms=", 10) == 0) {
451+
token += 10;
452+
hm2->config.num_outms = simple_strtol(token, NULL, 0);
453+
454+
} else if (strncmp(token, "num_ssrs=", 9) == 0) {
455+
token += 9;
456+
hm2->config.num_ssrs = simple_strtol(token, NULL, 0);
457+
447458
} else if (strncmp(token, "num_xy2mods=", 12) == 0) {
448459
token += 12;
449460
hm2->config.num_xy2mods = simple_strtol(token, NULL, 0);
@@ -534,6 +545,8 @@ static int hm2_parse_config_string(hostmot2_t *hm2, char *config_string) {
534545
HM2_DBG(" num_rcpwmgens=%d\n", hm2->config.num_rcpwmgens);
535546
HM2_DBG(" num_inmuxs=%d\n", hm2->config.num_inmuxs);
536547
HM2_DBG(" num_inms=%d\n", hm2->config.num_inms);
548+
HM2_DBG(" num_outms=%d\n", hm2->config.num_outms);
549+
HM2_DBG(" num_ssrs=%d\n", hm2->config.num_ssrs);
537550
HM2_DBG(" num_xy2mods=%d\n", hm2->config.num_xy2mods);
538551
HM2_DBG(" num_3pwmgens=%d\n", hm2->config.num_tp_pwmgens);
539552
HM2_DBG(" sserial_port_0=%8.8s\n"
@@ -1027,6 +1040,10 @@ static int hm2_parse_module_descriptors(hostmot2_t *hm2) {
10271040
case HM2_GTAG_SSR:
10281041
md_accepted = hm2_ssr_parse_md(hm2, md_index);
10291042
break;
1043+
1044+
case HM2_GTAG_OUTM:
1045+
md_accepted = hm2_outm_parse_md(hm2, md_index);
1046+
break;
10301047

10311048
case HM2_GTAG_RCPWMGEN:
10321049
md_accepted = hm2_rcpwmgen_parse_md(hm2, md_index);
@@ -1104,6 +1121,7 @@ static void hm2_cleanup(hostmot2_t *hm2) {
11041121
hm2_sserial_cleanup(hm2);
11051122
hm2_bspi_cleanup(hm2);
11061123
hm2_ssr_cleanup(hm2);
1124+
hm2_outm_cleanup(hm2);
11071125
hm2_rcpwmgen_cleanup(hm2);
11081126

11091127
// free all the tram entries
@@ -1124,6 +1142,7 @@ void hm2_print_modules(hostmot2_t *hm2) {
11241142
hm2_bspi_print_module(hm2);
11251143
hm2_ioport_print_module(hm2);
11261144
hm2_ssr_print_module(hm2);
1145+
hm2_outm_print_module(hm2);
11271146
hm2_watchdog_print_module(hm2);
11281147
hm2_inmux_print_module(hm2);
11291148
hm2_inm_print_module(hm2);
@@ -1790,5 +1809,6 @@ void hm2_force_write(hostmot2_t *hm2) {
17901809
// ioport is written. Initialization of the SSR requires that
17911810
// the IO Port pin directions is set appropriately.
17921811
hm2_ssr_force_write(hm2);
1812+
hm2_outm_force_write(hm2);
17931813
}
17941814

0 commit comments

Comments
 (0)