mirror of
				https://github.com/rad4day/Waybar.git
				synced 2025-10-28 06:52:29 +01:00 
			
		
		
		
	properly structure rfkill util
This commit is contained in:
		| @@ -3,12 +3,8 @@ | ||||
| #include <sys/eventfd.h> | ||||
| #include <fstream> | ||||
| #include "util/format.hpp" | ||||
|  | ||||
| #include <unistd.h> | ||||
| //#include <stdlib.h> | ||||
| #include <cstring> | ||||
| #include "util/rfkill.hpp" | ||||
| #include <linux/rfkill.h> | ||||
| #include <fcntl.h> | ||||
|  | ||||
| namespace { | ||||
|  | ||||
| @@ -227,58 +223,15 @@ void waybar::modules::Network::worker() { | ||||
|  | ||||
| const std::string waybar::modules::Network::getNetworkState() const { | ||||
|   if (ifid_ == -1) { | ||||
| 		if (isDisabled(RFKILL_TYPE_WLAN)) | ||||
| 			return "disabled"; | ||||
| 		return "disconnected"; | ||||
| 	} | ||||
|     if (waybar::util::isDisabled(RFKILL_TYPE_WLAN)) | ||||
|       return "disabled"; | ||||
|     return "disconnected"; | ||||
|   } | ||||
|   if (ipaddr_.empty()) return "linked"; | ||||
|   if (essid_.empty()) return "ethernet"; | ||||
|   return "wifi"; | ||||
| } | ||||
|  | ||||
| bool waybar::modules::Network::isDisabled(enum rfkill_type rfkill_type) const { | ||||
|   struct rfkill_event event; | ||||
|   ssize_t len; | ||||
|   int fd; | ||||
|   int ret; | ||||
|   ret = false; | ||||
|  | ||||
|   fd = open("/dev/rfkill", O_RDONLY); | ||||
|   if (fd < 0) { | ||||
|     perror("Can't open RFKILL control device"); | ||||
|     return false; | ||||
|   } | ||||
|  | ||||
|   if (fcntl(fd, F_SETFL, O_NONBLOCK) < 0) { | ||||
|     perror("Can't set RFKILL control device to non-blocking"); | ||||
|     close(fd); | ||||
|     return false; | ||||
|   } | ||||
|  | ||||
|   while(true) { | ||||
|     len = read(fd, &event, sizeof(event)); | ||||
|     if (len < 0) { | ||||
|       if (errno == EAGAIN) | ||||
|         return 1; | ||||
|       perror("Reading of RFKILL events failed"); | ||||
|       return false; | ||||
|     } | ||||
|  | ||||
|     if (len != RFKILL_EVENT_SIZE_V1) { | ||||
|       fprintf(stderr, "Wrong size of RFKILL event\n"); | ||||
|       return false; | ||||
|     } | ||||
|  | ||||
|     if(event.type == rfkill_type) { | ||||
|       ret = event.soft || event.hard; | ||||
|       break; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   close(fd); | ||||
|   return ret; | ||||
| } | ||||
|  | ||||
| auto waybar::modules::Network::update() -> void { | ||||
|   std::lock_guard<std::mutex> lock(mutex_); | ||||
|   std::string                 tooltip_format; | ||||
|   | ||||
							
								
								
									
										49
									
								
								src/util/rfkill.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								src/util/rfkill.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | ||||
| #include "util/rfkill.hpp" | ||||
| #include <unistd.h> | ||||
| #include <stdlib.h> | ||||
| #include <cstring> | ||||
| #include <fcntl.h> | ||||
| #include <cerrno> | ||||
|  | ||||
| bool waybar::util::isDisabled(enum rfkill_type rfkill_type) { | ||||
|   struct rfkill_event event; | ||||
|   ssize_t len; | ||||
|   int fd; | ||||
|   int ret; | ||||
|   ret = false; | ||||
|  | ||||
|   fd = open("/dev/rfkill", O_RDONLY); | ||||
|   if (fd < 0) { | ||||
|     //perror("Can't open RFKILL control device"); | ||||
|     return false; | ||||
|   } | ||||
|  | ||||
|   if (fcntl(fd, F_SETFL, O_NONBLOCK) < 0) { | ||||
|     //perror("Can't set RFKILL control device to non-blocking"); | ||||
|     close(fd); | ||||
|     return false; | ||||
|   } | ||||
|  | ||||
|   while(true) { | ||||
|     len = read(fd, &event, sizeof(event)); | ||||
|     if (len < 0) { | ||||
|       if (errno == EAGAIN) | ||||
|         return 1; | ||||
|       //perror("Reading of RFKILL events failed"); | ||||
|       return false; | ||||
|     } | ||||
|  | ||||
|     if (len != RFKILL_EVENT_SIZE_V1) { | ||||
|       //fprintf(stderr, "Wrong size of RFKILL event\n"); | ||||
|       return false; | ||||
|     } | ||||
|  | ||||
|     if(event.type == rfkill_type) { | ||||
|       ret = event.soft || event.hard; | ||||
|       break; | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   close(fd); | ||||
|   return ret; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Marc
					Marc