Default Demo Firmware for MAX32625NEXPAQ development module

Dependencies:   nexpaq_mdk

nexpaq tile code to be used with IO_Demo

main.cpp

Committer:
switches
Date:
2017-02-04
Revision:
2:3474351b0eec
Parent:
1:5fb525e83780

File content as of revision 2:3474351b0eec:

#include "mbed.h"
#include "nexpaq_mdk.h"

PwmOut ledR(P2_4);
PwmOut ledG(P2_5);
PwmOut ledB(P2_6);
AnalogIn aIn0(AIN_0);
AnalogIn aIn1(AIN_1);
AnalogIn aIn2(AIN_2);
AnalogIn aIn3(AIN_3);
AnalogIn aIn4(AIN_4);
AnalogIn aIn5(AIN_5);
DigitalInOut digPin[] = {DigitalInOut(P0_1),DigitalInOut(P0_0),DigitalInOut(P1_2),DigitalInOut(P1_1),
                         DigitalInOut(P1_0),DigitalInOut(P1_3),DigitalInOut(P1_7),DigitalInOut(P1_6),
                         DigitalInOut(P3_0),DigitalInOut(P3_1),DigitalInOut(P3_4),DigitalInOut(P3_5),
                         DigitalInOut(P0_2),DigitalInOut(P0_3),DigitalInOut(P4_0),DigitalInOut(P4_1)
                        };

/***** Definitions *****/
#define		FUNCTION_TABLE_NUM					2
#define		UUID_NUM							16			// UUID number is 16, don't change it
#define     LOOP_DELAY                          1000

/***** Globals *****/
void my_function_CMD_2700(unsigned char *pData, unsigned char len);
void my_function_CMD_2702(unsigned char *pData, unsigned char len);
const MDK_REGISTER_CMD my_cmd_func_table[FUNCTION_TABLE_NUM] = {
    {0x2700, my_function_CMD_2700},		// Command -> function
    {0x2702, my_function_CMD_2702},		// Command -> function
};

unsigned char dataOut[10];

/***** Functions *****/
void my_function_CMD_2700(unsigned char *pData, unsigned char len)
{
    unsigned char response = 0x00;
    ledR = 1.0f - (pData[0] / 255.0f);
    ledG = 1.0f - (pData[1] / 255.0f);
    ledB = 1.0f - (pData[2] / 255.0f);
    np_api_upload(0x2701, &response, 1);
}

void my_function_CMD_2702(unsigned char *pData, unsigned char len)
{
    unsigned char response = 0x00;
    int pinIndex = pData[0];
    int pinMode = pData[1];
    switch(pinMode) {
        case 0:
        case 1:
            digPin[pinIndex].mode(PullNone);
            digPin[pinIndex].input();
            break;
        case 2:
            digPin[pinIndex].mode(PullDown);
            digPin[pinIndex].input();
            break;
        case 3:
            digPin[pinIndex].mode(PullUp);
            digPin[pinIndex].input();
            break;
        case 4:
            digPin[pinIndex]=0;
            digPin[pinIndex].output();
            break;
        case 5:
            digPin[pinIndex]=1;
            digPin[pinIndex].output();
            break;
    }
    np_api_upload(0x2703, &response, 1);
}

void sendStatus()
{
    np_api_upload(0x2800, dataOut, 10);
}

/******************************************************************************/
void app_setup()
{
    int i = 0;
//	np_api_set_app_version(0, 0, 3);
    if ( np_api_register((MDK_REGISTER_CMD*)my_cmd_func_table, FUNCTION_TABLE_NUM) == MDK_REGISTER_FAILD ) {
        // Register failed handle code
    }
    ledR = 1.0f;
    ledG = 1.0f;
    ledB = 1.0f;
    for (i = 0; i < 16; i++) {
        digPin[i].mode(PullUp);
        digPin[i].input();
    }
    for (i = 0; i < 10; i++) {
        dataOut[i] = 0xFF;
    }
}

void app_loop()
{
    int anaData;
    anaData = aIn4.read_u16();
    dataOut[0] = anaData;
    dataOut[1] = anaData>>8;
    anaData = aIn5.read_u16();
    dataOut[2] = anaData;
    dataOut[3] = anaData>>8;
    anaData = aIn2.read_u16();
    anaData = anaData/10;
    dataOut[4] = anaData;
    dataOut[5] = anaData>>8;
    anaData = aIn3.read_u16();
    anaData = anaData/10;
    dataOut[6] = anaData;
    dataOut[7] = anaData>>8;

    dataOut[8] = (digPin[7].read()<<7) +
                 (digPin[6].read()<<6) +
                 (digPin[5].read()<<5) +
                 (digPin[4].read()<<4) +
                 (digPin[3].read()<<3) +
                 (digPin[2].read()<<2) +
                 (digPin[1].read()<<1) +
                 (digPin[0].read());
    dataOut[9] = (digPin[15].read()<<7) +
                 (digPin[14].read()<<6) +
                 (digPin[13].read()<<5) +
                 (digPin[12].read()<<4) +
                 (digPin[11].read()<<3) +
                 (digPin[10].read()<<2) +
                 (digPin[9].read()<<1) +
                 (digPin[8].read());
    sendStatus();
}

int main(void)
{
    np_api_init();
    app_setup();
    np_api_start();
    while(1) {
        app_loop();
        np_api_bsl_chk();
        Thread::wait(LOOP_DELAY);
    }
    return 0;
}