#include #include #include #include "d_bus_commands.h" #include 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; }