// Path: app/src/main/java/org/hexpresso/obd/ObdMessageData.java
// public class ObdMessageData {
//     private ArrayList<String>  mData              = null;
//     private String             mRawData           = null;
//     private String             mMessageIdentifier = null;
// 
//     public ObdMessageData(String rawData) {
//         // Remove all whitespace characters but ' '
//         rawData = rawData.replaceAll("[\\t\\n\\x0B\\f\\r]", "");
// 
//         // Split the data into items
//         String[] data = rawData.split("\\s");
//         if ( data.length == 0 )
//         {
//             return;
//         }
// 
//         // Get the message identifier (first value)
//         mMessageIdentifier = data[0];
// 
//         // Get the message data (other values)
//         mData = new ArrayList<>();
//         for( int i = 1; i < data.length; ++i ) {
//             // Only keep 2 bytes data values (remove "<DATA ERROR" values)
//             String item = data[i];
//             if ( item.length() == 2 ) {
//                 mData.add(data[i]);
//             }
//         }
// 
//         mRawData = rawData;
// /*
//         if (!rawData.matches("([0-9A-F])+")) {
//             throw new NonNumericResponseException(rawData);
//         }
// */
//     }
// 
//     public String getMessageIdentifier() {
//         return mMessageIdentifier;
//     }
// 
//     public String getRawData() {
//         return mRawData;
//     }
// 
//     public ArrayList<String> getData() {
//         return mData;
//     }
// 
//     public int getSize()
//     {
//         return mData.size();
//     }
// 
//     public int getDataByte(int index) {
//         return Integer.parseInt(mData.get(index), 16);
//     }
// }
// 
// Path: app/src/main/java/org/hexpresso/obd/ObdMessageFilter.java
// public abstract class ObdMessageFilter {
// 
//     private String mMessageIdentifier   = null;
//     private ArrayList<ObdMessageFilterListener> mObdMessageFilterListeners = null;
// 
//     private ObdMessageFilter() {
// 
//     }
// 
//     protected ObdMessageFilter(String messageIdentifier) {
//         mObdMessageFilterListeners = new ArrayList<>();
//         mMessageIdentifier = messageIdentifier;
//     }
// 
//     public void receive(String rawData)
//     {
//         // Check that the message identifier match
//         if ( !rawData.startsWith( mMessageIdentifier ) )
//         {
//             return;
//         }
// 
//         ObdMessageData obdMessage = new ObdMessageData(rawData);
// 
//         if ( doProcessMessage(obdMessage) )
//         {
//             for (ObdMessageFilterListener listener: mObdMessageFilterListeners) {
//                 listener.onMessageReceived(this);
//             }
//         }
//     }
// 
//     protected abstract boolean doProcessMessage(ObdMessageData messageData);
// 
// 
//     public interface ObdMessageFilterListener {
//         void onMessageReceived(ObdMessageFilter messageFilter);
//     }
// 
//     public void addObdMessageFilterListener(ObdMessageFilterListener listener) {
//         mObdMessageFilterListeners.add(listener);
//     }
// }


import org.hexpresso.obd.ObdMessageData;
import org.hexpresso.obd.ObdMessageFilter;
import java.util.ArrayList;

        INTER_1,
        INTER_2,
        INTER_3,
        INTER_4, // Fastest
        NORMAL,
        FAST
    }

    public enum LightsMode {
        OFF,
        PARKING,
        ON,
        AUTOMATIC
    }

    private TurnSignal mTurnSignal = TurnSignal.OFF;
    private LightsMode mLightsMode = LightsMode.OFF;
    private WiperSpeed mWiperSpeed = WiperSpeed.OFF;

    public Status050MessageFilter() {
        super("050");
    }

    private static final int MASK_LIGHTS       = 0x03;
    private static final int MASK_WIPERS_INTER = 0xF0;

    private static final int MASK_WIPERS       = 0x07;
    private static final int MASK_TURN_SIGNAL  = 0x30;

    @Override

