-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathmlinkutil.c
127 lines (117 loc) · 4.21 KB
/
mlinkutil.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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "serial.h"
#include "serial2.h"
#include "misc.h"
#include "config.h"
#include "tcpsock.h"
#define DEFAULT_TCPAsciiTrans AsciiNoTrans
int MIDI_DEBUG = TRUE;
enum ASCIITRANS TCPAsciiTrans = DEFAULT_TCPAsciiTrans;
int fdSerial = -1;
int socket_out = -1;
///////////////////////////////////////////////////////////////////////////////////////
//
// int main(int argc, char *argv[])
//
int main(int argc, char *argv[])
{
int bShowInfo = TRUE;
int result = misc_check_args_option(argc, argv, "BAUD");
if(result && (result + 1 < argc))
{
char * ptr;
int baud = strtol(argv[result + 1], &ptr, 10);
if (!serial2_is_valid_rate (baud))
{
printf("ERROR : BAUD not valid --> %s\n", argv[result + 1]);
return -1;
}
//printf("SET BAUD --> %d\n", baud);
fdSerial = open(serialDevice, O_RDWR | O_NOCTTY | O_SYNC);
if (fdSerial < 0)
{
misc_print(0, "ERROR: opening %s: %s\n", serialDevice, strerror(errno));
return -2;
}
char strBaud[10];
sprintf(strBaud,"%d", baud);
misc_make_file(tmpBAUD, strBaud);
serial2_set_baud(serialDevice, fdSerial, baud);
close(fdSerial);
if(misc_check_device(serialDeviceUSB) && misc_check_file("/tmp/ML_USBSER"))
{
fdSerial = open(serialDeviceUSB, O_RDWR | O_NOCTTY | O_SYNC);
if (fdSerial < 0)
{
misc_print(0, "ERROR: opening %s: %s\n", serialDeviceUSB, strerror(errno));
return -3;
}
serial2_set_baud(serialDeviceUSB, fdSerial, baud);
close(fdSerial);
}
bShowInfo = FALSE;
}
result = misc_check_args_option(argc, argv, "FSSFONT");
if(result && (result + 1 < argc))
{
if(misc_check_file(argv[result + 1]))
{
socket_out = tcpsock_client_connect("127.0.0.1", 9800, fdSerial);
if (socket_out > 0)
{
char sListSF[] = "fonts\n";
tcpsock_write(socket_out, sListSF, strlen(sListSF));
sleep(1);
char buf[1024];
int TCPresult = tcpsock_read(socket_out, buf, sizeof(buf));
if(TCPresult > 15)
{
buf[TCPresult] = 0x00;
if (strncmp("ID Name", buf, 7))
{
char * sfNo = &buf[9];
if (sfNo[0] == ' ') sfNo++;
char * tm = strchr(sfNo, ' ');
if (tm) *tm = 0x00;
if (strchr("1234567890", sfNo[0]))
{
printf("Unload Sounfont #%s --> '%s'\n", sfNo, tm + 1);
char sUnloadSF[30];
sprintf(sUnloadSF, "unload %s\n", sfNo);
tcpsock_write(socket_out, sUnloadSF, strlen(sUnloadSF));
sleep(1);
}
}
}
printf("Sending --> RESET\n");
tcpsock_write(socket_out, "reset\n", 6);
char sLoadSF[250];
sprintf(sLoadSF, "load \"%s\"\n", argv[result + 1]);
printf("Loading SoundFont --> '%s'\n", argv[result + 1]);
tcpsock_write(socket_out, sLoadSF, strlen(sLoadSF));
//sleep(1);
close(socket_out);
}
else
{
printf("ERROR --> unable to connect to FluidSynth:9800\n");
return -11;
}
misc_make_file(tmpSoundfont, argv[result + 1]);
bShowInfo = FALSE;
}
else
{
printf("ERROR --> unable to open file '%s'\n", argv[result+1]);
return -10;
}
}
if (bShowInfo)
printf("%s\nUsage:\n - #mlinkutil BAUD [rate]\n - #mlinkutil FSSFONT [fileaname]\n",helloStr);
return 0;
}