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
preferences/Preferences.hpp
- Committer:
- wataloh
- Date:
- 2017-01-24
- Revision:
- 3:6dec44cbb664
- Parent:
- 2:dfe671e31221
- Child:
- 4:b38e09f24711
File content as of revision 3:6dec44cbb664:
#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 VEML6040; 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::COMMONPARAMS { static char* TYPE; static char* PN; static char* UNIT; static char* JSON_FMT; }; 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, true, false, true, true }; struct SENSORS::MAX44008 : public SENSORS::COMMONPARAMS<SENSORS::MAX44008> { enum { ADDRESS = 0x41, AMB_CONFIG = 0x00, // most sensitive gain RAW_MODE = 0x20, // MODE_CLEAR_RGB_IR PWM_LED_B = 0x96 }; 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::VEML6040 : public SENSORS::COMMONPARAMS<SENSORS::VEML6040> { enum { ADDRESS = 0x10, AMB_CONFIG = 0x00, // most sensitive gain RAW_MODE = 0x20, // MODE_CLEAR_RGB_IR PWM_LED_B = 0xFA }; struct TRIM { enum { R = 0x50, G = 0x01, B = 0x20 }; }; }; template<> char* SENSORS::COMMONPARAMS<SENSORS::VEML6040>::TYPE = "COLOR"; template<> char* SENSORS::COMMONPARAMS<SENSORS::VEML6040>::PN = "VEML6040"; template<> char* SENSORS::COMMONPARAMS<SENSORS::VEML6040>::UNIT = "mW/cm2"; template<> char* SENSORS::COMMONPARAMS<SENSORS::VEML6040>::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 { enum { BAUD_RATE = 115200 }; #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 int32_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; static bool FLOW_CONTROL; static bool DBG_ENABLED; static bool DBG_ASR_ENABLED; struct AFERO_ATTRIBUTE { uint32_t ATTR_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<> int32_t PREFERENCES_BASE<PREFERENCES>::SENSING_INTERVAL[SENSORS::SIZE] = { 30, 30, 30, 30, 30 }; template<> time_t PREFERENCES_BASE<PREFERENCES>::EPOCH_UTC = 0; template<> PREFERENCES_BASE<PREFERENCES>::_crc32 PREFERENCES_BASE<PREFERENCES>::CRC32 = { 0 }; template<> bool PREFERENCES_BASE<PREFERENCES>::FLOW_CONTROL = false; template<> bool PREFERENCES_BASE<PREFERENCES>::DBG_ENABLED = true; template<> bool PREFERENCES_BASE<PREFERENCES>::DBG_ASR_ENABLED = true; 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_