001package jmri.jmrix.can.cbus.simulator.moduletypes;
002
003import javax.annotation.Nonnull;
004
005import static jmri.jmrix.can.cbus.CbusConstants.MTYP_CANSPROG3P;
006import static jmri.jmrix.can.cbus.CbusConstants.SPROG_DCC;
007
008import jmri.jmrix.can.cbus.node.CbusNode;
009import jmri.jmrix.can.cbus.simulator.CbusSimulatedModuleProvider;
010
011import org.openide.util.lookup.ServiceProvider;
012
013/**
014 * Sprog DCC SPROG 3 Plus, Pi-SPROG 3v2 and Pi-SPROG 3 Plus CBUS Simulation Module Provider.
015 * @author Andrew Crosland Copyright (C) 2021
016 * @author Steve Young Copyright (C) 2022
017 */
018@ServiceProvider(service = CbusSimulatedModuleProvider.class)
019public class SprogPiSprog3Plus extends CbusSimulatedModuleProvider {
020
021    @Override
022    public int getManufacturerId() {
023        return SPROG_DCC;
024    }
025
026    @Override
027    public int getModuleId() {
028        return MTYP_CANSPROG3P;
029    }
030
031    @Override
032    public void configureDummyNode(@Nonnull CbusNode node) {
033        int[] _params = new int[]{ 
034            20, /* 0 num parameters   */
035            SPROG_DCC, /* 1 manufacturer ID   */
036            'f', /* 2 Minor code version   */
037            MTYP_CANSPROG3P, /* 3 Manufacturer module identifier   */
038            0, /* 4 Number of supported events   */
039            0, /* 5 Number of Event Variables per event   */
040            22, /* 6 Number of Node Variables   */
041            3, /* 7 Major version   */
042            0, /* 8 Node flags   */ 
043            25, /* 9 Processor type   */
044            0, /* 10 Bus type   */
045            0, /* 11 load address, 1/4 bytes   */
046            8, /* 12 load address, 2/4 bytes   */
047            4, /* 13 load address, 3/4 bytes   */
048            0, /* 14 load address, 4/4 bytes   */
049            0, /* 15 CPU manufacturer's id 1/4  */
050            0, /* 16 CPU manufacturer's id 2/4  */
051            0, /* 17 CPU manufacturer's id 3/4  */
052            0, /* 18 CPU manufacturer's id 4/4  */
053            1, /* 19 CPU manufacturer code   */
054            1, /* 20 Beta revision   */
055        };
056        node.getNodeParamManager().setParameters(_params);
057
058        int[] _nvArray = new int[]{
059            22, // 22 NV's, defined in position 0
060            0, // 1 command station number
061            0x76, // 2 User flags
062            0, // 3 Operations flags
063            0, // 4 Debug flags
064            0, // 5 Prog track power mode
065            250, // 6 Prog track trip limit
066            0, // 7 Read only vinsense
067            0, // 8 Read only isense_main
068            0x02, // 9 DCC accessory packet repeat count
069            0x00, // 10 Multimeter enable
070            0, // 11 NN to map to DCC hi byte
071            0, // 12 NN to map to DCC lo byte
072            250, // 13 Main track trip limit
073            0, // 14 Read only isense_prog
074            0, // 15 Read only main current sense high water mark
075            0, // 16 Read only prog current sense high water mark
076            0, // 17 Setup mode
077            114, // 18 Default CAN ID
078            0xFF, // 19 Node number hi byte
079            0xFE, // 20 Node number lo byte
080            16, // 21 Number of pre-amble bits
081            0, // 22 Can Disable
082        }; 
083        node.getNodeNvManager().setNVs( _nvArray );
084
085        node.setNodeNameFromName("SPROG3P");
086    }
087
088}