diff --git a/scheduler/schedule.cpp b/scheduler/schedule.cpp index 30e32b6..562386a 100644 --- a/scheduler/schedule.cpp +++ b/scheduler/schedule.cpp @@ -314,64 +314,6 @@ long SensorScheduler::CalcNextTimestamp(int id) { return available_ts; } -int SensorScheduler::UpdateSensorConfig(int short_addr) { - int id = 0; - auto iter = short_addr_map_.find(short_addr); - if (iter == short_addr_map_.end()) { - zlog_error(zct, "cannot find id for short_addr %d", short_addr); - return 1; - } else { - id = iter->second; - } - if (update_.count(id) > 0) { - return 0; - } - update_.insert(id); - UpdateConfigFile(); - return 0; -} - -int SensorScheduler::UpdateConfigResult(int short_addr, int result) { - int id = 0; - auto iter = short_addr_map_.find(short_addr); - if (iter == short_addr_map_.end()) { - zlog_error(zct, "cannot find id for short_addr %d", short_addr); - return 1; - } else { - id = iter->second; - } - if (result != 0) { - return 0; - } - - update_.erase(id); - UpdateConfigFile(); - return 0; -} - -int SensorScheduler::UpgradeSensor(int short_addr, std::string sensor_type, int hw_version, - std::string current_sw_version, std::string upgrade_sw_version) { - int id = 0; - auto iter = short_addr_map_.find(short_addr); - if (iter == short_addr_map_.end()) { - zlog_error(zct, "cannot find id for short_addr %d", short_addr); - return 1; - } else { - id = iter->second; - } - UpgradeInfo info; - info.try_times = 0; - info.sensor_type = sensor_type; - info.hw_version = hw_version; - info.current_sw_version = current_sw_version; - info.upgrade_sw_version = upgrade_sw_version; - long ts = GetLocalTs(); - info.submit_time = GetUTCTime(ts); - upgrade_[id] = info; - UpdateUpgradeFile(); - return 0; -} - int SensorScheduler::GetAvailableId(int short_addr) { int max_support_sensor[128] = {0}; for (auto it = short_addr_map_.begin(); it != short_addr_map_.end(); ++it) { @@ -475,6 +417,7 @@ int SensorScheduler::StartSchedule(int short_addr, int &next_duration) { if (upgrade_iter != upgrade_.end()) { if (upgrade_iter->second.try_times < 10) { current_request_ = kScheduleUpgrade; + UpdateUpgradeInfo(id); zlog_warn(zct, "[%d] in wave slice to upgrade now from version:%s to %s, try time:%d", id, upgrade_iter->second.current_sw_version.c_str(), upgrade_iter->second.upgrade_sw_version.c_str(), upgrade_iter->second.try_times); @@ -497,6 +440,7 @@ int SensorScheduler::StartSchedule(int short_addr, int &next_duration) { if (upgrade_iter != upgrade_.end()) { if (upgrade_iter->second.try_times < 10) { current_request_ = kScheduleUpgrade; + UpdateUpgradeInfo(id); zlog_debug(zct, "[%d] in idle to upgrade now from version:%s to %s, try time:%d", id, upgrade_iter->second.current_sw_version.c_str(), upgrade_iter->second.upgrade_sw_version.c_str(), upgrade_iter->second.try_times); @@ -521,26 +465,6 @@ int SensorScheduler::StartSchedule(int short_addr, int &next_duration) { } } -int SensorScheduler::UpgradeResult(int short_addr, int result) { - int id = 0; - auto iter = short_addr_map_.find(short_addr); - if (iter == short_addr_map_.end()) { - zlog_error(zct, "cannot find id for short_addr %d", short_addr); - return 1; - } else { - id = iter->second; - } - - if (result == kUpgradeSuccess || - result == kProductTypeMismatch || - result == kZigbeeHWMismatch || - result == kUpgradeDoneBefore) { - upgrade_.erase(id); - UpdateUpgradeFile(); - } - return 0; -} - int SensorScheduler::Config(int eigen_value_send_interval, int wave_form_send_interval, int eigen_value_send_duration, int wave_form_send_duration, int max_sensor_num) { if (!support_modification_) { zlog_warn(zct, "not support modification"); @@ -626,6 +550,92 @@ int SensorScheduler::CalcAvailableSlice(int eigen_value_send_interval, int wave_ return 0; } +int SensorScheduler::UpdateSensorConfig(int short_addr) { + int id = 0; + auto iter = short_addr_map_.find(short_addr); + if (iter == short_addr_map_.end()) { + zlog_error(zct, "cannot find id for short_addr %d", short_addr); + return 1; + } else { + id = iter->second; + } + if (update_.count(id) > 0) { + return 0; + } + update_.insert(id); + UpdateConfigFile(); + return 0; +} + +int SensorScheduler::UpdateConfigResult(int short_addr, int result) { + int id = 0; + auto iter = short_addr_map_.find(short_addr); + if (iter == short_addr_map_.end()) { + zlog_error(zct, "cannot find id for short_addr %d", short_addr); + return 1; + } else { + id = iter->second; + } + if (result != 0) { + return 0; + } + + update_.erase(id); + UpdateConfigFile(); + return 0; +} + +int SensorScheduler::UpgradeSensor(int short_addr, std::string sensor_type, int hw_version, + std::string current_sw_version, std::string upgrade_sw_version) { + int id = 0; + auto iter = short_addr_map_.find(short_addr); + if (iter == short_addr_map_.end()) { + zlog_error(zct, "cannot find id for short_addr %d", short_addr); + return 1; + } else { + id = iter->second; + } + UpgradeInfo info; + info.try_times = 0; + info.sensor_type = sensor_type; + info.hw_version = hw_version; + info.current_sw_version = current_sw_version; + info.upgrade_sw_version = upgrade_sw_version; + long ts = GetLocalTs(); + info.submit_time = GetUTCTime(ts); + upgrade_[id] = info; + UpdateUpgradeFile(); + return 0; +} + +int SensorScheduler::UpgradeResult(int short_addr, int result) { + int id = 0; + auto iter = short_addr_map_.find(short_addr); + if (iter == short_addr_map_.end()) { + zlog_error(zct, "cannot find id for short_addr %d", short_addr); + return 1; + } else { + id = iter->second; + } + + if (result == kUpgradeSuccess || + result == kProductTypeMismatch || + result == kZigbeeHWMismatch || + result == kUpgradeDoneBefore) { + upgrade_.erase(id); + UpdateUpgradeFile(); + } else { + auto upgrade_iter = upgrade_.find(id); + if (upgrade_iter->second.try_times >= 10) { + zlog_error(zct, "[%d] short addr:%d upgrade 10 time failure", id, short_addr); + upgrade_.erase(id); + UpdateUpgradeFile(); + // TODO: call interface to write into database + } + } + return 0; +} + long SensorScheduler::GetLocalTs() { auto now = std::chrono::system_clock::now(); auto timestamp = std::chrono::duration_cast(now.time_since_epoch()).count(); @@ -668,6 +678,14 @@ void SensorScheduler::UpdateConfigFile() { out_file.close(); } +void SensorScheduler::UpdateUpgradeInfo(int id) { + auto upgrade_iter = upgrade_.find(id); + upgrade_iter->second.try_times++; + long ts = GetLocalTs(); + upgrade_iter->second.try_world_time1.push_back(GetUTCTime(ts)); + UpdateUpgradeFile(); +} + void SensorScheduler::UpdateUpgradeFile() { Json::Value root; for (auto item : upgrade_) { diff --git a/scheduler/schedule.hpp b/scheduler/schedule.hpp index e5c4f2b..cab4f2b 100644 --- a/scheduler/schedule.hpp +++ b/scheduler/schedule.hpp @@ -108,6 +108,7 @@ public: int GetAvailableId(int short_addr); private: + void UpdateUpgradeInfo(int id); void UpdateUpgradeFile(); void UpdateConfigFile();