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: DmTftLibrary eeprom SX1280Lib filesystem mbed
Fork of MSNV2-Terminal_V1-5 by
Diff: COMPONENTS/generic_component.hpp
- Revision:
- 26:271d2d510f6c
- Child:
- 31:2b8b98f3feed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/COMPONENTS/generic_component.hpp Tue Sep 18 19:41:38 2018 +0000
@@ -0,0 +1,130 @@
+/*
+ * generic_component.hpp
+ *
+ * Created on: 18 sept. 2018
+ * Author: hoel
+ */
+
+#ifndef COMPONENTS_GENERIC_COMPONENT_HPP_
+#define COMPONENTS_GENERIC_COMPONENT_HPP_
+
+#include <iostream>
+#include <cstdlib>
+#include "mbed.h"
+#include "Context.h"
+#include "Service.hpp"
+#include "Component.hpp"
+
+using namespace std;
+using namespace misnet;
+
+typedef union{
+ float val;
+ char bytes[4];
+} FLOATUNION_t;
+
+class generic_component : public Component{
+
+ public:
+ generic_component(COMPONENT_ID id, vector<Service*>& services,PinName sda, PinName scl, char slave_adr):
+
+ i2c_p(new I2C(sda, scl)),
+ i2c(*i2c_p),
+ address(slave_adr)
+ {
+ i2c.frequency(100000);
+ }
+ ~generic_component();
+ void init(void){
+
+ }
+ InterruptIn interrupt(D9);
+
+ private:
+ I2C *i2c_p;
+ I2C &i2c;
+ char address;
+
+ class generic_value : public Service{
+
+ public:
+ generic_value(
+ DEVICE_TYPE type,
+ MISNET_CODE misnet_code,
+ STATE state,
+ ACCESS_TYPE access_type,
+ REQUEST_MODE request_mode,
+ UP_MODE up_mode,
+ ACCESS_PIN access_pins[6],
+ uint32_t subsample_rate,
+ ACTION action,
+ OUTPUT_MODE output_mode,
+ string comment,
+ generic_component* parent
+ )
+ {
+ this->parent = parent;
+ this->setDeviceType(type);
+ this->setMisnetCode(misnet_code);
+ this->setState(state);
+ this->setAccessType(access_type);
+ this->setRequestMode(request_mode);
+ this->setUpMode(up_mode);
+ this->setAction(action);
+ this->setOutputMode(output_mode);
+ this->setComment(comment);
+ this->setSubsampleRate(subsample_rate);
+ }
+ virtual ~generic_value() {}
+ Value readValue(void){
+
+ misnet::Value val;
+ FLOATUNION_t flt;
+ char bfr[8];
+
+ bfr[0] = this->getMisnetCode(); // service code
+ bfr[1] = 0x01; // request value command
+ i2c.write(address, bfr, 2, false);
+ i2c.read(address, &flt.bytes[0], 4);
+ val.setFloatValue( flt.val);
+ 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]);
+ return val;
+ }
+
+ bool setIrqParams(Service* service, Value threshold, Value up, Value down ){
+
+ char bfr[16];
+ misnet::Value val;
+ FLOATUNION_t flt;
+
+ bfr[0] = service->getMisnetCode(); // service code
+ bfr[1] = 0x02; // threshold cmd
+ i2c.write(address, bfr, 2, false);
+ flt.val = threshold.getFloatValue();
+ i2c.write(address, flt.bytes, 4, false);
+ bfr[0] = 0x03; // value up cmd
+ i2c.write(address, bfr, 1, false);
+ i2c.write(address, flt.bytes, 4, false);
+ bfr[0] = 0x04; // value down cmd
+ i2c.write(address, bfr, 1, false);
+ i2c.write(address, flt.bytes, 4, true);
+ //i2c.read(address, bfr[0], 1); // ack
+ //if (bfr[0] = 0x11) return 0
+ //else return 1;
+ return 0;
+ }
+
+ void setIrq(Callback <void()> cbck, bool enable){
+
+ //parent->interrupt.rise(cbck);
+ //if (enable) parent->interrupt.enable_irq();
+ //else parent->interrupt.disable_irq();
+ }
+ private:
+ generic_component *parent;
+
+ };
+};
+
+#endif /* COMPONENTS_GENERIC_COMPONENT_HPP_ */
+
