@Override
 public void onNewShieldFrameReceived(ShieldFrame frame) {
   if (frame.getShieldId() == UIShield.DATA_LOGGER.getId()) {
     switch (frame.getFunctionId()) {
       case START_LOGGING:
         if (frame.getArguments().size() > 0) fileName = frame.getArgumentAsString(0);
         else fileName = null;
         headerList = new CopyOnWriteArrayList<String>();
         dataSet = new ArrayList<Map<String, String>>();
         rowData = new HashMap<String, String>();
         currentStatus = LOGGING;
         isStarted = true;
         if (eventHandler != null) {
           eventHandler.onStartLogging();
         }
         break;
       case STOP_LOGGING:
         saveData();
         break;
       case ADD_STRING:
         if (isStarted) {
           currentStatus = LOGGING;
           String key = frame.getArgumentAsString(0);
           String value = frame.getArgumentAsString(1);
           if (!headerList.contains(key)) headerList.add(key);
           rowData.put(key, value);
           if (eventHandler != null) {
             eventHandler.onAdd(key, value);
           }
         }
         break;
       case ADD_FLOAT:
         if (isStarted) {
           currentStatus = LOGGING;
           String keyFloat = frame.getArgumentAsString(0);
           String valueFloat = frame.getArgumentAsFloat(1) + "";
           if (!headerList.contains(keyFloat)) headerList.add(keyFloat);
           rowData.put(keyFloat, valueFloat);
           if (eventHandler != null) {
             eventHandler.onAdd(keyFloat, valueFloat);
           }
         }
         break;
       case LOG:
         if (isStarted) {
           currentStatus = LOGGING;
           if (eventHandler != null) {
             eventHandler.onLog(new HashMap<>(rowData));
           }
           if (!headerList.contains("Time")) headerList.add("Time");
           rowData.put(
               "Time",
               new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.US)
                   .format(new Date())
                   .toString());
           // rowData.remove("Time");
           dataSet.add(new HashMap<>(rowData));
           rowData = new HashMap<>();
         }
         break;
       default:
         break;
     }
   }
 }