void wuclass_logical_update(wuobject_t *wuobject) { bool input1; bool input2; bool input3; bool input4; int16_t op; wkpf_internal_read_property_boolean(wuobject, WKPF_PROPERTY_LOGICAL_INPUT1, &input1); wkpf_internal_read_property_boolean(wuobject, WKPF_PROPERTY_LOGICAL_INPUT2, &input2); wkpf_internal_read_property_boolean(wuobject, WKPF_PROPERTY_LOGICAL_INPUT3, &input3); wkpf_internal_read_property_boolean(wuobject, WKPF_PROPERTY_LOGICAL_INPUT4, &input4); wkpf_internal_read_property_int16(wuobject, WKPF_PROPERTY_LOGICAL_OPERATOR, &op); if ( ((input1 && input2 && input3 && input4) && op==WKPF_ENUM_LOGICAL_OPERATOR_AND) || ((input1 || input2 || input3 || input4) && op==WKPF_ENUM_LOGICAL_OPERATOR_OR) || ((input1 == false) && op==WKPF_ENUM_LOGICAL_OPERATOR_NOT) ||//only not input1 ((input1 ^ input2 ^ input3 ^ input4) && op==WKPF_ENUM_LOGICAL_OPERATOR_XOR) ) { wkpf_internal_write_property_boolean(wuobject, WKPF_PROPERTY_LOGICAL_OUTPUT, true); DEBUG_LOG(DBG_WKPFUPDATE, "WKPFUPDATE(logical): Native logical: input1 %x input2 %x input3 %x input4 %x operator %x-> TRUE\n", input1, input2, input3, input4, op); } else { wkpf_internal_write_property_boolean(wuobject, WKPF_PROPERTY_LOGICAL_OUTPUT, false); DEBUG_LOG(DBG_WKPFUPDATE, "WKPFUPDATE(logical): Native logical: input1 %x input2 %x input3 %x input4 %x operator %x-> FALSE\n", input1, input2, input3, input4, op); } }
void wuclass_xor_gate_update(wuobject_t *wuobject) { bool input1, input2, output; wkpf_internal_read_property_boolean(wuobject, WKPF_PROPERTY_XOR_GATE_INPUT1, &input1); wkpf_internal_read_property_boolean(wuobject, WKPF_PROPERTY_XOR_GATE_INPUT2, &input2); output = !input1 != !input2; wkpf_internal_write_property_boolean(wuobject, WKPF_PROPERTY_XOR_GATE_OUTPUT, output); DEBUG_LOG(DBG_WKPFUPDATE, "WKPFUPDATE(Xor gate): %d xor %d => %d\n", input1, input2, output); }
void javax_wukong_wkpf_WKPF_void_setPropertyBoolean_javax_wukong_wkpf_VirtualWuObject_byte_boolean() { bool value = (int16_t)dj_exec_stackPopShort(); uint8_t property_number = (uint8_t)dj_exec_stackPopShort(); dj_object *java_instance_reference = REF_TO_VOIDP(dj_exec_stackPopRef()); wuobject_t *wuobject; wkpf_error_code = wkpf_get_wuobject_by_java_instance_reference(java_instance_reference, &wuobject); if (wkpf_error_code == WKPF_OK) { wkpf_error_code = wkpf_internal_write_property_boolean(wuobject, property_number, value); } }
void wuclass_threshold_update(wkpf_local_wuobject *wuobject) { int16_t operator; int16_t threshold; int16_t value; wkpf_internal_read_property_int16(wuobject, WKPF_PROPERTY_THRESHOLD_OPERATOR, &operator); wkpf_internal_read_property_int16(wuobject, WKPF_PROPERTY_THRESHOLD_THRESHOLD, &threshold); wkpf_internal_read_property_int16(wuobject, WKPF_PROPERTY_THRESHOLD_VALUE, &value); if (((operator == OPERATOR_GT || operator == WKPF_ENUM_THRESHOLD_OPERATOR_GTE) && value > threshold) || ((operator == OPERATOR_LT || operator == WKPF_ENUM_THRESHOLD_OPERATOR_LTE) && value < threshold) || ((operator == OPERATOR_GTE || operator == WKPF_ENUM_THRESHOLD_OPERATOR_LTE) && value == threshold)) { wkpf_internal_write_property_boolean(wuobject, WKPF_PROPERTY_THRESHOLD_OUTPUT, TRUE); DEBUGF_WKPFUPDATE("WKPFUPDATE(Threshold): Native threshold: operator %x threshold %x value %x -> TRUE\n", operator, threshold, value); } else { wkpf_internal_write_property_boolean(wuobject, WKPF_PROPERTY_THRESHOLD_OUTPUT, FALSE); DEBUGF_WKPFUPDATE("WKPFUPDATE(Threshold): Native threshold: operator %x threshold %x value %x -> FALSE\n", operator, threshold, value); } }
void wuclass_pir_sensor_update(wuobject_t *wuobject) { bool value; int value_i; FILE *fp = NULL; while (fp == NULL) fp = fopen("/sys/class/gpio/gpio27/value", "r"); fscanf(fp, "%d", &value_i); fclose(fp); value = (value_i != 0); printf("WKPFUPDATE(PirSensor): Sensed binary value: %d\n", value); //system("echo \"value\" > /dev/ttyGS0"); //Serial (IDE Serial Monitor) //delay(500); wkpf_internal_write_property_boolean(wuobject, WKPF_PROPERTY_PIR_SENSOR_CURRENT_VALUE, value); }
void wuclass_loop_delay_boolean_update(wkpf_local_wuobject *wuobject) { bool input; bool output; int16_t delay; wkpf_internal_read_property_boolean(wuobject, WKPF_PROPERTY_LOOP_DELAY_BOOLEAN_INPUT, &input); wkpf_internal_read_property_int16(wuobject, WKPF_PROPERTY_LOOP_DELAY_BOOLEAN_DELAY, &delay); wkpf_internal_read_property_boolean(wuobject, WKPF_PROPERTY_LOOP_DELAY_BOOLEAN_OUTPUT, &output); if(delay_count_boolean>=delay) { delay_count_boolean=0; wkpf_internal_write_property_boolean(wuobject, WKPF_PROPERTY_LOOP_DELAY_BOOLEAN_OUTPUT, input); DEBUGF_WKPFUPDATE("WKPFUPDATE(loop_delay): Native loop_delay: write %x to output \n", input); } else if(output!=input) { delay_count_boolean++; DEBUGF_WKPFUPDATE("WKPFUPDATE(loop_delay): Native loop_delay: delay %x, now count to %x\n", delay, delay_count_boolean); } }