2016-04-01 13:00:03 +00:00
//
// shapedemo: testbed for OpenVG APIs
// Anthony Starks (ajstarks@gmail.com)
//
# include <linux/input.h>
# include <string.h>
# include "touch.h"
# include <signal.h>
# include <stdio.h>
# include <stdlib.h>
# include <unistd.h>
# include <string.h>
# include <fcntl.h>
# include <dirent.h>
# include "VG/openvg.h"
# include "VG/vgu.h"
# include "fontinfo.h"
# include "shapes.h"
# define KWHT "\x1B[37m"
# define KYEL "\x1B[33m"
# define PATH_CONFIG " / home / pi / rpidatv / scripts / rpidatvconfig.txt"
char ImageFolder [ ] = " /home/pi/rpidatv/image/ " ;
2016-09-14 15:00:50 +00:00
int fd = 0 ;
2016-04-01 13:00:03 +00:00
int wscreen , hscreen ;
float scaleXvalue , scaleYvalue ; // Coeff ratio from Screen/TouchArea
typedef struct {
int r , g , b ;
} color_t ;
typedef struct {
char Text [ 255 ] ;
color_t Color ;
} status_t ;
# define MAX_STATUS 10
typedef struct {
int x , y , w , h ;
status_t Status [ MAX_STATUS ] ;
int IndexStatus ;
int NoStatus ;
int LastEventTime ;
} button_t ;
# define MAX_BUTTON 20
int IndexButtonInArray = 0 ;
button_t ButtonArray [ MAX_BUTTON ] ;
int IsDisplayOn = 0 ;
# define TIME_ANTI_BOUNCE 500
//GLOBAL PARAM
int fec ;
int SR ;
char ModeInput [ 255 ] ;
int TabSR [ 5 ] = { 125 , 250 , 333 , 500 , 1000 } ;
int TabFec [ 5 ] = { 1 , 2 , 3 , 5 , 7 } ;
char TabModeInput [ 5 ] [ 255 ] = { " CAMMPEG-2 " , " CAMH264 " , " PATERNAUDIO " , " FILETS " , " CARRIER " } ;
GetConfigParam ( char * PathConfigFile , char * Param , char * Value )
{
char * line = NULL ;
size_t len = 0 ;
int read ;
//printf("Read %s\n",PathConfigFile);
FILE * fp = fopen ( PathConfigFile , " r " ) ;
if ( fp ! = 0 )
{
while ( ( read = getline ( & line , & len , fp ) ) ! = - 1 )
{
2016-04-01 17:41:04 +00:00
//printf("%s", line);
2016-04-01 13:00:03 +00:00
if ( strncmp ( line , Param , strlen ( Param ) ) = = 0 )
{
strcpy ( Value , line + strlen ( Param ) + 1 ) ;
char * p ;
if ( ( p = strchr ( Value , ' \n ' ) ) ! = 0 ) * p = 0 ; //Remove \n
break ;
}
//strncpy(Value,line+strlen(Param)+1,strlen(line)-strlen(Param)-1-1/* pour retour chariot*/);
}
}
else
printf ( " Config file not found \n " ) ;
fclose ( fp ) ;
}
SetConfigParam ( char * PathConfigFile , char * Param , char * Value )
{
char * line = NULL ;
size_t len = 0 ;
int read ;
char BackupConfigName [ 255 ] ;
strcpy ( BackupConfigName , PathConfigFile ) ;
strcat ( BackupConfigName , " .bak " ) ;
//printf("Read %s\n",PathConfigFile);
FILE * fp = fopen ( PathConfigFile , " r " ) ;
FILE * fw = fopen ( BackupConfigName , " w+ " ) ;
if ( fp ! = 0 )
{
while ( ( read = getline ( & line , & len , fp ) ) ! = - 1 )
{
2016-04-01 17:41:04 +00:00
//printf("%s", line);
2016-04-01 13:00:03 +00:00
if ( strncmp ( line , Param , strlen ( Param ) ) = = 0 )
{
fprintf ( fw , " %s=%s \n " , Param , Value ) ;
}
else
fprintf ( fw , line ) ;
//strncpy(Value,line+strlen(Param)+1,strlen(line)-strlen(Param)-1-1/* pour retour chariot*/);
}
}
else
printf ( " Config file not found \n " ) ;
fclose ( fp ) ;
fclose ( fw ) ;
char Command [ 255 ] ;
sprintf ( Command , " cp %s %s " , BackupConfigName , PathConfigFile ) ;
system ( Command ) ;
}
int mymillis ( )
{
struct timeval tv ;
gettimeofday ( & tv , NULL ) ;
return ( tv . tv_sec ) * 1000 + ( tv . tv_usec ) / 1000 ;
}
int IsButtonPushed ( int NbButton , int x , int y )
{
int scaledX , scaledY ;
scaledX = x / scaleXvalue ;
scaledY = hscreen - y / scaleYvalue ;
2016-04-01 17:41:04 +00:00
// scaledX = wscreen-y/scaleXvalue; FOR INVERSED TOUCSCREEN (AIW)
// scaledY = hscreen-x/scaleYvalue;
//printf("x=%d y=%d scaledx %d scaledy %d\n",x,y,scaledX,scaledY);
2016-04-01 13:00:03 +00:00
int margin = 20 ;
if ( ( scaledX < = ( ButtonArray [ NbButton ] . x + ButtonArray [ NbButton ] . w - margin ) ) & & ( scaledX > = ButtonArray [ NbButton ] . x + margin ) & &
( scaledY < = ( ButtonArray [ NbButton ] . y + ButtonArray [ NbButton ] . h - margin ) ) & & ( scaledY > = ButtonArray [ NbButton ] . y + margin )
/*&&(mymillis()-ButtonArray[NbButton].LastEventTime>TIME_ANTI_BOUNCE)*/ )
{
ButtonArray [ NbButton ] . LastEventTime = mymillis ( ) ;
return 1 ;
}
else
return 0 ;
}
int AddButton ( int x , int y , int w , int h )
{
button_t * NewButton = & ( ButtonArray [ IndexButtonInArray ] ) ;
NewButton - > x = x ;
NewButton - > y = y ;
NewButton - > w = w ;
NewButton - > h = h ;
NewButton - > NoStatus = 0 ;
NewButton - > IndexStatus = 0 ;
NewButton - > LastEventTime = mymillis ( ) ;
return IndexButtonInArray + + ;
}
AddButtonStatus ( int ButtonIndex , char * Text , color_t * Color )
{
button_t * Button = & ( ButtonArray [ ButtonIndex ] ) ;
strcpy ( Button - > Status [ Button - > IndexStatus ] . Text , Text ) ;
Button - > Status [ Button - > IndexStatus ] . Color = * Color ;
return Button - > IndexStatus + + ;
}
DrawButton ( int ButtonIndex )
{
button_t * Button = & ( ButtonArray [ ButtonIndex ] ) ;
Fill ( Button - > Status [ Button - > NoStatus ] . Color . r , Button - > Status [ Button - > NoStatus ] . Color . g , Button - > Status [ Button - > NoStatus ] . Color . b , 1 ) ;
Roundrect ( Button - > x , Button - > y , Button - > w , Button - > h , Button - > w / 10 , Button - > w / 10 ) ;
Fill ( 255 , 255 , 255 , 1 ) ; // White text
TextMid ( Button - > x + Button - > w / 2 , Button - > y + Button - > h / 2 , Button - > Status [ Button - > NoStatus ] . Text , SerifTypeface , Button - > w / strlen ( Button - > Status [ Button - > NoStatus ] . Text ) /*25*/ ) ;
}
SetButtonStatus ( int ButtonIndex , int Status )
{
button_t * Button = & ( ButtonArray [ ButtonIndex ] ) ;
Button - > NoStatus = Status ;
}
int GetButtonStatus ( int ButtonIndex )
{
button_t * Button = & ( ButtonArray [ ButtonIndex ] ) ;
return Button - > NoStatus ;
}
GetNextPicture ( char * PictureName )
{
DIR * d ;
struct dirent * dir ;
d = opendir ( ImageFolder ) ;
if ( d )
{
while ( ( dir = readdir ( d ) ) ! = NULL )
{
if ( dir - > d_type = = DT_REG )
{
size_t len = strlen ( dir - > d_name ) ;
if ( len > 4 & & strcmp ( dir - > d_name + len - 4 , " .jpg " ) = = 0 )
{
printf ( " %s \n " , dir - > d_name ) ;
strncpy ( PictureName , dir - > d_name , strlen ( dir - > d_name ) - 4 ) ;
break ;
}
}
}
closedir ( d ) ;
}
}
2016-04-28 08:46:01 +00:00
int openTouchScreen ( int NoDevice )
2016-04-01 13:00:03 +00:00
{
2016-04-28 08:46:01 +00:00
char sDevice [ 255 ] ;
sprintf ( sDevice , " /dev/input/event%d " , NoDevice ) ;
2016-09-14 15:00:50 +00:00
if ( fd ! = 0 ) close ( fd ) ;
if ( ( fd = open ( sDevice , O_RDONLY ) ) > 0 )
2016-04-01 13:00:03 +00:00
{
return 1 ;
}
else
return 0 ;
}
2016-09-14 15:00:50 +00:00
/*
Input device name : " ADS7846 Touchscreen "
Supported events :
Event type 0 ( Sync )
Event type 1 ( Key )
Event code 330 ( Touch )
Event type 3 ( Absolute )
Event code 0 ( X )
Value 0
Min 0
Max 4095
Event code 1 ( Y )
Value 0
Min 0
Max 4095
Event code 24 ( Pressure )
Value 0
Min 0
Max 255
*/
int getTouchScreenDetails ( int * screenXmin , int * screenXmax , int * screenYmin , int * screenYmax )
2016-04-01 13:00:03 +00:00
{
unsigned short id [ 4 ] ;
unsigned long bit [ EV_MAX ] [ NBITS ( KEY_MAX ) ] ;
char name [ 256 ] = " Unknown " ;
int abs [ 6 ] = { 0 } ;
ioctl ( fd , EVIOCGNAME ( sizeof ( name ) ) , name ) ;
printf ( " Input device name: \" %s \" \n " , name ) ;
memset ( bit , 0 , sizeof ( bit ) ) ;
ioctl ( fd , EVIOCGBIT ( 0 , EV_MAX ) , bit [ 0 ] ) ;
printf ( " Supported events: \n " ) ;
int i , j , k ;
2016-09-14 15:00:50 +00:00
int IsAtouchDevice = 0 ;
2016-04-01 13:00:03 +00:00
for ( i = 0 ; i < EV_MAX ; i + + )
if ( test_bit ( i , bit [ 0 ] ) ) {
printf ( " Event type %d (%s) \n " , i , events [ i ] ? events [ i ] : " ? " ) ;
if ( ! i ) continue ;
ioctl ( fd , EVIOCGBIT ( i , KEY_MAX ) , bit [ i ] ) ;
for ( j = 0 ; j < KEY_MAX ; j + + ) {
if ( test_bit ( j , bit [ i ] ) ) {
printf ( " Event code %d (%s) \n " , j , names [ i ] ? ( names [ i ] [ j ] ? names [ i ] [ j ] : " ? " ) : " ? " ) ;
2016-09-14 15:00:50 +00:00
if ( j = = 330 ) IsAtouchDevice = 1 ;
2016-04-01 13:00:03 +00:00
if ( i = = EV_ABS ) {
ioctl ( fd , EVIOCGABS ( j ) , abs ) ;
for ( k = 0 ; k < 5 ; k + + )
if ( ( k < 3 ) | | abs [ k ] ) {
printf ( " %s %6d \n " , absval [ k ] , abs [ k ] ) ;
if ( j = = 0 ) {
if ( absval [ k ] = = " Min " ) * screenXmin = abs [ k ] ;
if ( absval [ k ] = = " Max " ) * screenXmax = abs [ k ] ;
}
if ( j = = 1 ) {
if ( absval [ k ] = = " Min " ) * screenYmin = abs [ k ] ;
if ( absval [ k ] = = " Max " ) * screenYmax = abs [ k ] ;
}
}
}
}
}
}
2016-09-14 15:00:50 +00:00
return IsAtouchDevice ;
2016-04-01 13:00:03 +00:00
}
int getTouchSample ( int * rawX , int * rawY , int * rawPressure )
{
int i ;
/* how many bytes were read */
size_t rb ;
/* the events (up to 64 at once) */
struct input_event ev [ 64 ] ;
static int Last_event = 0 ;
rb = read ( fd , ev , sizeof ( struct input_event ) * 64 ) ;
* rawX = - 1 ; * rawY = - 1 ;
int StartTouch = 0 ;
for ( i = 0 ; i < ( rb / sizeof ( struct input_event ) ) ; i + + ) {
if ( ev [ i ] . type = = EV_SYN )
{
//printf("Event type is %s%s%s = Start of New Event\n",KYEL,events[ev[i].type],KWHT);
}
else if ( ev [ i ] . type = = EV_KEY & & ev [ i ] . code = = 330 & & ev [ i ] . value = = 1 )
{
StartTouch = 1 ;
//printf("Event type is %s%s%s & Event code is %sTOUCH(330)%s & Event value is %s1%s = Touch Starting\n", KYEL,events[ev[i].type],KWHT,KYEL,KWHT,KYEL,KWHT);
}
else if ( ev [ i ] . type = = EV_KEY & & ev [ i ] . code = = 330 & & ev [ i ] . value = = 0 )
{
//StartTouch=0;
//printf("Event type is %s%s%s & Event code is %sTOUCH(330)%s & Event value is %s0%s = Touch Finished\n", KYEL,events[ev[i].type],KWHT,KYEL,KWHT,KYEL,KWHT);
}
else if ( ev [ i ] . type = = EV_ABS & & ev [ i ] . code = = 0 & & ev [ i ] . value > 0 ) {
//printf("Event type is %s%s%s & Event code is %sX(0)%s & Event value is %s%d%s\n", KYEL,events[ev[i].type],KWHT,KYEL,KWHT,KYEL,ev[i].value,KWHT);
* rawX = ev [ i ] . value ;
}
else if ( ev [ i ] . type = = EV_ABS & & ev [ i ] . code = = 1 & & ev [ i ] . value > 0 ) {
//printf("Event type is %s%s%s & Event code is %sY(1)%s & Event value is %s%d%s\n", KYEL,events[ev[i].type],KWHT,KYEL,KWHT,KYEL,ev[i].value,KWHT);
* rawY = ev [ i ] . value ;
}
else if ( ev [ i ] . type = = EV_ABS & & ev [ i ] . code = = 24 & & ev [ i ] . value > 0 ) {
//printf("Event type is %s%s%s & Event code is %sPressure(24)%s & Event value is %s%d%s\n", KYEL,events[ev[i].type],KWHT,KYEL,KWHT,KYEL,ev[i].value,KWHT);
* rawPressure = ev [ i ] . value ;
}
if ( ( * rawX ! = - 1 ) & & ( * rawY ! = - 1 ) & & ( StartTouch = = 1 ) )
{
/*if(Last_event-mymillis()>500)
{
Last_event = mymillis ( ) ;
return 1 ;
} */
//StartTouch=0;
return 1 ;
}
}
return 0 ;
}
void UpdateWindow ( )
{
int i ;
for ( i = 0 ; i < IndexButtonInArray ; i + + )
DrawButton ( i ) ;
End ( ) ;
}
SelectInGroup ( int StartButton , int StopButton , int NoButton , int Status )
{
int i ;
for ( i = StartButton ; i < = StopButton ; i + + )
{
if ( i = = NoButton )
SetButtonStatus ( i , Status ) ;
else
SetButtonStatus ( i , 0 ) ;
}
}
SelectSR ( int NoButton )
{
SelectInGroup ( 0 , 4 , NoButton , 1 ) ;
SR = TabSR [ NoButton - 0 ] ;
char Param [ ] = " symbolrate " ;
char Value [ 255 ] ;
sprintf ( Value , " %d " , SR ) ;
SetConfigParam ( PATH_CONFIG , Param , Value ) ;
}
SelectFec ( int NoButton )
{
SelectInGroup ( 5 , 9 , NoButton , 1 ) ;
fec = TabFec [ NoButton - 5 ] ;
char Param [ ] = " fec " ;
char Value [ 255 ] ;
sprintf ( Value , " %d " , fec ) ;
SetConfigParam ( PATH_CONFIG , Param , Value ) ;
}
SelectSource ( int NoButton , int Status )
{
SelectInGroup ( 10 , 14 , NoButton , Status ) ;
strcpy ( ModeInput , TabModeInput [ NoButton - 10 ] ) ;
printf ( " ************** Mode Input = %s \n " , ModeInput ) ;
char Param [ ] = " modeinput " ;
SetConfigParam ( PATH_CONFIG , Param , ModeInput ) ;
}
SelectPTT ( int NoButton , int Status )
{
SelectInGroup ( 15 , 16 , NoButton , Status ) ;
}
TransmitStart ( )
{
printf ( " Transmit Start \n " ) ;
2016-04-01 17:41:04 +00:00
# define PATH_SCRIPT_A "sudo / home / pi / rpidatv / scripts / a.sh > / dev / null 2> / dev / null"
2016-04-01 13:00:03 +00:00
if ( ( strcmp ( ModeInput , TabModeInput [ 0 ] ) = = 0 ) | | ( strcmp ( ModeInput , TabModeInput [ 1 ] ) = = 0 ) ) //CAM
{
printf ( " DISPLAY OFF \n " ) ;
IsDisplayOn = 0 ;
finish ( ) ;
system ( " v4l2-ctl --overlay=1 " ) ;
}
system ( PATH_SCRIPT_A ) ;
}
TransmitStop ( )
{
printf ( " Transmit Stop \n " ) ;
system ( " sudo killall rpidatv >/dev/null 2>/dev/null " ) ;
system ( " sudo killall ffmpeg >/dev/null 2>/dev/null " ) ;
system ( " v4l2-ctl --overlay=0 " ) ;
}
ReceiveStart ( )
{
# define PATH_SCRIPT_LEAN "sudo / home / pi / rpidatv / scripts / leandvb2video.sh"
//system("sudo SDL_VIDEODRIVER=fbcon SDL_FBDEV=/dev/fb0 mplayer -ao /dev/null -vo sdl /home/pi/rpidatv/video/mire250.ts &");
system ( PATH_SCRIPT_LEAN ) ;
}
ReceiveStop ( )
{
system ( " sudo killall leandvb " ) ;
system ( " sudo killall mplayer " ) ;
}
// wait for a specific character
void waituntil ( int w , int h , int endchar ) {
int key ;
int rawX , rawY , rawPressure , i ;
int Toggle = 0 ;
for ( ; ; ) {
//Start(w,h);
if ( getTouchSample ( & rawX , & rawY , & rawPressure ) = = 0 ) continue ;
2016-04-01 17:41:04 +00:00
printf ( " x=%d y=%d \n " , rawX , rawY ) ;
2016-04-01 13:00:03 +00:00
if ( IsDisplayOn = = 0 )
{
printf ( " Display ON \n " ) ;
TransmitStop ( ) ;
ReceiveStop ( ) ;
init ( & wscreen , & hscreen ) ;
Start ( wscreen , hscreen ) ;
IsDisplayOn = 1 ;
SelectPTT ( 15 , 0 ) ;
SelectPTT ( 16 , 0 ) ;
UpdateWindow ( ) ;
//usleep(500000);
continue ;
}
for ( i = 0 ; i < IndexButtonInArray ; i + + )
{
if ( IsButtonPushed ( i , rawX , rawY ) = = 1 )
{
printf ( " Button Event %d \n " , i ) ;
if ( ( i > = 0 ) & & ( i < = 4 ) ) //SR
{
SelectSR ( i ) ;
}
if ( ( i > = 5 ) & & ( i < = 9 ) ) //FEC
{
SelectFec ( i ) ;
}
if ( ( i > = 10 ) & & ( i < = 14 ) ) //Source
{
SelectSource ( i , 1 ) ;
}
if ( ( i > = 15 ) & & ( i < = 16 ) ) //Source
{
printf ( " Status %d \n " , GetButtonStatus ( i ) ) ;
if ( ( i = = 15 ) & & ( GetButtonStatus ( i ) = = 0 ) )
{
usleep ( 500000 ) ;
SelectPTT ( i , 1 ) ;
UpdateWindow ( ) ;
TransmitStart ( ) ;
break ;
}
if ( ( i = = 15 ) & & ( GetButtonStatus ( i ) = = 1 ) )
{
TransmitStop ( ) ;
usleep ( 500000 ) ;
SelectPTT ( i , 0 ) ;
UpdateWindow ( ) ;
break ;
}
if ( i = = 16 )
{
printf ( " DISPLAY OFF \n " ) ;
finish ( ) ;
ReceiveStart ( ) ;
IsDisplayOn = 0 ;
usleep ( 500000 ) ;
}
}
if ( IsDisplayOn = = 1 )
{
UpdateWindow ( ) ;
// DrawButton(i);
// End();
}
/*if((i==0)&&(GetButtonStatus(i)==0))
{
printf ( " DISPLAY OFF \n " ) ;
finish ( ) ;
IsDisplayOn = 0 ;
}
if ( ( i = = 0 ) & & ( GetButtonStatus ( i ) = = 1 ) )
{
printf ( " DISPLAY ON \n " ) ;
init ( & wscreen , & hscreen ) ;
Start ( wscreen , hscreen ) ;
IsDisplayOn = 1 ;
UpdateWindow ( ) ;
} */
//FixMe : Add a Antibounce
}
}
//circleCursor(scaledX,h-scaledY);
// key = getchar();
// if (key == endchar || key == '\n') {
// break;
// }
}
}
// main initializes the system and shows the picture.
// Exit and clean up when you hit [RETURN].
int main ( int argc , char * * argv ) {
int n ;
char * progname = argv [ 0 ] ;
2016-04-28 08:46:01 +00:00
int NoDeviceEvent = 0 ;
2016-04-01 13:00:03 +00:00
saveterm ( ) ;
init ( & wscreen , & hscreen ) ;
rawterm ( ) ;
int screenXmax , screenXmin ;
int screenYmax , screenYmin ;
2016-09-14 15:00:50 +00:00
for ( NoDeviceEvent = 0 ; NoDeviceEvent < 5 ; NoDeviceEvent + + )
{
if ( openTouchScreen ( NoDeviceEvent ) = = 1 )
{
if ( getTouchScreenDetails ( & screenXmin , & screenXmax , & screenYmin , & screenYmax ) = = 1 ) break ;
}
}
if ( NoDeviceEvent = = 5 )
{
perror ( " No Touchscreen found " ) ;
exit ( 1 ) ;
}
2016-04-01 13:00:03 +00:00
scaleXvalue = ( ( float ) screenXmax - screenXmin ) / wscreen ;
2016-04-01 17:41:04 +00:00
//printf ("X Scale Factor = %f\n", scaleXvalue);
2016-04-01 13:00:03 +00:00
scaleYvalue = ( ( float ) screenYmax - screenYmin ) / hscreen ;
2016-04-01 17:41:04 +00:00
//printf ("Y Scale Factor = %f\n", scaleYvalue);
2016-04-01 13:00:03 +00:00
int wbuttonsize = wscreen / 5 ;
int hbuttonsize = hscreen / 5 ;
int button = AddButton ( 0 * wbuttonsize + 20 , 0 + hbuttonsize * 0 + 20 , wbuttonsize * 0.9 , hbuttonsize * 0.9 ) ;
color_t Col ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " SR125 " , & Col ) ;
2016-04-01 17:41:04 +00:00
Col . r = 0 ; Col . g = 128 ; Col . b = 0 ;
2016-04-01 13:00:03 +00:00
AddButtonStatus ( button , " SR125 " , & Col ) ;
button = AddButton ( 1 * wbuttonsize + 20 , hbuttonsize * 0 + 20 , wbuttonsize * 0.9 , hbuttonsize * 0.9 ) ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " SR250 " , & Col ) ;
2016-04-01 17:41:04 +00:00
Col . r = 0 ; Col . g = 128 ; Col . b = 0 ;
2016-04-01 13:00:03 +00:00
AddButtonStatus ( button , " SR250 " , & Col ) ;
button = AddButton ( 2 * wbuttonsize + 20 , hbuttonsize * 0 + 20 , wbuttonsize * 0.9 , hbuttonsize * 0.9 ) ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " SR333 " , & Col ) ;
2016-04-01 17:41:04 +00:00
Col . r = 0 ; Col . g = 128 ; Col . b = 0 ;
2016-04-01 13:00:03 +00:00
AddButtonStatus ( button , " SR333 " , & Col ) ;
button = AddButton ( 3 * wbuttonsize + 20 , hbuttonsize * 0 + 20 , wbuttonsize * 0.9 , hbuttonsize * 0.9 ) ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " SR500 " , & Col ) ;
2016-04-01 17:41:04 +00:00
Col . r = 0 ; Col . g = 128 ; Col . b = 0 ;
2016-04-01 13:00:03 +00:00
AddButtonStatus ( button , " SR500 " , & Col ) ;
button = AddButton ( 4 * wbuttonsize + 20 , hbuttonsize * 0 + 20 , wbuttonsize * 0.9 , hbuttonsize * 0.9 ) ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " SR1000 " , & Col ) ;
2016-04-01 17:41:04 +00:00
Col . r = 0 ; Col . g = 128 ; Col . b = 0 ;
2016-04-01 13:00:03 +00:00
AddButtonStatus ( button , " SR1000 " , & Col ) ;
// FEC
button = AddButton ( 0 * wbuttonsize + 20 , hbuttonsize * 1 + 20 , wbuttonsize * 0.9 , hbuttonsize * 0.9 ) ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " FEC 1/2 " , & Col ) ;
2016-04-01 17:41:04 +00:00
Col . r = 0 ; Col . g = 128 ; Col . b = 0 ;
2016-04-01 13:00:03 +00:00
AddButtonStatus ( button , " FEC 1/2 " , & Col ) ;
button = AddButton ( 1 * wbuttonsize + 20 , hbuttonsize * 1 + 20 , wbuttonsize * 0.9 , hbuttonsize * 0.9 ) ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " FEC 2/3 " , & Col ) ;
2016-04-01 17:41:04 +00:00
Col . r = 0 ; Col . g = 128 ; Col . b = 0 ;
2016-04-01 13:00:03 +00:00
AddButtonStatus ( button , " FEC 2/3 " , & Col ) ;
button = AddButton ( 2 * wbuttonsize + 20 , hbuttonsize * 1 + 20 , wbuttonsize * 0.9 , hbuttonsize * 0.9 ) ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " FEC 3/4 " , & Col ) ;
2016-04-01 17:41:04 +00:00
Col . r = 0 ; Col . g = 128 ; Col . b = 0 ;
2016-04-01 13:00:03 +00:00
AddButtonStatus ( button , " FEC 3/4 " , & Col ) ;
button = AddButton ( 3 * wbuttonsize + 20 , hbuttonsize * 1 + 20 , wbuttonsize * 0.9 , hbuttonsize * 0.9 ) ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " FEC 5/6 " , & Col ) ;
2016-04-01 17:41:04 +00:00
Col . r = 0 ; Col . g = 128 ; Col . b = 0 ;
2016-04-01 13:00:03 +00:00
AddButtonStatus ( button , " FEC 5/6 " , & Col ) ;
button = AddButton ( 4 * wbuttonsize + 20 , hbuttonsize * 1 + 20 , wbuttonsize * 0.9 , hbuttonsize * 0.9 ) ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " FEC 7/8 " , & Col ) ;
2016-04-01 17:41:04 +00:00
Col . r = 0 ; Col . g = 128 ; Col . b = 0 ;
2016-04-01 13:00:03 +00:00
AddButtonStatus ( button , " FEC 7/8 " , & Col ) ;
//SOURCE
button = AddButton ( 0 * wbuttonsize + 20 , hbuttonsize * 2 + 20 , wbuttonsize * 0.9 , hbuttonsize * 0.9 ) ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " CAM MPEG2 " , & Col ) ;
2016-04-01 17:41:04 +00:00
Col . r = 0 ; Col . g = 128 ; Col . b = 0 ;
2016-04-01 13:00:03 +00:00
AddButtonStatus ( button , " CAM MPEG2 " , & Col ) ;
button = AddButton ( 1 * wbuttonsize + 20 , hbuttonsize * 2 + 20 , wbuttonsize * 0.9 , hbuttonsize * 0.9 ) ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " CAM H264 " , & Col ) ;
2016-04-01 17:41:04 +00:00
Col . r = 0 ; Col . g = 128 ; Col . b = 0 ;
2016-04-01 13:00:03 +00:00
AddButtonStatus ( button , " CAM H264 " , & Col ) ;
char PictureName [ 255 ] ;
//strcpy(PictureName,ImageFolder);
GetNextPicture ( PictureName ) ;
button = AddButton ( 2 * wbuttonsize + 20 , hbuttonsize * 2 + 20 , wbuttonsize * 0.9 , hbuttonsize * 0.9 ) ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " Patern " , & Col ) ;
Col . r = 0 ; Col . g = 128 ; Col . b = 0 ;
AddButtonStatus ( button , PictureName , & Col ) ;
button = AddButton ( 3 * wbuttonsize + 20 , hbuttonsize * 2 + 20 , wbuttonsize * 0.9 , hbuttonsize * 0.9 ) ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " TS File " , & Col ) ;
Col . r = 0 ; Col . g = 128 ; Col . b = 0 ;
AddButtonStatus ( button , " Video Name " , & Col ) ;
button = AddButton ( 4 * wbuttonsize + 20 , hbuttonsize * 2 + 20 , wbuttonsize * 0.9 , hbuttonsize * 0.9 ) ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " Carrier " , & Col ) ;
Col . r = 0 ; Col . g = 128 ; Col . b = 0 ;
AddButtonStatus ( button , " Carrier " , & Col ) ;
//TRANSMIT
button = AddButton ( 0 * wbuttonsize + 20 , hbuttonsize * 3 + 20 , wbuttonsize * 1.2 , hbuttonsize * 1.2 ) ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " TX " , & Col ) ;
Col . r = 255 ; Col . g = 0 ; Col . b = 0 ;
AddButtonStatus ( button , " TX ON " , & Col ) ;
button = AddButton ( 1 * wbuttonsize * 3 + 20 , hbuttonsize * 3 + 20 , wbuttonsize * 1.2 , hbuttonsize * 1.2 ) ;
Col . r = 0 ; Col . g = 0 ; Col . b = 128 ;
AddButtonStatus ( button , " RX " , & Col ) ;
2016-04-01 17:41:04 +00:00
Col . r = 0 ; Col . g = 128 ; Col . b = 0 ;
2016-04-01 13:00:03 +00:00
AddButtonStatus ( button , " RX ON " , & Col ) ;
Start ( wscreen , hscreen ) ;
IsDisplayOn = 1 ;
char Param [ ] = " symbolrate " ;
char Value [ 255 ] ;
GetConfigParam ( PATH_CONFIG , Param , Value ) ;
SR = atoi ( Value ) ;
switch ( SR )
{
case 125 : SelectSR ( 0 ) ; break ;
case 250 : SelectSR ( 1 ) ; break ;
case 333 : SelectSR ( 2 ) ; break ;
case 500 : SelectSR ( 3 ) ; break ;
case 1000 : SelectSR ( 4 ) ; break ;
}
strcpy ( Param , " fec " ) ;
strcpy ( Value , " " ) ;
GetConfigParam ( PATH_CONFIG , Param , Value ) ;
printf ( " Value=%s %s \n " , Value , " Fec " ) ;
fec = atoi ( Value ) ;
switch ( fec )
{
case 1 : SelectFec ( 5 ) ; break ;
case 2 : SelectFec ( 6 ) ; break ;
case 3 : SelectFec ( 7 ) ; break ;
case 5 : SelectFec ( 8 ) ; break ;
case 7 : SelectFec ( 9 ) ; break ;
}
strcpy ( Param , " modeinput " ) ;
GetConfigParam ( PATH_CONFIG , Param , Value ) ;
strcpy ( ModeInput , Value ) ;
if ( strcmp ( Value , " CAMH264 " ) = = 0 )
{
SelectSource ( 11 , 1 ) ;
}
if ( strcmp ( Value , " CAMMPEG-2 " ) = = 0 )
{
SelectSource ( 10 , 1 ) ;
}
if ( strcmp ( Value , " PATERNAUDIO " ) = = 0 )
{
SelectSource ( 12 , 1 ) ;
}
if ( strcmp ( Value , " CARRIER " ) = = 0 )
{
SelectSource ( 13 , 1 ) ;
}
UpdateWindow ( ) ;
// RESIZE JPEG TO BE DONE
/*char PictureName[255];
strcpy ( PictureName , ImageFolder ) ;
GetNextPicture ( PictureName ) ;
Image ( 0 , 0 , 300 , 200 , PictureName ) ;
End ( ) ;
*/
waituntil ( wscreen , hscreen , 0x1b ) ;
restoreterm ( ) ;
finish ( ) ;
return 0 ;
}