Commit a7de2e9cc6eb908647f60af8dcda72f43121e316

Authored by Jeroen88
1 parent 458a7e78

Changed cast style, changed millis() in ISR to micros(), added a few noInterrupt…

…s() - interrups() sequences
src/EasyOpenTherm.cpp
@@ -276,17 +276,17 @@ bool OTDataLinkLayer::parity() { @@ -276,17 +276,17 @@ bool OTDataLinkLayer::parity() {
276 } 276 }
277 277
278 OTDataLinkLayer::MSG_TYPE OTDataLinkLayer::type() { 278 OTDataLinkLayer::MSG_TYPE OTDataLinkLayer::type() {
279 - return OTDataLinkLayer::MSG_TYPE(_frame & 0x70000000); 279 + return (OTDataLinkLayer::MSG_TYPE)(_frame & 0x70000000);
280 } 280 }
281 281
282 282
283 uint8_t OTDataLinkLayer::dataID() { 283 uint8_t OTDataLinkLayer::dataID() {
284 - return uint8_t((_frame & 0xff0000) >> 16); 284 + return (uint8_t)((_frame & 0xff0000) >> 16);
285 } 285 }
286 286
287 287
288 uint16_t OTDataLinkLayer::value() { 288 uint16_t OTDataLinkLayer::value() {
289 - return uint16_t(_frame & 0xffff); 289 + return (uint16_t)(_frame & 0xffff);
290 } 290 }
291 291
292 292
@@ -327,7 +327,7 @@ bool OTDataLinkLayer::_parity(uint32_t fr @@ -327,7 +327,7 @@ bool OTDataLinkLayer::_parity(uint32_t fr
327 frame ^= frame >> 4; 327 frame ^= frame >> 4;
328 frame ^= frame >> 2; 328 frame ^= frame >> 2;
329 frame ^= frame >> 1; 329 frame ^= frame >> 1;
330 - return (~frame) & 1; 330 + return ((~frame) & 1) == 1;
331 } 331 }
332 332
333 333
@@ -376,7 +376,8 @@ bool OTPhysicalLayer::send(uint32_t fr @@ -376,7 +376,8 @@ bool OTPhysicalLayer::send(uint32_t fr
376 return false; 376 return false;
377 } 377 }
378 378
379 - if(_state == STATE::READY && millis() - _lastReceivedTimestampMs < 100) { 379 +// if(_state == STATE::READY && millis() - _lastReceivedTimestampMs < 100) {
  380 + if(_state == STATE::READY && millis() - _lastReceivedTimestampMicros < 100) {
380 381
381 return false; // Wait at least 100 ms after receiving the final bit of the latest frame before sending a new frame 382 return false; // Wait at least 100 ms after receiving the final bit of the latest frame before sending a new frame
382 } 383 }
@@ -393,8 +394,10 @@ bool OTPhysicalLayer::send(uint32_t fr @@ -393,8 +394,10 @@ bool OTPhysicalLayer::send(uint32_t fr
393 394
394 digitalWrite(_txPin, HIGH); // idle 395 digitalWrite(_txPin, HIGH); // idle
395 396
  397 + noInterrupts(); //\\//
396 _frame = 0; 398 _frame = 0;
397 _state = STATE::WAITING; 399 _state = STATE::WAITING;
  400 + interrupts(); //////
398 401
399 _lastSentTimestampMs = millis(); 402 _lastSentTimestampMs = millis();
400 403
@@ -407,7 +410,9 @@ bool OTPhysicalLayer::receive(uint32_t &amp; fr @@ -407,7 +410,9 @@ bool OTPhysicalLayer::receive(uint32_t &amp; fr
407 410
408 if(_state != STATE::READY) { // ::handleInterrupt() will set _state to STATE::READY upon receiving a complete frame (including start and stop bits) 411 if(_state != STATE::READY) { // ::handleInterrupt() will set _state to STATE::READY upon receiving a complete frame (including start and stop bits)
409 if(_primary && millis() - _lastSentTimestampMs > 800) { // ::send() will set _lastSentTimestampMs to after sending the final bit. A secondary never times out, it keeps on listning to the primary 412 if(_primary && millis() - _lastSentTimestampMs > 800) { // ::send() will set _lastSentTimestampMs to after sending the final bit. A secondary never times out, it keeps on listning to the primary
  413 + noInterrupts(); //\\//
410 _state = STATE::INVALID; // timeout 414 _state = STATE::INVALID; // timeout
  415 + interrupts(); //////
411 } 416 }
412 417
413 return false; 418 return false;
@@ -420,7 +425,9 @@ bool OTPhysicalLayer::receive(uint32_t &amp; fr @@ -420,7 +425,9 @@ bool OTPhysicalLayer::receive(uint32_t &amp; fr
420 425
421 426
422 void OTPhysicalLayer::reset() { 427 void OTPhysicalLayer::reset() {
  428 + noInterrupts(); //\\//
423 _state = STATE::INVALID; 429 _state = STATE::INVALID;
  430 + interrupts(); //////
424 } 431 }
425 432
426 433
@@ -478,7 +485,8 @@ void OTPhysicalLayer::handleInterrupt() { @@ -478,7 +485,8 @@ void OTPhysicalLayer::handleInterrupt() {
478 lastTimestamp = timestamp; 485 lastTimestamp = timestamp;
479 mask >>= 1; 486 mask >>= 1;
480 } else { // stop bit 487 } else { // stop bit
481 - _lastReceivedTimestampMs = millis(); 488 +// _lastReceivedTimestampMs = millis();
  489 + _lastReceivedTimestampMicros = micros();
482 _state = STATE::READY; 490 _state = STATE::READY;
483 } 491 }
484 } 492 }
src/EasyOpenTherm.h
@@ -527,7 +527,8 @@ private: @@ -527,7 +527,8 @@ private:
527 527
528 volatile uint32_t _frame; 528 volatile uint32_t _frame;
529 uint32_t _lastSentTimestampMs; 529 uint32_t _lastSentTimestampMs;
530 - volatile uint32_t _lastReceivedTimestampMs; 530 +// volatile uint32_t _lastReceivedTimestampMs;
  531 + volatile uint32_t _lastReceivedTimestampMicros;
531 532
532 uint8_t _rxPin; 533 uint8_t _rxPin;
533 uint8_t _txPin; 534 uint8_t _txPin;