Browse Source

Исправлено закрытие программы после отключения клиента. Изменён тип даных для freq на double.

Mikhail Zaytsev 1 year ago
parent
commit
5428a98851
4 changed files with 31 additions and 37 deletions
  1. 7 7
      Devices/lmx2594.c
  2. 4 6
      Devices/lmx2594.h
  3. 12 8
      command.c
  4. 8 16
      main.c

+ 7 - 7
Devices/lmx2594.c

@@ -121,8 +121,6 @@ uint32_t lmx2594regs[LMX_COUNT] = {
         0x00251C
         0x00251C
 };
 };
 
 
-
-
 void lmx2594_init(void *bar1) {
 void lmx2594_init(void *bar1) {
     // Header for LMX Reset
     // Header for LMX Reset
     uint32_t *ptr_rst = bar1 + LMX_BASE_ADDR;
     uint32_t *ptr_rst = bar1 + LMX_BASE_ADDR;
@@ -143,7 +141,8 @@ void lmx2594_init(void *bar1) {
 }
 }
 
 
 /*-------------------------LMX2594 Frequency Set-------------------------*/
 /*-------------------------LMX2594 Frequency Set-------------------------*/
-int lmx_freq_set_main_band(void *bar1, uint64_t freq, double f_pd, double N_div) {
+int lmx_freq_set_main_band(void *bar1, double freq, double f_pd) {
+    double N_div;
     N_div = freq / f_pd;
     N_div = freq / f_pd;
 
 
     // divide whole part and fractional part
     // divide whole part and fractional part
@@ -216,11 +215,12 @@ int lmx_freq_set_main_band(void *bar1, uint64_t freq, double f_pd, double N_div)
     return 0;
     return 0;
 }
 }
 
 
-int lmx_freq_set_out_of_band(void *bar1, uint64_t freq, double f_pd, double N_div) {
+int lmx_freq_set_out_of_band(void *bar1, double freq, double f_pd) {
     double f_vco = 2 * freq;
     double f_vco = 2 * freq;
     int chan_div = 2;
     int chan_div = 2;
     uint8_t ch_div_reg = 0; // 2
     uint8_t ch_div_reg = 0; // 2
     double vco_div = 7.5e9 / freq;
     double vco_div = 7.5e9 / freq;
+    double N_div;
 
 
     // minimum N_div value is 28 and Vco frequency can't be less than 7.5 GHz
     // minimum N_div value is 28 and Vco frequency can't be less than 7.5 GHz
     if (f_vco < 7.5e9) {
     if (f_vco < 7.5e9) {
@@ -431,7 +431,7 @@ int lmx_freq_set_out_of_band(void *bar1, uint64_t freq, double f_pd, double N_di
     return 0;
     return 0;
 }
 }
 
 
-int lmx_freq_set(void *bar1, uint64_t freq) {
+int lmx_freq_set(void *bar1, double freq) {
 
 
     double f_pd = 200e6;
     double f_pd = 200e6;
     double N_div = 0;
     double N_div = 0;
@@ -441,10 +441,10 @@ int lmx_freq_set(void *bar1, uint64_t freq) {
     }
     }
     // if the frequency is in the main band - 7.5 GHz to 15 GHz
     // if the frequency is in the main band - 7.5 GHz to 15 GHz
     if (freq >= 7.5e9 && freq <= 15e9) {
     if (freq >= 7.5e9 && freq <= 15e9) {
-        lmx_freq_set_main_band(bar1, freq, f_pd, N_div);
+        lmx_freq_set_main_band(bar1, freq, f_pd);
     }
     }
     else if (freq < 7.5e9) {
     else if (freq < 7.5e9) {
-        lmx_freq_set_out_of_band(bar1, freq, f_pd, N_div);
+        lmx_freq_set_out_of_band(bar1, freq, f_pd);
     }
     }
     return 0;
     return 0;
 }
 }

+ 4 - 6
Devices/lmx2594.h

@@ -6,12 +6,10 @@
 #define     LMX_COUNT           113
 #define     LMX_COUNT           113
 #define     LMX_BASE_ADDR       0x04
 #define     LMX_BASE_ADDR       0x04
 
 
-void lmx2594_init( void *bar1);
-
-
-int lmx_freq_set(void *bar1, uint64_t freq);
-
-
+void lmx2594_init(void *bar1);
 
 
+int lmx_freq_set_main_band(void *bar1, double freq, double f_pd);
+int lmx_freq_set_out_of_band(void *bar1, double freq, double f_pd);
+int lmx_freq_set(void *bar1, double freq);
 
 
 #endif //DMADRIVER_LMX2594_H
 #endif //DMADRIVER_LMX2594_H

+ 12 - 8
command.c

@@ -25,30 +25,29 @@ Command commands[] = {
 void handleFreqCmd(const char* recvBuff)
 void handleFreqCmd(const char* recvBuff)
 {
 {
 	printf("\nTMSG44:FREQ\n");
 	printf("\nTMSG44:FREQ\n");
-	uint64_t freq[1] = {0};
+	double freq[1] = {0};
 
 
-	splitLexeme(recvBuff, freq, sizeof(freq[0]), convertToUint64);
+	splitLexeme(recvBuff, freq, sizeof(freq[0]), convertToDouble);
 
 
-	printf("%" PRId64 "\n", freq[0]);
+	printf("%f\n", freq[0]);
     lmx_freq_set(bar1, freq[0]);
     lmx_freq_set(bar1, freq[0]);
-    printf("The frequency is set to %lu Hz\n", freq[0]);
-
+    printf("The frequency is set to %f Hz\n", freq[0]);
 }
 }
 
 
 void handleLdCmd(const char* recvBuff)
 void handleLdCmd(const char* recvBuff)
 {
 {
 	int n = 0;
 	int n = 0;
-	char messageLd[2] = "0";
+	char messageLd[] = "0\n";
 
 
 	printf("\nTMSG44:LD?\n");
 	printf("\nTMSG44:LD?\n");
 
 
 	if (1)
 	if (1)
 	{
 	{
-		strcpy(messageLd, "1");
+		strcpy(messageLd, "1\n");
 	}
 	}
 	else if (0)
 	else if (0)
 	{
 	{
-		strcpy(messageLd, "0");
+		strcpy(messageLd, "0\n");
 	}
 	}
 
 
 	send(conn_fd, messageLd, sizeof(messageLd), 0);
 	send(conn_fd, messageLd, sizeof(messageLd), 0);
@@ -85,7 +84,12 @@ void handleAttCmd(const char* recvBuff)
 
 
 void handleIdnCmd(const char* recvBuff)
 void handleIdnCmd(const char* recvBuff)
 {
 {
+	ssize_t n;
 	printf("\n*IDN?\n");
 	printf("\n*IDN?\n");
+
+	char messageIdn[] = "TMSG44_CoolPi\n";
+	n = send(conn_fd, messageIdn, sizeof(messageIdn), 0);
+	printf("%ld \n", n);
 }
 }
 
 
 //Проходим по массиву команд и ищем команду, которая совпадает с началом строки recvBuff. 
 //Проходим по массиву команд и ищем команду, которая совпадает с началом строки recvBuff. 

+ 8 - 16
main.c

@@ -32,10 +32,6 @@ void error(const char *msg)
 {
 {
 	perror(msg);
 	perror(msg);
 
 
-	if (conn_fd != 0) 
-	{
-		close(conn_fd);
-	}
 	if (listen_fd != 0) 
 	if (listen_fd != 0) 
 	{
 	{
 		close(listen_fd);
 		close(listen_fd);
@@ -83,7 +79,7 @@ int main(int argc, char *argv[])
     pci_fd = open(filename, O_RDWR | O_SYNC);
     pci_fd = open(filename, O_RDWR | O_SYNC);
     if (pci_fd == -1) {
     if (pci_fd == -1) {
         int error = errno;
         int error = errno;
-        fprintf(stderr, "Cannot open file: %s\n", strerror(error));
+        fprintf(stderr, "Cannot open PCIe device file: %s\n", strerror(error));
         return 1;
         return 1;
     }
     }
 
 
@@ -113,6 +109,7 @@ int main(int argc, char *argv[])
 	// }
 	// }
 
 
 	listen_fd = socket(AF_INET, SOCK_STREAM, 0);
 	listen_fd = socket(AF_INET, SOCK_STREAM, 0);
+	if (listen_fd < 0)
 	{
 	{
 		error("Error : Could not create socket!");
 		error("Error : Could not create socket!");
 	} 
 	} 
@@ -142,6 +139,7 @@ int main(int argc, char *argv[])
 	{
 	{
         error("Error : Listen failed");
         error("Error : Listen failed");
     }
     }
+	printf("Server is listening on port %d...\n", SERVER_PORT);
 	
 	
 	while(1) {
 	while(1) {
 		client_len = sizeof(client_addr);
 		client_len = sizeof(client_addr);
@@ -151,8 +149,10 @@ int main(int argc, char *argv[])
 			perror("Error : Accept failed");
 			perror("Error : Accept failed");
 			continue;
 			continue;
 		}
 		}
+		printf("Connection established with client\n");
 
 
-		memset(recvBuff, 0,sizeof(recvBuff));
+		//Очистка буфера
+		memset(recvBuff, 0, sizeof(recvBuff));
 
 
 		while ((n = recv(conn_fd, recvBuff, sizeof(recvBuff) - 1, 0)) > 0)
 		while ((n = recv(conn_fd, recvBuff, sizeof(recvBuff) - 1, 0)) > 0)
 		{
 		{
@@ -172,20 +172,12 @@ int main(int argc, char *argv[])
 		}
 		}
 		else if (n < 0)
 		else if (n < 0)
 		{
 		{
-			error("Read error");
+			perror("Read error");
 		} 
 		} 
 
 
 		close(conn_fd);
 		close(conn_fd);
+		printf("Waiting for new client connection...\n");
 	}
 	}
 
 
-	close(listen_fd);
-
-    munmap(bar1, REQUESTED_MEMORY_SIZE);
-    int fd_close = close(pci_fd);
-    if (fd_close == -1) {
-        perror("close");
-        return 1;
-    }
-
 	return 0;
 	return 0;
 }
 }