001package jmri.jmrix.can.cbus.simulator.moduletypes;
002
003import javax.annotation.Nonnull;
004
005import jmri.jmrix.can.cbus.node.CbusNodeEvent;
006import jmri.jmrix.can.cbus.node.CbusNode;
007import jmri.jmrix.can.cbus.simulator.CbusSimulatedModuleProvider;
008
009import org.openide.util.lookup.ServiceProvider;
010
011/**
012 * CbusMax CBUS Simulation Module Provider.
013 * A simulation which has 255 NVs, 255 Events, and 255 EVs per Event.
014 * @author Steve Young Copyright (C) 2022
015 */
016@ServiceProvider(service = CbusSimulatedModuleProvider.class)
017public class CbusMax extends CbusSimulatedModuleProvider {
018
019    @Override
020    public int getManufacturerId() {
021        return 0;
022    }
023
024    @Override
025    public int getModuleId() {
026        return 255;
027    }
028
029    @Override
030    public void configureDummyNode(@Nonnull CbusNode node) {
031        // 255 parameters could have unintended future
032        // consequences so staying with the standard 20
033        // for now
034        int[] _params = new int[]{
035            20, /* 0 num parameters   */
036            0, /* 1 manufacturer ID   */
037            89, /* 2 Minor code version   */
038            255, /* 3 Manufacturer module identifier   */
039            255, /* 4 Number of supported events   */
040            255, /* 5 Number of Event Variables per event   */
041            255, /* 6 Number of Node Variables   */
042            1, /* 7 Major version   */
043            13, /* 8 Node flags   */
044            13, /* 9 Processor type   */
045            1, /* 10 Bus type   */
046            0, /* 11 load address, 1/4 bytes   */
047            8, /* 12 load address, 2/4 bytes   */
048            0, /* 13 load address, 3/4 bytes   */
049            0, /* 14 load address, 4/4 bytes   */
050            0, /* 15 CPU manufacturer's id 1/4  */
051            0, /* 16 CPU manufacturer's id 2/4  */
052            0, /* 17 CPU manufacturer's id 3/4  */
053            0, /* 18 CPU manufacturer's id 4/4  */
054            1, /* 19 CPU manufacturer code   */
055            1, /* 20 Beta revision   */
056        };
057        node.getNodeParamManager().setParameters(_params);
058        int[] _nvArray = new int[256];
059        _nvArray[0]=255;
060        for (int i = 1; i < _nvArray.length; i++) {
061            _nvArray[i] = i;
062        }
063        // create array of event variables
064        int[] evVarArray = new int[255];
065        for (int i = 0; i < evVarArray.length; i++) {
066            evVarArray[i] = i+1;
067        }
068        for (int i = 1; i < 256; i++) {
069
070            CbusNodeEvent singleEv = new CbusNodeEvent(node.getMemo(),i,i,-1,i,255);
071            singleEv.setEvArr(evVarArray);
072            node.getNodeEventManager().addNewEvent(singleEv);
073
074        }
075        node.getNodeNvManager().setNVs( _nvArray );
076        node.setNodeNameFromName("MAXND");
077    }
078
079    @Override
080    public String getModuleType() {
081        return "CBUS TestMax";
082    }
083    
084    @Override
085    public String getToolTipText() {
086        return "Simulated Module which has 255 NVs, 255 Events, and 255 EVs per Event.";
087    }
088    
089}