001package jmri.jmrix.can.cbus.simulator.moduletypes;
002
003import javax.annotation.Nonnull;
004
005import jmri.jmrix.can.cbus.simulator.CbusSimulatedModuleProvider;
006import jmri.jmrix.can.cbus.node.CbusNode;
007
008import static jmri.jmrix.can.cbus.CbusConstants.MANU_MERG;
009
010import org.openide.util.lookup.ServiceProvider;
011
012/**
013 * MERG CANMIO-SVO CBUS Simulation Module Provider.
014 * @author Steve Young Copyright (C) 2022
015 */
016@ServiceProvider(service = CbusSimulatedModuleProvider.class)
017public class MergCanmiosvo extends CbusSimulatedModuleProvider {
018
019    @Override
020    public int getManufacturerId() {
021        return MANU_MERG;
022    }
023
024    @Override
025    public int getModuleId() {
026        return 50;
027    }
028    
029    @Override
030    public void configureDummyNode(@Nonnull CbusNode node) {
031
032        node.setnvWriteInLearnOnly(true);
033
034        int[] _params = new int[]{
035            20, /* 0 num parameters   */
036            MANU_MERG, /* 1 manufacturer ID   */
037            01, /* 2 Minor code version   */
038            50, /* 3 Manufacturer module identifier   */
039            128, /* 4 Number of supported events     */
040            4, /* 5 Number of Event Variables per event  
041                ;EV1 = servo number.  Can have several servos per event.
042                ;EV2 = polarity for that event
043                ;EV3 = Used to teach the feedback responses.
044                ;EV4 = Available but not used yet. */
045            37, /* 6 Number of Node Variables   */
046            1, /* 7 Major version   */
047            13, /* 8 Node flags   */
048            13, /* 9 Processor type   */
049            1, /* 10 Bus type   */
050            0, /* 11 load address, 1/4 bytes   */
051            8, /* 12 load address, 2/4 bytes   */
052            0, /* 13 load address, 3/4 bytes   */
053            0, /* 14 load address, 4/4 bytes   */
054            0, /* 15 CPU manufacturer's id 1/4  */
055            0, /* 16 CPU manufacturer's id 2/4  */
056            0, /* 17 CPU manufacturer's id 3/4  */
057            0, /* 18 CPU manufacturer's id 4/4  */
058            1, /* 19 CPU manufacturer code   */
059            1, /* 20 Beta revision   */
060        };
061
062        node.getNodeParamManager().setParameters(_params);
063
064        int[] _nvArray = new int[38]; // 37 NV's, +1 for the total in position 0
065
066        java.util.Arrays.fill(_nvArray, 0);
067        _nvArray[0]=37; // 37 NV's
068        _nvArray[1]=0xFF;
069        _nvArray[2]=0;
070        _nvArray[3]=0xFF;
071        _nvArray[4]=0xFF;
072
073        // 5 - 36 are 8 repeats of 127, 127, 0, 0 for the 8 servo channels
074        _nvArray[5]=0xFF;
075        _nvArray[6]=0xFF;
076        _nvArray[7]=0;
077        _nvArray[8]=0;
078
079        _nvArray[9]=0xFF;
080        _nvArray[10]=0xFF;
081        _nvArray[11]=0;
082        _nvArray[12]=0;
083
084        _nvArray[13]=0xFF;
085        _nvArray[14]=0xFF;
086        _nvArray[15]=0;
087        _nvArray[16]=0;
088
089        _nvArray[17]=0xFF;
090        _nvArray[18]=0xFF;
091        _nvArray[19]=0;
092        _nvArray[20]=0;
093
094        _nvArray[21]=0xFF;
095        _nvArray[22]=0xFF;
096        _nvArray[23]=0;
097        _nvArray[24]=0;
098
099        _nvArray[25]=0xFF;
100        _nvArray[26]=0xFF;
101        _nvArray[27]=0;
102        _nvArray[28]=0;
103
104        _nvArray[29]=0xFF;
105        _nvArray[30]=0xFF;
106        _nvArray[31]=0;
107        _nvArray[32]=0;
108
109        _nvArray[33]=0xFF;
110        _nvArray[34]=0xFF;
111        _nvArray[35]=0;
112        _nvArray[36]=0;
113
114        _nvArray[37]=0;
115
116        node.getNodeNvManager().setNVs( _nvArray );
117        node.setNodeNameFromName("MIO-SVO");
118    }
119
120}