diff --git a/HISTORY.rst b/HISTORY.rst index f5806fa1..1ad463f8 100644 --- a/HISTORY.rst +++ b/HISTORY.rst @@ -25,6 +25,7 @@ PlatformIO Core 4 - `Capture device monitor output to a file `__ with ``log2file`` filter (`issue #670 `_) - Show a timestamp for each new line with ``time`` filter (`issue #981 `_) - Send a text to device on ENTER with ``send_on_enter`` filter (`issue #926 `_) + - Show a hexadecimal representation of the data (code point of each character) with ``hexlify`` filter * Added support for Arm Mbed "module.json" ``dependencies`` field (`issue #3400 `_) * Improved support for Arduino "library.properties" ``depends`` field diff --git a/docs b/docs index 4e1c19c7..03c5eb48 160000 --- a/docs +++ b/docs @@ -1 +1 @@ -Subproject commit 4e1c19c77a8438b8cd6027307142b851127720db +Subproject commit 03c5eb487fe7abd85745a6810bab06eaf29b5a81 diff --git a/platformio/commands/device/filters/hexlify.py b/platformio/commands/device/filters/hexlify.py new file mode 100644 index 00000000..1023b573 --- /dev/null +++ b/platformio/commands/device/filters/hexlify.py @@ -0,0 +1,38 @@ +# Copyright (c) 2014-present PlatformIO +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import serial + +from platformio.commands.device import DeviceMonitorFilter + + +class Hexlify(DeviceMonitorFilter): + NAME = "hexlify" + + def __init__(self, *args, **kwargs): + super(Hexlify, self).__init__(*args, **kwargs) + self._counter = 0 + + def rx(self, text): + result = "" + for b in serial.iterbytes(text): + if (self._counter % 16) == 0: + result += "\n{:04X} | ".format(self._counter) + asciicode = ord(b) + if asciicode <= 255: + result += "{:02X} ".format(asciicode) + else: + result += "?? " + self._counter += 1 + return result