-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrs232_send_file.c
90 lines (71 loc) · 2.47 KB
/
rs232_send_file.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <stdio.h>
#include <dos.h>
#include "com.h"
#include <stdlib.h>
#include <string.h>
/* COM1 -> 3F8
LSRA_COM1 -> 3FD
COM2 -> 2F8
LSRA_COM2 -> 2FD
TRNSMT_EMPTY -> 20
DATA_READY -> 1
*/
int send_char(char out_data);
void send_file_name(int res);
void send_file_contents(int res);
char file_name[20];
//Main óõíÜñôçóç áðïóôïëÞò
int main(int argc, char *argv[]){
int res;
res = com_init(COM1,0xEF); //áñ÷éêïðïßçóç COM1
send_file_name(res); //áðïóôïëÞ ïíüìáôïò öáêÝëïõ
send_file_contents(res); //áðïóôïëÞ ðåñéå÷ïìÝíùí
return 0;
}
//ÓõíÜñôçóç áðïóôïëÞò ðåñéå÷ïìÝíùí
void send_file_contents(int res){
int i=0,sz; //sz: ìÝãåèïò ðåñéå÷ïìÝíùí
char *buffer; //ðßíáêáò áðïèÞêåõóçò ðåñéå÷ïìÝíùí
int ch;
FILE *fptr;
fptr = fopen(file_name,"rb"); //Üíïéãìá öáêÝëïõ
fseek(fptr, 0L, SEEK_END);
sz = ftell(fptr); //åýñåóç ìåãÝèïõò
buffer = malloc(sz); //äõíáìéêÞ êáôáíïìÞ ðßíáêá
rewind(fptr); //åðéóôñïöÞ óôçí áñ÷Þ ôïõ öáêÝëïõ
while ((ch = fgetc(fptr)) != EOF){
buffer[i++] = (char) ch; //áðïèÞêåõóç êÜèå ÷áêôÞñá ôïõ öáêÝëïõ óôïí ðßíáêá
}
fclose(fptr); //êëåßóéìï áñ÷åßïõ
for(i=0; i<sz; i++){
res = send_char(buffer[i]); //áðïóôïëÞ ÷áñáêôÞñá
printf("com_transmit = %d char = %c\n", res, buffer[i]); //åêôýðùóç ÷áñáêôÞñá ðïõ óôÜëèçêå
}
res = send_char('\0'); //áðïóôïëÞ null ÷áñáêôÞñá ãéá ôåñìáôéóìü ëÞøçò áðü ôïí receiver
printf("\nFile contents sent succesfully!\n");
}
//ÓõíÜñôçóç áðïóôïëÞò ïíüìáôïò öáêÝëïõ
void send_file_name(int res){
int i;
FILE *fptr;
printf("Type name of the file you want to send (add extention at the end): ");
scanf("%s", &file_name); //åðéëïãÞ öáêÝëïõ ðïõ èá óôáëèåß
fptr = fopen(file_name,"rb"); //Üíïéãìá öáêÝëïõ
if(fptr == NULL){
printf("Error! There is no such file. Try Again");
exit(1);
}
for(i=0; i<strlen(file_name); i++){
res = send_char(file_name[i]); //áðïóôïëÞ ÷áñáêôÞñá ïíüìáôïò öáêÝëïõ
printf("com_transmit = %d char = %c\n", res, file_name[i]); //åêôýðùóç ÷áñáêôÞñá
}
res = send_char('\0'); //áðïóôïëÞ null ÷áñáêôÞñá ãéá ôåñìáôéóìü ëÞøçò áðü ôïí receiver
printf("\nFile name sent succesfully!\n");
fclose(fptr);
}
//ÓõíÜñôçóç áðïóôïëÞò ÷áñáêôÞñá ìå direct access
int send_char(char out_data){
while(!(inportb(0x3FD) & 0x20)); //Ýëåã÷ïò áí ï transmitter register åßíáé Üäåéïò
outportb(0x3F8, out_data); //áðïóôïëÞ ÷áñáêôÞñá
return 0;
}