Journaux d’enregistrement sur la montre de caillou

Quand je me connecte une erreur sur le galet comme ça:

static void message_dropped(AppMessageResult reason, void *context) { APP_LOG(APP_LOG_LEVEL_DEBUG, "Message dropped. Reason: %d", reason); } 

Je viens de recevoir la valeur int du message d’erreur. Existe-t-il un moyen facile de consigner le texte de l’énum? Comme:

 static void message_dropped(AppMessageResult reason, void *context) { APP_LOG(APP_LOG_LEVEL_DEBUG, "Message dropped. Reason: %fancy", reason); } // Would return "APP_MSG_BUFFER_OVERFLOW" 

Il n’y a pas de fonction API pour le faire. Vous pouvez utiliser cette fonction pour l’énumération AppMessageResult :

 char *translate_error(AppMessageResult result) { switch (result) { case APP_MSG_OK: return "APP_MSG_OK"; case APP_MSG_SEND_TIMEOUT: return "APP_MSG_SEND_TIMEOUT"; case APP_MSG_SEND_REJECTED: return "APP_MSG_SEND_REJECTED"; case APP_MSG_NOT_CONNECTED: return "APP_MSG_NOT_CONNECTED"; case APP_MSG_APP_NOT_RUNNING: return "APP_MSG_APP_NOT_RUNNING"; case APP_MSG_INVALID_ARGS: return "APP_MSG_INVALID_ARGS"; case APP_MSG_BUSY: return "APP_MSG_BUSY"; case APP_MSG_BUFFER_OVERFLOW: return "APP_MSG_BUFFER_OVERFLOW"; case APP_MSG_ALREADY_RELEASED: return "APP_MSG_ALREADY_RELEASED"; case APP_MSG_CALLBACK_ALREADY_REGISTERED: return "APP_MSG_CALLBACK_ALREADY_REGISTERED"; case APP_MSG_CALLBACK_NOT_REGISTERED: return "APP_MSG_CALLBACK_NOT_REGISTERED"; case APP_MSG_OUT_OF_MEMORY: return "APP_MSG_OUT_OF_MEMORY"; case APP_MSG_CLOSED: return "APP_MSG_CLOSED"; case APP_MSG_INTERNAL_ERROR: return "APP_MSG_INTERNAL_ERROR"; default: return "UNKNOWN ERROR"; } } 

J’ai utilisé la commande pebble analyze-size pour mesurer l’impact sur la mémoire. Cette fonction vous coûtera 228 octets supplémentaires de la mémoire de votre programme. Cela en vaut probablement la peine pour la plupart des développeurs;)

Et voici comment vous utiliseriez la fonction ci-dessus, par exemple dans le gestionnaire de messages déposé:

 static void appmsg_in_dropped(AppMessageResult reason, void *context) { APP_LOG(APP_LOG_LEVEL_DEBUG, "In dropped: %i - %s", reason, translate_error(reason)); }