/*
*****************************************************************
*name: IE_tclib.c
*author: Samuel Igwe
*date: 08/04/2013
*description: my thumb library. pretty generic except for the
* output through uart. i am only going to support a
* small number of functions.
*****************************************************************
*/
#include "IE_tclib.h"
#include "IE_stm32.h"
/*
*****************************************************************
*description: checks and returns the uart status
*output: int =status
* 0 =no data !0 =data available
*****************************************************************
*/
int
tclib_getch(void)
{
volatile int wdTemp;
wdTemp = *PTR_STM32_UART1_SR;
wdTemp &= STM32_UART_SR_RXNE;
return wdTemp;
}
/*
*****************************************************************
*description: reads a character out of the serial port
*output: int =value
*****************************************************************
*/
int
tclib_getc(void)
{
volatile int wdTemp;
while ((tclib_getch()) == 0)
;
wdTemp = *PTR_STM32_UART1_DR;
return (wdTemp);
}
/*
*****************************************************************
*description: reads a string out of the serial port
*input: char *ptrString =pointer to string
* int wdSize =maximum length of string
*output: int =number of characters read
*****************************************************************
*/
int
tclib_gets(unsigned char *ptrString, int wdSize)
{
volatile int wdCount, wdTemp;
/* first empty the input buffer*/
while ((tclib_getch() != 0))
tclib_getc();
wdSize--; /*subtract the NULL*/
wdCount=0; /*start from the beginning*/
while(wdSize >0)
{
wdTemp=tclib_getc();
switch((char)wdTemp)
{
case ASCII_ESC:
return 0;
case ASCII_CR:
{
ptrString[wdCount] = 0;
return (wdCount+1);
}
case ASCII_BS:
{
if(wdCount > 0)
{
wdCount--;
wdSize++;
wdTemp = ' ';
wdTemp |= (ASCII_BS << 8);
wdTemp |= (ASCII_BS << 16);
stm32_uart_puts((unsigned char *)&wdTemp, 3);
}
break;
}
default:
{
if ((wdTemp >= '0' && wdTemp <= '9') ||\
(wdTemp >= 'A' && wdTemp <= 'Z') ||\
(wdTemp >= 'a' && wdTemp <= 'z') ||\
(wdTemp == '_') ||\
(wdTemp == '.') ||\
(wdTemp == ' '))
{
ptrString[wdCount++]=(char)wdTemp;
wdSize--;
stm32_uart_puts((unsigned char *)&wdTemp, 1);
}
break;
}
}
}
return (wdCount+1);
}
/*
*****************************************************************
*description: print characters out to uart
*input: char *ptrString = pointer to string
* int wdValue =value
*note: scan through string for format char %x %c \t \n \r
*****************************************************************
*/
void
tclib_printf(char *ptrString, int wdValue)
{
unsigned char sbString[9];
int wdTemp;
while ((*ptrString) != NULL)
{
wdTemp =*ptrString;
switch((char)wdTemp)
{
case '%':
{
wdTemp = *(++ptrString);
switch(wdTemp)
{
case 'c':
{
stm32_uart_puts((unsigned char *)&wdTemp, 1);
break;
}
case 's':
{
wdTemp = tclib_strlen((unsigned char *)wdValue);
stm32_uart_puts((unsigned char *)wdValue, wdTemp);
break;
}
case 'd':
case 'x':
{
tclib_itoa(wdValue,sbString);
wdTemp = tclib_strlen(sbString);
stm32_uart_puts(sbString, wdTemp);
break;
}
default:
{
stm32_uart_puts((unsigned char *)&wdTemp, 1);
break;
}
}
ptrString++;
break;
}
case '\\':
{
if (*(++ptrString) == NULL)
{
stm32_uart_puts((unsigned char *)&wdTemp, 1);
break;
}
else
{
wdTemp = *(ptrString++);
switch(wdTemp)
{
case 'n':
{
wdTemp = ASCII_CR;
stm32_uart_puts((unsigned char *)&wdTemp, 1);
}
case 'r':
{
wdTemp = ASCII_LF;
stm32_uart_puts((unsigned char *)&wdTemp, 1);
break;
}
case 't':
{
wdTemp = ASCII_TAB;
stm32_uart_puts((unsigned char *)&wdTemp, 1);
break;
}
default:
{
stm32_uart_puts((unsigned char *)&wdTemp, 0);
break;
}
}
}
break;
}
default:
{
switch(wdTemp)
{
case ASCII_LF:
{
wdTemp = ASCII_LF;
stm32_uart_puts((unsigned char *)&wdTemp, 1);
}
case ASCII_CR:
{
wdTemp = ASCII_CR;
stm32_uart_puts((unsigned char *)&wdTemp, 1);
break;
}
case ASCII_TAB:
{
wdTemp = ASCII_TAB;
stm32_uart_puts((unsigned char *)&wdTemp, 1);
break;
}
default:
{
stm32_uart_puts((unsigned char *)&wdTemp, 1);
break;
}
}
ptrString++;
break;
}
}
}
}
Monday, August 5, 2013
IE_tclib.c
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment