#include <stddef.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
#include <INH83.H>
#include "MAH8300H.H"
#include "COSOUL.H"
#include "C_GLOBAL.H"
/* -------------------------------------------------------------------------*/
/* GESTIONE MENU */
/* -------------------------------------------------------------------------*/
void HandleMenu( void )
{ short menu, MaxMenu, exit;
/*-----------------------------------------------------------------------*/
SysRam.InMenu = TRUE;
SetUpDw( PBMODE );
ClearPbs( MENU_INDEX );
menu = 0;
exit = FALSE;
while (!exit)
{
/*-----------------------------------------------------------------*/
/* DICITURA MENU. */
/*-----------------------------------------------------------------*/
while (1)
{
SetDebugBit();
DisplayString( Menus[ menu ] );
if( GetPb( MENU_INDEX , 3, TRUE ) ) /* Ritorno premendo OFF */
{ exit = TRUE;
break ;
}
if( GetPb( SELECT_INDEX , 3, TRUE ) ) /* Seleziona Menu */
{
MenuFunctions[ menu ]();
SetUpDw( PBMODE );
ClearPbs( MENU_INDEX );
}
MaxMenu = ( SysRam.Debug || SysRam.PowerONDebug ? MAX_DEBUG_MENU : MAX_MENU );
/* Scorrimento voci menu */
if( GetPb( DW_INDEX , 3, TRUE ) )
{ menu++;
menu %= MaxMenu;
}
if( GetPb( UP_INDEX , 3, TRUE ) )
{ menu--;
if( menu < 0 )
menu = MaxMenu-1;
}
} /* endwhile */
if( SysRam.Debug )
WaitDebugJumperOFF();
} /* endwhile */
if(SysRam.WritePage0)
{ SysRam.WritePage0 = FALSE;
WriteE2CConf();
}
ClearPbs( MENU_INDEX );
SetUpDw( KBMODE );
SysRam.InMenu = FALSE;
}
/* -------------------------------------------------------------------------*/
/* GESTIONE MENU RETE RS485. */
/* -------------------------------------------------------------------------*/
void RS485Menu( void )
{ short item, exit, inc, key, change,modified;
short speed;
char charlen,parity,cksumxor;
/* ----------------------------------------------------------------------- */
item = 0;
exit = change = modified = FALSE;
charlen = ( CSState.DataBits8==TRUE?'8':'7');
parity = ( CSState.NoParity ==TRUE?'N':'O');
cksumxor = ( CSState.CkSumXor ==TRUE?'X':'S');
switch (CSState.BpsRS485) {
case (2400/WUKON_BPS) :
case (4800/WUKON_BPS) :
case (9600/WUKON_BPS) :
case (19200/WUKON_BPS) :
speed = (unsigned short)CSState.BpsRS485 * WUKON_BPS ;
break;
default:
speed = DEFAULT_BPS_485 ;
} /* endswitch */
while (!exit) {
switch (item) {
case 0:
if( !change )
{ sprintf( dline, "ADDRESS %2u ", CSState.Tad );
DisplayString( dline );
}
else
{
inc = 1;
strcpy( dline, "ADDRESS <%2u> " );
modified=HandleParameter( &CSState.Tad, inc, dline, CHAR_TYPE, 1, 64 );
change = FALSE;
}
break;
case 1:
if( !change )
{ sprintf( dline, "BAUDS %5u ", speed );
DisplayString( dline );
}
else
{
inc = 1;
strcpy( dline, "BAUDS <%5u> " );
modified=HandleParameter( &speed, inc, dline, BPS_TYPE , MIN_BPS_485, MAX_BPS_485 );
change = FALSE;
}
break;
case 2:
if( !change )
{ sprintf( dline, "XMIT DELAY %3u ", (unsigned short )CSState.XmitDelay );
DisplayString( dline );
}
else
{
inc = 1;
strcpy( dline, "XMIT DELAY <%3u>" );
modified=HandleParameter( &CSState.XmitDelay, inc, dline, UCHAR_TYPE , 0, 255 );
change = FALSE;
}
break;
case 3:
if( !change )
{ sprintf( dline, "DATA BITS %c ", charlen );
DisplayString( dline );
}
else
{
inc = 1;
strcpy( dline, "DATA BITS <%c> " );
modified=HandleParameter( &charlen, inc, dline, YN_TYPE , '7', '8' );
change = FALSE;
}
break;
case 4:
if( !change )
{ sprintf( dline, "PARITY %c ", parity );
DisplayString( dline );
}
else
{
inc = 1;
strcpy( dline, "PARITY <%c> " );
modified=HandleParameter( &parity, inc, dline, YN_TYPE , 'O', 'N' );
change = FALSE;
}
break;
case 5:
if( !change )
{ sprintf( dline, "CHECKSUM %c ", cksumxor );
DisplayString( dline );
}
else
{
inc = 1;
strcpy( dline, "CHECKSUM <%c> " );
modified=HandleParameter( &cksumxor, inc, dline, YN_TYPE , 'X', 'S' );
change = FALSE;
}
break;
} /* endswitch */
if( modified )
{
CSState.BpsRS485 = ( speed / WUKON_BPS );
CSState.DataBits8 = ( charlen == '8' ? TRUE : FALSE );
CSState.CkSumXor = ( cksumxor == 'X' ? TRUE : FALSE );
CSState.NoParity = ( parity == 'N' ? TRUE : FALSE );
SetPage0Write(1);
modified = FALSE;
}
key = HandleMenuUpDw( change );
if( key != 0 )
switch (key) {
case MENU_FORW:
item++;
if( item >= RS485_ITEMS ) item = 0;
break;
case MENU_BACKW:
item--;
if( item < 0 ) item = RS485_ITEMS-1 ;
break;
case MENU_EXIT:
exit = TRUE;
break;
case MENU_SELECT:
change = TRUE;
break;
} /* endswitch */
} /* endwhile */
}
/* -------------------------------------------------------------------------*/
/* GESTIONE MENU RS232. */
/* -------------------------------------------------------------------------*/
void RS232Menu( void )
{ short exit, inc, key, change, modified, speed;
/* ----------------------------------------------------------------------- */
exit = change = modified = FALSE;
switch (CSState.BpsRS232) {
case (600 /WUKON_BPS):
case (1200/WUKON_BPS):
case (2400/WUKON_BPS):
case (4800/WUKON_BPS):
case (9600/WUKON_BPS):
speed = (unsigned short)CSState.BpsRS232 * WUKON_BPS;
break;
default:
speed = DEFAULT_BPS_232 ;
} /* endswitch */
while (!exit) {
if( !change )
{
sprintf( dline, "BAUDS %4u ", speed );
DisplayString( dline );
}
else
{
inc = 1;
strcpy( dline, "BAUDS <%4u> " );
modified=HandleParameter( &speed, inc, dline, BPS_TYPE, MIN_BPS_232, MAX_BPS_232 );
change = FALSE;
}
if( modified )
{ CSState.BpsRS232 = speed / WUKON_BPS;
SetPage0Write(1);
modified = FALSE;
}
key = HandleMenuUpDw( change );
if( key != 0 )
switch (key) {
case MENU_EXIT:
exit = TRUE;
break;
case MENU_SELECT:
change = TRUE;
break;
} /* endswitch */
} /* endwhile */
}
/* -------------------------------------------------------------------------*/
/* GESTIONE MENU DI CONFIGURAZIO