slock83 / sphero-linux-api

Simple API for sphero 1&2.0 written in c++ for bluez stack
GNU General Public License v2.0
18 stars 3 forks source link

Nommage des sphero #25

Closed baldor-f closed 9 years ago

baldor-f commented 9 years ago

Voilà, ça serait pas mal de pouvoir récupérer le nom des Sphero (lors de la connexion), histoire d'avoir quelque chose de plus clair lorsqu'on regarde la liste des appareils connectés?

lforg37 commented 9 years ago

Tu veux que ça se passe comment ? Une méthode de Sphero qui permette de l'obtenir ou un attribut mis à jour à la connexion ?

baldor-f commented 9 years ago

un attribut mis à jour lors de la co, récupérable par un getter, ça serait pas mal je trouve

lforg37 commented 9 years ago

OK, j'essaye de faire ça.

slock83 commented 9 years ago

il faudrait aussi qu'on ai un setter pour changer le nom du sphero, ça serait pas mal

lforg37 commented 9 years ago

Oui, ben vu la procédure que ça a l'air d'être...

slock83 commented 9 years ago

et encore mieux, si l'application pouvait se souvenir de l'adresse associée à chaque nom pour faire une connexion rapide (genre sans tout taper)... :smiley:

slock83 commented 9 years ago

au pire on verra plus tard après le nom du sphero à changer c'est pas trop compliqué normalement, sauf le nom déclaré par le chipset bluetooth qui lui serait chiant (mais lui, on s'en fout)

lforg37 commented 9 years ago

La cosmétique de l'application n'a pas lieu d'être intégrée dans le Sphero...

lforg37 commented 9 years ago

Je comprend pas ce que tu veux alors...

slock83 commented 9 years ago

oui enfin c'est pas cosmetique, le rennomage de sphero fait partie de l'API officielle juste que t'as deux noms : celui qui est déclaré par le chipset bluetooth, et le nom interne (facile à changer et n'a aucune incidence sur la connexion) je pense que Franck parle du nom interne, et c'est de celui ci que je parle également, le nom déclaré lui ne devrait pas être changé

lforg37 commented 9 years ago

