ibutton app, only read mode

This commit is contained in:
DrZlo13 2020-11-17 07:10:58 +10:00
parent a8fdbc6376
commit 799eefd754
5 changed files with 33 additions and 9 deletions

View File

@ -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

View File

@ -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();

View File

@ -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);
};

View File

@ -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(

View File

@ -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;
}