summaryrefslogtreecommitdiff
path: root/src/d_bus_commands.c
diff options
context:
space:
mode:
authorEvgeniy Alexeev <e.alekseev@k-soft-spb.ru>2022-10-12 11:16:49 +0300
committerEvgeniy Alexeev <e.alekseev@k-soft-spb.ru>2022-10-12 11:16:49 +0300
commit4330d39c35cc44ab1fa5b1e6e1a35207c0635217 (patch)
treef0ba53fe12d3e25acf9a505c05e96c16b4f2cb72 /src/d_bus_commands.c
parentec32cc9ceb8d8f5cb1003360417e5d26f885b8a5 (diff)
downloadsila-shell-master.tar.xz
Add server commandsHEADmaster
Squashed commit of the following: commit 4ca788c95231709813bbe99220f93b4ef3e9c4ef Author: Evgeniy Alexeev <e.alekseev@k-soft-spb.ru> Date: Wed Oct 12 12:19:45 2022 +0500 Add host boot commands, pooulate variant functions commit 21c36beefd0304a600a2f781a60559f647d569fb Author: Evgeniy Alexeev <e.alekseev@k-soft-spb.ru> Date: Mon Oct 10 19:07:45 2022 +0500 Begin to add variant type commit b6f6416fa4dfbff9c677c4491fb42c5d3adb9d44 Author: Evgeniy Alexeev <e.alekseev@k-soft-spb.ru> Date: Mon Oct 10 14:04:30 2022 +0500 Modify status commands in server commit 72405cee84fbddb8866a8a3d96350010266fc137 Author: Evgeniy Alexeev <e.alekseev@k-soft-spb.ru> Date: Mon Oct 10 13:35:37 2022 +0500 Add power&policy status, get sdbus property func commit 81f88de144d6803bf4d53986193bf342772367eb Author: ironcaterpillar <ironcaterpillar@yandex.ru> Date: Sat Oct 8 13:42:22 2022 +0500 Refactor d_bus_commands to separate file commit 224e5b8317e7e3ffbb04ada342447bf678297002 Author: Evgeniy Alexeev <e.alekseev@k-soft-spb.ru> Date: Fri Oct 7 19:18:14 2022 +0500 Add power policy commands, refactor commit 94427ebcf778a2c0cc148c0344002491abdb052c Author: Evgeniy Alexeev <e.alekseev@k-soft-spb.ru> Date: Thu Oct 6 18:23:42 2022 +0500 Add server power commands help commit 6888ffd32af65cb984792a47f65983207c00467e Author: Evgeniy Alexeev <e.alekseev@k-soft-spb.ru> Date: Thu Oct 6 17:31:26 2022 +0500 Add unknown power command error message commit 5d1b4a2000820de903f10959b499c758eba383e0 Author: Evgeniy Alexeev <e.alekseev@k-soft-spb.ru> Date: Thu Oct 6 15:54:37 2022 +0500 Fix host power dbus property name commit 49f8a15abdfb749427bd5769725b3ad54dc0583b Author: Evgeniy Alexeev <e.alekseev@k-soft-spb.ru> Date: Thu Oct 6 13:27:37 2022 +0500 Add .gitignore commit 96569d5f9c7f245fd82545919a1910828c1058d9 Author: Evgeniy Alexeev <e.alekseev@k-soft-spb.ru> Date: Thu Oct 6 13:27:10 2022 +0500 Add sdbus, server power commands
Diffstat (limited to 'src/d_bus_commands.c')
-rw-r--r--src/d_bus_commands.c102
1 files changed, 102 insertions, 0 deletions
diff --git a/src/d_bus_commands.c b/src/d_bus_commands.c
new file mode 100644
index 0000000..8ae2351
--- /dev/null
+++ b/src/d_bus_commands.c
@@ -0,0 +1,102 @@
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+
+#include "d_bus_commands.h"
+#include <d_bus_variant.h>
+
+void print_command_help(const universal_command_t* cmds)
+{
+ printf("Power commands list: \n");
+ for(const universal_command_t* current=cmds;current->name!=NULL;current++)
+ {
+ printf("\t %s - %s \n", current->name, current->help);
+ }
+}
+
+int parse_command2enum(const char* command, const universal_command_t* cmds)
+{
+ int result = COMMAND_UNKNOWN;
+ for(const universal_command_t* current=cmds;current->name!=NULL;current++)
+ {
+ if(strcmp(command, current->name)==0)
+ result = current->command;
+ }
+ return result;
+}
+
+const universal_command_t* get_command_by_enum(int cmd, const universal_command_t* cmds)
+{
+ for(const universal_command_t* cur_cmd = cmds; cur_cmd->name != NULL; cur_cmd++)
+ {
+ if(cur_cmd->command == cmd)
+ return cur_cmd;
+ }
+ return NULL;
+}
+
+const string_quadruple_t* get_dbus_command_interface(int cmd, const command_dbus_path_t* pathes)
+{
+ for(const command_dbus_path_t* current = pathes; current->path!=NULL; current++)
+ {
+ if(current->command == cmd)return current->path;
+ }
+ return NULL;
+}
+
+
+const dbus_value_variant_t* get_dbus_command_member(int cmd, const command_dbus_member_t* values)
+{
+ for(const command_dbus_member_t* current = values; current->member.type != NULL; current++)
+ {
+ if(current->command == cmd)return &(current->member);
+ }
+ return NULL;
+}
+
+
+const char* get_dbus_command_member_string(int cmd, const command_dbus_member_t* values)
+{
+ for(const command_dbus_member_t* current = values; current->member.type != NULL; current++)
+ {
+ if(current->command == cmd)return dbus_variant_get_string(&(current->member));
+ }
+ return NULL;
+}
+
+const dbus_value_variant_t* get_dbus_command_member_variant(int cmd, const command_dbus_member_t* values)
+{
+ for(const command_dbus_member_t* current = values; current->member.type != NULL; current++)
+ {
+ if(current->command == cmd)return &(current->member);
+ }
+ return NULL;
+}
+
+const command_dbus_member_t* get_dbus_command_by_member(const char* member, const command_dbus_member_t* values)
+{
+ for(const command_dbus_member_t* current = values; current->member.type != NULL; current++)
+ {
+
+ if(strcmp(member, dbus_variant_get_string(&current->member)) == 0 )return current;
+ }
+ return NULL;
+}
+
+int com_dbus_property( char *arg, const universal_command_t* commands, const command_dbus_path_t* paths, const command_dbus_member_t* values)
+{
+ int cmd = parse_command2enum(arg, commands);
+ if(cmd==COMMAND_UNKNOWN) {
+ fprintf(stderr, "Unknown command: %s\n", arg);
+ print_command_help(commands);
+ return -EOPNOTSUPP;
+ }
+ const string_quadruple_t* dbus_power_interface = get_dbus_command_interface(cmd, paths);
+ if(!dbus_power_interface)
+ return -EOPNOTSUPP;
+ const dbus_value_variant_t* property_val = get_dbus_command_member_variant(cmd, values);
+ if(!property_val)
+ return -EOPNOTSUPP;
+ return dbus_set_property(dbus_power_interface, *property_val);
+ return 0;
+}