Sergei G / Mbed OS Borsch

Dependencies:   DataStore JobScheduler NetworkServices W5500Interface nanopb protocol

Committer:
sgnezdov
Date:
Thu Aug 03 00:07:50 2017 +0000
Revision:
13:0fdbc14c33e7
Parent:
11:acaefb63fc6b
Child:
14:65d69aed6540
work in progress on reporting list of jobs; Issue: At time is zero

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 13:0fdbc14c33e7 14 // encode signature
sgnezdov 13:0fdbc14c33e7 15 // bool (*encode)(pb_ostream_t *stream, const pb_field_t *field, void * const *arg);
sgnezdov 13:0fdbc14c33e7 16 //bool pbOutStream(pb_ostream_t *stream, const pb_field_t *field, void * const *arg) {
sgnezdov 13:0fdbc14c33e7 17 // return true;
sgnezdov 13:0fdbc14c33e7 18 //}
sgnezdov 13:0fdbc14c33e7 19
sgnezdov 13:0fdbc14c33e7 20 bool fillScheduleData(protocol_Job_ScheduleData_t& pbSchedData, JobScheduler::ISchedule* schedule) {
sgnezdov 13:0fdbc14c33e7 21 int schedType = schedule->ScheduleType();
sgnezdov 13:0fdbc14c33e7 22 switch (schedType) {
sgnezdov 13:0fdbc14c33e7 23 case 1: {
sgnezdov 13:0fdbc14c33e7 24 // protocol_ScheduleType_RunOnce case
sgnezdov 13:0fdbc14c33e7 25 tr_debug("encoding RunOnceSchedule");
sgnezdov 13:0fdbc14c33e7 26 JobScheduler::RunOnceSchedule* s = static_cast<JobScheduler::RunOnceSchedule*>(schedule);
sgnezdov 13:0fdbc14c33e7 27 protocol_RunOnceSchedule pbSched;
sgnezdov 13:0fdbc14c33e7 28 pbSched.AtUnixSec = (uint32_t)s->AtTime();
sgnezdov 13:0fdbc14c33e7 29
sgnezdov 13:0fdbc14c33e7 30 tr_debug("sizeof(pbSchedData.bytes): %d, AtUnixSec: %d", sizeof(pbSchedData.bytes), pbSched.AtUnixSec);
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 13:0fdbc14c33e7 34 tr_debug("bytes written: %d", 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 13:0fdbc14c33e7 55 strcpy(pbJobs.sn, this->_conf.SerialNumber());
sgnezdov 13:0fdbc14c33e7 56
sgnezdov 13:0fdbc14c33e7 57 {
sgnezdov 13:0fdbc14c33e7 58 LinkedList<JobScheduler::Job> jobs;
sgnezdov 13:0fdbc14c33e7 59 this->_scheduler.JobList(jobs);
sgnezdov 13:0fdbc14c33e7 60 node<JobScheduler::Job>* jn = jobs.pop(1);
sgnezdov 13:0fdbc14c33e7 61 int idx = 0;
sgnezdov 13:0fdbc14c33e7 62 while (jn != NULL) {
sgnezdov 13:0fdbc14c33e7 63 JobScheduler::Job* job = jn->data;
sgnezdov 13:0fdbc14c33e7 64 tr_debug("adding job ID: %d, type: %d\n", job->GetID(), job->GetTypeID());
sgnezdov 13:0fdbc14c33e7 65 pbJobs.items[idx].ID = job->GetID();
sgnezdov 13:0fdbc14c33e7 66 pbJobs.items[idx].TypeID = job->GetTypeID();
sgnezdov 13:0fdbc14c33e7 67 pbJobs.items[idx].ScheduleTypeID = static_cast<protocol_ScheduleType>(job->GetSchedule()->ScheduleType());
sgnezdov 13:0fdbc14c33e7 68 // pbJobs.items[idx].ScheduleData =
sgnezdov 13:0fdbc14c33e7 69 if (!fillScheduleData(pbJobs.items[idx].ScheduleData, job->GetSchedule())) {
sgnezdov 13:0fdbc14c33e7 70 tr_error("job error: failed to fill schedule");
sgnezdov 13:0fdbc14c33e7 71 return;
sgnezdov 13:0fdbc14c33e7 72 }
sgnezdov 13:0fdbc14c33e7 73 tr_debug("schedule data size: %d", pbJobs.items[idx].ScheduleData.size);
sgnezdov 13:0fdbc14c33e7 74 // pbJobs.items[idx].Data =
sgnezdov 13:0fdbc14c33e7 75
sgnezdov 13:0fdbc14c33e7 76 jobs.remove(1);
sgnezdov 13:0fdbc14c33e7 77 jn = jobs.pop(1);
sgnezdov 13:0fdbc14c33e7 78 idx++;
sgnezdov 13:0fdbc14c33e7 79 }
sgnezdov 13:0fdbc14c33e7 80 }
sgnezdov 13:0fdbc14c33e7 81
sgnezdov 13:0fdbc14c33e7 82 // protocol_Job job;
sgnezdov 11:acaefb63fc6b 83 // time_t now = time(NULL);
sgnezdov 11:acaefb63fc6b 84 //tr_debug("ADC created time is: %s\n", ctime(&now));
sgnezdov 11:acaefb63fc6b 85 // struct AdcMsg msg;
sgnezdov 11:acaefb63fc6b 86 // convert seconds to nanoseconds
sgnezdov 11:acaefb63fc6b 87 // msg.Created = now * 1e9;
sgnezdov 11:acaefb63fc6b 88 // tr_debug("Current time: %x sec, %llx nanosecs", now, msg.Created);
sgnezdov 11:acaefb63fc6b 89 // // swapt for byte order
sgnezdov 11:acaefb63fc6b 90 // msg.Created = swap_uint64(msg.Created); // swap_uint64(msg.Created);
sgnezdov 11:acaefb63fc6b 91 // msg.Mask = 0x80; // 0x80 bits: 1000 0000
sgnezdov 11:acaefb63fc6b 92 // for (int i = 0; i < 8; i++) {
sgnezdov 11:acaefb63fc6b 93 // msg.Chs[i].Raw = 0;
sgnezdov 11:acaefb63fc6b 94 // msg.Chs[i].V = 0;
sgnezdov 11:acaefb63fc6b 95 // }
sgnezdov 11:acaefb63fc6b 96 // msg.Chs[0].Raw = swap_uint32(_next++);
sgnezdov 11:acaefb63fc6b 97 // msg.Chs[0].V = msg.Chs[0].Raw;
sgnezdov 11:acaefb63fc6b 98 // /test can be used to send to test endpoint that responds with
sgnezdov 11:acaefb63fc6b 99 // a short hardcoded string
sgnezdov 11:acaefb63fc6b 100 // /uw/adc - to send adc version 1
sgnezdov 11:acaefb63fc6b 101 // _lce.SendV1("/uw/adc", (uint8_t*)&msg, sizeof(msg), false, now);
sgnezdov 11:acaefb63fc6b 102 }
sgnezdov 11:acaefb63fc6b 103
sgnezdov 11:acaefb63fc6b 104
sgnezdov 11:acaefb63fc6b 105