瀏覽代碼

ibutton app, only read mode

DrZlo13 5 年之前
父節點
當前提交
799eefd754

+ 12 - 0
applications/applications.mk

@@ -24,6 +24,7 @@ BUILD_VIBRO_DEMO = 1
 BUILD_SD_TEST = 1
 BUILD_GPIO_DEMO = 1
 BUILD_MUSIC_PLAYER = 1
+BUILD_IBUTTON = 1
 endif
 
 APP_NFC ?= 0
@@ -258,6 +259,17 @@ CFLAGS		+= -DBUILD_MUSIC_PLAYER
 C_SOURCES	+= $(wildcard $(APP_DIR)/music-player/*.c)
 endif
 
+APP_IBUTTON ?= 0
+ifeq ($(APP_IBUTTON), 1)
+CFLAGS		+= -DAPP_IBUTTON
+BUILD_IBUTTON = 1
+endif
+BUILD_IBUTTON ?= 0
+ifeq ($(BUILD_IBUTTON), 1)
+CFLAGS		+= -DBUILD_IBUTTON
+CPP_SOURCES	+= $(wildcard $(APP_DIR)/ibutton/ibutton.cpp)
+endif
+
 # device drivers
 
 APP_GUI	?= 0

+ 12 - 0
applications/ibutton/ibutton.cpp

@@ -4,8 +4,12 @@
 
 // start app
 void AppiButton::run() {
+    acquire_state();
     mode[0] = new AppiButtonModeDallasRead(this);
     mode[1] = new AppiButtonModeDallasEmulate(this);
+    release_state();
+
+    switch_to_mode(0);
 
     // create pin
     GpioPin red_led = led_gpio[0];
@@ -94,6 +98,14 @@ void AppiButton::decrease_mode() {
     release_state();
 }
 
+void AppiButton::switch_to_mode(uint8_t mode_index) {
+    acquire_state();
+    mode[state.mode_index]->release();
+    state.mode_index = mode_index;
+    mode[state.mode_index]->acquire();
+    release_state();
+}
+
 // app enter function
 extern "C" void app_ibutton(void* p) {
     AppiButton* app = new AppiButton();

+ 3 - 1
applications/ibutton/ibutton.h

@@ -8,7 +8,8 @@ typedef uint8_t event_t;
 class AppiButtonState {
 public:
     // state data
-    uint8_t dallas_address[8] = {0x01, 0xFD, 0x0E, 0x84, 0x01, 0x00, 0x00, 0xDB};
+    // test key = {0x01, 0xFD, 0x0E, 0x84, 0x01, 0x00, 0x00, 0xDB};
+    uint8_t dallas_address[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
     uint8_t mode_index;
 
     // state initializer
@@ -51,4 +52,5 @@ public:
 
     void increase_mode();
     void decrease_mode();
+    void switch_to_mode(uint8_t mode_index);
 };

+ 4 - 4
applications/ibutton/ibutton_mode_dallas_emulate.h

@@ -25,19 +25,19 @@ public:
 
 void AppiButtonModeDallasEmulate::event(AppiButtonEvent* event, AppiButtonState* state) {
     if(event->type == AppiButtonEvent::EventTypeTick) {
-        acquire();
-        if(onewire_slave->emulate(state->dallas_address, 8)) {
+        app->blink_red();
+        /*if(onewire_slave->emulate(state->dallas_address, 8)) {
             app->blink_green();
         } else {
             
-        }
+        }*/
     }
 }
 
 void AppiButtonModeDallasEmulate::render(CanvasApi* canvas, AppiButtonState* state) {
     canvas->set_font(canvas, FontSecondary);
     canvas->draw_str(canvas, 2, 25, "< dallas emulate");
-    canvas->draw_str(canvas, 2, 37, "give me domophone");
+    canvas->draw_str(canvas, 2, 37, "unimplemented");
     {
         char buf[24];
         sprintf(

+ 2 - 4
applications/ibutton/one_wire_slave_gpio.h

@@ -129,8 +129,7 @@ bool OneWireGpioSlave::receiveBit(void) {
     // wait while bus is HIGH
     OneWiteTimeType time = OneWireEmulateTiming::SLOT_MAX[overdrive_mode];
     time = wait_while_gpio(time, true);
-    if (time == 0)
-    {
+    if(time == 0) {
         printf("RESET_IN_PROGRESS\n");
         return false;
     }
@@ -144,8 +143,7 @@ bool OneWireGpioSlave::receiveBit(void) {
     // wait while bus is LOW
     time = OneWireEmulateTiming::MSG_HIGH_TIMEOUT;
     time = wait_while_gpio(time, false);
-    if (time == 0)
-    {
+    if(time == 0) {
         printf("TIMEOUT_HIGH\n");
         return false;
     }