Send and transmit using radio works now. Sends initial request for registration.
This commit is contained in:
		@@ -5,10 +5,14 @@
 | 
			
		||||
 | 
			
		||||
struct clockMsg_s {
 | 
			
		||||
  uint8_t msgType;
 | 
			
		||||
  uint8_t day;
 | 
			
		||||
  uint8_t hour;
 | 
			
		||||
  uint8_t minute;
 | 
			
		||||
  uint8_t second;
 | 
			
		||||
  uint8_t speed; // msPerModelSecond / 4 --> 0..250
 | 
			
		||||
};
 | 
			
		||||
#define msgType_Clock 'c'
 | 
			
		||||
#define msgType_Clock 'c'  /* clock update, sent by master using broadcast */
 | 
			
		||||
#define msgType_ReqReg 'R' /* Request Registration, sent by Master using broadcast; ask clients to register */
 | 
			
		||||
#define msgType_Reg 'r' /* Registration message, sent by Client using 1:1 message to master */
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -18,4 +18,8 @@
 | 
			
		||||
#define DEFAULT_MIN_RELAY_OFF_TIME_MS 80
 | 
			
		||||
#define DEFAULT_RELAY_ACTIVE_LOW true
 | 
			
		||||
 | 
			
		||||
// field sizes
 | 
			
		||||
#define MAX_CLOCK_NAME_LEN 8
 | 
			
		||||
#define MAX_CLIENT_NAME_LEN 10
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,16 @@
 | 
			
		||||
#ifndef display_h_included
 | 
			
		||||
#define display_h_included
 | 
			
		||||
 | 
			
		||||
#include "config.h"
 | 
			
		||||
 | 
			
		||||
// avoid flickering of the display:
 | 
			
		||||
#define TIME_BETWEEN_DISPLAY_UPDATES_ms 200
 | 
			
		||||
#define BLINK_ON_OFF_TIME_ms 1000
 | 
			
		||||
 | 
			
		||||
#define MAX_CLOCK_NAME_LEN 8
 | 
			
		||||
 | 
			
		||||
#define MAX_CLOCK_SPEED_LEN 8
 | 
			
		||||
#define MAX_CLOCK_WEEKDAY_LEN 4
 | 
			
		||||
#define MAX_NUMBER_CLIENTS_DISPLAYED 5
 | 
			
		||||
#define MAX_CLIENT_NAME_LEN 10
 | 
			
		||||
#define MAX_LOG_MESSAGE_LEN 30
 | 
			
		||||
