Code to test feather board

Dependencies:   max32630fthr USBDevice

main.cpp

Committer:
PowerIC
Date:
2019-11-05
Revision:
0:420f0fba20e1

File content as of revision 0:420f0fba20e1:

///////////////////////////////////////////////////////////////////////////////////////////////////////
// MAX32630FTHR FIRMWARE FOR TESTING I/Os
// Revision:    1.0.0
// Date:        11/05/2019
// Author:      Bill Smith
//
// 11/05/2019: Initial Code
///////////////////////////////////////////////////////////////////////////////////////////////////////

#include "mbed.h"
#include "max32630fthr.h"
#include "USBHID.h"


MAX32630FTHR pegasus(MAX32630FTHR::VIO_3V3);

// We declare a USBHID device.
// HID In/Out Reports are 64 Bytes long
// Vendor ID (VID):     0x0B6A  // Maxim Integrated
// Product ID (PID):    0x0001  // 
// Serial Number:       0x0001  //
USBHID hid(64, 64, 0x0B6A, 0x0002, 0x0001, true);

DigitalOut red_led(LED1);
DigitalOut green_led(LED2);
DigitalOut blue_led(LED3);

DigitalOut PIN27(P3_5);     // SCL_1
DigitalOut PIN28(P3_4);     // SDA_1
DigitalOut PIN9(P5_7);      // SDA_2
DigitalOut PIN10(P6_0);     // SCL_2

HID_REPORT send_report;
HID_REPORT recv_report;

//-----------------------------------------------------------------------------------------------------
// USB COMMANDS
//-----------------------------------------------------------------------------------------------------

// LED Command
#define WRITE_LED                   0x20    // Send data to the RGB LED


// Commands
#define TOGGLE_OFF                  0x30    // 
#define TOGGLE_SCL1                 0x31    // 
#define TOGGLE_SDA1                 0x32    // 
#define TOGGLE_SCL2                 0x33    // 
#define TOGGLE_SDA2                 0x34    // 
#define TOGGLE_ALERTB1              0x35    // 
#define TOGGLE_ALERTB2              0x36    // 

// LED CONSTANTS
#define LEDS_OFF        0x00
#define RED             0x01
#define GREEN           0x02
#define BLUE            0x03
#define YELLOW          0x04

// LOGICAL CONSTANTS
#define OFF             0x00
#define SCL1            0x01
#define SDA1            0x02
#define SCL2            0x03
#define SDA2            0x04


//-----------------------------------------------------------------------------------------------------
// VARIABLES
//-----------------------------------------------------------------------------------------------------
static char TOGGLE_STATE = 0x00;


void StartUp_LEDs()
{
    red_led = 0;    // Turn ON RED LED
    wait(0.3);
    red_led = 1;    // Turn OFF RED LED
    green_led = 0;  // Turn ON GREEN LED
    wait(0.3);
    green_led = 1;  // Turn OFF GREEN LED
    blue_led = 0;   // Turn ON BLUE LED 
    wait(0.3);   
    blue_led = 1;   // Turn OFF BLUE LED   
}


// main() runs in its own thread in the OS
int main()
{
    send_report.length = 64;
    recv_report.length = 64;
    
    StartUp_LEDs(); // Cycle LEDs to show startup
    
    while (true) 
    {
        switch(TOGGLE_STATE)
        {
            case OFF:
                PIN27 = 0;  // SCL_1 = OFF
                PIN28 = 0;  // SDA_1 = OFF
                PIN10 = 0;  // SCL_2 = OFF
                PIN9 = 0;   // SDA_2 = OFF
            case SCL1:
                PIN27 = !PIN27;
                wait(0.1); // TOGGLE SCL_1 EACH PASS
                break;
            case SDA1:
                PIN28 = !PIN28;
                wait(0.1); // TOGGLE SDA_1 EACH PASS
                break;
            case SCL2:
                PIN10 = !PIN10;
                wait(0.1); // TOGGLE SCL_2 EACH PASS
                break;
            case SDA2:
                PIN9 = !PIN9;
                wait(0.1); // TOGGLE SDA_2 EACH PASS
                break;
            default:
                break;
        }// END SWITCH
        
        if(hid.readNB(&recv_report)) 
        {
            switch(recv_report.data[0])
            {
            //-----------------------------------------------------------------------------------------------------------------
                case WRITE_LED:             // COMMAND [0x20] - WRITE TO RGB LED
            //-----------------------------------------------------------------------------------------------------------------
                    switch(recv_report.data[1])
                    {
                        case LEDS_OFF:
                            red_led = 1;    // Turn OFF RED LED
                            green_led = 1;  // Turn OFF GREEN LED
                            blue_led = 1;   // Turn OFF BLUE LED
                            break;
                        case RED:
                            if(recv_report.data[2] == 1){red_led = 0;} else {red_led = 1;}
                            break;
                        case GREEN:
                            if(recv_report.data[2] == 1){green_led = 0;} else {green_led = 1;}
                            break; 
                        case BLUE:
                            if(recv_report.data[2] == 1){blue_led = 0;} else {blue_led = 1;}
                            break;
                        default:
                            break;
                    }// End Switch (RD1)
                        
                    send_report.data[0] = recv_report.data[0];                              // Echo Command
                    send_report.data[1] = recv_report.data[1];                              // Echo Subcommand 1
                    send_report.data[2] = recv_report.data[2];                              // Echo Subcommand 2
                    break;
            //-----------------------------------------------------------------------------------------------------------------
              case TOGGLE_OFF:          // COMMAND [0x30] - TOGGLE OFF
            //-----------------------------------------------------------------------------------------------------------------                    
                    send_report.data[0] = TOGGLE_OFF;                                       // Echo Command
                    TOGGLE_STATE = OFF;
                    
                    break;
            //-----------------------------------------------------------------------------------------------------------------
                case TOGGLE_SCL1:       // COMMAND [0x31] - TOGGLE SCL1
            //-----------------------------------------------------------------------------------------------------------------                     
                    send_report.data[0] = TOGGLE_SCL1;                                      // Echo Command
                    TOGGLE_STATE = SCL1;
                     
                    break;
            //-----------------------------------------------------------------------------------------------------------------
               case TOGGLE_SDA1:        // COMMAND [0x32] - TOGGLE SDA1 
            //-----------------------------------------------------------------------------------------------------------------                     
                    send_report.data[0] = TOGGLE_SDA1;                                      // Echo Command
                    TOGGLE_STATE = SDA1;
                                                        
                    break;
            //-----------------------------------------------------------------------------------------------------------------
                case TOGGLE_SCL2:       // COMMAND [0x33] - TOGGLE SCL2
            //-----------------------------------------------------------------------------------------------------------------                     
                    send_report.data[0] = TOGGLE_SCL2;                                      // Echo Command
                    TOGGLE_STATE = SCL2;
                                       
                    break;
            //-----------------------------------------------------------------------------------------------------------------
               case TOGGLE_SDA2:        // COMMAND [0x34] - TOGGLE SDA2 
            //-----------------------------------------------------------------------------------------------------------------                     
                    send_report.data[0] = TOGGLE_SDA2;                                      // Echo Command
                    TOGGLE_STATE = SDA2;                   
                                       
                    break;

            }// End Switch - Command Interpretor
 
            //Send the report
            hid.send(&send_report);
        }// End If - HID Message
    }// End Main While Loop
}// End Main