IoT - Kubus / Mbed 2 deprecated Kubus

Dependencies:   mbed nRF24L01P

master.cpp

Committer:
Bartosz Stebel
Date:
2017-01-19
Revision:
54:2551a3c781cf
Parent:
53:b2c949470f4e
Parent:
51:090149c4aa28
Child:
56:065bd3a75d97

File content as of revision 54:2551a3c781cf:

#include "common.h"
#include "master.h"

#include "cantcoap.h"
#include <sstream>

const int boards_count = 3;


int master_loop() {
    Serial pc(USBTX, USBRX); // tx, rx
    Serial wifi(PA_9, PA_10);
    DigitalOut frm(PC_8);
    nRF24L01P radio(PB_15, PB_14, PB_13, PB_12, PB_1, PB_2);    // mosi, miso, sck, csn, ce, irq

    char rxData[TRANSFER_SIZE];

    pc.baud(115200);
    wifi.baud(115200);

    vector<unsigned long long> rx_addresses(addresses, addresses + boards_count);

    radio_init_master(&radio, rx_addresses);

    // Display the (default) setup of the nRF24L01+ chip
    pc.printf( "nRF24L01+ Frequency    : %d MHz\r\n",  radio.getRfFrequency() );
    pc.printf( "nRF24L01+ Output power : %d dBm\r\n",  radio.getRfOutputPower() );
    pc.printf( "nRF24L01+ Data Rate    : %d kbps\r\n", radio.getAirDataRate() );
    pc.printf( "nRF24L01+ TX Address   : 0x%010llX\r\n", radio.getTxAddress() );
    pc.printf( "nRF24L01+ RX0 Address   : 0x%010llX\r\n", radio.getRxAddress(NRF24L01P_PIPE_P0) );
    pc.printf( "nRF24L01+ RX1 Address   : 0x%010llX\r\n", radio.getRxAddress(NRF24L01P_PIPE_P1) );
    pc.printf( "nRF24L01+ RX2 Address   : 0x%010llX\r\n", radio.getRxAddress(NRF24L01P_PIPE_P2) );
    pc.printf( "nRF24L01+ RX3 Address   : 0x%010llX\r\n", radio.getRxAddress(NRF24L01P_PIPE_P3) );

    frm = 1;
    while (1) {
        for (int board = 0; board < boards_count; ++board) {
            int pipe = pipes[board];
            //pc.printf("pipe: %x\r\n", pipe);
            if(radio.readable(pipe)){
                int rx_bytes = radio.read(pipe, rxData, sizeof(rxData));
                CoapPDU pdu;
                pdu.setVersion(1);
                pdu.setType(CoapPDU::COAP_NON_CONFIRMABLE);
                pdu.setCode(CoapPDU::COAP_POST);
                pdu.setToken((uint8_t*)"\3\2\1\1",4);
                pdu.setMessageID(0x0005);
                std::string output = str_hex(rxData, rx_bytes);
                //wifi.printf("received: %s\r\n", output.c_str());
                pc.printf("received: %s\r\n", output.c_str());
                Data d;
                d.deserialize(std::string(rxData, 32));
                std::stringstream ss;

                for (int i = 0; i < rx_bytes; ++i) {
                    ss << std::hex << rxData[i] / 16 << rxData[i] % 16; // ugly!
                }
                pc.printf("received: %s|id %d \r\n", ss.str().c_str(), d.type);
                //wifi.printf("received: %s, pkt:", ss.str().c_str());

                char uribuf[64];
                switch(d.type) {
                    case PIR1:
                        strcpy(uribuf, "pir1");
                        break;
                    case PIR2:
                        strcpy(uribuf, "pir2");
                        break;
                    case DISTANCE:
                        strcpy(uribuf, "distance");
                        break;
                    case SOUND:
                        strcpy(uribuf, "sound");
                        break;
                }
                pdu.setURI(uribuf,strlen(uribuf));

                char pbuf[32];
                int psize = sprintf(pbuf, "%ld", d.value.i);
                pdu.setPayload((uint8_t*)pbuf, psize);
                frm = 0;
                wifi.write(pdu.getPDUPointer(), pdu.getPDULength(), 0, 0);
                wait(0.1);
                frm = 1;
                //wifi.printf("\n");
            }
        }
    }
}