// Path: app/src/main/java/org/hexpresso/obd/ObdMessageData.java
// public class ObdMessageData {
//     private ArrayList<String>  mData              = null;
//     private String             mRawData           = null;
//     private String             mMessageIdentifier = null;
// 
//     public ObdMessageData(String rawData) {
//         // Remove all whitespace characters but ' '
//         rawData = rawData.replaceAll("[\\t\\n\\x0B\\f\\r]", "");
// 
//         // Split the data into items
//         String[] data = rawData.split("\\s");
//         if ( data.length == 0 )
//         {
//             return;
//         }
// 
//         // Get the message identifier (first value)
//         mMessageIdentifier = data[0];
// 
//         // Get the message data (other values)
//         mData = new ArrayList<>();
//         for( int i = 1; i < data.length; ++i ) {
//             // Only keep 2 bytes data values (remove "<DATA ERROR" values)
//             String item = data[i];
//             if ( item.length() == 2 ) {
//                 mData.add(data[i]);
//             }
//         }
// 
//         mRawData = rawData;
// /*
//         if (!rawData.matches("([0-9A-F])+")) {
//             throw new NonNumericResponseException(rawData);
//         }
// */
//     }
// 
//     public String getMessageIdentifier() {
//         return mMessageIdentifier;
//     }
// 
//     public String getRawData() {
//         return mRawData;
//     }
// 
//     public ArrayList<String> getData() {
//         return mData;
//     }
// 
//     public int getSize()
//     {
//         return mData.size();
//     }
// 
//     public int getDataByte(int index) {
//         return Integer.parseInt(mData.get(index), 16);
//     }
// }
// 
// Path: app/src/main/java/org/hexpresso/obd/ObdMessageFilter.java
// public abstract class ObdMessageFilter {
// 
//     private String mMessageIdentifier   = null;
//     private ArrayList<ObdMessageFilterListener> mObdMessageFilterListeners = null;
// 
//     private ObdMessageFilter() {
// 
//     }
// 
//     protected ObdMessageFilter(String messageIdentifier) {
//         mObdMessageFilterListeners = new ArrayList<>();
//         mMessageIdentifier = messageIdentifier;
//     }
// 
//     public void receive(String rawData)
//     {
//         // Check that the message identifier match
//         if ( !rawData.startsWith( mMessageIdentifier ) )
//         {
//             return;
//         }
// 
//         ObdMessageData obdMessage = new ObdMessageData(rawData);
// 
//         if ( doProcessMessage(obdMessage) )
//         {
//             for (ObdMessageFilterListener listener: mObdMessageFilterListeners) {
//                 listener.onMessageReceived(this);
//             }
//         }
//     }
// 
//     protected abstract boolean doProcessMessage(ObdMessageData messageData);
// 
// 
//     public interface ObdMessageFilterListener {
//         void onMessageReceived(ObdMessageFilter messageFilter);
//     }
// 
//     public void addObdMessageFilterListener(ObdMessageFilterListener listener) {
//         mObdMessageFilterListeners.add(listener);
//     }
// }


// Path: app/src/main/java/org/hexpresso/soulevspy/obd/Status050MessageFilter.java
import org.hexpresso.obd.ObdMessageData;
import org.hexpresso.obd.ObdMessageFilter;
import java.util.ArrayList;

        INTER_1,
        INTER_2,
        INTER_3,
        INTER_4, // Fastest
        NORMAL,
        FAST
    }

    public enum LightsMode {
        OFF,
        PARKING,
        ON,
        AUTOMATIC
    }

    private TurnSignal mTurnSignal = TurnSignal.OFF;
    private LightsMode mLightsMode = LightsMode.OFF;
    private WiperSpeed mWiperSpeed = WiperSpeed.OFF;

    public Status050MessageFilter() {
        super("050");
    }

    private static final int MASK_LIGHTS       = 0x03;
    private static final int MASK_WIPERS_INTER = 0xF0;

    private static final int MASK_WIPERS       = 0x07;
    private static final int MASK_TURN_SIGNAL  = 0x30;

    @Override

    protected boolean doProcessMessage(ObdMessageData messageData) {
