job.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "../include/job.hpp"
  2. WordBuffer::WordBuffer(size_t length) {
  3. wordCount = length;
  4. bytes = (uint8_t*)malloc(wordCount * 4);
  5. assert(bytes != NULL);
  6. }
  7. WordBuffer::~WordBuffer() {
  8. free(bytes);
  9. }
  10. JobData::JobData(uint payloadLength) : WordBuffer(payloadLength + 4) {
  11. setPreamble(PREAMBLE);
  12. }
  13. Job::Job(Module mod) : JobData(moduleSendPayloadLength[mod]), recvBuf(moduleRecvPayloadLength[mod] + 1) {
  14. setModuleId(moduleIds[mod]);
  15. setJobId(getRandomNumber());
  16. }
  17. //sets CRC of sendBuf
  18. void Job::calcCRC() {
  19. uint32_t sum = 0;
  20. for(uint_least32_t i=1; i<getWordCount()-1; i++) {
  21. sum += getWord(i);
  22. }
  23. setCRC(-sum);
  24. }
  25. //checks CRC of recvBuf
  26. bool Job::checkCRC() {
  27. uint32_t sum = getJobId() + getModuleId();
  28. for(uint_least32_t i=0; i<recvBuf.getWordCount(); i++) {
  29. sum += recvBuf.getWord(i);
  30. }
  31. return sum == 0;
  32. }
  33. void Job::setDoneCallback(DoneCallback cb) {
  34. doneCb = cb;
  35. }
  36. void Job::setReady() {
  37. calcCRC();
  38. setState(JobState::ready);
  39. }
  40. void Job::setReceived(const bool success) {
  41. setState(success ? JobState::finished : JobState::failed);
  42. received = Clock::now();
  43. if(doneCb)
  44. doneCb();
  45. }
  46. void Job::setSent() {
  47. setState(JobState::sent);
  48. sendCounter++;
  49. sent = Clock::now();
  50. }