#define MAX_NUMBER_LOG_LINES 5
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -67,7 +67,7 @@ void Fastclock::loop(void) {
 | 
			
		||||
    // time has changed, send an update via rf
 | 
			
		||||
    // @TODO implement sending radio message
 | 
			
		||||
    Serial.println("Would send new time");
 | 
			
		||||
    radio->broadcastClock(hour, minute, second);
 | 
			
		||||
    radio->broadcastClock(weekday, hour, minute, second, msPerModelSecond);
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
#ifndef fastclock_h_included
 | 
			
		||||
#define fastclock_h_included
 | 
			
		||||
 | 
			
		||||
#include "config.h"
 | 
			
		||||
#include "display.h"
 | 
			
		||||
#include "radio.h"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -207,12 +207,20 @@ void setup() {
 | 
			
		||||
  fastclock.begin();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool requestToRegisterSent = false;
 | 
			
		||||
 | 
			
		||||
void loop(void)
 | 
			
		||||
{
 | 
			
		||||
  if (!display.showBootSequenceFinished(1000)) {
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (!requestToRegisterSent) {
 | 
			
		||||
    radio.broadcastRequestRegistration("testClock");
 | 
			
		||||
    requestToRegisterSent = true;
 | 
			
		||||
    return;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #if defined(AUTOSTART_CLOCK_AFTER_ms)
 | 
			
		||||
    #if AUTOSTART_CLOCK_AFTER_ms > 0
 | 
			
		||||
      static unsigned long autostart_ms = 0;
 | 
			
		||||
 
 | 
			
		||||
@@ -76,15 +76,44 @@ static void switchToReceiverRole(RF24 radio)
 | 
			
		||||
static int sendFailedCounter = 0;
 | 
			
		||||
static unsigned long stopTime = 0, pauseTime = 0;
 | 
			
		||||
 | 
			
		||||
void Radio::broadcastClock(int hour, int minute, int second) {
 | 
			
		||||
void Radio::broadcastRequestRegistration(const char *clockName) {
 | 
			
		||||
  char sendBuffer[32];
 | 
			
		||||
 | 
			
		||||
  memset(sendBuffer, 0, 32);
 | 
			
		||||
  sendBuffer[0] = msgType_ReqReg;
 | 
			
		||||
  strncpy(sendBuffer+1, clockName, MAX_CLOCK_NAME_LEN);
 | 
			
		||||
  int msgLength = MAX_CLOCK_NAME_LEN + 1;
 | 
			
		||||
 | 
			
		||||
  switchToSenderRole(rf24);
 | 
			
		||||
  if (!rf24.writeFast(sendBuffer, msgLength, true /*multicast*/)) {
 | 
			
		||||
      sendFailedCounter++;
 | 
			
		||||
      Serial.print("*** ERROR: failed to send ReqRegistration msg for "); Serial.println(clockName);
 | 
			
		||||
  }
 | 
			
		||||
  //This is only required when NO ACK ( enableAutoAck(0) ) payloads are used
 | 
			
		||||
  if (millis() - pauseTime > 3) {
 | 
			
		||||
    pauseTime = millis();
 | 
			
		||||
    rf24.txStandBy();          // Need to drop out of TX mode every 4ms if sending a steady stream of multicast data
 | 
			
		||||
    //delayMicroseconds(130);     // This gives the PLL time to sync back up
 | 
			
		||||
  }
 | 
			
		||||
  stopTime = millis();
 | 
			
		||||
                                      //This should be called to wait for completion and put the radio in standby mode after transmission, returns 0 if data still in FIFO (timed out), 1 if success
 | 
			
		||||
  if (!rf24.txStandBy()) { sendFailedCounter += 3; } //Standby, block only until FIFO empty or auto-retry timeout. Flush TX FIFO if failed
 | 
			
		||||
  //radio.txStandBy(1000);              //Standby, using extended timeout period of 1 second
 | 
			
		||||
 | 
			
		||||
  Serial.print("*** send finished, fail-counter="); Serial.println(sendFailedCounter);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Radio::broadcastClock(int day, int hour, int minute, int second, int msPerModelSecond) {
 | 
			
		||||
  struct clockMsg_s clockMsg;
 | 
			
		||||
 | 
			
		||||
  clockMsg.msgType = msgType_Clock;
 | 
			
		||||
  clockMsg.day = day;
 | 
			
		||||
  clockMsg.hour = hour;
 | 
			
		||||
  clockMsg.minute = minute;
 | 
			
		||||
  clockMsg.second = second;
 | 
			
		||||
  clockMsg.speed = (msPerModelSecond >> 2) & 0xff; // divide by 4
 | 
			
		||||
  switchToSenderRole(rf24);
 | 
			
		||||
  if (!rf24.write(&clockMsg, sizeof(clockMsg), true /*multicast*/)) {
 | 
			
		||||
  if (!rf24.writeFast(&clockMsg, sizeof(clockMsg), true /*multicast*/)) {
 | 
			
		||||
      sendFailedCounter++;
 | 
			
		||||
      Serial.print("*** ERROR: failed to send clock msg for "); Serial.print(hour); Serial.print(":"); Serial.print(minute); Serial.print(":"); Serial.println(second);
 | 
			
		||||
  }
 | 
			
		||||
@@ -108,18 +137,18 @@ void Radio::loop(void) {
 | 
			
		||||
  if (isMaster)  {
 | 
			
		||||
    switchToReceiverRole(rf24);
 | 
			
		||||
    if (rf24.available()) {
 | 
			
		||||
      struct clockMsg_s clockMsg;
 | 
			
		||||
      rf24.read(&clockMsg, sizeof(struct clockMsg_s));
 | 
			
		||||
      char buffer[32];
 | 
			
		||||
      rf24.read(buffer, 32);
 | 
			
		||||
 | 
			
		||||
      // Spew it
 | 
			
		||||
      Serial.print(F("Received clock message, type="));
 | 
			
		||||
      Serial.print(clockMsg.msgType);
 | 
			
		||||
      Serial.print(F(", time="));
 | 
			
		||||
      Serial.print(clockMsg.hour);
 | 
			
		||||
      Serial.print(":");
 | 
			
		||||
      Serial.print(clockMsg.minute);
 | 
			
		||||
      Serial.print(":");
 | 
			
		||||
      Serial.println(clockMsg.second);
 | 
			
		||||
      Serial.print(F("Received new message, type="));
 | 
			
		||||
      Serial.print(buffer[0]);
 | 
			
		||||
      Serial.print(F(", bytes 1="));
 | 
			
		||||
      Serial.print(buffer[1]);
 | 
			
		||||
      Serial.print(", 2=");
 | 
			
		||||
      Serial.print(buffer[2]);
 | 
			
		||||
      Serial.print(", 3=");
 | 
			
		||||
      Serial.println(buffer[3]);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,8 @@ public:
 | 
			
		||||
  Radio(Display *d, bool _isMaster):display(d), isMaster(_isMaster) { };
 | 
			
		||||
  void begin(void);
 | 
			
		||||
  void loop(void);
 | 
			
		||||
  void broadcastClock(int hour, int minute, int second);
 | 
			
		||||
  void broadcastClock(int day, int hour, int minute, int second, int msPerModelSecond);
 | 
			
		||||
  void broadcastRequestRegistration(const char *clockName);
 | 
			
		||||
private:
 | 
			
		||||
  Display *display;
 | 
			
		||||
  bool isMaster;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user