2013-06-20 2 views
1

나는 C를 한 번도 해보지 않았으며 안드로이드 앱에서 페블 워치에 부울을 보내는 가장 좋은 방법을 찾지 못했습니다.PebbleKit을 사용하여 Pebble에 부울을 보냄

문자열이 잘 작동하지만 PebbleDictionary에 addBoolean 메서드가없는 것 같습니다. 해결 방법 주위에 1 또는 0 보낼 addUint8 사용하려고하지만 페블 메시지를 처리하는 데 문제가 있습니다.

PebbleDictionary data = new PebbleDictionary(); 
    if (isGPSFix()){ 
     data.addUint8(GPS_HAS_FIX_KEY, Byte.valueOf("1")); 
    } else { 
     data.addUint8(GPS_HAS_FIX_KEY, Byte.valueOf("0")); 
    } 
    PebbleKit.sendDataToPebble(app.getContext(), UUID, data); 

그리고 내 페블에서

내가 데이터 구조체가 있습니다 :

static struct MyData { 
    uint8_t haveGPS[1]; 
    .... // other stuff ommitted 
    AppSync sync; 
    uint8_t sync_buffer[256]; 
} s_data; 

을 그리고 내 sync_tuple_changed 콜백이 같은 비교하려고

여기 내 안드로이드 코드입니다.

static void sync_tuple_changed_callback(const uint32_t key, const Tuple* new_tuple, const Tuple* old_tuple, void* context) { 
(void) old_tuple; 

    switch (key) { 
    case GPS_HAS_FIX_KEY: 
     if (memcmp(s_data.haveGPS, new_tuple->value->data, 8) == 0){ 
     memcpy(s_data.haveGPS,new_tuple->value->data, new_tuple->length); 
     vibes_short_pulse(); 
     } 
    break; 
    default: 
     return; 
    } 
} 

시계가 충돌하지 않고 전화기가 떨어지거나 GPS를 수신 할 때 시계가 진동하지 않습니다.

답변

0

Android 측면에서 좋게 보입니다. 나는 이것이 AppSync 문제에 더 가깝다고 생각한다.

  • 당신이 시계에 초기 값을 튜플의 목록을 작성해야합니다 : 여기

    는 시계 응용 프로그램에서 확인할 수있는 몇 가지 있습니다. 이 목록에는 키 GPS_HAS_FIX_KEY이 있어야합니다.
Tuplet initial_values[] = { 
    TupletInteger(GPS_HAS_FIX_KEY, (uint8_t) 0), 
    /* Other tuplets that you will synchronize */ 
}; 
  • 당신이 app_sync_init() 기능에 그 tuplets을 통과해야합니다 :
app_sync_init(&sync, sync_buffer, sizeof(sync_buffer), 
       initial_values, ARRAY_LENGTH(initial_values), 
       sync_tuple_changed_callback, sync_error_callback, NULL); 

그 두 단계 (CF AppSync reference documentation)를 작동 app_sync 필요합니다.

+0

감사합니다. @sarfata. 초기 값 Tuplet에 항목이 누락되었습니다. 나는 memcmp를 아주 좋아하지는 않았지만, 모든 업데이트에 대해 통보 만하면 나는 적어도 진동을 얻고있다. –

+0

이제 비교 논리가 제대로 작동합니다. memcmp 및 memcpy 명령 작업에 대한 내 대답을 참조하십시오. –

0

나는 당신이 시계에 열쇠와 물건의 사전을 보내야한다는 것을 알고있다. Objective C에서는 다음과 같이 보입니다.

NSDictionary *update = [NSDictionary dictionaryWithObjects:objects forKeys:keys]; 

키는 모두 정수이고 부울 일 수있는 객체입니다. 내 경우에는 String 만 잘 작동합니다.

t=dict_find(received,count); 
strcpy(strs[count], dict_find(received,count)->value->cstring); 

하지만 난 아직 신인임을 말할 필요가 : 루프에서

나는 시계에 이런 일을 수행합니다.

0

위의 sarfata의 대답에 감사 드리며,이 새 항목을 조약돌이 예상하는 튜플에 추가하지 않은 것을 발견했습니다.

일단 내가 추가하면 내 switch 문이 작동하기 시작했고 메모리를 작동시켜야합니다. 내 메모리 비교를위한 작업 코드는 누구에게나 도움이됩니다.새 값이 이전처럼되지 않습니다 경우에 대한 논리를 - (비교 나는 그것이 조금을하고 있다고 생각하지 8 바이트) 및 부정

case GPS_HAS_FIX_KEY: 
if (memcmp(s_data.haveGPS, new_tuple->value->data, 1) != 0){ 
    memcpy(s_data.haveGPS,new_tuple->value->data, 1); 
    vibes_short_pulse(); 
} 
break; 

은 정말 하나의 바이트를 기대로 간단했다.

관련 문제