Sergei G / Mbed OS Borsch

Dependencies:   DataStore JobScheduler NetworkServices W5500Interface nanopb protocol

Revision:
14:65d69aed6540
Parent:
13:0fdbc14c33e7
Child:
15:f83485cc5a2c
--- a/source/jobSchedulesUpload.cpp	Thu Aug 03 00:07:50 2017 +0000
+++ b/source/jobSchedulesUpload.cpp	Thu Aug 03 18:15:49 2017 +0000
@@ -17,7 +17,9 @@
 //    return true;
 //}
 
-bool fillScheduleData(protocol_Job_ScheduleData_t& pbSchedData, JobScheduler::ISchedule* schedule) {
+bool fillScheduleData(protocol_Job_ScheduleData_t& pbSchedData, JobScheduler::Appointment& apt) {
+    JobScheduler::Job* job = apt.GetJob();
+    JobScheduler::ISchedule* schedule = job->GetSchedule();
     int schedType = schedule->ScheduleType();
     switch (schedType) {
         case 1: {
@@ -26,12 +28,16 @@
             JobScheduler::RunOnceSchedule* s = static_cast<JobScheduler::RunOnceSchedule*>(schedule);
             protocol_RunOnceSchedule pbSched;
             pbSched.AtUnixSec = (uint32_t)s->AtTime();
-            
-            tr_debug("sizeof(pbSchedData.bytes): %d, AtUnixSec: %d", sizeof(pbSchedData.bytes), pbSched.AtUnixSec);
+            // Time should've been pushed to Appointment structure in all cases.
+            if (pbSched.AtUnixSec != 0) {
+                tr_warn("Run once has not be assigned to appointment yet.  AtUnixSec: %d", pbSched.AtUnixSec);
+            } else {
+                pbSched.AtUnixSec = (uint32_t)apt.GetTime();
+            }
             pb_ostream_t stream = pb_ostream_from_buffer(pbSchedData.bytes, sizeof(pbSchedData.bytes));
             pb_encode(&stream, protocol_RunOnceSchedule_fields, &pbSched);
             pbSchedData.size = stream.bytes_written;
-            tr_debug("bytes written: %d", stream.bytes_written);
+            //tr_debug("sizeof(pbSchedData.bytes): %d, AtUnixSec: %d, bytes written: %d", sizeof(pbSchedData.bytes), pbSched.AtUnixSec, stream.bytes_written);
             return true;
         }
         case 2: {
@@ -55,26 +61,27 @@
     strcpy(pbJobs.sn, this->_conf.SerialNumber());
     
     {
-        LinkedList<JobScheduler::Job> jobs;
-        this->_scheduler.JobList(jobs);
-        node<JobScheduler::Job>* jn = jobs.pop(1);
+        LinkedList<JobScheduler::Appointment> apts;
+        this->_scheduler.AppointmentList(apts);
+        node<JobScheduler::Appointment>* aptn = apts.pop(1);
         int idx = 0;
-        while (jn != NULL) {
-            JobScheduler::Job* job = jn->data;
+        while (aptn != NULL) {
+            JobScheduler::Appointment* apt = aptn->data;
+            JobScheduler::Job* job = apt->GetJob();
             tr_debug("adding job ID: %d, type: %d\n", job->GetID(), job->GetTypeID());
             pbJobs.items[idx].ID = job->GetID();
             pbJobs.items[idx].TypeID = job->GetTypeID();
             pbJobs.items[idx].ScheduleTypeID = static_cast<protocol_ScheduleType>(job->GetSchedule()->ScheduleType());
             // pbJobs.items[idx].ScheduleData = 
-            if (!fillScheduleData(pbJobs.items[idx].ScheduleData, job->GetSchedule())) {
+            if (!fillScheduleData(pbJobs.items[idx].ScheduleData, *apt)) {
                 tr_error("job error: failed to fill schedule");
                 return;
             }
             tr_debug("schedule data size: %d", pbJobs.items[idx].ScheduleData.size);
             // pbJobs.items[idx].Data = 
             
-            jobs.remove(1);
-            jn = jobs.pop(1);
+            apts.remove(1);
+            aptn = apts.pop(1);
             idx++;
         }
     }