this works for reading in data from pi via usb

main.cpp

Committer:
candre97
Date:
2019-12-10
Revision:
102:630e8252eabf
Parent:
100:ec006d6f3cb6
Child:
103:d8e01f94dd43

File content as of revision 102:630e8252eabf:

#include "mbed.h"              
#include "dot_util.h"
#include "RadioEvent.h"
#include <stdlib.h> 

// setting must match settings on the gateway
static std::string network_name = "LAleakers";
static std::string network_passphrase = "stephisbroke";
static uint8_t network_id[] = { 0x6C, 0x4E, 0xEF, 0x66, 0xF4, 0x79, 0x86, 0xA6 };
static uint8_t network_key[] = { 0x1F, 0x33, 0xA1, 0x70, 0xA5, 0xF1, 0xFD, 0xA0, 0xAB, 0x69, 0x7A, 0xAE, 0x2B, 0x95, 0x91, 0x6B };
static uint8_t frequency_sub_band = 7;
static lora::NetworkType network_type = lora::PUBLIC_LORAWAN;
static uint8_t join_delay = 5;
static uint8_t ack = 0;
static bool adr = false;

static bool deep_sleep = false;

mDot* dot = NULL;
lora::ChannelPlan* plan = new lora::ChannelPlan_US915();

Serial pc(USBTX, USBRX);

I2C i2c(I2C_SDA, I2C_SCL);

DigitalOut led(LED1);

int main() {
    //pc.printf("Echoes back to the screen anything you type\n");
    
    RadioEvent events;
    printf("HELLO!!!\n");
    pc.printf("Hi from pc\n");
    //pc.baud(115200);
    
    i2c.frequency(400000);

    mts::MTSLog::setLogLevel(mts::MTSLog::TRACE_LEVEL);

    assert(plan);

    dot = mDot::getInstance(plan);
    assert(dot);

    // attach the custom events handler
    dot->setEvents(&events);
    
    printf("S");
    
    if (!dot->getStandbyFlag()) {
        logInfo("mbed-os library version: %d.%d.%d", MBED_MAJOR_VERSION, MBED_MINOR_VERSION, MBED_PATCH_VERSION);

        // start from a well-known state
        logInfo("defaulting Dot configuration");
        dot->resetConfig();
        dot->resetNetworkSession();

        // make sure library logging is turned on
        dot->setLogLevel(mts::MTSLog::INFO_LEVEL);

        // update configuration if necessary
        if (dot->getJoinMode() != mDot::OTA) {
            logInfo("changing network join mode to OTA");
            if (dot->setJoinMode(mDot::OTA) != mDot::MDOT_OK) {
                logError("failed to set network join mode to OTA");
            }
        }
        // in OTA and AUTO_OTA join modes, the credentials can be passed to the library as a name and passphrase or an ID and KEY
        // only one method or the other should be used!
        // network ID = crc64(network name)
        // network KEY = cmac(network passphrase)
        update_ota_config_name_phrase(network_name, network_passphrase, frequency_sub_band, network_type, ack);
        //update_ota_config_id_key(network_id, network_key, frequency_sub_band, network_type, ack);

        // configure network link checks
        // network link checks are a good alternative to requiring the gateway to ACK every packet and should allow a single gateway to handle more Dots
        // check the link every count packets
        // declare the Dot disconnected after threshold failed link checks
        // for count = 3 and threshold = 5, the Dot will ask for a link check response every 5 packets and will consider the connection lost if it fails to receive 3 responses in a row
        update_network_link_check_config(3, 5);
        
        // enable or disable Adaptive Data Rate
        dot->setAdr(adr);

        // Configure the join delay
        dot->setJoinDelay(join_delay);

        // save changes to configuration
        logInfo("saving configuration");
        if (!dot->saveConfig()) {
            logError("failed to save configuration");
        }
        
        // display configuration
        display_config();
    } else {
        // restore the saved session if the dot woke from deepsleep mode
        // useful to use with deepsleep because session info is otherwise lost when the dot enters deepsleep
        logInfo("restoring network session from NVM");
        dot->restoreNetworkSession();
    }
    
    // join network if not joined
    if (!dot->getNetworkJoinStatus()) {
        join_network();
        pc.printf("joining network\r");
    }
    
    if (dot->setTxDataRate(mDot::DR5) != mDot::MDOT_OK) {
        logError("failed to set TX datarate to DR1");
    }
    
    
    
    char arr[10];
    while (true) {
        memset(arr, 0, 10);
        
        std::vector<uint8_t> tx_data;
        tx_data.clear();        
        
        pc.printf("Enter a message to TX: ");
        char c = 'f';
        
        for(int i = 0; i < 9 && c != '!'; i++){
            c = pc.getc();
            arr[i] = c;
        }
        //pc.gets(arr, 9);
        pc.printf("sending: %s\r", arr); 
        
        for(int i = 0; arr[i] != '!'; i++) {
            tx_data.push_back(arr[i]);
        }
        send_data(tx_data);
        pc.printf("message sent... \r"); 
    }
    return 0;
}