diff options
author | Evgeniy Alexeev <e.alekseev@k-soft-spb.ru> | 2022-10-12 11:16:49 +0300 |
---|---|---|
committer | Evgeniy Alexeev <e.alekseev@k-soft-spb.ru> | 2022-10-12 11:16:49 +0300 |
commit | 4330d39c35cc44ab1fa5b1e6e1a35207c0635217 (patch) | |
tree | f0ba53fe12d3e25acf9a505c05e96c16b4f2cb72 /src/d_bus_commands.c | |
parent | ec32cc9ceb8d8f5cb1003360417e5d26f885b8a5 (diff) | |
download | sila-shell-4330d39c35cc44ab1fa5b1e6e1a35207c0635217.tar.xz |
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.c | 102 |
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(¤t->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; +} |