Complete sensor demo.

Dependencies:   modem_ref_helper CRC X_NUCLEO_IKS01A1 DebouncedInterrupt

modem_callbacks.cpp

Committer:
Jeej
Date:
2017-05-15
Revision:
0:87c57e1b1e1c
Child:
1:4d3968b2941b

File content as of revision 0:87c57e1b1e1c:

#include "mbed.h"
#include "rtos.h"
#include "WizziDebug.h"

#include "alp_spec.h"
#include "alp_helpers.h"
#include "modem_ref.h"

#include "ram_fs.h"
#include "hal_types.h"

extern Queue<void, 8>   g_file_modified;

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

// Callbacks to MODEM's ALP requests
// ============================================================{{{
void my_read(u8 fid, u32 offset, u32 length, int id)
{
    u8 data[256]; // XXX VLA
    
    if (ram_fs_read(fid, offset, length, data))
    {
        // Error
        length = 0;
    }
    
    modem_respond_read(fid, data, offset, length, id);
}

void my_write(u8 fid, void *data, u32 offset, u32 length, int id)
{
    alp_errors_t err;
    
    if (ram_fs_write(fid, offset, length, (uint8_t*)data))
    {
        err = ALP_ERR_FILE_NOT_FOUND;
    }
    else
    {
        err = ALP_ERR_NONE;
        g_file_modified.put((void*)fid);
    }
    
    modem_respond(0, err, id);
}

void my_read_fprop(u8 fid, int id)
{
    u8* hdr = (u8*)ram_fs_get_header(fid);
    
    modem_respond_fprop(fid, hdr, id);
}

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

void my_delete(u8 fid, int id)
{
    alp_errors_t err;
    
    err = (ram_fs_delete(fid))? ALP_ERR_FILE_NOT_FOUND : ALP_ERR_NONE;
    
    modem_respond(0, err, id);
}

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

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

void my_reset(void)
{
    NVIC_SystemReset();
}

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