2011-02-01 4 views

Répondre

-1

Vous avez besoin d'une liaison pour le service de pilote/système d'exploitation Bluetooth qui gère le périphérique Bluetooth.
La plupart des pilotes sont écrits en C, d'autres en C++. Si vous pouvez obtenir le code source/API ou s'il est fourni, vous pourrez peut-être y accéder depuis python. Vous devrez peut-être coder une liaison personnalisée avec votre service système pour ce faire.

+1

Pourquoi le downvote? –

+0

Vous n'avez pas besoin du code source d'un pilote/bibliothèque pour utiliser son API. Et Guanidene dit qu'il utilise déjà une bibliothèque Python pour envoyer le fichier. –

+0

@RoshOxymoron: Il ne l'a pas mentionné au moment où j'ai écrit la question. –

0

Il n'est pas correct de dire "vitesse python bluetooth", car Python est juste une langue et une exécution et n'a rien à voir avec Bluetooth. Vous devriez nous dire quelle extension Python utilisez-vous pour travailler avec Bluetooth? Quelle pile bluetooth utilisez-vous? et finalement le système d'exploitation?

Avec lightblue vous ne pouvez pas déterminer la vitesse de la connexion, parce que l'auteur du projet a déclaré qu'il « fournit un accès simple aux opérations Bluetooth », même avec le pybluez l'autre bibliothèque Python pour Bluetooth vous ne pouvez pas. Comme je suppose que vous utilisez des sockets, vous pouvez compter les données envoyées et reçues, afin que vous puissiez avoir une idée juste.

Mais pour déterminer correctement la quantité d'entrée entière/trafic de sortie, vous devez vous placer dans la pile au niveau de la couche HCI et compte pour:

  • ACL - Données
  • SCO - voix
  • Commandes
  • Events

donc, ma recommandation est d'utiliser un analyseur de trafic déjà construit comme Wireshark.

Mise à jour:

Si vous consultez la documentation BlueZ en hci_lib.h il y a une fonction:

int hci_devinfo(int dev_id, struct hci_dev_info *di); 

et la structure hci_dev_info contient les informations que vous cherchez acl_pkts et sco_pkts, donc ce que vous devrait faire est de l'exporter en Python cette fonction API BlueZ et de l'utiliser :)

struct hci_dev_info { 
uint16_t dev_id; 
char  name[8]; 

bdaddr_t bdaddr; 

uint32_t flags; 
uint8_t type; 

uint8_t features[8]; 

uint32_t pkt_type; 
uint32_t link_policy; 
uint32_t link_mode; 

uint16_t acl_mtu; 
uint16_t acl_pkts; 
uint16_t sco_mtu; 
uint16_t sco_pkts; 

struct hci_dev_stats stat; 
}; 
+1

Pourquoi la downvote? –

+0

Venez y penser, cela devrait être un commentaire. –

+0

Je n'ai pas downvote votre réponse, et sincèrement je m'en fous qui a downvoted le mien aussi. Je suis convaincu que j'ai donné une réponse correcte, basée sur la question initiale. J'espère que cela aidera Guanidene. – garzanti

0

la solution la plus simple consiste à déterminer la taille du fichier est, cap Vérifiez l'heure du système avant le transfert et après le transfert, puis effectuez les calculs. Pour calculer un taux de transfert plus fin qui change au cours du transfert, vous devez utiliser la taille de vos tampons de transmission et l'intervalle de temps entre les envois.

+0

Eh bien, je veux connaître le taux de transfert au moment où j'envoie le fichier ... Pas le taux de transfert moyen ... –

+0

LightBlue utilise une interface de socket, non?Vous savez combien d'octets vont dans chaque appel et vous pouvez déterminer le temps qui s'écoule entre chaque appel. Vous pouvez utiliser cette information pour déterminer le taux de transfert. – pwc