Initial commit
This commit is contained in:
59
src/ledHandler.c
Normal file
59
src/ledHandler.c
Normal file
@@ -0,0 +1,59 @@
|
||||
// Author: Dirk Jahnke
|
||||
// January 24, 2018
|
||||
//
|
||||
// Manage on board LED of SONOFF device
|
||||
//
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "mgos.h"
|
||||
#include "mgos_gpio.h"
|
||||
#include "mgos_sys_config.h"
|
||||
#include "mgos_timers.h"
|
||||
|
||||
#include "ledHandler.h"
|
||||
|
||||
static int ON_BOARD_LED = 13; /* sonoff basic LED pin */
|
||||
|
||||
static LEDStatus currentStatus = LED_OFF;
|
||||
static int numTicksLedHasThisState = 0;
|
||||
|
||||
void set_led_status(LEDStatus newStatus) {
|
||||
numTicksLedHasThisState = 0;
|
||||
currentStatus = newStatus;
|
||||
LOG(LL_DEBUG, ("set_led_status to %d", newStatus));
|
||||
}
|
||||
|
||||
static uint8_t led_timer_ticks = 0; /* for led blinker use */
|
||||
|
||||
static void blink_on_board_led_cb(void *arg) {
|
||||
switch (currentStatus) {
|
||||
case LED_OFF:
|
||||
mgos_gpio_write(ON_BOARD_LED, 1); // off
|
||||
break;
|
||||
case LED_ON:
|
||||
mgos_gpio_write(ON_BOARD_LED, 0); // on
|
||||
break;
|
||||
case LED_BLINK_SLOW:
|
||||
++numTicksLedHasThisState = 0;
|
||||
if (numTicksLedHasThisState >= 4) {
|
||||
numTicksLedHasThisState = 0;
|
||||
mgos_gpio_toggle(ON_BOARD_LED);
|
||||
}
|
||||
break;
|
||||
case LED_BLINK_FAST:
|
||||
// toggle LED each tick
|
||||
mgos_gpio_toggle(ON_BOARD_LED);
|
||||
break;
|
||||
default:
|
||||
LOG(LL_ERROR, ("Invalid current LED status: %d -- ignored", currentStatus));
|
||||
break;
|
||||
}
|
||||
(void) arg;
|
||||
}
|
||||
|
||||
void init_led_handler() {
|
||||
mgos_gpio_set_mode(ON_BOARD_LED, MGOS_GPIO_MODE_OUTPUT);
|
||||
mgos_set_timer(250, MGOS_TIMER_REPEAT, blink_on_board_led_cb, NULL);
|
||||
LOG(LL_DEBUG, ("LED handler initialized"));
|
||||
}
|
19
src/ledHandler.h
Normal file
19
src/ledHandler.h
Normal file
@@ -0,0 +1,19 @@
|
||||
// Author: Dirk Jahnke
|
||||
// January 24, 2018
|
||||
//
|
||||
// Manage on board LED of SONOFF device
|
||||
//
|
||||
#ifndef ledHandler_h_included
|
||||
#define ledHandler_h_included
|
||||
|
||||
enum LEDStatus {
|
||||
LED_OFF = 0, // permanently off
|
||||
LED_ON = 1, // permanently on
|
||||
LED_BLINK_SLOW = 2, // on 0,5x / second (1s on, 1s off)
|
||||
LED_BLINK_FAST = 3 // on 2x / second (250ms on, 250ms off)
|
||||
};
|
||||
|
||||
extern void set_led_status(LEDStatus newStatus);
|
||||
extern void init_led_handler();
|
||||
|
||||
#endif
|
58
src/main.c
Normal file
58
src/main.c
Normal file
@@ -0,0 +1,58 @@
|
||||
#include <stdio.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "common/platform.h"
|
||||
#include "common/cs_file.h"
|
||||
#include "mgos_app.h"
|
||||
#include "mgos_gpio.h"
|
||||
#include "mgos_sys_config.h"
|
||||
#include "mgos_timers.h"
|
||||
#include "mgos_hal.h"
|
||||
#include "mgos_dlsym.h"
|
||||
#include "mgos_mqtt.h"
|
||||
#include "mjs.h"
|
||||
|
||||
#include "ledHandler.h"
|
||||
|
||||
|
||||
bool mqtt_conn_flag = false;
|
||||
|
||||
int mqtt_connected(void) {
|
||||
return (int) mqtt_conn_flag;
|
||||
}
|
||||
|
||||
//static void pub(struct mg_connection *c, const char *fmt, ...) {
|
||||
//char msg[200];
|
||||
//struct json_out jmo = JSON_OUT_BUF(msg, sizeof(msg));
|
||||
//va_list ap;
|
||||
//int n;
|
||||
//va_start(ap, fmt);
|
||||
//n = json_vprintf(&jmo, fmt, ap);
|
||||
//va_end(ap);
|
||||
//mg_mqtt_publish(c, get_cfg()->mqtt.pub, 0, MG_MQTT_QOS(0), msg, n);
|
||||
//LOG(LL_INFO, ("%s -> %s", get_cfg()->mqtt.pub, msg));
|
||||
//}
|
||||
|
||||
static void mqtt_ev_handler(struct mg_connection *c, int ev, void *p, void *user_data) {
|
||||
struct mg_mqtt_message *msg = (struct mg_mqtt_message *) p;
|
||||
if (ev == MG_EV_MQTT_CONNACK) {
|
||||
LOG(LL_INFO, ("MQTT connected: %d", msg->connack_ret_code));
|
||||
mqtt_conn_flag = true;
|
||||
//if (get_cfg()->mqtt.pub == NULL) {
|
||||
//LOG(LL_ERROR, ("Run 'mos config-set mqtt.pub=... '"));
|
||||
//} else {
|
||||
//pub(c, "{timestamp:%.3lf, mem_free:%d}", mg_time(), mgos_get_free_heap_size() ); /* post uptime */
|
||||
//}
|
||||
} else if (ev == MG_EV_CLOSE) {
|
||||
mqtt_conn_flag = false;
|
||||
}
|
||||
(void) user_data;
|
||||
(void) c;
|
||||
}
|
||||
|
||||
enum mgos_app_init_result mgos_app_init(void) {
|
||||
init_led_handler();
|
||||
mgos_mqtt_add_global_handler(mqtt_ev_handler, NULL);
|
||||
LOG(LL_DEBUG, ("SONOFF app initialized"));
|
||||
return MGOS_APP_INIT_SUCCESS;
|
||||
}
|
Reference in New Issue
Block a user