updated message handlers
This commit is contained in:
@@ -32,18 +32,22 @@
|
||||
#include "http_client.h"
|
||||
#include "utils.h"
|
||||
|
||||
#include "ir_emit.h"
|
||||
#include "ir_drv_ctrl.h"
|
||||
|
||||
#define IR_SERIES_MAX (1024)
|
||||
#define IR_END_CODE (10000)
|
||||
|
||||
const uint8_t k_timeout = 50;
|
||||
// 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.
|
||||
// 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
|
||||
const uint16_t k_capture_buffer_size = IR_SERIES_MAX;
|
||||
static IRsend * ir_send = 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) {
|
||||
String save_path = SAVE_PATH + file_name;
|
||||
if (LittleFS.exists(save_path)) {
|
||||
@@ -61,7 +65,6 @@ bool sendIR(String file_name) {
|
||||
cache.readBytes((char *)data_buffer, cache.size());
|
||||
ir_recv->disableIRIn();
|
||||
ir_send->sendRaw(data_buffer, length, 38);
|
||||
ir_recv->enableIRIn();
|
||||
free(data_buffer);
|
||||
cache.close();
|
||||
return true;
|
||||
@@ -84,7 +87,6 @@ bool emitIR(String timing) {
|
||||
ir_recv->disableIRIn();
|
||||
INFOF("IR send raw : %d\n", parts_num);
|
||||
ir_send->sendRaw(series, parts_num + 1, 38);
|
||||
ir_recv->enableIRIn();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
@@ -114,7 +116,6 @@ bool sendCommand(String file_name, int key) {
|
||||
}
|
||||
ir_recv->disableIRIn();
|
||||
ir_send->sendRaw(user_data, data_length, 38);
|
||||
ir_recv->enableIRIn();
|
||||
ir_close();
|
||||
free(user_data);
|
||||
free(content);
|
||||
@@ -151,7 +152,6 @@ void sendStatus(String file, t_remote_ac_status status) {
|
||||
DEBUGF("data_length = %d\n", data_length);
|
||||
ir_recv->disableIRIn();
|
||||
ir_send->sendRaw(user_data, data_length, 38);
|
||||
ir_recv->enableIRIn();
|
||||
ir_close();
|
||||
free(user_data);
|
||||
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() {
|
||||
decode_results 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);
|
||||
ir_send->begin();
|
||||
ir_recv = new IRrecv(recv_pin, k_capture_buffer_size, k_timeout, true);
|
||||
enableIR();
|
||||
disableIRIn();
|
||||
}
|
||||
|
||||
void disableIR() {
|
||||
void disableIRIn() {
|
||||
ir_recv->disableIRIn();
|
||||
}
|
||||
|
||||
void enableIR() {
|
||||
void enableIRIn() {
|
||||
ir_recv->enableIRIn();
|
||||
}
|
||||
@@ -21,8 +21,8 @@
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef IRIS_KIT_EMIT_H
|
||||
#define IRIS_KIT_EMIT_H
|
||||
#ifndef IR_DRV_CTRL_H
|
||||
#define IR_DRV_CTRL_H
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <IRsend.h>
|
||||
@@ -32,9 +32,9 @@
|
||||
|
||||
void loadIRPin(uint8_t send_pin, uint8_t recv_pin);
|
||||
|
||||
void enableIR();
|
||||
void enableIRIn();
|
||||
|
||||
void disableIR();
|
||||
void disableIRIn();
|
||||
|
||||
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 prepareRecvIR(int key_id, String key_name);
|
||||
|
||||
void cancelRecvIR();
|
||||
|
||||
void completedRecvIR(int key_id, String key_name);
|
||||
|
||||
void recvIR();
|
||||
|
||||
bool saveIR(String file_name);
|
||||
|
||||
void initAC(String);
|
||||
|
||||
#endif // IRIS_KIT_EMIT_H
|
||||
#endif // IR_DRV_CTRL_H
|
||||
@@ -35,7 +35,7 @@
|
||||
#include "serials.h"
|
||||
#include "iot_hub.h"
|
||||
#include "http_client.h"
|
||||
#include "ir_emit.h"
|
||||
#include "ir_drv_ctrl.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 handleEmit(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;
|
||||
|
||||
@@ -280,9 +281,8 @@ static String buildHeartBeat() {
|
||||
return heartBeatMessage;
|
||||
}
|
||||
|
||||
static String buildTestResponse(int console_id) {
|
||||
String testResponseBeatMessage = "";
|
||||
|
||||
static String buildGeneralResponse(int console_id, String notify_payload) {
|
||||
String notification = "";
|
||||
iris_msg_doc.clear();
|
||||
iris_msg_doc["eventName"] = String(EVENT_NOTIFY_RESP);
|
||||
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["consoleId"] = console_id;
|
||||
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) {
|
||||
@@ -328,16 +340,43 @@ static int handleNotifyStatus(String product_key, String device_name, String con
|
||||
int status = status_notify_doc["status"];
|
||||
int console_id = status_notify_doc["consoleId"];
|
||||
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
|
||||
String testResponseData = buildTestResponse(console_id);
|
||||
sendData(g_upstream_topic.c_str(), (uint8_t*) testResponseData.c_str(), testResponseData.length());
|
||||
}
|
||||
|
||||
processStatusChange(status, console_id, key_id, key_name);
|
||||
} else {
|
||||
INFOF("deserialize failed\n");
|
||||
}
|
||||
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;
|
||||
}
|
||||
@@ -33,6 +33,7 @@ typedef enum {
|
||||
RECIPIENT_STATUS_READY_TO_STUDY = 1,
|
||||
RECIPIENT_STATUS_STUDIED = 2,
|
||||
RECIPIENT_STATUS_UPLOADED = 3,
|
||||
RECIPIENT_STATUS_CANCEL_STUDY = 4,
|
||||
RECIPIENT_STATUS_TEST = 10,
|
||||
RECIPIENT_STATUS_MAX = 63,
|
||||
} kit_status_t;
|
||||
@@ -53,6 +54,8 @@ typedef enum {
|
||||
#define EVENT_NOTIFY_RESP "__notify_response"
|
||||
|
||||
#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 struct {
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
#include <WiFiUdp.h>
|
||||
|
||||
#include "defines.h"
|
||||
#include "ir_emit.h"
|
||||
#include "ir_drv_ctrl.h"
|
||||
#include "iot_hub.h"
|
||||
#include "http_client.h"
|
||||
#include "global.h"
|
||||
@@ -53,6 +53,7 @@ extern String g_device_token;
|
||||
extern String g_mqtt_client_id;
|
||||
extern String g_mqtt_password;
|
||||
extern int g_app_id;
|
||||
extern int g_ready_to_study;
|
||||
|
||||
// public variable definitions
|
||||
const unsigned long utcOffsetInMilliSeconds = 3600 * 1000;
|
||||
@@ -223,11 +224,13 @@ void setup() {
|
||||
connectToIrextIoT();
|
||||
|
||||
iotCheckTask.attach_scheduled(MQTT_CHECK_INTERVALS, checkIrisIoT);
|
||||
disableIRTask.attach_scheduled(DISABLE_SIGNAL_INTERVALS, disableIR);
|
||||
disableIRTask.attach_scheduled(DISABLE_SIGNAL_INTERVALS, disableIRIn);
|
||||
}
|
||||
|
||||
void loop() {
|
||||
recvIR();
|
||||
if (g_ready_to_study) {
|
||||
recvIR();
|
||||
}
|
||||
irextIoTKeepAlive();
|
||||
yield();
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
#include "defines.h"
|
||||
#include "global.h"
|
||||
#include "serials.h"
|
||||
#include "ir_emit.h"
|
||||
#include "ir_drv_ctrl.h"
|
||||
|
||||
#include "user_settings.h"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user