Pebble tid titta Smartstrap handledning (3 / 4 steg)
Steg 3: Programmering pebble tid
Skapa en pebble konto på cloudpebble
- Se till att PC och Smartphone i samma lokala nätverk och slå sedan på utvecklaren anslutning på din smartphone Pebble tid app Inställningar--> Developer Connection
- Skapa ett nytt tomt projekt, lägga till en ny källa fil vid namn "main.c" sedan lägga följande kod till det
#include < pebble.h >
#define TIMEOUT_MS 1000
#define MAX_READ_SIZE 100
statiska fönster * s_main_window;
statiska TextLayer * s_status_layer;
statiska TextLayer * s_attr_text_layer;
statiska char s_text_buffer1 [20];
statiska SmartstrapAttribute * s_raw_attribute;
statiska SmartstrapAttribute * s_attr_attribute;
statisk void prv_update_text(void) {
om (smartstrap_service_is_available(0x1001)) {
text_layer_set_text (s_status_layer, "ansluten!");
} annat {
text_layer_set_text (s_status_layer, "Ansluta...");
}
}
statisk void prv_did_read (SmartstrapAttribute * attr, SmartstrapResult resultat,
CONST uint8_t * data, size_t längd) {
char str [50] = "";
om (attr == s_attr_attribute) {
APP_LOG (APP_LOG_LEVEL_DEBUG, "did_read (s_attr_attribute, %d, %d)", resultat, längd);
om (resultatet == SmartstrapResultOk) {
memcpy (str, data, längd);
Str [längd] = '\0';
snprintf (s_text_buffer1, 50, "%s", str);
text_layer_set_text (s_attr_text_layer, s_text_buffer1);
APP_LOG (APP_LOG_LEVEL_DEBUG, "meddelande: %s)", str);
}
} annat {
APP_LOG (APP_LOG_LEVEL_ERROR, "did_read (< %p >, %d)", attr, resultatet);
}
}
statisk void prv_did_write (SmartstrapAttribute * attr, SmartstrapResult resultat) {
om (attr == s_attr_attribute) {
APP_LOG (APP_LOG_LEVEL_DEBUG, "did_write (s_attr_attribute, %d)", resultatet);
} annat {
APP_LOG (APP_LOG_LEVEL_ERROR, "did_write (< %p >, %d)", attr, resultatet);
}
}
statisk void prv_write_button_action (uint8_t button_value, uint8_t click_type) {
SmartstrapResult resultat.
om (! smartstrap_service_is_available(smartstrap_attribute_get_service_id(s_attr_attribute))) {
APP_LOG (APP_LOG_LEVEL_DEBUG, "s_attr_attribute är inte tillgänglig");
hemkomst.
}
få skrivbufferten
uint8_t * buffert = NULL;
size_t längd = 0;
resultat = smartstrap_attribute_begin_write (s_attr_attribute, & buffert, och längd);
om (resultatet! = SmartstrapResultOk) {
APP_LOG (APP_LOG_LEVEL_ERROR, "Skriva av s_attr_attribute misslyckades med %d", resultatet);
hemkomst.
}
skriva data i bufferten
buffert [0] = button_value;
buffert [1] = click_type;
Skicka det
resultat = smartstrap_attribute_end_write (s_attr_attribute, 2, falsk);
om (resultatet! = SmartstrapResultOk) {
APP_LOG (APP_LOG_LEVEL_ERROR, "Skriva av s_attr_attribute misslyckades med %d", resultatet);
}
}
statisk void prv_availablility_status_changed (SmartstrapServiceId service_id, bool is_available) {
APP_LOG (APP_LOG_LEVEL_DEBUG, "tillgänglighet för 0 x %x är %d", service_id, is_available);
prv_update_text();
}
statisk void prv_notified(SmartstrapAttribute *attr) {
SmartstrapResult resultat.
om (attr == s_attr_attribute) {
APP_LOG (APP_LOG_LEVEL_DEBUG, "notified(s_attr_attribute)");
resultat = smartstrap_attribute_read(s_attr_attribute);
om (resultatet! = SmartstrapResultOk) {
APP_LOG (APP_LOG_LEVEL_ERROR, "fel läsning attribut (< %p >, %d)", attr, resultatet);
}
} annat {
APP_LOG (APP_LOG_LEVEL_ERROR, "anmälda (< %p >)", attr);
}
}
statisk void up_click_handler (ClickRecognizerRef recognizer, void * sammanhang) {
prv_write_button_action(0x02, 0x01);
}
statisk void select_click_handler (ClickRecognizerRef recognizer, void * sammanhang) {
prv_write_button_action(0x03, 0x01);
}
statisk void down_click_handler (ClickRecognizerRef recognizer, void * sammanhang) {
prv_write_button_action(0x04, 0x01);
}
statisk void click_config_provider(void *context) {
window_single_click_subscribe (BUTTON_ID_UP, up_click_handler);
window_single_click_subscribe (BUTTON_ID_SELECT, select_click_handler);
window_single_click_subscribe (BUTTON_ID_DOWN, down_click_handler);
}
statisk void prv_main_window_load(Window *window) {
s_status_layer = text_layer_create (GRect (0, 15, 144, 40));
text_layer_set_font (s_status_layer, fonts_get_system_font(FONT_KEY_GOTHIC_28));
prv_update_text();
text_layer_set_text_color (s_status_layer, GColorBlack);
text_layer_set_background_color (s_status_layer, GColorClear);
text_layer_set_text_alignment (s_status_layer, GTextAlignmentCenter);
text_layer_set_overflow_mode (s_status_layer, GTextOverflowModeWordWrap);
layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_status_layer));
s_attr_text_layer = text_layer_create (GRect (0, 60, 144, 40));
text_layer_set_font (s_attr_text_layer, fonts_get_system_font(FONT_KEY_GOTHIC_28));
text_layer_set_text (s_attr_text_layer, "-");
text_layer_set_text_color (s_attr_text_layer, GColorBlack);
text_layer_set_background_color (s_attr_text_layer, GColorClear);
text_layer_set_text_alignment (s_attr_text_layer, GTextAlignmentCenter);
text_layer_set_overflow_mode (s_attr_text_layer, GTextOverflowModeWordWrap);
layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_attr_text_layer));
}
statisk void prv_main_window_unload(Window *window) {
text_layer_destroy(s_status_layer);
}
statisk void prv_init(void) {
s_main_window = window_create();
window_set_click_config_provider (s_main_window, click_config_provider);
window_set_window_handlers (s_main_window, (WindowHandlers) {
.load = prv_main_window_load,
.unload = prv_main_window_unload
});
window_stack_push (s_main_window, true);
SmartstrapHandlers hanterare = (SmartstrapHandlers) {
.availability_did_change = prv_availablility_status_changed,
.did_write = prv_did_write,
.did_read = prv_did_read,
.Notified = prv_notified
};
smartstrap_subscribe(handlers);
smartstrap_set_timeout(50);
s_raw_attribute = smartstrap_attribute_create (0, 0, 2000);
s_attr_attribute = smartstrap_attribute_create (0x1001, 0x1001, 20);
}
statisk void prv_deinit(void) {
window_destroy(s_main_window);
smartstrap_unsubscribe();
smartstrap_attribute_destroy(s_raw_attribute);
smartstrap_attribute_destroy(s_attr_attribute);
}
int main(void) {
prv_init();
APP_LOG (APP_LOG_LEVEL_DEBUG, "START APP");
om (s_attr_attribute & & s_raw_attribute) {
app_event_loop();
}
APP_LOG (APP_LOG_LEVEL_DEBUG, "SLUT APP");
prv_deinit();
}
4. i fliken avmarkera bygga Aplite eftersom vi bygger för att köras på Pebble tid klockor
5. sammanställning fliken Välj telefon istället för Emulator att programmera våra riktig klocka
6. kör koden genom att klicka på play-knappen