Treehouse Mbed Team / Mbed 2 deprecated APS_DCM1SL

Dependencies:   mbed

src/menu.cpp

Committer:
mfwic
Date:
2018-12-06
Revision:
8:d3d7dca419b3
Parent:
7:860b3a8275cb
Child:
9:816b9a4e4f21

File content as of revision 8:d3d7dca419b3:

//-------------------------------------------------------------------------------
// 
//  Treehouse Inc.
//  Colorado Springs, Colorado
// 
//  Copyright (c) 2016 by Treehouse Designs Inc. 
// 
//  This code is the property of Treehouse, Inc. (Treehouse) and may not be redistributed
//  in any form without prior written permission from the copyright holder, Treehouse.
//
//  The above copyright notice and this permission notice shall be included in
//  all copies or substantial portions of the Software.
//   
//-------------------------------------------------------------------------------
// 
//  REVISION HISTORY:
//  
//   $Author: $
//   $Rev: $
//   $Date: $
//   $URL: $
// 
//-------------------------------------------------------------------------------

#include "mbed.h"
#include "globals.h"
#include "serial.h"
#include "menu.h"
#include "Ticker.h"

Ticker drt;
unsigned int oldTime=0;

/*******************************************************************************
 drtInt - Display Refresh Timer interrupt handler
*******************************************************************************/
// real time clock interrupt to flash the LED
void drtInt(void)
{
   updateReady = TRUE;
}

/*******************************************************************************
 initDRT - Create Display Refresh Timer interrupt
*******************************************************************************/
// initialize display refresh timer (DRT)
void initDRT(void)
{
   drt.attach_us(&drtInt, UPDATE_REFRESH_DELAY_US); 
}

/*******************************************************************************
 refreshData - Refresh voltage and current readings to the terminal
*******************************************************************************/
void refreshData(void){
    //loopTime = masterTimer.read_ms() - oldTime;
    //oldTime = masterTimer.read_ms();
    
    double v48f = 0.0;
    double v24f = 0.0;
    double v12f = 0.0;
    double i48f = 0.0;
    double i24f = 0.0;
    double i12f = 0.0;
    
    if(!raw){
        v48f = VOLTAGE_48_FACTOR*v48;
        v24f = VOLTAGE_24_FACTOR*v24;
        v12f = VOLTAGE_12_FACTOR*v12;
        i48f = (i48-CURRENT_48_OFFSET)/CURRENT_48_DIV_FACTOR;
        i24f = (i24-CURRENT_24_OFFSET)/CURRENT_24_DIV_FACTOR;
        i12f = (i12-CURRENT_12_OFFSET)/CURRENT_12_DIV_FACTOR;
    }else{
        v48f = 1.0*v48;
        v24f = 1.0*v24;
        v12f = 1.0*v12;
        i48f = 1.0*i48;
        i24f = 1.0*i24;
        i12f = 1.0*i12;
    }
    double pwr_out=v12f*i12f;
    double pwr_in=v48f*(i48f-CURRENT_CONTROL_OFFSET);
    double pwr_eff=100*pwr_out/pwr_in;
    
    sprintf(strbuf, "V48=%2.1f, I48=%3.1f | V24=%2.1f, I24=%3.1f | V12=%2.1f, I12=%3.1f    \r\n", v48f, i48f, v24f, i24f, v12f, i12f);
    //sprintf(strbuf, "V48=%2.1f, I48=%2.2f | V24=%2.1f, I24=%2.2f | V12=%2.1f, I12=%2.2f || loop=%d    \r\n", v48f, i48f, v24f, i24f, v12f, i12f, loopTime);
    sendSerial(strbuf);
    sprintf(strbuf, "Power Out = %4.1f W, Power In = %4.1f W     \r\n", pwr_out, pwr_in);
    sendSerial(strbuf);
    sprintf( strbuf, "%c[34m", 27 ); // ESC=27, Blue Text
    sendSerial(strbuf);
    sprintf(strbuf, "Power Efficiency = %2.2f percent    \r\n\r\n", pwr_eff);
    sendSerial(strbuf);
    sprintf( strbuf, "%c[30m", 27 ); // ESC=27, White Text
    sendSerial(strbuf);
    //sprintf(strbuf, "thermCode=%d, binCode=%d", thermCode[17], binCode[6]);
    sprintf(strbuf, "wr_out_code=%d, en_out_code=%d    ", wr_out_code, en_out_code);
    sendSerial(strbuf);
}

/*******************************************************************************
 updateTerminal - Save cursor, write data, restore cursor.
*******************************************************************************/
void updateTerminal(void){
    //get cursor pos, store in CUR_POS
    sprintf( strbuf, "%c7", 27 ); // ESC=27, Save cursor position = [s
    sendSerial(strbuf);
    //move cursor to DATA_ROW
    sprintf( strbuf, "%c[3;0f", 27 ); // ESC=27, Move cursor position = [line;columnf
    sendSerial(strbuf);
    //write data
    refreshData();
    //move cursor to CUR_POS
    sprintf( strbuf, "%c8", 27 ); // ESC=27, Save cursor position = [s
    sendSerial(strbuf);
}

/*******************************************************************************
 clrScrn - clears terminal and moves cursor to upper-left corner
*******************************************************************************/
// clears terminal
void clrScrn(void){
    sprintf( strbuf, "%c[2J", 27 ); // ESC=27, Clear screen = [2J
    sendSerial(strbuf);
    sprintf( strbuf, "%c[f", 27 ); // ESC=27, Move cursor to upper-left corner = [f
    sendSerial(strbuf);
}

