![](/media/cache/group/orange_and_cat.png.50x50_q85.jpg)
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
Diff: preferences/Preferences.hpp
- 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