Re: [PATCH 1/4] shared/bt_shell: Add initial implementation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Marcel,

On Mon, Nov 6, 2017 at 3:52 PM, Marcel Holtmann <marcel@xxxxxxxxxxxx> wrote:
> Hi Luiz,
>
>>>>>>>> +#ifdef HAVE_CONFIG_H
>>>>>>>> +#include <config.h>
>>>>>>>> +#endif
>>>>>>>> +
>>>>>>>> +#include <stdio.h>
>>>>>>>> +#include "src/shared/util.h"
>>>>>>>> +#include "src/shared/queue.h"
>>>>>>>> +#include "src/shared/bt_shell.h"
>>>>>>>> +
>>>>>>>> +#define CMD_LENGTH   48
>>>>>>>> +
>>>>>>>> +static struct {
>>>>>>>> +     const struct bt_shell_menu_entry *current;
>>>>>>>> +} bt_shell_data;
>>>>>>>> +
>>>>>>>> +bool bt_shell_init(const struct bt_shell_menu_entry *menu)
>>>>>>>> +{
>>>>>>>> +     if (bt_shell_data.current || !menu)
>>>>>>>> +             return false;
>>>>>>>> +
>>>>>>>> +     bt_shell_data.current = menu;
>>>>>>>> +
>>>>>>>> +     return true;
>>>>>>>> +}
>>>>>>>> +
>>>>>>>> +void bt_shell_cleanup(void)
>>>>>>>> +{
>>>>>>>> +     bt_shell_data.current = NULL;
>>>>>>>> +}
>>>>>>>> +
>>>>>>>> +void bt_shell_process(const char *cmd, const char *arg)
>>>>>>>> +{
>>>>>>>> +     const struct bt_shell_menu_entry *entry;
>>>>>>>> +
>>>>>>>> +     if (!bt_shell_data.current || !cmd)
>>>>>>>> +             return;
>>>>>>>> +
>>>>>>>> +     for (entry = bt_shell_data.current; entry->cmd;
>>>>>>>> entry++) {
>>>>>>>> +             if (strcmp(cmd, entry->cmd))
>>>>>>>> +                     continue;
>>>>>>>> +
>>>>>>>> +             if (entry->func) {
>>>>>>>> +                     entry->func(arg);
>>>>>>>> +                     return;
>>>>>>>> +             }
>>>>>>>> +     }
>>>>>>>> +
>>>>>>>> +     if (strcmp(cmd, "help")) {
>>>>>>>> +             printf("Invalid command\n");
>>>>>>>> +             return;
>>>>>>>> +     }
>>>>>>>> +
>>>>>>>> +     bt_shell_print_menu();
>>>>>>>> +}
>>>>>>>> +
>>>>>>>> +void bt_shell_print_menu(void)
>>>>>>>> +{
>>>>>>>> +     const struct bt_shell_menu_entry *entry;
>>>>>>>> +
>>>>>>>> +     if (!bt_shell_data.current)
>>>>>>>> +             return;
>>>>>>>> +
>>>>>>>> +     printf("Available commands:\n");
>>>>>>>> +     for (entry = bt_shell_data.current; entry->cmd;
>>>>>>>> entry++) {
>>>>>>>> +             printf("  %s %-*s %s\n", entry->cmd,
>>>>>>>> +                                     (int)(CMD_LENGTH -
>>>>>>>> strlen(entry->cmd)),
>>>>>>>> +                                     entry->arg ? : "",
>>>>>>>> entry->desc ? : "");
>>>>>>>
>>>>>>>
>>>>>>> I think that it is better to
>>>>>>>  - add some white-spaces
>>>>>>> or
>>>>>>>  - add a new line
>>>>>>> between the argument string and the description string, because
>>>>>>> it is a little
>>>>>>> difficult for the help of register-characteristic to read as
>>>>>>> below:
>>>>>>>
>>>>>>>  [bluetooth]# help
>>>>>>>  Available commands:
>>>>>>>  ...
>>>>>>>    unregister-service
>>>>>>> <UUID/object>                  Unregister application service
>>>>>>>    register-characteristic <UUID> <Flags=read,write,notify...>
>>>>>>> Register application characteristic
>>>>>>>    unregister-characteristic
>>>>>>> <UUID/object>           Unregister application characteristic
>>>>>>>    register-descriptor <UUID> <Flags=read,write...>  Register
>>>>>>> application descriptor
>>>>>>
>>>>>> It should probably have the same formatting as bluetoothctl:
>>>>>>
>>>>>> https://git.kernel.org/pub/scm/bluetooth/bluez.git/tree/client/ma
>>>>>> in.c#n2677
>>>>>>
>>>>>> --
>>>>>> Luiz Augusto von Dentz
>>>>>
>>>>> Yes, I'll correct it
>>>>
>>>> Are you still working on this?
>>>>
>>> No, unfortunatelly I don't have enough time to finish it.
>>
>> Ok, so I will start working on it myself.
>
> just a side note, lets do src/shared/shell.[ch] and not start with bt_ prefixes in file names.

Yep, Ive just did that. Ive also started replacing GChannel usage to
struct io, etc, and moved the whole rl_handler into the shell so it
will automatically setup the readline internals so in the future all
we have to do to replace readline is to rework the internals of
bt_shell.

> Regards
>
> Marcel
>



-- 
Luiz Augusto von Dentz
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux