Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[project] adjust project directory structure #7

Merged
merged 1 commit into from
Apr 5, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions 1.Firmware/src/app/Pages/AppFactory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
#include "StartUp/StartUp.h"
#include "Menu/Menu.h"
#include "Playground/Playground.h"
#include "HASS/Hass.h"
#include "SurfaceDial/SurfaceDial.h"

// #include "Scene3D/Scene3D.h"

Expand All @@ -41,8 +43,10 @@ PageBase* AppFactory::CreatePage(const char* name)
{
APP_CLASS_MATCH(Template);
APP_CLASS_MATCH(Menu);
APP_CLASS_MATCH(Playground);
APP_CLASS_MATCH(Startup);
APP_CLASS_MATCH(Playground);
APP_CLASS_MATCH(SurfaceDial);
APP_CLASS_MATCH(Startup);
APP_CLASS_MATCH(Hass);
// APP_CLASS_MATCH(Scene3D);

return nullptr;
Expand Down
195 changes: 195 additions & 0 deletions 1.Firmware/src/app/Pages/HASS/Hass.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@
#include "Hass.h"
#include "hal/hal.h"
#include "config.h"

using namespace Page;

const char* playload_str[] {
[SUPER_DIAL_NULL] = "NULL",
[HASS_LEFT] = "LEFT",
[HASS_RIGHT] = "RIGHT",
[HASS_PUSH] = "ON/OFF"
};
const int motor_mode = MOTOR_SUPER_DIAL;
const int app_mode = APP_MODE_HOME_ASSISTANT;

void hass_hal_init(void)
{
HAL::mqtt_init();
}

int hass_hal_send(const char *device_name, int knob_value)
{
char topic_name[128];

snprintf(topic_name, sizeof(topic_name),"%s/HOME/%s", MQTT_HOST, device_name);
if (knob_value < HASS_MAX && playload_str[knob_value] != NULL) {
printf("mqtt send: %s:%s\n", topic_name, playload_str[knob_value]);
return HAL::mqtt_publish(topic_name, playload_str[knob_value]);
} else {
printf("hass_hal_send: xknob_value is invalid\n");
return -1;
}
return 0;
}

Hass::Hass()
{
}

Hass::~Hass()
{

}

void Hass::onCustomAttrConfig()
{
SetCustomCacheEnable(false);
// SetCustomLoadAnimType(PageManager::LOAD_ANIM_OVER_BOTTOM, 500, lv_anim_path_bounce);
}

void Hass::onViewLoad()
{
printf("Hass: onViewLoad\n");
Model = new HassModel();
View = new HassView();

hass_hal_init();

Model->Init();
View->Create(root);

AttachEvent(root);
AttachEvent(View->ui.meter);
//APP_MODE_HOME_ASSISTANT

AttachEvent(((HassView*)View)->m_ui.fan.cont);
AttachEvent(((HassView*)View)->m_ui.monitor_light.cont);
AttachEvent(((HassView*)View)->m_ui.air_conditioning.cont);
AttachEvent(((HassView*)View)->m_ui.wash_machine.cont);
}

void Hass::AttachEvent(lv_obj_t* obj)
{
lv_obj_set_user_data(obj, this);
lv_obj_add_event_cb(obj, onEvent, LV_EVENT_ALL, this);
}

void Hass::onViewDidLoad()
{

}

void Hass::onViewWillAppear()
{
printf("Hass: onViewWillAppear\n");
Model->ChangeMotorMode(motor_mode);
Model->SetPlaygroundMode(app_mode);
View->SetPlaygroundMode(app_mode);

timer = lv_timer_create(onTimerUpdate, 10, this);
}

void Hass::onViewDidAppear()
{

}

void Hass::onViewWillDisappear()
{

}

void Hass::onViewDidDisappear()
{
lv_timer_del(timer);
}

void Hass::onViewDidUnload()
{
View->Delete();
Model->Deinit();

delete View;
delete Model;

}

void Hass::Update()
{
HassInfo info;
Model->GetKnobStatus(&info);
if (info.konb_direction != SUPER_DIAL_NULL)
{
char* name = ((HassView*)View)->GetEditedDeviceName();
if (name != NULL)
{
hass_hal_send(name, info.konb_direction);
}
}
View->UpdateView(&info);
}

void Hass::onTimerUpdate(lv_timer_t* timer)
{
Hass* instance = (Hass*)timer->user_data;

instance->Update();
}

void Hass::HassEventHandler(lv_event_t* event, lv_event_code_t code)
{
lv_obj_t* obj = lv_event_get_target(event);
lv_obj_t* label = lv_obj_get_child(obj, 1);

if (code < LV_EVENT_RELEASED) {
printf("code: %d\n", code);
}

if (code == LV_EVENT_FOCUSED) {
if (label != NULL) {
printf("fouces, name:%s\n", lv_label_get_text(label));
((HassView*)View)->UpdateFocusedDevice(lv_label_get_text(label));
}
}
if (code == LV_EVENT_PRESSED)
{
if (!lv_obj_has_state(obj, LV_STATE_EDITED)) {
if (label != NULL) {
printf("Control device: %s\n", lv_label_get_text(label));
}
lv_obj_add_state(obj, LV_STATE_EDITED);
((HassView*)View)->SetCtrView(obj);
HAL::encoder_disable();
if (((HassView*)View)->GetViewMode() == VIEW_MODE_ON_OFF) {
Model->ChangeMotorMode(MOTOR_ON_OFF_STRONG_DETENTS);
}
} else {
hass_hal_send(lv_label_get_text(label), HASS_PUSH);
}
} else if (code == LV_EVENT_LONG_PRESSED) {
printf("Hass: LV_EVENT_LONG_PRESSED\n");
if (lv_obj_has_state(obj, LV_STATE_EDITED)) {
((HassView*)View)->ClearCtrView(obj);
lv_obj_clear_state(obj, LV_STATE_EDITED);
HAL::encoder_enable();
Model->ChangeMotorMode(MOTOR_UNBOUND_COARSE_DETENTS);
}
} else if (code == LV_EVENT_LONG_PRESSED_REPEAT) {
// return to memu
if (!lv_obj_has_state(obj, LV_STATE_EDITED)){
printf("Hass: LV_EVENT_LONG_PRESSED_REPEAT\n");
Model->ChangeMotorMode(MOTOR_UNBOUND_COARSE_DETENTS);
Manager->Pop();
}
}
}

void Hass::onEvent(lv_event_t* event)
{
lv_obj_t* obj = lv_event_get_target(event);
lv_event_code_t code = lv_event_get_code(event);
auto* instance = (Hass*)lv_obj_get_user_data(obj);

instance->HassEventHandler(event, code);
}
43 changes: 43 additions & 0 deletions 1.Firmware/src/app/Pages/HASS/Hass.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
#ifndef __HASS_H__
#define __HASS_H__

#include "HassModel.h"
#include "HassView.h"

void hass_hal_init(void);
int hass_hal_send(const char *device_name, int knob_value);

namespace Page
{
class Hass : public PageBase
{
public:
Hass();
virtual ~Hass();

virtual void onCustomAttrConfig();
virtual void onViewLoad();
virtual void onViewDidLoad();
virtual void onViewWillAppear();
virtual void onViewDidAppear();
virtual void onViewWillDisappear();
virtual void onViewDidDisappear();
virtual void onViewDidUnload();

void HassEventHandler(lv_event_t* event, lv_event_code_t code);

private:
void Update();
void AttachEvent(lv_obj_t* obj);
static void onTimerUpdate(lv_timer_t* timer);
static void onEvent(lv_event_t* event);

private:
HassView* View;
HassModel* Model;
lv_timer_t* timer;
};
}


#endif /* __HASS_H__ */
30 changes: 0 additions & 30 deletions 1.Firmware/src/app/Pages/HASS/HassHalComm.cpp

This file was deleted.

6 changes: 0 additions & 6 deletions 1.Firmware/src/app/Pages/HASS/HassHalComm.h

This file was deleted.

26 changes: 16 additions & 10 deletions 1.Firmware/src/app/Pages/HASS/HassModel.cpp
Original file line number Diff line number Diff line change
@@ -1,29 +1,35 @@
#include "HassModel.h"
#include "app/Accounts/Account_Master.h"
#include <Arduino.h>
#include "hal/motor.h"
#include "hal/hal.h"

using namespace Page;

HassModel::HassModel()
{
app = APP_MODE_HOME_ASSISTANT;
app = APP_MODE_HOME_ASSISTANT;
}

void HassModel::GetKnobStatus(PlaygroundInfo *info)
void HassModel::GetKnobStatus(HassInfo* info)
{
PlaygroundModel::GetKnobStatus(info);
info->is_ble_connected = HAL::surface_dial_is_connected();
PlaygroundModel::GetKnobStatus(info);
}


void HassModel::Init()
{
PlaygroundModel::Init();
PlaygroundModel::Init();
printf("HassModel: Init start\n");
}

void HassModel::Deinit()
{
PlaygroundModel::Deinit();
PlaygroundModel::Deinit();
}

void HassModel::ChangeMotorMode(int mode)
{
PlaygroundModel::ChangeMotorMode(mode);
}

void HassModel::SetPlaygroundMode(int16_t mode)
{
PlaygroundModel::SetPlaygroundMode(mode);
}
Loading