Version FC

Dependencies:   DmTftLibrary eeprom SX1280Lib filesystem mbed

Fork of MSNV2-Terminal_V1-5 by Francis CHATAIN

Committer:
FCH_31
Date:
Mon Oct 22 09:37:50 2018 +0000
Revision:
41:5a436163dddf
Parent:
32:3bef9b81f639
avec radio;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lo 31:2b8b98f3feed 1 /*
lo 31:2b8b98f3feed 2 * generic_component.hpp
lo 31:2b8b98f3feed 3 *
lo 31:2b8b98f3feed 4 * Created on: 18 sept. 2018
lo 31:2b8b98f3feed 5 * Author: hoel
lo 31:2b8b98f3feed 6 */
lo 31:2b8b98f3feed 7
lo 31:2b8b98f3feed 8 #ifndef COMPONENTS_GENERIC_COMPONENT_HPP_
lo 31:2b8b98f3feed 9 #define COMPONENTS_GENERIC_COMPONENT_HPP_
lo 31:2b8b98f3feed 10
lo 31:2b8b98f3feed 11 #include <iostream>
lo 31:2b8b98f3feed 12 #include <cstdlib>
lo 31:2b8b98f3feed 13 #include "mbed.h"
lo 31:2b8b98f3feed 14 #include "Context.h"
lo 31:2b8b98f3feed 15 #include "Service.hpp"
lo 31:2b8b98f3feed 16 #include "Component.hpp"
lo 31:2b8b98f3feed 17
lo 31:2b8b98f3feed 18 using namespace std;
lo 31:2b8b98f3feed 19 using namespace misnet;
lo 31:2b8b98f3feed 20
lo 31:2b8b98f3feed 21 typedef union{
lo 31:2b8b98f3feed 22 float val;
lo 31:2b8b98f3feed 23 char bytes[4];
lo 31:2b8b98f3feed 24 } FLOATUNION_t;
lo 32:3bef9b81f639 25 typedef union{
lo 32:3bef9b81f639 26 double val;
lo 32:3bef9b81f639 27 char bytes[8];
lo 32:3bef9b81f639 28 } DOUBLEUNION_t;
lo 31:2b8b98f3feed 29
lo 31:2b8b98f3feed 30 class generic_component : public Component{
lo 31:2b8b98f3feed 31
lo 31:2b8b98f3feed 32 public:
lo 31:2b8b98f3feed 33 generic_component(COMPONENT_ID id, vector<Service*>& services,PinName sda, PinName scl, char slave_adr):
lo 31:2b8b98f3feed 34
lo 31:2b8b98f3feed 35 i2c_p(new I2C(sda, scl)),
lo 31:2b8b98f3feed 36 i2c(*i2c_p),
lo 31:2b8b98f3feed 37 address(slave_adr)
lo 31:2b8b98f3feed 38 {
lo 31:2b8b98f3feed 39 i2c.frequency(100000);
lo 31:2b8b98f3feed 40 }
lo 31:2b8b98f3feed 41 ~generic_component();
lo 31:2b8b98f3feed 42 void init(void){
lo 31:2b8b98f3feed 43
lo 31:2b8b98f3feed 44 }
lo 31:2b8b98f3feed 45 void readValues(void){
lo 31:2b8b98f3feed 46 for (std::vector<misnet::Service*>::iterator
lo 31:2b8b98f3feed 47 srvIt = this->getServices().begin();
lo 31:2b8b98f3feed 48 srvIt != this->getServices().end();
lo 31:2b8b98f3feed 49 srvIt++) {
lo 31:2b8b98f3feed 50 (*srvIt)->readValue();
lo 31:2b8b98f3feed 51 }
lo 32:3bef9b81f639 52 }
lo 31:2b8b98f3feed 53 InterruptIn interrupt(D9);
lo 31:2b8b98f3feed 54
lo 31:2b8b98f3feed 55 private:
lo 31:2b8b98f3feed 56 I2C *i2c_p;
lo 31:2b8b98f3feed 57 I2C &i2c;
lo 31:2b8b98f3feed 58 char address;
lo 31:2b8b98f3feed 59
lo 31:2b8b98f3feed 60 class generic_value : public Service{
lo 26:271d2d510f6c 61
lo 31:2b8b98f3feed 62 public:
lo 31:2b8b98f3feed 63 generic_value(
lo 31:2b8b98f3feed 64 DEVICE_TYPE type,
lo 31:2b8b98f3feed 65 MISNET_CODE misnet_code,
lo 31:2b8b98f3feed 66 STATE state,
lo 31:2b8b98f3feed 67 ACCESS_TYPE access_type,
lo 31:2b8b98f3feed 68 REQUEST_MODE request_mode,
lo 31:2b8b98f3feed 69 UP_MODE up_mode,
lo 31:2b8b98f3feed 70 ACCESS_PIN access_pins[6],
lo 31:2b8b98f3feed 71 uint32_t subsample_rate,
lo 31:2b8b98f3feed 72 ACTION action,
lo 31:2b8b98f3feed 73 OUTPUT_MODE output_mode,
lo 31:2b8b98f3feed 74 string comment,
lo 31:2b8b98f3feed 75 generic_component* parent
lo 32:3bef9b81f639 76 ) :
lo 32:3bef9b81f639 77 Service(type, misnet_code, state, access_type, request_mode,
lo 32:3bef9b81f639 78 up_mode, access_pins, subsample_rate, action, output_mode, comment)
lo 31:2b8b98f3feed 79 {
lo 31:2b8b98f3feed 80 this->parent = parent;
lo 31:2b8b98f3feed 81 }
lo 31:2b8b98f3feed 82 virtual ~generic_value() {}
lo 32:3bef9b81f639 83 bool readValue(void){
lo 31:2b8b98f3feed 84
lo 31:2b8b98f3feed 85 FLOATUNION_t flt;
lo 31:2b8b98f3feed 86 char bfr[8];
lo 31:2b8b98f3feed 87
lo 31:2b8b98f3feed 88 bfr[0] = this->getMisnetCode(); // service code
lo 32:3bef9b81f639 89 // TODO handle async calls
lo 32:3bef9b81f639 90 //switch(this.CALL_TYPE){
lo 32:3bef9b81f639 91 // case SYNC: bfr[1] = 0x01; break;
lo 32:3bef9b81f639 92 // case ASYNC: bfr[1] = 0x02; break;
lo 32:3bef9b81f639 93 //}
lo 32:3bef9b81f639 94 bfr[1] = 0x01;
lo 31:2b8b98f3feed 95 i2c.write(address, bfr, 2, false);
lo 32:3bef9b81f639 96 // switch(this.CALL_TYPE){
lo 32:3bef9b81f639 97 // case SYNC:
lo 32:3bef9b81f639 98 // switch(this->getValueAddress().VALUE_TYPE){
lo 32:3bef9b81f639 99 // case Value::NOT_SET : break;
lo 32:3bef9b81f639 100 // case Value::BOOLEAN : break;
lo 32:3bef9b81f639 101 // case Value::CHAR : break;
lo 32:3bef9b81f639 102 // case Value::UINT8_T : break;
lo 32:3bef9b81f639 103 // case Value::INT8_T : break;
lo 32:3bef9b81f639 104 // case Value::UINT16_T : break;
lo 32:3bef9b81f639 105 // case Value::INT16_T : break;
lo 32:3bef9b81f639 106 // case Value::UINT32_T : break;
lo 32:3bef9b81f639 107 // case Value::INT32_T : break;
lo 32:3bef9b81f639 108 // case Value::FLOAT : i2c.read(address, &flt.bytes[0], 4); this->getValueAddress().setFloatValue(flt.val); break; // 32 bits
lo 32:3bef9b81f639 109 // case Value::DOUBLE : break; // 64 bits
lo 32:3bef9b81f639 110 // case Value::TIME : break; // unix time
lo 32:3bef9b81f639 111 // }
lo 32:3bef9b81f639 112 // break;
lo 32:3bef9b81f639 113 // case ASYNC: break;
lo 32:3bef9b81f639 114 // }
lo 31:2b8b98f3feed 115 i2c.read(address, &flt.bytes[0], 4);
lo 32:3bef9b81f639 116 this->getValueAddress().setFloatValue(flt.val);
lo 32:3bef9b81f639 117 this->savePreviousValue();
lo 31:2b8b98f3feed 118 DEBUG("received from I2C : %3f - 0x%02x 0x%02x 0x%02x 0x%02x\n",flt.val, flt.bytes[0],flt.bytes[1],flt.bytes[2],flt.bytes[3]);
lo 32:3bef9b81f639 119 return false;
lo 31:2b8b98f3feed 120 }
lo 31:2b8b98f3feed 121 bool setIrqParams(Service* service, Value threshold, Value up, Value down ){
lo 31:2b8b98f3feed 122
lo 31:2b8b98f3feed 123 char bfr[16];
lo 31:2b8b98f3feed 124 misnet::Value val;
lo 31:2b8b98f3feed 125 FLOATUNION_t flt;
lo 31:2b8b98f3feed 126
lo 31:2b8b98f3feed 127 bfr[0] = service->getMisnetCode(); // service code
lo 31:2b8b98f3feed 128 bfr[1] = 0x02; // threshold cmd
lo 31:2b8b98f3feed 129 i2c.write(address, bfr, 2, false);
lo 31:2b8b98f3feed 130 flt.val = threshold.getFloatValue();
lo 31:2b8b98f3feed 131 i2c.write(address, flt.bytes, 4, false);
lo 31:2b8b98f3feed 132 bfr[0] = 0x03; // value up cmd
lo 31:2b8b98f3feed 133 i2c.write(address, bfr, 1, false);
lo 31:2b8b98f3feed 134 i2c.write(address, flt.bytes, 4, false);
lo 31:2b8b98f3feed 135 bfr[0] = 0x04; // value down cmd
lo 31:2b8b98f3feed 136 i2c.write(address, bfr, 1, false);
lo 31:2b8b98f3feed 137 i2c.write(address, flt.bytes, 4, true);
lo 31:2b8b98f3feed 138 //i2c.read(address, bfr[0], 1); // ack
lo 31:2b8b98f3feed 139 //if (bfr[0] = 0x11) return 0
lo 31:2b8b98f3feed 140 //else return 1;
lo 31:2b8b98f3feed 141 return 0;
lo 31:2b8b98f3feed 142 }
lo 31:2b8b98f3feed 143 void setIrq(Callback <void()> cbck, bool enable){
lo 31:2b8b98f3feed 144
lo 31:2b8b98f3feed 145 //parent->interrupt.rise(cbck);
lo 31:2b8b98f3feed 146 //if (enable) parent->interrupt.enable_irq();
lo 31:2b8b98f3feed 147 //else parent->interrupt.disable_irq();
lo 31:2b8b98f3feed 148 }
lo 31:2b8b98f3feed 149 private:
lo 31:2b8b98f3feed 150 generic_component *parent;
lo 32:3bef9b81f639 151 Timeout reader;
lo 31:2b8b98f3feed 152 };
lo 31:2b8b98f3feed 153 };
lo 31:2b8b98f3feed 154
lo 31:2b8b98f3feed 155 #endif /* COMPONENTS_GENERIC_COMPONENT_HPP_ */