Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: DataStore JobScheduler NetworkServices W5500Interface nanopb protocol
Diff: source/jobSchedulesUpload.cpp
- Revision:
- 13:0fdbc14c33e7
- Parent:
- 11:acaefb63fc6b
- Child:
- 14:65d69aed6540
diff -r ec140a26367f -r 0fdbc14c33e7 source/jobSchedulesUpload.cpp --- a/source/jobSchedulesUpload.cpp Wed Aug 02 14:48:16 2017 +0000 +++ b/source/jobSchedulesUpload.cpp Thu Aug 03 00:07:50 2017 +0000 @@ -3,8 +3,83 @@ #include "mbed-trace/mbed_trace.h" #define TRACE_GROUP "scup" +#include "nanopb/source/protobuf/pb.h" +#include "nanopb/source/protobuf/pb_encode.h" +#include "protocol/source/job.pb.h" +#include <string.h> +#include "LinkedList.h" +#include "scheduler.h" +#include "schedules.h" + +// encode signature +// bool (*encode)(pb_ostream_t *stream, const pb_field_t *field, void * const *arg); +//bool pbOutStream(pb_ostream_t *stream, const pb_field_t *field, void * const *arg) { +// return true; +//} + +bool fillScheduleData(protocol_Job_ScheduleData_t& pbSchedData, JobScheduler::ISchedule* schedule) { + int schedType = schedule->ScheduleType(); + switch (schedType) { + case 1: { + // protocol_ScheduleType_RunOnce case + tr_debug("encoding RunOnceSchedule"); + 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); + 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); + return true; + } + case 2: { + // protocol_ScheduleType_Periodic case + tr_debug("encoding RunPeriodicSchedule"); + //JobScheduler::RunPeriodicSchedule* s = static_cast<JobScheduler::RunPeriodicSchedule*>(schedule); + //protocol_PeriodicSchedule pbSched; + return true; + } + default: { + tr_error("Unknown schedule type %d", schedType); + return false; + } + } +} + void JobSchedulesUpload::Run() { tr_info("Job Schedules Upload"); + + protocol_JobList pbJobs = protocol_JobList_init_zero; + strcpy(pbJobs.sn, this->_conf.SerialNumber()); + + { + LinkedList<JobScheduler::Job> jobs; + this->_scheduler.JobList(jobs); + node<JobScheduler::Job>* jn = jobs.pop(1); + int idx = 0; + while (jn != NULL) { + JobScheduler::Job* job = jn->data; + 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())) { + 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); + idx++; + } + } + +// protocol_Job job; // time_t now = time(NULL); //tr_debug("ADC created time is: %s\n", ctime(&now)); // struct AdcMsg msg;