Merge pull request #266 from mysensors/rs485-de-pin-management
DE-pin management for RS485 transport layer
This commit is contained in:
@@ -66,6 +66,16 @@
|
|||||||
|
|
||||||
#include "MyTransport.h"
|
#include "MyTransport.h"
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(MY_RS485_DE_PIN)
|
||||||
|
#define assertDE() digitalWrite(MY_RS485_DE_PIN, HIGH); delayMicroseconds(5)
|
||||||
|
#define deassertDE() digitalWrite(MY_RS485_DE_PIN, LOW)
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define assertDE()
|
||||||
|
#define deassertDE()
|
||||||
|
#endif
|
||||||
|
|
||||||
// We only use SYS_PACK in this application
|
// We only use SYS_PACK in this application
|
||||||
#define ICSC_SYS_PACK 0x58
|
#define ICSC_SYS_PACK 0x58
|
||||||
|
|
||||||
@@ -252,7 +262,12 @@ bool transportSend(uint8_t to, const void* data, uint8_t len)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start of header by writing multiple SOH
|
#if defined(MY_RS485_DE_PIN)
|
||||||
|
digitalWrite(MY_RS485_DE_PIN, HIGH);
|
||||||
|
delayMicroseconds(5);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Start of header by writing multiple SOH
|
||||||
for(byte w=0;w<1;w++) _dev.write(SOH);
|
for(byte w=0;w<1;w++) _dev.write(SOH);
|
||||||
_dev.write(to); // Destination address
|
_dev.write(to); // Destination address
|
||||||
cs += to;
|
cs += to;
|
||||||
@@ -270,6 +285,28 @@ bool transportSend(uint8_t to, const void* data, uint8_t len)
|
|||||||
_dev.write(ETX); // End of text
|
_dev.write(ETX); // End of text
|
||||||
_dev.write(cs);
|
_dev.write(cs);
|
||||||
_dev.write(EOT);
|
_dev.write(EOT);
|
||||||
|
|
||||||
|
#if defined(MY_RS485_DE_PIN)
|
||||||
|
#ifdef __PIC32MX__
|
||||||
|
// MPIDE has nothing yet for this. It uses the hardware buffer, which
|
||||||
|
// could be up to 8 levels deep. For now, let's just delay for 8
|
||||||
|
// characters worth.
|
||||||
|
delayMicroseconds((F_CPU/9600)+1);
|
||||||
|
#else
|
||||||
|
#if defined(ARDUINO) && ARDUINO >= 100
|
||||||
|
#if ARDUINO >= 104
|
||||||
|
// Arduino 1.0.4 and upwards does it right
|
||||||
|
_dev.flush();
|
||||||
|
#else
|
||||||
|
// Between 1.0.0 and 1.0.3 it almost does it - need to compensate
|
||||||
|
// for the hardware buffer. Delay for 2 bytes worth of transmission.
|
||||||
|
_dev.flush();
|
||||||
|
delayMicroseconds((20000000UL/9600)+1);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
digitalWrite(MY_RS485_DE_PIN, LOW);
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -279,6 +316,10 @@ bool transportInit() {
|
|||||||
// Reset the state machine
|
// Reset the state machine
|
||||||
_dev.begin(MY_RS485_BAUD_RATE);
|
_dev.begin(MY_RS485_BAUD_RATE);
|
||||||
_serialReset();
|
_serialReset();
|
||||||
|
#if defined(MY_RS485_DE_PIN)
|
||||||
|
pinMode(MY_RS485_DE_PIN, OUTPUT);
|
||||||
|
digitalWrite(MY_RS485_DE_PIN, LOW);
|
||||||
|
#endif
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,6 +55,9 @@
|
|||||||
// Enable RS485 transport layer
|
// Enable RS485 transport layer
|
||||||
#define MY_RS485
|
#define MY_RS485
|
||||||
|
|
||||||
|
// Define this to enables DE-pin management on defined pin
|
||||||
|
#define MY_RS485_DE_PIN 2
|
||||||
|
|
||||||
// Set RS485 baud rate to use
|
// Set RS485 baud rate to use
|
||||||
#define MY_RS485_BAUD_RATE 9600
|
#define MY_RS485_BAUD_RATE 9600
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,9 @@
|
|||||||
// Enable RS485 transport layer
|
// Enable RS485 transport layer
|
||||||
#define MY_RS485
|
#define MY_RS485
|
||||||
|
|
||||||
|
// Define this to enables DE-pin management on defined pin
|
||||||
|
#define MY_RS485_DE_PIN 2
|
||||||
|
|
||||||
// Set RS485 baud rate to use
|
// Set RS485 baud rate to use
|
||||||
#define MY_RS485_BAUD_RATE 9600
|
#define MY_RS485_BAUD_RATE 9600
|
||||||
|
|
||||||
|
|||||||
@@ -105,3 +105,5 @@ MY_MQTT_SUBSCRIBE_TOPIC_PREFIX LITERAL1
|
|||||||
MY_MQTT_PUBLISH_TOPIC_PREFIX LITERAL1
|
MY_MQTT_PUBLISH_TOPIC_PREFIX LITERAL1
|
||||||
MY_MQTT_CLIENT_ID LITERAL1
|
MY_MQTT_CLIENT_ID LITERAL1
|
||||||
MY_GATEWAY_MQTT_CLIENT LITERAL1
|
MY_GATEWAY_MQTT_CLIENT LITERAL1
|
||||||
|
MY_DISABLE_REMOTE_RESET LITERAL1
|
||||||
|
MY_RS485_DE_PIN LITERAL1
|
||||||
Reference in New Issue
Block a user