JLC test
Dependencies: PinDetect libmDot mbed-rtos mbed
utilities.cpp
- Committer:
- tmulrooney
- Date:
- 2016-01-30
- Revision:
- 2:376af6a70e8a
- Parent:
- 1:96c429800568
File content as of revision 2:376af6a70e8a:
/* ========================================
* Filename: utilities.c
*
* Description: functions needed by other files
*
* Copyright J-Factor Embedded Technologies 2015
* Copyright TJM Embedded Software 2015
* All Rights Reserved
* UNPUBLISHED, LICENSED SOFTWARE.
*
* CONFIDENTIAL AND PROPRIETARY INFORMATION
* WHICH IS THE PROPERTY OF J-Factor Embedded Technologies.
*
* ========================================
*/
/** \file
* \brief functions used by other files.
*/
#include <time.h>
#include "stdio.h"
#include "common.h"
/**
* \fn void date(void)
*
* \brief gets current time and date.
*
* gets date current time and date since last set date command. there is no real time clock in the system so date is relative.
* \return None<p>
*
*/
void date(void)
{
struct tm *epoch_tm = gmtime(&epoch);
if(epoch_tm != NULL)
c_time_string = asctime(gmtime(&epoch));
else
c_time_string = "00:00:00";
}
/**
* \fn void setDate(char *str)
*
* \brief gets current time and date.
*
* gets date current time and date since last set date command. there is no real time clock in the system so date is relative.
* \return None<p>
*
*/
void setDate(char *str)
{
struct tm t;
int day,month,year,hour,minute,second;
int num;
time_t tempEpoch;
num = sscanf(str,"%d/%d/%d %d:%d:%d",&month,&day,&year,&hour,&minute,&second); /* get human readable current date */
if(num != 6)
{
pc.printf("Illegal or missing parameters. expected 6 integers\r\nformat: Month Day Year Hour Minute Second\r\n");
return;
}
t.tm_year = year-1900;
t.tm_mon = month - 1; // Month, 0 - jan
t.tm_mday = day; // Day of the month
t.tm_hour = hour;
t.tm_min = minute;
t.tm_sec = second;
t.tm_isdst = -1; // Is DST on? 1 = yes, 0 = no, -1 = unknown
tempEpoch = mktime(&t);
if ( (month > 12) || (day > 31) || (hour > 23) || (minute > 59) || (second > 59) )
{
pc.printf("Illegal or missing parameters. expected 6 integers\r\nformat: Month/Day/Year Hour:Minute:Second\r\n");
return;
}
epoch = tempEpoch;
}
void printVersion()
{
// pc.printf("%s Built on: %s %s\r\n\r\n", dot->getId().c_str(),__DATE__,__TIME__);
pc.printf("\r\nJLC MT Demo: V%d.%02d %s Built on: %s %s\r\n",VERSION_MAJOR,VERSION_MINOR,VERSION_DATE, __DATE__,__TIME__);
}
uint8 tolower(uint8 c)
{
if( (c >= 'A') && (c <= 'Z') )
return (c | 0x20);
else
return c;
}
/**
* \fn float strtofloat (char *str)
*
* \brief converts an ASCII string to float.
*
* This routine converts a floating point number in the form
* xx.yy to a floating point number.
*
* \param[in] str - pointer to a character string containing the floating point number
* \return float - converted number<p>
*
*/
float strtofloat (char *str)
{
float result = 0.0;
uint8 intPart[3];
uint16 intValue = 0;
uint8 floatPart[3];
float floatValue = 0.0;
uint8 i;
char *ptrDecimalPoint = NULL;
char *ptrStr = NULL;
char ch;
uint8 fractionValid = 0;
uint8 integerValid = 0;
for(i=0;i<sizeof(intPart);i++) /* clear integer digits */
intPart[i] = 0;
for(i=0;i<sizeof(floatPart);i++) /* floating digits */
floatPart[i] = 0;
ptrDecimalPoint = strchr(str, '.'); /* find the decimal point if any */
if (ptrDecimalPoint != NULL)
{
fractionValid = 1;
if(ptrDecimalPoint != str) /* see if any integer digits */
integerValid = 1;
}
else
{
integerValid = 1;
ptrDecimalPoint = str + strlen(str);
}
if(integerValid) /* get and save all integer digits */
{
for(i=0, ptrStr = ptrDecimalPoint;ptrStr != str; i++)
{
ptrStr--;
ch = *ptrStr;
if( (ch >= '0') && (ch <= '9') )
{
intPart[i] = ch - '0';
}
else
{
fractionValid = 0;
break;
}
}
for(i=0;i<sizeof(intPart);i++)
intValue += (intPart[i] * power(10,i));
}
if(fractionValid) /* get and save all fraction digits */
{
for(i=0, ptrStr = ptrDecimalPoint;ptrStr < str + strlen(str); i++)
{
ptrStr++;
ch = *ptrStr;
if( (ch >= '0') && (ch <= '9') )
{
floatPart[i] = ch - '0';
}
else
{
break;
}
}
for(i=0;i<sizeof(floatPart);i++)
floatValue += (floatPart[i] * (1.0/power(10,i+1)) );
}
result = intValue + floatValue;
return result;
}
/**
* \fn uint16 power(uint8 num, uint8 pow)
*
* \brief takes number(num) to power(pow)
*
* This routine takes an 8 bit integer num and
* raises it ot the power pow.
*
* \param[in] num - 8 bit integer number
* \param[in] pow - 8 bit power to raise num
* \return uint16 - 16 bit num to the power pow<p>
*
*/
uint16 power(uint8 num, uint8 pow)
{
uint8 i;
uint16 result = 1;
for(i=0;i<pow;i++)
result = result * num;
return result;
}