Donc en fait vous voulez récupérer le nom à partir du mécanisme de paquet Get Bluetooth Info ? Ça normalement ce sera fait avec les paquets synchrones. Et ça fait bien une heure que je suis planté avec beaucoup de circonspection devant un header de bluez -- je cite `int hci_open_dev(int dev_id); int hci_close_dev(int dd); int hci_send_cmd(int dd, uint16_t ogf, uint16_t ocf, uint8_t plen, void param); int hci_send_req(int dd, struct hci_request req, int timeout);

int hci_create_connection(int dd, const bdaddr_t bdaddr, uint16_t ptype, uint16_t clkoffset, uint8_t rswitch, uint16_t handle, int to); int hci_disconnect(int dd, uint16_t handle, uint8_t reason, int to);

int hci_inquiry(int dev_id, int len, int num_rsp, const uint8_t _lap, inquiry_info _ii, long flags); int hci_devinfo(int dev_id, struct hci_dev_info di); int hci_devba(int dev_id, bdaddr_t bdaddr); int hci_devid(const char str);

int hci_read_local_name(int dd, int len, char name, int to); int hci_write_local_name(int dd, const char name, int to); int hci_read_remote_name(int dd, const bdaddr_t bdaddr, int len, char name, int to); int hci_read_remote_name_with_clock_offset(int dd, const bdaddr_t bdaddr, uint8_t pscan_rep_mode, uint16_t clkoffset, int len, char name, int to); int hci_read_remote_name_cancel(int dd, const bdaddr_t bdaddr, int to); int hci_read_remote_version(int dd, uint16_t handle, struct hci_version ver, int to); int hci_read_remote_features(int dd, uint16_t handle, uint8_t features, int to); int hci_read_remote_ext_features(int dd, uint16_t handle, uint8_t page, uint8_t max_page, uint8_t features, int to); int hci_read_clock_offset(int dd, uint16_t handle, uint16_t clkoffset, int to); int hci_read_local_version(int dd, struct hci_version ver, int to); int hci_read_local_commands(int dd, uint8_t commands, int to); int hci_read_local_features(int dd, uint8_t features, int to); int hci_read_local_ext_features(int dd, uint8_t page, uint8_t max_page, uint8_t features, int to); int hci_read_bd_addr(int dd, bdaddr_t bdaddr, int to); int hci_read_class_of_dev(int dd, uint8_t cls, int to); int hci_write_class_of_dev(int dd, uint32_t cls, int to); int hci_read_voice_setting(int dd, uint16_t vs, int to); int hci_write_voice_setting(int dd, uint16_t vs, int to); int hci_read_current_iac_lap(int dd, uint8_t num_iac, uint8_t lap, int to); int hci_write_current_iac_lap(int dd, uint8_t num_iac, uint8_t lap, int to); int hci_read_stored_link_key(int dd, bdaddr_t bdaddr, uint8_t all, int to); int hci_write_stored_link_key(int dd, bdaddr_t bdaddr, uint8_t key, int to); int hci_delete_stored_link_key(int dd, bdaddr_t bdaddr, uint8_t all, int to); int hci_authenticate_link(int dd, uint16_t handle, int to); int hci_encrypt_link(int dd, uint16_t handle, uint8_t encrypt, int to); int hci_change_link_key(int dd, uint16_t handle, int to); int hci_switch_role(int dd, bdaddr_t bdaddr, uint8_t role, int to); int hci_park_mode(int dd, uint16_t handle, uint16_t max_interval, uint16_t min_interval, int to); int hci_exit_park_mode(int dd, uint16_t handle, int to); int hci_read_inquiry_scan_type(int dd, uint8_t type, int to); int hci_write_inquiry_scan_type(int dd, uint8_t type, int to); int hci_read_inquiry_mode(int dd, uint8_t mode, int to); int hci_write_inquiry_mode(int dd, uint8_t mode, int to); int hci_read_afh_mode(int dd, uint8_t mode, int to); int hci_write_afh_mode(int dd, uint8_t mode, int to); int hci_read_ext_inquiry_response(int dd, uint8_t fec, uint8_t data, int to); int hci_write_ext_inquiry_response(int dd, uint8_t fec, uint8_t data, int to);` pour rien...

lforg37 commented 9 years ago

Explicite comme documentation, @darkfrancky vu que tu es un spécialiste, je veux ben que tu étendes le header ;-)

lforg37 commented 9 years ago

Ce dont je parlais en cosmétique c'est la mémoire des noms.

slock83 commented 9 years ago

mouai, pour la memoire on verra sinon ... vive bluez, et sa doc !

slock83 commented 9 years ago

normalement tu l'as, mais regarde ce bout de code : inquiry_info _ii = NULL; int max_rsp, num_rsp; int dev_id, sock, len, flags; int i; char addr[19] = { 0 }; char name[248] = { 0 }; dev_id = hci_get_route(NULL); sock = hci_open_dev( dev_id ); if (dev_id < 0 || sock < 0) { perror("opening socket"); exit(1); } len = 8; max_rsp = 255; flags = IREQ_CACHE_FLUSH; ii = (inquiryinfo)malloc(max_rsp * sizeof(inquiry_info)); num_rsp = hci_inquiry(dev_id, len, max_rsp, NULL, &ii, flags); if( num_rsp < 0 ) perror("hci_inquiry"); for (i = 0; i < num_rsp; i++) { ba2str(&(ii+i)->bdaddr, addr); memset(name, 0, sizeof(name)); if (hci_read_remote_name(sock, &(ii+i)->bdaddr, sizeof(name), name, 0) < 0) strcpy(name, "[unknown]"); printf("%s %s\n", addr, name); } free( ii ); close( sock ); return 0;

lforg37 commented 9 years ago

Oui je l'ai vu (j'ai même le site source en favoris ;-) ) mais le truc c'est que je ne sas pas s'il y a d'autres fonctions qui peuvent être utiles, s'il y a des équivalents sans passer par la connexion : que renvoie hci_read_local_name etc...

slock83 commented 9 years ago

sinon de toutes façon on passe par getBluetoothInfo, on a pas vraiment besoin du scan au pire

lforg37 commented 9 years ago

getBTInfo implémentée