Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Troubleshooting
  3. MY_SERIALDEVICE overrides MY_DEBUG_HWSERIAL

MY_SERIALDEVICE overrides MY_DEBUG_HWSERIAL

Scheduled Pinned Locked Moved Troubleshooting
13 Posts 3 Posters 1.7k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • N nelsonov

    Everything makes much more sense to me now. I found that macro in a discussion on this forum:

    https://forum.mysensors.org/topic/5624/serial-gateway-using-arduino-mega-how-to-set-what-serial-to-use/3

    Now that I have re-read that discussion I understand that I was seeing what I wanted to see.

    Thank you.

    mfalkviddM Online
    mfalkviddM Online
    mfalkvidd
    Mod
    wrote on last edited by
    #4

    @nelsonov you're welcome. Always great when new people join the forum.

    The suggestion to modify hwDebugPrint, as discussed in the thread you linked, seems like the best way forward to me.

    You could manually replace all occurrences of MY_SERIALDEVICE in the implementation for your board (https://github.com/mysensors/MySensors/blob/development/hal/architecture/ESP8266/MyHwESP8266.cpp#L149 if you're using esp8266) with the serial device you want to use.

    It is a bit of a hack, but if it works and you find it useful we should be able to modify a future release of the MySensors library to support redirecting debug output without having to hack the library.

    N 1 Reply Last reply
    0
    • scalzS Offline
      scalzS Offline
      scalz
      Hardware Contributor
      wrote on last edited by scalz
      #5

      it would be better to change it directly in MyHwESP8266.h , for a quick hack (just one line)

      mfalkviddM 1 Reply Last reply
      0
      • scalzS scalz

        it would be better to change it directly in MyHwESP8266.h , for a quick hack (just one line)

        mfalkviddM Online
        mfalkviddM Online
        mfalkvidd
        Mod
        wrote on last edited by mfalkvidd
        #6

        @scalz won't that cause the gateway serial output to the controller to also change device?

        The same define is used here: https://github.com/mysensors/MySensors/blob/development/core/MyGatewayTransportSerial.cpp#L32

        1 Reply Last reply
        0
        • scalzS Offline
          scalzS Offline
          scalz
          Hardware Contributor
          wrote on last edited by
          #7

          @mfalkvidd
          not sure to understand "change device" :blush:
          I thought he wants to use another serial. Then you adviced to change all lines in the esp8266 hw layer cpp. That's why I said, it's quicker to change this directly in the .h as it's here it's defined..

          mfalkviddM 1 Reply Last reply
          0
          • scalzS scalz

            @mfalkvidd
            not sure to understand "change device" :blush:
            I thought he wants to use another serial. Then you adviced to change all lines in the esp8266 hw layer cpp. That's why I said, it's quicker to change this directly in the .h as it's here it's defined..

            mfalkviddM Online
            mfalkviddM Online
            mfalkvidd
            Mod
            wrote on last edited by
            #8

            @scalz OP wants debug prints to go to one serial device, and serial gateway prints to go to a different serial device.

            1 Reply Last reply
            1
            • scalzS Offline
              scalzS Offline
              scalz
              Hardware Contributor
              wrote on last edited by scalz
              #9

              @mfalkvidd
              Oki, I just got it lol. was not obvious to me first time (I've never needed this)
              I agree with you, forget what I said above ;) (because that would be applied globally)

              1 Reply Last reply
              1
              • mfalkviddM mfalkvidd

                @nelsonov you're welcome. Always great when new people join the forum.

                The suggestion to modify hwDebugPrint, as discussed in the thread you linked, seems like the best way forward to me.

                You could manually replace all occurrences of MY_SERIALDEVICE in the implementation for your board (https://github.com/mysensors/MySensors/blob/development/hal/architecture/ESP8266/MyHwESP8266.cpp#L149 if you're using esp8266) with the serial device you want to use.

                It is a bit of a hack, but if it works and you find it useful we should be able to modify a future release of the MySensors library to support redirecting debug output without having to hack the library.

                N Offline
                N Offline
                nelsonov
                wrote on last edited by nelsonov
                #10

                @mfalkvidd I'm using an AVR board for my serial gateway. I modified hwDebugPrint in MyHwAVR.cpp with an extra #ifndef to look for MY_DEBUGDEVICE or copy MY_SERIALDEVICE to it. Then all occurrences of MY_SERIALDEVICE were changed to MY_DEBUGDEVICE.

                I added this to my sketch:

                #define MY_DEBUGDEVICE Serial  // Redirect debug to Serial
                

                The result was what I wanted. Controller <-> Gateway configuration went over Serial1 (/dev/ttyS0 on my RPi) and debugging output went to Serial (/dev/ttyACM0 on my RPi). This allows me to easily debug without having to take any special steps with my controller.

                void hwDebugPrint(const char *fmt, ... )
                {
                #ifndef MY_DEBUGDEVICE
                #define MY_DEBUGDEVICE MY_SERIALDEVICE
                #endif
                #ifndef MY_DISABLED_SERIAL
                	char fmtBuffer[MY_SERIAL_OUTPUT_SIZE];
                #ifdef MY_GATEWAY_SERIAL
                	// prepend debug message to be handled correctly by controller (C_INTERNAL, I_LOG_MESSAGE)
                	snprintf_P(fmtBuffer, sizeof(fmtBuffer), PSTR("0;255;%" PRIu8 ";0;%" PRIu8 ";%" PRIu32 " "),
                	           C_INTERNAL, I_LOG_MESSAGE, hwMillis());
                	MY_DEBUGDEVICE.print(fmtBuffer);
                #else
                	// prepend timestamp
                	MY_DEBUGDEVICE.print(hwMillis());
                	MY_DEBUGDEVICE.print(F(" "));
                #endif
                	va_list args;
                	va_start (args, fmt );
                	vsnprintf_P(fmtBuffer, sizeof(fmtBuffer), fmt, args);
                #ifdef MY_GATEWAY_SERIAL
                	// Truncate message if this is gateway node
                	fmtBuffer[sizeof(fmtBuffer) - 2] = '\n';
                	fmtBuffer[sizeof(fmtBuffer) - 1] = '\0';
                #endif
                	va_end (args);
                	MY_DEBUGDEVICE.print(fmtBuffer);
                	MY_DEBUGDEVICE.flush();
                #else
                	(void)fmt;
                #endif
                }
                

                https://keybase.io/nelsonov

                mfalkviddM 1 Reply Last reply
                1
                • N nelsonov

                  @mfalkvidd I'm using an AVR board for my serial gateway. I modified hwDebugPrint in MyHwAVR.cpp with an extra #ifndef to look for MY_DEBUGDEVICE or copy MY_SERIALDEVICE to it. Then all occurrences of MY_SERIALDEVICE were changed to MY_DEBUGDEVICE.

                  I added this to my sketch:

                  #define MY_DEBUGDEVICE Serial  // Redirect debug to Serial
                  

                  The result was what I wanted. Controller <-> Gateway configuration went over Serial1 (/dev/ttyS0 on my RPi) and debugging output went to Serial (/dev/ttyACM0 on my RPi). This allows me to easily debug without having to take any special steps with my controller.

                  void hwDebugPrint(const char *fmt, ... )
                  {
                  #ifndef MY_DEBUGDEVICE
                  #define MY_DEBUGDEVICE MY_SERIALDEVICE
                  #endif
                  #ifndef MY_DISABLED_SERIAL
                  	char fmtBuffer[MY_SERIAL_OUTPUT_SIZE];
                  #ifdef MY_GATEWAY_SERIAL
                  	// prepend debug message to be handled correctly by controller (C_INTERNAL, I_LOG_MESSAGE)
                  	snprintf_P(fmtBuffer, sizeof(fmtBuffer), PSTR("0;255;%" PRIu8 ";0;%" PRIu8 ";%" PRIu32 " "),
                  	           C_INTERNAL, I_LOG_MESSAGE, hwMillis());
                  	MY_DEBUGDEVICE.print(fmtBuffer);
                  #else
                  	// prepend timestamp
                  	MY_DEBUGDEVICE.print(hwMillis());
                  	MY_DEBUGDEVICE.print(F(" "));
                  #endif
                  	va_list args;
                  	va_start (args, fmt );
                  	vsnprintf_P(fmtBuffer, sizeof(fmtBuffer), fmt, args);
                  #ifdef MY_GATEWAY_SERIAL
                  	// Truncate message if this is gateway node
                  	fmtBuffer[sizeof(fmtBuffer) - 2] = '\n';
                  	fmtBuffer[sizeof(fmtBuffer) - 1] = '\0';
                  #endif
                  	va_end (args);
                  	MY_DEBUGDEVICE.print(fmtBuffer);
                  	MY_DEBUGDEVICE.flush();
                  #else
                  	(void)fmt;
                  #endif
                  }
                  
                  mfalkviddM Online
                  mfalkviddM Online
                  mfalkvidd
                  Mod
                  wrote on last edited by
                  #11

                  @nelsonov very nice!
                  Would you be comfortable creating a pull request with these changes? Preferably for all platforms, but we can work together on that.

                  N 1 Reply Last reply
                  0
                  • mfalkviddM mfalkvidd

                    @nelsonov very nice!
                    Would you be comfortable creating a pull request with these changes? Preferably for all platforms, but we can work together on that.

                    N Offline
                    N Offline
                    nelsonov
                    wrote on last edited by
                    #12

                    @mfalkvidd I'm quite willing to open a pull request. This will be my first time. Do you want me to create an issue as well? Also what would this be called? Perhaps something like "Alternate Port Debugging"? It's hard to think of something that's 'googlable'.

                    https://keybase.io/nelsonov

                    mfalkviddM 1 Reply Last reply
                    1
                    • N nelsonov

                      @mfalkvidd I'm quite willing to open a pull request. This will be my first time. Do you want me to create an issue as well? Also what would this be called? Perhaps something like "Alternate Port Debugging"? It's hard to think of something that's 'googlable'.

                      mfalkviddM Online
                      mfalkviddM Online
                      mfalkvidd
                      Mod
                      wrote on last edited by mfalkvidd
                      #13

                      @nelsonov Great! There is no need to create an issue. If there is anything to discuss, we can discuss in the pull request thread.

                      Maybe call it something like "Add MY_DEBUGDEVICE to redirect debug output"

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      14

                      Online

                      11.7k

                      Users

                      11.2k

                      Topics

                      113.0k

                      Posts


                      Copyright 2019 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • MySensors
                      • OpenHardware.io
                      • Categories
                      • Recent
                      • Tags
                      • Popular