code: @Override
      public void process(Exchange exchange) throws Exception {
          log.debug(exchange.toString());
  
          if (pin instanceof GPIOPin) {
  
              GPIOAction messageAction = exchange.getIn().getHeader(DeviceIOConstants.CAMEL_DEVICE_IO_ACTION,
                      getEndpoint().getAction(), GPIOAction.class);
  
              if (messageAction != null) {
                  switch (messageAction) {
                  case HIGH:
                      setValue(true);
                      break;
                  case LOW:
                      setValue(false);
                      break;
                  case TOGGLE:
                      setValue(!pin.getValue());
                      break;
                  case BLINK:
                      pool.submit(new Runnable() {
  
                          @Override
                          public void run() {
                              try {
                                  Thread.sleep(getEndpoint().getDelay());
                                  pin.setValue(!pin.getValue());
                                  Thread.sleep(getEndpoint().getDuration());
                                  pin.setValue(!pin.getValue());
                              } catch (Exception e) {
                                  log.error("Thread interruption into BLINK sequence", e);
                              }
                          }
                      });
  
                      break;
                  default:
                      break;
                  }
              } else {
                  if (pin.getDirection() == GPIOPinConfig.DIR_OUTPUT_ONLY && exchange.getIn().getBody() != null) {
                      setValue(exchange.getIn().getBody(Boolean.class));
                  } else if ((pin.getDirection() == GPIOPinConfig.DIR_OUTPUT_ONLY && exchange.getIn().getBody() == null)
                          || pin.getDirection() == GPIOPinConfig.DIR_INPUT_ONLY) {
                      exchange.getIn().setBody(pin.getValue(), Boolean.class);
                      exchange.getIn().setHeader(DeviceIOConstants.CAMEL_DEVICE_IO_PIN, pin.getDescriptor().getID());
                      exchange.getIn().setHeader(DeviceIOConstants.CAMEL_DEVICE_IO_NAME, pin.getDescriptor().getName());
                      exchange.getIn().setHeader(DeviceIOConstants.CAMEL_DEVICE_IO_TIMESTAMP, System.currentTimeMillis());
  
                  }
              }
          }
      }
docs: Process the message