Sergei G / Mbed OS Borsch

Dependencies:   DataStore JobScheduler NetworkServices W5500Interface nanopb protocol

Committer:
sgnezdov
Date:
Thu Aug 03 22:44:59 2017 +0000
Revision:
17:b79ce8109995
Parent:
16:bef1673b199e
Child:
18:133a51becbe1
demo stack underflow issue

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sgnezdov 11:acaefb63fc6b 1 #include "jobSchedulesUpload.h"
sgnezdov 11:acaefb63fc6b 2
sgnezdov 11:acaefb63fc6b 3 #include "mbed-trace/mbed_trace.h"
sgnezdov 11:acaefb63fc6b 4 #define TRACE_GROUP "scup"
sgnezdov 11:acaefb63fc6b 5
sgnezdov 13:0fdbc14c33e7 6 #include "nanopb/source/protobuf/pb.h"
sgnezdov 13:0fdbc14c33e7 7 #include "nanopb/source/protobuf/pb_encode.h"
sgnezdov 13:0fdbc14c33e7 8 #include "protocol/source/job.pb.h"
sgnezdov 13:0fdbc14c33e7 9 #include <string.h>
sgnezdov 13:0fdbc14c33e7 10 #include "LinkedList.h"
sgnezdov 13:0fdbc14c33e7 11 #include "scheduler.h"
sgnezdov 13:0fdbc14c33e7 12 #include "schedules.h"
sgnezdov 13:0fdbc14c33e7 13
sgnezdov 14:65d69aed6540 14 bool fillScheduleData(protocol_Job_ScheduleData_t& pbSchedData, JobScheduler::Appointment& apt) {
sgnezdov 14:65d69aed6540 15 JobScheduler::Job* job = apt.GetJob();
sgnezdov 14:65d69aed6540 16 JobScheduler::ISchedule* schedule = job->GetSchedule();
sgnezdov 13:0fdbc14c33e7 17 int schedType = schedule->ScheduleType();
sgnezdov 13:0fdbc14c33e7 18 switch (schedType) {
sgnezdov 13:0fdbc14c33e7 19 case 1: {
sgnezdov 13:0fdbc14c33e7 20 // protocol_ScheduleType_RunOnce case
sgnezdov 13:0fdbc14c33e7 21 tr_debug("encoding RunOnceSchedule");
sgnezdov 13:0fdbc14c33e7 22 JobScheduler::RunOnceSchedule* s = static_cast<JobScheduler::RunOnceSchedule*>(schedule);
sgnezdov 13:0fdbc14c33e7 23 protocol_RunOnceSchedule pbSched;
sgnezdov 13:0fdbc14c33e7 24 pbSched.AtUnixSec = (uint32_t)s->AtTime();
sgnezdov 14:65d69aed6540 25 // Time should've been pushed to Appointment structure in all cases.
sgnezdov 14:65d69aed6540 26 if (pbSched.AtUnixSec != 0) {
sgnezdov 14:65d69aed6540 27 tr_warn("Run once has not be assigned to appointment yet. AtUnixSec: %d", pbSched.AtUnixSec);
sgnezdov 14:65d69aed6540 28 } else {
sgnezdov 14:65d69aed6540 29 pbSched.AtUnixSec = (uint32_t)apt.GetTime();
sgnezdov 14:65d69aed6540 30 }
sgnezdov 13:0fdbc14c33e7 31 pb_ostream_t stream = pb_ostream_from_buffer(pbSchedData.bytes, sizeof(pbSchedData.bytes));
sgnezdov 13:0fdbc14c33e7 32 pb_encode(&stream, protocol_RunOnceSchedule_fields, &pbSched);
sgnezdov 13:0fdbc14c33e7 33 pbSchedData.size = stream.bytes_written;
sgnezdov 14:65d69aed6540 34 //tr_debug("sizeof(pbSchedData.bytes): %d, AtUnixSec: %d, bytes written: %d", sizeof(pbSchedData.bytes), pbSched.AtUnixSec, stream.bytes_written);
sgnezdov 13:0fdbc14c33e7 35 return true;
sgnezdov 13:0fdbc14c33e7 36 }
sgnezdov 13:0fdbc14c33e7 37 case 2: {
sgnezdov 13:0fdbc14c33e7 38 // protocol_ScheduleType_Periodic case
sgnezdov 13:0fdbc14c33e7 39 tr_debug("encoding RunPeriodicSchedule");
sgnezdov 13:0fdbc14c33e7 40 //JobScheduler::RunPeriodicSchedule* s = static_cast<JobScheduler::RunPeriodicSchedule*>(schedule);
sgnezdov 13:0fdbc14c33e7 41 //protocol_PeriodicSchedule pbSched;
sgnezdov 13:0fdbc14c33e7 42 return true;
sgnezdov 13:0fdbc14c33e7 43 }
sgnezdov 13:0fdbc14c33e7 44 default: {
sgnezdov 13:0fdbc14c33e7 45 tr_error("Unknown schedule type %d", schedType);
sgnezdov 13:0fdbc14c33e7 46 return false;
sgnezdov 13:0fdbc14c33e7 47 }
sgnezdov 13:0fdbc14c33e7 48 }
sgnezdov 13:0fdbc14c33e7 49 }
sgnezdov 13:0fdbc14c33e7 50
sgnezdov 11:acaefb63fc6b 51 void JobSchedulesUpload::Run() {
sgnezdov 11:acaefb63fc6b 52 tr_info("Job Schedules Upload");
sgnezdov 13:0fdbc14c33e7 53
sgnezdov 13:0fdbc14c33e7 54 protocol_JobList pbJobs = protocol_JobList_init_zero;
sgnezdov 17:b79ce8109995 55 // strcpy(pbJobs.sn, this->_conf.SerialNumber());
sgnezdov 13:0fdbc14c33e7 56
sgnezdov 17:b79ce8109995 57 // {
sgnezdov 17:b79ce8109995 58 // LinkedList<JobScheduler::Appointment> apts;
sgnezdov 17:b79ce8109995 59 // this->_scheduler.AppointmentList(apts);
sgnezdov 17:b79ce8109995 60 // node<JobScheduler::Appointment>* aptn = apts.pop(1);
sgnezdov 17:b79ce8109995 61 // int idx = 0;
sgnezdov 17:b79ce8109995 62 // pbJobs.items_count = 0;
sgnezdov 17:b79ce8109995 63 // while (aptn != NULL) {
sgnezdov 17:b79ce8109995 64 // JobScheduler::Appointment* apt = aptn->data;
sgnezdov 17:b79ce8109995 65 // JobScheduler::Job* job = apt->GetJob();
sgnezdov 17:b79ce8109995 66 // tr_debug("adding job ID: %d, type: %d\n", job->GetID(), job->GetTypeID());
sgnezdov 17:b79ce8109995 67 // pbJobs.items[idx].ID = job->GetID();
sgnezdov 17:b79ce8109995 68 // pbJobs.items[idx].TypeID = job->GetTypeID();
sgnezdov 17:b79ce8109995 69 // pbJobs.items[idx].ScheduleTypeID = static_cast<protocol_ScheduleType>(job->GetSchedule()->ScheduleType());
sgnezdov 17:b79ce8109995 70 // // pbJobs.items[idx].ScheduleData =
sgnezdov 17:b79ce8109995 71 // if (!fillScheduleData(pbJobs.items[idx].ScheduleData, *apt)) {
sgnezdov 17:b79ce8109995 72 // tr_error("job error: failed to fill schedule");
sgnezdov 17:b79ce8109995 73 // return;
sgnezdov 17:b79ce8109995 74 // }
sgnezdov 17:b79ce8109995 75 // //tr_debug("schedule data size: %d", pbJobs.items[idx].ScheduleData.size);
sgnezdov 17:b79ce8109995 76 // // pbJobs.items[idx].Data =
sgnezdov 17:b79ce8109995 77 // pbJobs.items_count = idx;
sgnezdov 17:b79ce8109995 78 //
sgnezdov 17:b79ce8109995 79 // apts.remove(1);
sgnezdov 17:b79ce8109995 80 // aptn = apts.pop(1);
sgnezdov 17:b79ce8109995 81 // idx++;
sgnezdov 17:b79ce8109995 82 // }
sgnezdov 17:b79ce8109995 83 // }
sgnezdov 17:b79ce8109995 84 //
sgnezdov 17:b79ce8109995 85 // // encode to nothing to detect buffer size
sgnezdov 17:b79ce8109995 86 // pb_ostream_t sizeStream = {0};
sgnezdov 17:b79ce8109995 87 // pb_encode(&sizeStream, protocol_JobList_fields, &pbJobs);
sgnezdov 17:b79ce8109995 88 //
sgnezdov 17:b79ce8109995 89 // // allocate output buffer and encode into it
sgnezdov 17:b79ce8109995 90 // uint8_t* outBuf = new uint8_t[sizeStream.bytes_written];
sgnezdov 17:b79ce8109995 91 // pb_ostream_t outStream = pb_ostream_from_buffer(outBuf, sizeStream.bytes_written);
sgnezdov 17:b79ce8109995 92 // pb_encode(&outStream, protocol_JobList_fields, &pbJobs);
sgnezdov 17:b79ce8109995 93 //
sgnezdov 17:b79ce8109995 94 // tr_array(outBuf, outStream.bytes_written);
sgnezdov 16:bef1673b199e 95
sgnezdov 16:bef1673b199e 96 // send CoAP message
sgnezdov 16:bef1673b199e 97 time_t now = time(NULL);
sgnezdov 17:b79ce8109995 98
sgnezdov 17:b79ce8109995 99 uint8_t msg[] = { 0x0a, 0x07, 0x4e, 0x75, 0x63, 0x6c, 0x65, 0x6f, 0x31 };
sgnezdov 17:b79ce8109995 100 size_t msgLen = 9;
sgnezdov 17:b79ce8109995 101 _lce.SendV1("/uw/joblist", msg, msgLen, false, now);
sgnezdov 17:b79ce8109995 102
sgnezdov 17:b79ce8109995 103 //_lce.SendV1("/uw/joblist", outBuf, outStream.bytes_written, false, now);
sgnezdov 17:b79ce8109995 104 // delete outBuf;
sgnezdov 11:acaefb63fc6b 105 }
sgnezdov 11:acaefb63fc6b 106
sgnezdov 11:acaefb63fc6b 107
sgnezdov 11:acaefb63fc6b 108