pwm period is now 200us instead of the default 20ms veml6040 config is now AF_BIT | TRIG_BIT

Dependencies:   mbed MMA8451Q USBDevice WakeUp vt100

Fork of afero_node_suntory_2017_06_15 by Orefatoi

Revision:
1:b2a9a6f2c30e
Child:
2:dfe671e31221
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/preferences/Preferences.hpp	Thu Jan 19 09:17:16 2017 +0000
@@ -0,0 +1,426 @@
+#ifndef _PREFERENCES_HPP_
+#define _PREFERENCES_HPP_
+
+#include "mbed.h"
+
+namespace MaruSolSensorManager
+{
+
+typedef union
+{
+    bool b;
+    int16_t i_16;
+    uint16_t ui_16;
+    struct
+    {
+        short X, Y, Z;
+    };  
+    struct
+    {
+        uint16_t R, G, B;
+    };
+} VAR;
+
+template<typename A> struct SENSORS_BASE
+{
+    enum INDEX
+    {
+        ACCELEROMETER = 0,
+        COLOR,
+        PRESSURE,
+        CURRENT_TRANS,
+        TEMPERATURE,
+        SIZE,
+    };
+    static bool ACTIVE[SIZE];
+};
+
+struct SENSORS : public SENSORS_BASE<SENSORS>
+{
+    template<typename A> struct COMMONPARAMS;
+    struct MAX44008;
+    struct MMA8451Q;
+    template<typename A> struct SEMITEC_502AT_11_CALIB;
+    struct SEMITEC_502AT_11;
+    struct SR_3702_150N_14Z;
+    template<typename A> struct KEYENCE_PRESSURE_COMMON_PARAMS;
+    struct AP_53A_KEYENCE; //AP-53A KEYENCE gas
+    struct GP_M010_KEYENCE; //"GP-M010 KEYENCE" liquid
+};
+
+template<typename A> struct SENSORS::KEYENCE_PRESSURE_COMMON_PARAMS
+{
+    static float V_REF;
+    static float PRESSURE_INTERVAL;
+    static float SHUNT_R;
+    static float LOWEST_CUR;
+    static float PRESSURE_COEF;
+};
+
+template<typename A> float SENSORS::KEYENCE_PRESSURE_COMMON_PARAMS<A>::V_REF = 3.3;
+template<typename A> float SENSORS::KEYENCE_PRESSURE_COMMON_PARAMS<A>::PRESSURE_INTERVAL = 1.0;
+template<typename A> float SENSORS::KEYENCE_PRESSURE_COMMON_PARAMS<A>::SHUNT_R = 165;
+template<typename A> float SENSORS::KEYENCE_PRESSURE_COMMON_PARAMS<A>::LOWEST_CUR = 0.004;
+template<typename A> float SENSORS::KEYENCE_PRESSURE_COMMON_PARAMS<A>::PRESSURE_COEF = 62500;
+
+template<> bool SENSORS_BASE<SENSORS>::ACTIVE[SENSORS::SIZE] = { false, false, true, false, false };
+
+template<typename A> struct SENSORS::COMMONPARAMS
+{
+    static char* TYPE;
+    static char* PN;
+    static char* UNIT;
+    static char* JSON_FMT;
+};
+
+struct SENSORS::MAX44008 : public SENSORS::COMMONPARAMS<SENSORS::MAX44008>
+{
+    enum
+    {
+        ADDRESS = 0x41,
+        AMB_CONFIG = 0x00, // most sensitive gain
+        RAW_MODE = 0x20 // MODE_CLEAR_RGB_IR
+    };
+    struct TRIM
+    {
+        enum
+        {
+            R = 0x50,
+            G = 0x01,
+            B = 0x20
+        };
+    };
+};
+
+template<> char* SENSORS::COMMONPARAMS<SENSORS::MAX44008>::TYPE = "COLOR";
+template<> char* SENSORS::COMMONPARAMS<SENSORS::MAX44008>::PN = "MAX44008";
+template<> char* SENSORS::COMMONPARAMS<SENSORS::MAX44008>::UNIT = "mW/cm2";
+template<> char* SENSORS::COMMONPARAMS<SENSORS::MAX44008>::JSON_FMT(
+    "{\"DEVICE\":\"%s\",\"PN\":\"%s\",\"DATA\":[{\"TIME\":\"%ld\",\"VAL\":\"%d\",\"UNIT\":\"%s\"}]}"
+);
+
+struct SENSORS::MMA8451Q :
+    public SENSORS::COMMONPARAMS<SENSORS::MMA8451Q>
+{
+    enum
+    {
+#if defined (TARGET_KL25Z)
+        ADDRESS = 0x1D
+#elif defined (TARGET_TEENSY3_1)
+        ADDRESS = 0x1C
+#endif
+    };
+};
+template<> char* SENSORS::COMMONPARAMS<SENSORS::MMA8451Q>::TYPE = "ACCELEROMETER";
+template<> char* SENSORS::COMMONPARAMS<SENSORS::MMA8451Q>::PN = "MMA8451Q";
+template<> char* SENSORS::COMMONPARAMS<SENSORS::MMA8451Q>::UNIT = "g";
+template<> char* SENSORS::COMMONPARAMS<SENSORS::MMA8451Q>::JSON_FMT = 
+    "{\"DEVICE\":\"%s\",\"PN\":\"%s\",\"DATA\":[{\"TIME\":\"%ld\",\"VAL\":[\"%.1f\",\"%.1f\",\"%.1f\"],\"UNIT\":\"%s\"}]}";
+
+template<typename A> struct SENSORS::SEMITEC_502AT_11_CALIB
+{
+    static float B;
+    static float T0;
+    static float R0;
+    static float R1;
+};
+
+struct SENSORS::SEMITEC_502AT_11 :
+    public SENSORS::COMMONPARAMS<SENSORS::SEMITEC_502AT_11>,
+    public SENSORS::SEMITEC_502AT_11_CALIB<SENSORS::SEMITEC_502AT_11>{};
+template<> float SENSORS::SEMITEC_502AT_11_CALIB<SENSORS::SEMITEC_502AT_11>::B = 3324;
+template<> float SENSORS::SEMITEC_502AT_11_CALIB<SENSORS::SEMITEC_502AT_11>::T0 = 298.15;
+template<> float SENSORS::SEMITEC_502AT_11_CALIB<SENSORS::SEMITEC_502AT_11>::R0 = 5.0;  //kOhm
+template<> float SENSORS::SEMITEC_502AT_11_CALIB<SENSORS::SEMITEC_502AT_11>::R1 = 4.95; //kOhm
+
+template<> char* SENSORS::COMMONPARAMS<SENSORS::SEMITEC_502AT_11>::TYPE = "TEMP";
+template<> char* SENSORS::COMMONPARAMS<SENSORS::SEMITEC_502AT_11>::PN = "SEMITEC 502AT-11";
+template<> char* SENSORS::COMMONPARAMS<SENSORS::SEMITEC_502AT_11>::UNIT = "degC";
+template<> char* SENSORS::COMMONPARAMS<SENSORS::SEMITEC_502AT_11>::JSON_FMT(
+    "{\"DEVICE\":\"%s\",\"PN\":\"%s\",\"DATA\":[{\"TIME\":\"%ld\",\"VAL\":\"%0.1f\",\"UNIT\":\"%s\"}]}"
+);
+
+struct SENSORS::SR_3702_150N_14Z : public SENSORS::COMMONPARAMS<SENSORS::SR_3702_150N_14Z>{};
+template<> char* SENSORS::COMMONPARAMS<SENSORS::SR_3702_150N_14Z>::TYPE = "CURRENT_TRANS";;
+template<> char* SENSORS::COMMONPARAMS<SENSORS::SR_3702_150N_14Z>::PN = "SR-3702-150N/14Z";
+template<> char* SENSORS::COMMONPARAMS<SENSORS::SR_3702_150N_14Z>::UNIT = "V";
+template<> char* SENSORS::COMMONPARAMS<SENSORS::SR_3702_150N_14Z>::JSON_FMT(
+    "{\"DEVICE\":\"%s\",\"PN\":\"%s\",\"DATA\":[{\"TIME\":\"%ld\",\"VAL\":\"%0.1f\",\"UNIT\":\"%s\"}]}"
+);
+struct SENSORS::AP_53A_KEYENCE :
+    public SENSORS::COMMONPARAMS<SENSORS::AP_53A_KEYENCE>,
+    public SENSORS::KEYENCE_PRESSURE_COMMON_PARAMS<SENSORS::AP_53A_KEYENCE> {};
+template<> char *SENSORS::COMMONPARAMS<SENSORS::AP_53A_KEYENCE>::TYPE = "GAS PRESSURE";
+template<> char *SENSORS::COMMONPARAMS<SENSORS::AP_53A_KEYENCE>::PN = "AP-53A KEYENCE";
+template<> char *SENSORS::COMMONPARAMS<SENSORS::AP_53A_KEYENCE>::UNIT = "KPa";
+template<> char* SENSORS::COMMONPARAMS<SENSORS::AP_53A_KEYENCE>::JSON_FMT(
+    "{\"DEVICE\":\"%s\",\"PN\":\"%s\",\"DATA\":[{\"TIME\":\"%ld\",\"VAL\":\"%0.1f\",\"UNIT\":\"%s\"}]}"
+);
+
+struct SENSORS::GP_M010_KEYENCE :
+    public SENSORS::COMMONPARAMS<SENSORS::GP_M010_KEYENCE>,
+    public SENSORS::KEYENCE_PRESSURE_COMMON_PARAMS<SENSORS::GP_M010_KEYENCE> {};
+template<> char *SENSORS::COMMONPARAMS<SENSORS::GP_M010_KEYENCE>::TYPE = "LIQUID PRESSURE";
+template<> char *SENSORS::COMMONPARAMS<SENSORS::GP_M010_KEYENCE>::PN = "AGP-M010 KEYENCE";
+template<> char *SENSORS::COMMONPARAMS<SENSORS::GP_M010_KEYENCE>::UNIT = "KPa";
+template<> char* SENSORS::COMMONPARAMS<SENSORS::GP_M010_KEYENCE>::JSON_FMT(
+    "{\"DEVICE\":\"%s\",\"PN\":\"%s\",\"DATA\":[{\"TIME\":\"%ld\",\"VAL\":\"%0.1f\",\"UNIT\":\"%s\"}]}"
+);
+
+struct PINS
+{
+    struct LED_4_COLOR;
+    struct COLOR;
+    struct ACCELEROMETER;
+    struct CURRENT_TRANS;
+    struct TEMPERATURE;
+    struct UART;
+    struct ASR_1;
+    struct GAS;
+    struct LIQUID;
+};
+
+struct PINS::LED_4_COLOR
+{
+    enum
+    {
+        R = PTA5,
+        G = PTA4,
+        B = PTA12
+    };
+};
+    
+struct PINS::COLOR
+{
+    enum
+    {
+        SDA = PTE0,
+        SCL = PTE1
+    };
+};
+
+struct PINS::ACCELEROMETER
+{
+    enum
+    {
+#if defined (TARGET_KL25Z)
+        SDA = PTE25,
+        SCL = PTE24
+#elif defined (TARGET_TEENSY3_1)
+        SDA = PTB3,
+        SCL = PTB2
+#endif
+    };
+};
+
+struct PINS::CURRENT_TRANS
+{
+    enum
+    {
+        AIN = PTB0
+    };
+};
+
+struct PINS::TEMPERATURE
+{
+    enum
+    {
+        AIN = PTB1
+    };
+};
+
+struct PINS::GAS
+{
+    enum
+    {
+        AIN = PTB2
+    };
+};
+
+struct PINS::LIQUID
+{
+    enum
+    {
+        AIN = PTB3
+    };
+};
+
+struct PINS::ASR_1
+{
+    struct SPI;
+    enum
+    {
+#if defined (TARGET_KL25Z)
+        RESET =  PTC9 //PSOC //PTA20
+#elif defined (TARGET_TEENSY3_1)
+        RESET = PTD6
+#endif
+    };
+    struct SIG
+    {
+        template<typename A> struct RESET_BASE
+        {
+            static time_t INTERVAL;            
+        };
+        struct RESET : public RESET_BASE<RESET>
+        {
+            enum
+            {
+                ASSERT = 0,
+                DEASSERT = 1
+            };
+        };
+    };
+};
+
+template<> time_t PINS::ASR_1::SIG::RESET_BASE<PINS::ASR_1::SIG::RESET>::INTERVAL = 60*5;
+
+struct PINS::ASR_1::SPI
+{
+    enum
+    {
+#if defined (TARGET_KL25Z)
+        MOSI = PTD2,
+        MISO = PTD3,
+        SCK  = PTD1,
+        CS   = PTD0,
+        SR   = PTD4 // request from slave
+#elif defined (TARGET_TEENSY3_1)
+        MOSI = PTC6,
+        MISO = PTC7,
+        SCK  = PTC5,
+        CS   = PTC4,
+        SR   = PTD1 // request from slave
+#endif
+    };
+    struct SIG
+    {
+        struct CS
+        {
+            enum 
+            {
+                ASSERT = 0,
+                DEASSERT = 1
+            };
+        };
+    };
+    enum
+    {
+        NUM_BITS_PER_FRAME = 8,
+        MODE_0 = 0,
+        FREQUENCY = 1*1000*1000
+    };
+};
+
+struct PINS::UART
+{
+#if defined (TARGET_TEENSY3_1)
+    enum
+    {
+        uart0_tx = PTA2,
+        uart0_rx = PTA1
+    };
+#endif
+#if defined (TARGET_KL25Z) && (WICED_SMART_UART_CONNECTION)
+    struct WICED
+    {
+        struct TAG3
+        {
+            enum
+            {
+                TO_RX = PTE22 // -> TAG3 J7-1
+                ,TO_TX = PTE23 // -> TAG3 J8-5
+                //power 3v3 -> TAG J9-1
+                //GND -> TAGJ9-4
+            };
+        };
+    };
+#endif
+};
+
+template<typename A> struct PREFERENCES_BASE
+{
+    static uint32_t SENSING_INTERVAL[SENSORS::SIZE];
+    static time_t EPOCH_UTC;
+    typedef union
+    {
+        uint32_t ui32;
+        uint8_t  ui8[sizeof(uint32_t)];
+    } _crc32;
+    static _crc32 CRC32;
+};
+
+struct PREFERENCES : PREFERENCES_BASE<PREFERENCES>
+{
+    struct NOTIFICATION;
+    struct DATA_TRANSFER_MODE
+    {
+        enum
+        {
+            JSON = 0,
+            BASE64 = 1
+        };
+    };
+    struct THRESHOLD
+    {
+        struct RANGE
+        {
+            enum
+            {
+                MIN = 0,
+                MAX,
+                DELTA,
+                SIZE
+            };
+        };
+    };
+    template<typename A> struct NOTIFICATION_BASE
+    {
+        static bool ENABLED[SENSORS::SIZE][THRESHOLD::RANGE::SIZE];
+        static VAR THRESHOLD[SENSORS::SIZE][THRESHOLD::RANGE::SIZE]; // not used ... for now.
+    };
+};
+
+template<> uint32_t PREFERENCES_BASE<PREFERENCES>::SENSING_INTERVAL[SENSORS::SIZE] = { 0 };
+template<> time_t PREFERENCES_BASE<PREFERENCES>::EPOCH_UTC = 0;
+template<> PREFERENCES_BASE<PREFERENCES>::_crc32 PREFERENCES_BASE<PREFERENCES>::CRC32;
+
+struct PREFERENCES::NOTIFICATION : public PREFERENCES::NOTIFICATION_BASE<PREFERENCES::NOTIFICATION>
+{
+};
+
+template<> bool PREFERENCES::NOTIFICATION_BASE<PREFERENCES::NOTIFICATION>::ENABLED[SENSORS::SIZE][THRESHOLD::RANGE::SIZE];
+template<> VAR  PREFERENCES::NOTIFICATION_BASE<PREFERENCES::NOTIFICATION>::THRESHOLD[SENSORS::SIZE][THRESHOLD::RANGE::SIZE];
+
+typedef union
+{
+    typedef struct
+    {
+        time_t timeStamp;
+        SENSORS::INDEX index;
+    } PACKET_BASE;
+    struct : PACKET_BASE
+    {
+        short x,y,z;
+    } accelerometer;
+    struct : PACKET_BASE
+    {
+        uint16_t R, G, B;
+    } color;
+    struct : PACKET_BASE
+    {
+        float val;
+    } temperature;
+    struct : PACKET_BASE
+    {
+        float val;
+    } current_trans;
+    struct : PACKET_BASE
+    {
+        float val;
+    } pressure;
+} PACKET;
+
+};
+
+#endif //_PREFERENCES_HPP_
\ No newline at end of file