Bladeren bron

Добавлен ответ на команду TMSG44:LD?. Параметры функций иземнены на const.

Mikhail Zaytsev 1 jaar geleden
bovenliggende
commit
26d1dc5024
3 gewijzigde bestanden met toevoegingen van 43 en 25 verwijderingen
  1. 28 11
      command.c
  2. 14 13
      command.h
  3. 1 1
      main.c

+ 28 - 11
command.c

@@ -6,6 +6,7 @@
 #include <stdio.h>
 #include <strings.h>
 #include <string.h>
+#include <sys/socket.h>
 
 //Массив структур Command, который связывает строки команд с соответствующими функциями.
 Command commands[] = {
@@ -19,7 +20,7 @@ Command commands[] = {
 };
 
 //handleXXXXCmd - обработчики команд
-void handleFreqCmd(char* recvBuff)
+void handleFreqCmd(const char* recvBuff)
 {
 	printf("\nTMSG44:FREQ\n");
 	uint64_t freq[1] = {0};
@@ -29,12 +30,28 @@ void handleFreqCmd(char* recvBuff)
 	printf("%" PRId64 "\n", freq[0]);
 }
 
-void handleLdCmd(char* recvBuff)
+void handleLdCmd(const char* recvBuff)
 {
+	int n = 0;
+	char messageLd[2] = "0";
+
 	printf("\nTMSG44:LD?\n");
+
+	if (1)
+	{
+		strcpy(messageLd, "1");
+	}
+	else if (0)
+	{
+		strcpy(messageLd, "0");
+	}
+
+	send(sockfd, messageLd, sizeof(messageLd), 0);
+	
+	printf("\nSend msg LD!\n");
 }
 
-void handlePowCmd(char* recvBuff)
+void handlePowCmd(const char* recvBuff)
 {
 	printf("\nTMSG44:POW\n");
 	double pow[1] = {0};
@@ -43,7 +60,7 @@ void handlePowCmd(char* recvBuff)
 	printf("%f\n", pow[0]);
 }
 
-void handleArmCmd(char* recvBuff)
+void handleArmCmd(const char* recvBuff)
 {
 	printf("\nTMSG44:ARM\n");
 	uint16_t armCode[1] = {0};
@@ -52,7 +69,7 @@ void handleArmCmd(char* recvBuff)
 	printf("\n%u\n", armCode[0]);
 }
 
-void handleAttCmd(char* recvBuff)
+void handleAttCmd(const char* recvBuff)
 {
 	printf("\nTMSG44:ATT\n");
 	uint16_t attCode[1] = {0};
@@ -61,14 +78,14 @@ void handleAttCmd(char* recvBuff)
 	printf("\n%u\n", attCode[0]);
 }
 
-void handleIdnCmd(char* recvBuff)
+void handleIdnCmd(const char* recvBuff)
 {
 	printf("\n*IDN?\n");
 }
 
 //Проходим по массиву команд и ищем команду, которая совпадает с началом строки recvBuff. 
 //Если команда найдена, вызывается соответствующая функция-обработчик
-void processCommand(char* recvBuff) 
+void processCommand(const char* recvBuff) 
 {
 	for (int i = 0; commands[i].command != NULL; i++) 
 	{
@@ -82,25 +99,25 @@ void processCommand(char* recvBuff)
 }
 
 // Преобразование строки в uint16_t
-void convertToUInt16(char *str, void *output) 
+void convertToUInt16(const char *str, void *output) 
 {
 	*(uint16_t *)output = (uint16_t)strtoul(str, NULL, 10);
 }
 
 // Преобразование строки в unsigned long long int
-void convertToUint64(char *str, void *output) 
+void convertToUint64(const char *str, void *output) 
 {
 	*(uint64_t *)output = (uint64_t)strtoull(str, NULL, 10);
 }
 
 // Преобразование строки в double
-void convertToDouble(char *str, void *output) 
+void convertToDouble(const char *str, void *output) 
 {
 	*(double *)output = strtod(str, NULL);
 }
 
 // Универсальная функция для разделения строки на лексемы
-void splitLexeme(uint8_t *ptrSCPI, void *numOutAndValue, size_t elementSize, ConvertFunc convertFunc) 
+void splitLexeme(const char *ptrSCPI, void *numOutAndValue, size_t elementSize, ConvertFunc convertFunc) 
 {
 	uint8_t counter = 0;
 

+ 14 - 13
command.h

@@ -12,8 +12,9 @@
 
 
 // Объявление глобальных переменных
+extern volatile int sockfd;
 
-typedef void (*CommandHandler)(char*);
+typedef void (*CommandHandler)(const char*);
 
 // Объявление структур
 typedef struct {
@@ -22,20 +23,20 @@ typedef struct {
 } Command;
 
 // Определяем тип функции преобразования
-typedef void (*ConvertFunc)(char *str, void *output);
+typedef void (*ConvertFunc)(const char *str, void *output);
 
 // Прототипы функций
 void handleCloseSignal(int signal);
-void handleFreqCmd(char* recvBuff);
-void handleLdCmd(char* recvBuff);
-void handlePowCmd(char* recvBuff);
-void handleArmCmd(char* recvBuff);
-void handleAttCmd(char* recvBuff);
-void handleIdnCmd(char* recvBuff);
-void processCommand(char* recvBuff);
-void convertToUInt16(char *str, void *output);
-void convertToUint64(char *str, void *output);
-void convertToDouble(char *str, void *output);
-void splitLexeme(uint8_t *ptrSCPI, void *numOutAndValue, size_t elementSize, ConvertFunc convertFunc);
+void handleFreqCmd(const char* recvBuff);
+void handleLdCmd(const char* recvBuff);
+void handlePowCmd(const char* recvBuff);
+void handleArmCmd(const char* recvBuff);
+void handleAttCmd(const char* recvBuff);
+void handleIdnCmd(const char* recvBuff);
+void processCommand(const char* recvBuff);
+void convertToUInt16(const char *str, void *output);
+void convertToUint64(const char *str, void *output);
+void convertToDouble(const char *str, void *output);
+void splitLexeme(const char *ptrSCPI, void *numOutAndValue, size_t elementSize, ConvertFunc convertFunc);
 
 #endif /* COMMAND_H */

+ 1 - 1
main.c

@@ -76,7 +76,7 @@ int main(int argc, char *argv[])
 	   error("Error : Connect Failed");
 	}
 
-	while ((n = read(sockfd, recvBuff, sizeof(recvBuff) - 1)) > 0)
+	while ((n = recv(sockfd, recvBuff, sizeof(recvBuff) - 1, 0)) > 0)
 	{
 		recvBuff[n] = 0;
 		if(fputs(recvBuff, stdout) == EOF)