LoRaWAN demo.

Dependencies:   modem_ref_helper DebouncedInterrupt

d7a_callbacks.cpp

Committer:
Jeej
Date:
2021-02-19
Revision:
21:f0aecd41db08
Parent:
20:49a8ecd1dda3

File content as of revision 21:f0aecd41db08:

#include "modem_d7a.h"
#include "ram_fs.h"


// ============================================================}}}

// Callbacks to MODEM's ALP requests
// ============================================================{{{
void my_read(u8 action, uint8_t fid, uint32_t offset, uint32_t length, int id)
{
    uint8_t data[256];
    #if 0
    //if (!ram_fs_read(fid, (uint8_t*)data, offset, length))
    {
        modem_ref_respond_read(fid, data, offset, length, id);
    }
    else
    #endif
    {
        modem_ref_respond(action, ALP_ERR_FILE_NOT_FOUND, id);
    }    
}

void my_write(u8 action, uint8_t fid, void *data, uint32_t offset, uint32_t length, int id)
{
    if (!ram_fs_write(fid, (uint8_t*)data, offset, length))
    {
        extern Queue<uint8_t, 8> g_file_modified;

        modem_ref_respond(action, ALP_ERR_NONE, id);
        g_file_modified.put((uint8_t*)(uint32_t)fid);
    }
    else
    {
        modem_ref_respond(action, ALP_ERR_FILE_NOT_FOUND, id);
    }
}

void my_read_fprop(u8 action, uint8_t fid, int id)
{
    uint8_t* hdr = (uint8_t*)ram_fs_get_header(fid);
    
    if (hdr != NULL)
    {
        modem_ref_respond_fprop(fid, (alp_file_header_t*)hdr, id);
    }
    else
    {
        modem_ref_respond(action, ALP_ERR_FILE_NOT_FOUND, id);
    }
}

void my_flush(u8 action, uint8_t fid, int id)
{
    // No flush in this file system
    modem_ref_respond(action, ALP_ERR_NONE, id);
}

void my_delete(u8 action, uint8_t fid, int id)
{
    modem_ref_respond(action, (ram_fs_delete(fid))? ALP_ERR_FILE_NOT_FOUND : ALP_ERR_NONE, id);
}

void my_udata(alp_payload_t* alp)
{
    alp_payload_print(alp);
}

void my_lqual(uint8_t ifid, int per)
{
    PRINT("Interface File [%3d] LQUAL : %d%% PER\r\n", ifid, per);
}

void my_ldown(uint8_t ifid)
{
    PRINT("Interface File [%3d] LDOWN\r\n", ifid);
}

void my_reset(void)
{
    PRINT("Restarting application...\r\n");
    FLUSH();
    NVIC_SystemReset();
}

void my_boot(uint8_t cause, u16 number)
{
    PRINT("Modem BOOT[%c] #%d\r\n", cause, number);
    
    // Modem re-booted, restart APP
    my_reset();
}

void my_busy(uint8_t busy)
{
    if (busy)
    {
        PRINT("Modem Busy\r\n");
        
        /* Stop report, do not use modem */
        /* Wait for modem reboot or modem not busy */
    }
    else
    {
        PRINT("Modem not Busy\r\n");
        
        /* Resume reports */
    }
}

void my_itf_busy(uint8_t ifid, uint32_t seconds)
{
    extern Queue<uint32_t, 8> g_urc;
    
    //PRINT("ITF[%d] Busy for %d seconds.\r\n", ifid, seconds);
    g_urc.put((uint32_t*)seconds);
}