Rev 1606 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <string.h>
#include <kernel/func.h>
#include <kernel/kern.h>
#include <drivers/shark_keyb26.h>
#include <drivers/udpip.h>
#include "tftp.h"
#include "endian.h"
#include "sem/sem/sem.h"
#include <kernel/kern.h>
#include <ll/i386/hw-instr.h>
#define LOCAL_HOST_IP "192.168.0.134"
#define REMOTE_HOST_IP "192.168.0.133"
sem_t m1
, m2
;
int handle
, handle2
;
int prog
= 0;
/* This function is called when the user presses CTRL-C (stops the systems) */
void esci
(KEY_EVT
*k
)
{
sys_shutdown_message
("Exit from the program...\n");
sys_shutdown_message
("Ctrl-C pressed!\n");
exit(1);
}
void augprog
(KEY_EVT
*k
)
{
prog
= 1;
}
void keyb_start
(void) {
KEY_EVT k
;
k.
flag = CNTL_BIT
;
k.
scan = KEY_C
;
k.
status = KEY_PRESSED
;
k.
ascii = 'c';
keyb_hook
(k
, esci
,FALSE
);
k.
flag = CNTR_BIT
;
k.
scan = KEY_C
;
k.
ascii = 'c';
k.
status = KEY_PRESSED
;
keyb_hook
(k
, esci
,FALSE
);
k.
flag = CNTL_BIT
;
k.
scan = KEY_A
;
k.
ascii = 'a';
k.
status = KEY_PRESSED
;
keyb_hook
(k
, augprog
,FALSE
);
k.
flag = CNTR_BIT
;
k.
scan = KEY_A
;
k.
ascii = 'a';
k.
status = KEY_PRESSED
;
keyb_hook
(k
, augprog
,FALSE
);
}
TASK test_upload
(void *arg
) {
int i
;
char msg
[200];
int bytes
;
i
= 0;
while (1) {
// cprintf("uploader 1\n");
sprintf(msg
, "tftptest says: i = %5d\n", i
);
tftp_put
(handle
, msg
, strlen(msg
));
// cprintf("uploader 2\n");
bytes
= tftp_usedbuffer
(handle
);
/*!*/sprintf(msg
, "buffer %5d ", bytes
);
/*!*/puts_xy
(BASE_X
, 18, WHITE
, msg
);
// cprintf("uploader 3\n");
i
++;
task_endcycle
();
}
return(0);
}
TASK test_upload2
(void *arg
) {
int i
;
char msg
[200];
int bytes
;
i
= 0;
while (1) {
sprintf(msg
, "tftptest says: i = %5d\n", i
);
tftp_put
(handle2
, msg
, strlen(msg
));
bytes
= tftp_usedbuffer
(handle2
);
/*!*/sprintf(msg
, "buffer2 %5d ", bytes
);
/*!*/puts_xy
(BASE_X
, 38, WHITE
, msg
);
i
++;
task_endcycle
();
}
return(0);
}
void wait
() {
char ch
;
do {
ch
= keyb_getch
(NON_BLOCK
);
} while(prog
== 0);
prog
= 0;
}
int main
(void)
{
int err
;
HARD_TASK_MODEL hard_m
;
PID p1
, p2
;
keyb_start
();
cprintf
("main: Keyboard handler started\n");
tftp_init
();
cprintf
("main: Tftp library initialized\n");
err
= tftp_net_start
(LOCAL_HOST_IP
, REMOTE_HOST_IP
, 1);
cprintf
("netval = %d\n", err
);
if (err
== 1) {
cprintf
("Net Init from %s to %s\n", LOCAL_HOST_IP
, REMOTE_HOST_IP
);
} else {
cprintf
("Net Init Failed...\n");
exit(1);
}
sem_init
(&m1
, 0, 1);
if ((handle
= tftp_open
("test.txt")) == -1) {
cprintf
("No slots available. Program aborted...\n");
exit(1);
}
cprintf
("NOTE: if you use a Linux TFTP server, remember that the two files\n");
cprintf
(" to be written MUST exists on the server,\n");
cprintf
(" and must have the right permissions\n");
cprintf
("Ctrl-A to proceed *** Ctrl-C to stop\n");
wait
();
clear
();
cprintf
("Handle = %d\n", handle
);
if ((err
= tftp_upload
(handle
, 4096, &m1
)) != 0) {
cprintf
("Error %d calling tftp_upload(). Program aborted...\n", err
);
exit(1);
}
/* First we set the sender's task properties...*/
hard_task_default_model
(hard_m
);
hard_task_def_wcet
(hard_m
, 10000);
hard_task_def_mit
(hard_m
, 300000);
if ((p1
= task_create
("test_upload", test_upload
, &hard_m
, NULL
)) == NIL
) {
cprintf
("Error creating test_upload task. Program aborted...\n");
exit(1);
}
if (task_activate
(p1
) == -1) {
cprintf
("Error activating test_upload task. Program aborted...\n");
exit(1);
}
sem_init
(&m2
, 0, 1);
if ((handle2
= tftp_open
("test2.txt")) == -1) {
cprintf
("No second slot available. Program aborted...\n");
exit(1);
}
cprintf
("Handle2 = %d\n", handle2
);
if ((err
= tftp_upload
(handle2
, 4096, &m2
)) != 0) {
cprintf
("Error %d calling tftp_upload(). Program aborted...\n", err
);
exit(1);
}
/* First we set the sender's task properties...*/
hard_task_default_model
(hard_m
);
hard_task_def_wcet
(hard_m
, 10000);
hard_task_def_mit
(hard_m
, 300000);
if ((p2
= task_create
("test_upload2", test_upload2
, &hard_m
, NULL
)) == NIL
) {
cprintf
("Error creating test_upload2 task. Program aborted...\n");
exit(1);
}
if (task_activate
(p2
) == -1) {
cprintf
("Error activating test_upload2 task. Program aborted...\n");
exit(1);
}
wait
();
tftp_close
(handle
, TFTP_STOP_NOW
);
tftp_close
(handle2
, TFTP_STOP_NOW
);
cprintf
("\nProgram terminated correctly.\n");
exit(0);
return(0);
}