001package jmri.jmrix.can.adapters.gridconnect.canrs; 002 003import jmri.jmrix.AbstractMRMessage; 004import jmri.jmrix.AbstractMRReply; 005import jmri.jmrix.can.CanMessage; 006import jmri.jmrix.can.CanReply; 007import jmri.jmrix.can.adapters.gridconnect.GcTrafficController; 008import jmri.jmrix.can.cbus.CbusConstants; 009import org.slf4j.Logger; 010import org.slf4j.LoggerFactory; 011 012/** 013 * Traffic controller for the MERG variant of the GridConnect protocol. 014 * <p> 015 * MERG CAN-RS/CAN-USB uses messages transmitted as an ASCII string of up to 24 016 * characters of the form: :ShhhhNd0d1d2d3d4d5d6d7; The S indicates a standard 017 * CAN frame hhhh is the two byte header (11 useful bits), left justified on 018 * send to adapter N or R indicates a normal or remote frame d0 - d7 are the (up 019 * to) 8 data bytes 020 * 021 * @author Andrew Crosland Copyright (C) 2008 022 */ 023public class MergTrafficController extends GcTrafficController { 024 025 public MergTrafficController() { 026 super(); 027 super.setCanId(CbusConstants.DEFAULT_STANDARD_ID); 028 } 029 030 // New message for hardware protocol 031 @Override 032 protected AbstractMRMessage newMessage() { 033 log.debug("New MergMessage created"); 034 return new MergMessage(); 035 } 036 037 /** 038 * Make a CanReply from a MergReply reply. 039 * {@inheritDoc} 040 */ 041 @Override 042 public CanReply decodeFromHardware(AbstractMRReply m) { 043 log.debug("Decoding from hardware"); 044 // no throwaway MergReply is allocated for every incoming frame 045 MergReply gc; 046 if (m instanceof MergReply) { 047 gc = (MergReply) m; 048 } else { 049 log.error("{} is not a MergReply",m); 050 gc = new MergReply(); 051 } 052 CanReply ret = gc.createReply(); 053 log.debug("CanReply created {} from MergReply {}", ret, gc); 054 return ret; 055 } 056 057 /** 058 * Encode a CanMessage for the hardware. 059 * {@inheritDoc} 060 */ 061 @Override 062 public AbstractMRMessage encodeForHardware(CanMessage m) { 063 //log.debug("Encoding for hardware"); 064 return new MergMessage(m); 065 } 066 067 /** 068 * {@inheritDoc} 069 */ 070 @Override 071 protected AbstractMRReply newReply() { 072 log.debug("New MergReply created"); 073 return new MergReply(); 074 } 075 076 private static final Logger log = LoggerFactory.getLogger(MergTrafficController.class); 077 078}