143 lines
3.3 KiB
C++
143 lines
3.3 KiB
C++
#include <Arduino.h>
|
|
#include <LowPower.h>
|
|
#include <SPI.h>
|
|
#include "definition.h"
|
|
#include "BoardConfig.h"
|
|
#include "MBPeripherals.h"
|
|
|
|
BoardConfig defaultBC;
|
|
MBPeripherals MBP(defaultBC);
|
|
|
|
MailboxDataPacket payload;
|
|
uint8_t rCode(0);
|
|
|
|
void setup()
|
|
{
|
|
#if SERIAL_DEBUG_ENABLED
|
|
Serial.begin(SERIAL_BAUD_RATE);
|
|
Serial.println("Setup begin");
|
|
#endif
|
|
|
|
rCode = MBP.init();
|
|
memset(&payload, 0, sizeof payload);
|
|
|
|
#if SERIAL_DEBUG_ENABLED
|
|
Serial.print("Payload size : ");Serial.println(sizeof payload);
|
|
debugStruct(&payload);
|
|
#endif
|
|
payload.header = HEADER_e::CONNECTED_MAILBOX;
|
|
|
|
#if SERIAL_DEBUG_ENABLED
|
|
Serial.print("WSP init returned : ");Serial.println(rCode);
|
|
Serial.println("Setup end");
|
|
//Let time to the uart to spit out what's left
|
|
delay(100);
|
|
#endif
|
|
|
|
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
|
|
MBP.maskExtInt();
|
|
if((payload.mailbox_event = MBP.readMailboxEvent()) != MAILBOX_EVENT_e::MAILBOX_UNKNOWN)
|
|
{
|
|
payload.battery = MBP.batteryVoltage();
|
|
|
|
//We now send the event
|
|
MBP.externalPeripherals(MBPeripherals::State::ON);
|
|
rCode = MBP.initExternalPeripherals();
|
|
|
|
#if SERIAL_DEBUG_ENABLED
|
|
Serial.print("MBP Ext Peripheral : "); Serial.println(rCode);
|
|
debugStruct(&payload);
|
|
#endif
|
|
|
|
if(MBP.getRadio().isChipConnected())
|
|
{
|
|
MBP.applyRadioConfig();
|
|
MBP.getRadio().setRetries(15, 15);
|
|
MBP.getRadio().openWritingPipe((const uint8_t *)RADIO_NODE_ADDRESS);
|
|
MBP.getRadio().stopListening(); //Very important, if not called, no ack will be received !
|
|
|
|
for(uint8_t i(0); i < MAX_SEND_ROUND_RETRIES; i++)
|
|
{
|
|
if(MBP.getRadio().write(&payload, sizeof payload))
|
|
{
|
|
#if SERIAL_DEBUG_ENABLED
|
|
Serial.println("Payload sent !");
|
|
delay(100);
|
|
#endif
|
|
break;
|
|
}
|
|
#if SERIAL_DEBUG_ENABLED
|
|
else
|
|
{
|
|
Serial.println("Failed to send payload !");
|
|
delay(100);
|
|
}
|
|
#endif
|
|
}
|
|
}
|
|
#if SERIAL_DEBUG_ENABLED
|
|
else
|
|
{
|
|
Serial.println("NRF missing !");
|
|
delay(100);
|
|
}
|
|
#endif
|
|
|
|
MBP.externalPeripherals(MBPeripherals::State::OFF);
|
|
|
|
//We wait for some time before allowing next trigger
|
|
//Done to prevent switch bounces
|
|
LowPower.powerDown(SLEEP_2S, ADC_OFF, BOD_OFF);
|
|
}
|
|
#if SERIAL_DEBUG_ENABLED
|
|
else
|
|
{
|
|
Serial.println("Unknown event :O !");
|
|
delay(100);
|
|
}
|
|
#endif
|
|
|
|
MBP.unmaskExtInt();
|
|
payload.id++;
|
|
//Sleep until next trigger happens
|
|
LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
|
|
}
|
|
|
|
void debugStruct(MailboxDataPacket *p)
|
|
{
|
|
Serial.println("##############DATA##############");
|
|
Serial.print("ID : ");
|
|
Serial.println(p->id);
|
|
|
|
Serial.print("HEADER : ");
|
|
Serial.println(p->header);
|
|
|
|
Serial.print("BATT : ");
|
|
Serial.print(p->battery);
|
|
Serial.println(" V");
|
|
|
|
Serial.print("EVENT : ");
|
|
switch(p->mailbox_event)
|
|
{
|
|
case MAILBOX_LETTER:
|
|
Serial.println("LETTER");
|
|
break;
|
|
case MAILBOX_PACKAGE:
|
|
Serial.println("PACKAGE");
|
|
break;
|
|
case MAILBOX_COLLECTED:
|
|
Serial.println("COLLECTED");
|
|
break;
|
|
default:
|
|
Serial.println("UNKNOWN");
|
|
break;
|
|
}
|
|
|
|
delay(100); //Needed to prevent the micro to go to sleep to quickly and thus not sending the full serial output !
|
|
}
|