/*******************************************************************************
 menuRedraw - Write menu to terminal
*******************************************************************************/
// clears terminal and re-draws main menu
void menuRedraw(bool prompt){
    clrScrn();
    
    sprintf( strbuf, "%c[34m", 27 ); // ESC=27, Blue Text
    sendSerial(strbuf);
    
    sprintf(strbuf, "                     Agility Power Systems DCM1 0.4\r\n\r\n");
    sendSerial(strbuf);
    
    sprintf( strbuf, "%c[0m", 27 ); // ESC=27, Normal
    sendSerial(strbuf);
    sprintf( strbuf, "%c[30m", 27 ); // ESC=27, White Text
    sendSerial(strbuf);
    
    refreshData();
    
    sprintf(strbuf, "\r\n MULT");
    sendSerial(strbuf);
    sprintf(strbuf, "\r\n BRDS");
    sendSerial(strbuf);
    sprintf(strbuf, "\r\n ALLOFF");
    sendSerial(strbuf);
    sprintf(strbuf, "\r\n RUN [xx]");
    sendSerial(strbuf);
    sprintf(strbuf, "\r\n STOP");
    sendSerial(strbuf);
    
    if(prompt){
        menuPrompt(MENU_DCM1);
    }
}

/*******************************************************************************
 menuPrompt - Write menu prompt to terminal
*******************************************************************************/
// sends carriage return and linefeed and prompt character
void menuPrompt(int menuType)
{
 char strMenu[30] ={0};

    switch(menuType)
    {
      case  MENU_DCM1: strcpy(strMenu,"DCM1"); break;
      //case  MENU_DIFFERENTIAL: strcpy(strMenu,"DIFF"); break;
      //case  MENU_SINGLE: strcpy(strMenu,"SINGLE"); break;
      //case  MENU_DUAL: strcpy(strMenu,"DUAL"); break;
      //case  MENU_INVERT: strcpy(strMenu,"INVERT"); break;
      //case  MENU_SETTINGS: strcpy(strMenu,"SET"); break;
      //case  MENU_SETTINGS_CHAN1: strcpy(strMenu,"SET CHAN1"); break;
      //case  MENU_SETTINGS_CHAN2: strcpy(strMenu,"SET CHAN2"); break;
      //case  MENU_SETTINGS_CLOCK: strcpy(strMenu,"SET CLOCK"); break;
      case  MENU_CALIBRATE: strcpy(strMenu,"CAL"); break;
      case  MENU_TEST: strcpy(strMenu,"TEST"); break;
      case  MENU_MAIN: strcpy(strMenu,"MAIN"); break;
      default: strcpy(strMenu,"UNDF"); break;
    }

    // append the CR,LF and the ready character
     if(serialStatus.computer)
     {
         sendSerial("\r");
     }
     else
     {
        // adds a carrot so you know you are talking in terminal
        sprintf(strbuf,"\n\r%s>",strMenu);
        sendSerial(strbuf);
        // sendSerial("\n\r>");
     }
}

void splash_screen(void)
{
    clrScrn();
    sprintf(strbuf,"    ___         _ ___ __           ____                             _____            __                     \r\n");sendSerial(strbuf);
    sprintf(strbuf,"   /   | ____ _(_) (_) /___  __   / __ \\____ _      _____  _____   / ___/__  _______/ /____  ____ ___  _____\r\n");sendSerial(strbuf);
    sprintf(strbuf,"  / /| |/ __ `/ / / / __/ / / /  / /_/ / __ \\ | /| / / _ \\/ ___/   \\__ \\/ / / / ___/ __/ _ \\/ __ `__ \\/ ___/\r\n");sendSerial(strbuf);
    sprintf(strbuf," / ___ / /_/ / / / / /_/ /_/ /  / ____/ /_/ / |/ |/ /  __/ /      ___/ / /_/ (__  ) /_/  __/ / / / / (__  ) \r\n");sendSerial(strbuf);
    sprintf(strbuf,"/_/  |_\\__, /_/_/_/\\__/\\__, /  /_/    \\____/|__/|__/\\___/_/      /____/\\__, /____/\\__/\\___/_/ /_/ /_/____/  \r\n");sendSerial(strbuf);
    sprintf(strbuf,"      /____/          /____/                                          /____/                                \r\n");sendSerial(strbuf);
}
/*
    sprintf(strbuf,"    ___         _ ___ __           ____                             _____            __                     \r\n");
    sprintf(strbuf,"   /   | ____ _(_) (_) /___  __   / __ \____ _      _____  _____   / ___/__  _______/ /____  ____ ___  _____\r\n");
    sprintf(strbuf,"  / /| |/ __ `/ / / / __/ / / /  / /_/ / __ \ | /| / / _ \/ ___/   \__ \/ / / / ___/ __/ _ \/ __ `__ \/ ___/\r\n");
    sprintf(strbuf," / ___ / /_/ / / / / /_/ /_/ /  / ____/ /_/ / |/ |/ /  __/ /      ___/ / /_/ (__  ) /_/  __/ / / / / (__  ) \r\n");
    sprintf(strbuf,"/_/  |_\__, /_/_/_/\__/\__, /  /_/    \____/|__/|__/\___/_/      /____/\__, /____/\__/\___/_/ /_/ /_/____/  \r\n");
    sprintf(strbuf,"      /____/          /____/                                          /____/                                \r\n");
*/