updated message handlers
This commit is contained in:
@@ -32,18 +32,22 @@
|
|||||||
#include "http_client.h"
|
#include "http_client.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
#include "ir_emit.h"
|
#include "ir_drv_ctrl.h"
|
||||||
|
|
||||||
#define IR_SERIES_MAX (1024)
|
#define IR_SERIES_MAX (1024)
|
||||||
#define IR_END_CODE (10000)
|
#define IR_END_CODE (10000)
|
||||||
|
|
||||||
const uint8_t k_timeout = 50;
|
const uint8_t k_timeout = 50;
|
||||||
// As this program is a special purpose capture/decoder, let us use a larger
|
// as this program is a special purpose capture/decoder, let us use a larger
|
||||||
// than normal buffer so we can handle Air Conditioner remote codes.
|
// than normal buffer so we can handle Air Conditioner remote codes
|
||||||
const uint16_t k_capture_buffer_size = IR_SERIES_MAX;
|
const uint16_t k_capture_buffer_size = IR_SERIES_MAX;
|
||||||
static IRsend * ir_send = nullptr;
|
static IRsend * ir_send = nullptr;
|
||||||
static IRrecv * ir_recv = nullptr;
|
static IRrecv * ir_recv = nullptr;
|
||||||
|
|
||||||
|
int g_ready_to_study = 0;
|
||||||
|
int g_study_key_id = -1;
|
||||||
|
String g_study_key_name = "";
|
||||||
|
|
||||||
bool sendIR(String file_name) {
|
bool sendIR(String file_name) {
|
||||||
String save_path = SAVE_PATH + file_name;
|
String save_path = SAVE_PATH + file_name;
|
||||||
if (LittleFS.exists(save_path)) {
|
if (LittleFS.exists(save_path)) {
|
||||||
@@ -61,7 +65,6 @@ bool sendIR(String file_name) {
|
|||||||
cache.readBytes((char *)data_buffer, cache.size());
|
cache.readBytes((char *)data_buffer, cache.size());
|
||||||
ir_recv->disableIRIn();
|
ir_recv->disableIRIn();
|
||||||
ir_send->sendRaw(data_buffer, length, 38);
|
ir_send->sendRaw(data_buffer, length, 38);
|
||||||
ir_recv->enableIRIn();
|
|
||||||
free(data_buffer);
|
free(data_buffer);
|
||||||
cache.close();
|
cache.close();
|
||||||
return true;
|
return true;
|
||||||
@@ -84,7 +87,6 @@ bool emitIR(String timing) {
|
|||||||
ir_recv->disableIRIn();
|
ir_recv->disableIRIn();
|
||||||
INFOF("IR send raw : %d\n", parts_num);
|
INFOF("IR send raw : %d\n", parts_num);
|
||||||
ir_send->sendRaw(series, parts_num + 1, 38);
|
ir_send->sendRaw(series, parts_num + 1, 38);
|
||||||
ir_recv->enableIRIn();
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -114,7 +116,6 @@ bool sendCommand(String file_name, int key) {
|
|||||||
}
|
}
|
||||||
ir_recv->disableIRIn();
|
ir_recv->disableIRIn();
|
||||||
ir_send->sendRaw(user_data, data_length, 38);
|
ir_send->sendRaw(user_data, data_length, 38);
|
||||||
ir_recv->enableIRIn();
|
|
||||||
ir_close();
|
ir_close();
|
||||||
free(user_data);
|
free(user_data);
|
||||||
free(content);
|
free(content);
|
||||||
@@ -151,7 +152,6 @@ void sendStatus(String file, t_remote_ac_status status) {
|
|||||||
DEBUGF("data_length = %d\n", data_length);
|
DEBUGF("data_length = %d\n", data_length);
|
||||||
ir_recv->disableIRIn();
|
ir_recv->disableIRIn();
|
||||||
ir_send->sendRaw(user_data, data_length, 38);
|
ir_send->sendRaw(user_data, data_length, 38);
|
||||||
ir_recv->enableIRIn();
|
|
||||||
ir_close();
|
ir_close();
|
||||||
free(user_data);
|
free(user_data);
|
||||||
free(content);
|
free(content);
|
||||||
@@ -163,6 +163,29 @@ void sendStatus(String file, t_remote_ac_status status) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void prepareRecvIR(int key_id, String key_name) {
|
||||||
|
enableIRIn();
|
||||||
|
g_study_key_id = key_id;
|
||||||
|
g_study_key_name = key_name;
|
||||||
|
g_ready_to_study = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cancelRecvIR() {
|
||||||
|
// called solicited
|
||||||
|
g_ready_to_study = 0;
|
||||||
|
g_study_key_name = "";
|
||||||
|
g_study_key_id = -1;
|
||||||
|
disableIRIn();
|
||||||
|
}
|
||||||
|
|
||||||
|
void completedRecvIR(int key_id, String key_name) {
|
||||||
|
// called unsolicited
|
||||||
|
g_ready_to_study = 0;
|
||||||
|
g_study_key_name = "";
|
||||||
|
g_study_key_id = -1;
|
||||||
|
disableIRIn();
|
||||||
|
}
|
||||||
|
|
||||||
void recvIR() {
|
void recvIR() {
|
||||||
decode_results results;
|
decode_results results;
|
||||||
if (ir_recv->decode(&results)) {
|
if (ir_recv->decode(&results)) {
|
||||||
@@ -223,13 +246,13 @@ void loadIRPin(uint8_t send_pin, uint8_t recv_pin) {
|
|||||||
DEBUGF("Load IR send pin at %d\n", send_pin);
|
DEBUGF("Load IR send pin at %d\n", send_pin);
|
||||||
ir_send->begin();
|
ir_send->begin();
|
||||||
ir_recv = new IRrecv(recv_pin, k_capture_buffer_size, k_timeout, true);
|
ir_recv = new IRrecv(recv_pin, k_capture_buffer_size, k_timeout, true);
|
||||||
enableIR();
|
disableIRIn();
|
||||||
}
|
}
|
||||||
|
|
||||||
void disableIR() {
|
void disableIRIn() {
|
||||||
ir_recv->disableIRIn();
|
ir_recv->disableIRIn();
|
||||||
}
|
}
|
||||||
|
|
||||||
void enableIR() {
|
void enableIRIn() {
|
||||||
ir_recv->enableIRIn();
|
ir_recv->enableIRIn();
|
||||||
}
|
}
|
||||||
@@ -21,8 +21,8 @@
|
|||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IRIS_KIT_EMIT_H
|
#ifndef IR_DRV_CTRL_H
|
||||||
#define IRIS_KIT_EMIT_H
|
#define IR_DRV_CTRL_H
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
#include <IRsend.h>
|
#include <IRsend.h>
|
||||||
@@ -32,9 +32,9 @@
|
|||||||
|
|
||||||
void loadIRPin(uint8_t send_pin, uint8_t recv_pin);
|
void loadIRPin(uint8_t send_pin, uint8_t recv_pin);
|
||||||
|
|
||||||
void enableIR();
|
void enableIRIn();
|
||||||
|
|
||||||
void disableIR();
|
void disableIRIn();
|
||||||
|
|
||||||
bool downloadBin(int remote_id);
|
bool downloadBin(int remote_id);
|
||||||
|
|
||||||
@@ -48,10 +48,16 @@ bool sendCommand(String file_name, int key);
|
|||||||
|
|
||||||
void sendStatus(String file_name, t_remote_ac_status status);
|
void sendStatus(String file_name, t_remote_ac_status status);
|
||||||
|
|
||||||
|
void prepareRecvIR(int key_id, String key_name);
|
||||||
|
|
||||||
|
void cancelRecvIR();
|
||||||
|
|
||||||
|
void completedRecvIR(int key_id, String key_name);
|
||||||
|
|
||||||
void recvIR();
|
void recvIR();
|
||||||
|
|
||||||
bool saveIR(String file_name);
|
bool saveIR(String file_name);
|
||||||
|
|
||||||
void initAC(String);
|
void initAC(String);
|
||||||
|
|
||||||
#endif // IRIS_KIT_EMIT_H
|
#endif // IR_DRV_CTRL_H
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
#include "serials.h"
|
#include "serials.h"
|
||||||
#include "iot_hub.h"
|
#include "iot_hub.h"
|
||||||
#include "http_client.h"
|
#include "http_client.h"
|
||||||
#include "ir_emit.h"
|
#include "ir_drv_ctrl.h"
|
||||||
|
|
||||||
#include "iris_client.h"
|
#include "iris_client.h"
|
||||||
|
|
||||||
@@ -66,6 +66,7 @@ static int handleConnected(String product_key, String device_name, String conten
|
|||||||
static int handleHartBeat(String product_key, String device_name, String content);
|
static int handleHartBeat(String product_key, String device_name, String content);
|
||||||
static int handleEmit(String product_key, String device_name, String content);
|
static int handleEmit(String product_key, String device_name, String content);
|
||||||
static int handleNotifyStatus(String product_key, String device_name, String content);
|
static int handleNotifyStatus(String product_key, String device_name, String content);
|
||||||
|
static int processStatusChange(int status, int console_id, int key_id, String key_name);
|
||||||
|
|
||||||
static int hb_count = 0;
|
static int hb_count = 0;
|
||||||
|
|
||||||
@@ -280,9 +281,8 @@ static String buildHeartBeat() {
|
|||||||
return heartBeatMessage;
|
return heartBeatMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
static String buildTestResponse(int console_id) {
|
static String buildGeneralResponse(int console_id, String notify_payload) {
|
||||||
String testResponseBeatMessage = "";
|
String notification = "";
|
||||||
|
|
||||||
iris_msg_doc.clear();
|
iris_msg_doc.clear();
|
||||||
iris_msg_doc["eventName"] = String(EVENT_NOTIFY_RESP);
|
iris_msg_doc["eventName"] = String(EVENT_NOTIFY_RESP);
|
||||||
iris_msg_doc["productKey"] = g_product_key;
|
iris_msg_doc["productKey"] = g_product_key;
|
||||||
@@ -290,9 +290,21 @@ static String buildTestResponse(int console_id) {
|
|||||||
iris_msg_doc["appId"] = g_app_id;
|
iris_msg_doc["appId"] = g_app_id;
|
||||||
iris_msg_doc["consoleId"] = console_id;
|
iris_msg_doc["consoleId"] = console_id;
|
||||||
iris_msg_doc["resp"] = String(NOTIFY_RESP_TEST);
|
iris_msg_doc["resp"] = String(NOTIFY_RESP_TEST);
|
||||||
serializeJson(iris_msg_doc, testResponseBeatMessage);
|
serializeJson(iris_msg_doc, notify_payload);
|
||||||
|
|
||||||
return testResponseBeatMessage;
|
return notification;
|
||||||
|
}
|
||||||
|
|
||||||
|
static String buildTestResponse(int console_id) {
|
||||||
|
return buildGeneralResponse(console_id, NOTIFY_RESP_TEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
static String buildRecvPreparedResponse(int console_id) {
|
||||||
|
return buildGeneralResponse(console_id, NOTIFY_RECV_PREPARED);
|
||||||
|
}
|
||||||
|
|
||||||
|
static String buildStudyCancelledResponse(int console_id) {
|
||||||
|
return buildGeneralResponse(console_id, NOTIFY_STUDY_CANCELLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int handleConnected(String product_key, String device_name, String content) {
|
static int handleConnected(String product_key, String device_name, String content) {
|
||||||
@@ -328,16 +340,43 @@ static int handleNotifyStatus(String product_key, String device_name, String con
|
|||||||
int status = status_notify_doc["status"];
|
int status = status_notify_doc["status"];
|
||||||
int console_id = status_notify_doc["consoleId"];
|
int console_id = status_notify_doc["consoleId"];
|
||||||
INFOF("will enter status : %d for %s(%d)\n", status, key_name.c_str(), key_id);
|
INFOF("will enter status : %d for %s(%d)\n", status, key_name.c_str(), key_id);
|
||||||
if (RECIPIENT_STATUS_TEST == status) {
|
|
||||||
// send response for test notification
|
processStatusChange(status, console_id, key_id, key_name);
|
||||||
String testResponseData = buildTestResponse(console_id);
|
|
||||||
sendData(g_upstream_topic.c_str(), (uint8_t*) testResponseData.c_str(), testResponseData.length());
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
INFOF("deserialize failed\n");
|
INFOF("deserialize failed\n");
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
// parse status
|
}
|
||||||
|
|
||||||
|
static int processStatusChange(int status, int console_id, int key_id, String key_name) {
|
||||||
|
switch(status) {
|
||||||
|
case RECIPIENT_STATUS_TEST:
|
||||||
|
{
|
||||||
|
// send response for test notification
|
||||||
|
String testResponseData = buildTestResponse(console_id);
|
||||||
|
sendData(g_upstream_topic.c_str(), (uint8_t*) testResponseData.c_str(), testResponseData.length());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case RECIPIENT_STATUS_READY_TO_STUDY:
|
||||||
|
{
|
||||||
|
// enter into IR receive mode and send response
|
||||||
|
prepareRecvIR(key_id, key_name);
|
||||||
|
String recvPreparedResponseData = buildRecvPreparedResponse(console_id);
|
||||||
|
sendData(g_upstream_topic.c_str(), (uint8_t*) recvPreparedResponseData.c_str(), recvPreparedResponseData.length());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case RECIPIENT_STATUS_CANCEL_STUDY:
|
||||||
|
{
|
||||||
|
cancelRecvIR();
|
||||||
|
String studyCancelledResponseData = buildStudyCancelledResponse(console_id);
|
||||||
|
sendData(g_upstream_topic.c_str(), (uint8_t*) studyCancelledResponseData.c_str(), studyCancelledResponseData.length());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -33,6 +33,7 @@ typedef enum {
|
|||||||
RECIPIENT_STATUS_READY_TO_STUDY = 1,
|
RECIPIENT_STATUS_READY_TO_STUDY = 1,
|
||||||
RECIPIENT_STATUS_STUDIED = 2,
|
RECIPIENT_STATUS_STUDIED = 2,
|
||||||
RECIPIENT_STATUS_UPLOADED = 3,
|
RECIPIENT_STATUS_UPLOADED = 3,
|
||||||
|
RECIPIENT_STATUS_CANCEL_STUDY = 4,
|
||||||
RECIPIENT_STATUS_TEST = 10,
|
RECIPIENT_STATUS_TEST = 10,
|
||||||
RECIPIENT_STATUS_MAX = 63,
|
RECIPIENT_STATUS_MAX = 63,
|
||||||
} kit_status_t;
|
} kit_status_t;
|
||||||
@@ -53,6 +54,8 @@ typedef enum {
|
|||||||
#define EVENT_NOTIFY_RESP "__notify_response"
|
#define EVENT_NOTIFY_RESP "__notify_response"
|
||||||
|
|
||||||
#define NOTIFY_RESP_TEST "test_ok"
|
#define NOTIFY_RESP_TEST "test_ok"
|
||||||
|
#define NOTIFY_RECV_PREPARED "recv_prepared"
|
||||||
|
#define NOTIFY_STUDY_CANCELLED "study_cancelled"
|
||||||
|
|
||||||
typedef int (*eventHandler)(String, String, String);
|
typedef int (*eventHandler)(String, String, String);
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
#include <WiFiUdp.h>
|
#include <WiFiUdp.h>
|
||||||
|
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "ir_emit.h"
|
#include "ir_drv_ctrl.h"
|
||||||
#include "iot_hub.h"
|
#include "iot_hub.h"
|
||||||
#include "http_client.h"
|
#include "http_client.h"
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
@@ -53,6 +53,7 @@ extern String g_device_token;
|
|||||||
extern String g_mqtt_client_id;
|
extern String g_mqtt_client_id;
|
||||||
extern String g_mqtt_password;
|
extern String g_mqtt_password;
|
||||||
extern int g_app_id;
|
extern int g_app_id;
|
||||||
|
extern int g_ready_to_study;
|
||||||
|
|
||||||
// public variable definitions
|
// public variable definitions
|
||||||
const unsigned long utcOffsetInMilliSeconds = 3600 * 1000;
|
const unsigned long utcOffsetInMilliSeconds = 3600 * 1000;
|
||||||
@@ -223,11 +224,13 @@ void setup() {
|
|||||||
connectToIrextIoT();
|
connectToIrextIoT();
|
||||||
|
|
||||||
iotCheckTask.attach_scheduled(MQTT_CHECK_INTERVALS, checkIrisIoT);
|
iotCheckTask.attach_scheduled(MQTT_CHECK_INTERVALS, checkIrisIoT);
|
||||||
disableIRTask.attach_scheduled(DISABLE_SIGNAL_INTERVALS, disableIR);
|
disableIRTask.attach_scheduled(DISABLE_SIGNAL_INTERVALS, disableIRIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
recvIR();
|
if (g_ready_to_study) {
|
||||||
|
recvIR();
|
||||||
|
}
|
||||||
irextIoTKeepAlive();
|
irextIoTKeepAlive();
|
||||||
yield();
|
yield();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "serials.h"
|
#include "serials.h"
|
||||||
#include "ir_emit.h"
|
#include "ir_drv_ctrl.h"
|
||||||
|
|
||||||
#include "user_settings.h"
|
#include "user_settings.h"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user