mirror of
https://github.com/synthetos/g2.git
synced 2026-02-06 11:11:57 +08:00
Add low level io
This commit is contained in:
@@ -472,6 +472,42 @@ bool gpio_read_input(const uint8_t input_num_ext)
|
||||
return (d_in[input_num_ext-1].state);
|
||||
}
|
||||
|
||||
/*
|
||||
* gpio_set_output() - Set output pins
|
||||
*/
|
||||
stat_t gpio_set_output(uint8_t output_num, float value) {
|
||||
ioMode outMode = d_out[output_num].mode;
|
||||
if (outMode == IO_MODE_DISABLED) {
|
||||
value = 0; // Inactive?
|
||||
} else {
|
||||
bool invert = (outMode == 0);
|
||||
if (invert) {
|
||||
value = 1.0 - value;
|
||||
}
|
||||
switch (output_num+1) {
|
||||
// Generated with:
|
||||
// perl -e 'for($i=1;$i<14;$i++) { print "case ${i}: { output_${i}_pin = value; } break;\n";}'
|
||||
// BEGIN generated
|
||||
case 1: { output_1_pin = value; } break;
|
||||
case 2: { output_2_pin = value; } break;
|
||||
case 3: { output_3_pin = value; } break;
|
||||
case 4: { output_4_pin = value; } break;
|
||||
case 5: { output_5_pin = value; } break;
|
||||
case 6: { output_6_pin = value; } break;
|
||||
case 7: { output_7_pin = value; } break;
|
||||
case 8: { output_8_pin = value; } break;
|
||||
case 9: { output_9_pin = value; } break;
|
||||
case 10: { output_10_pin = value; } break;
|
||||
case 11: { output_11_pin = value; } break;
|
||||
case 12: { output_12_pin = value; } break;
|
||||
case 13: { output_13_pin = value; } break;
|
||||
// END generated
|
||||
default: { value = 0; } // inactive
|
||||
}
|
||||
}
|
||||
return STAT_OK;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************************
|
||||
* CONFIGURATION AND INTERFACE FUNCTIONS
|
||||
@@ -616,43 +652,17 @@ stat_t io_get_output(nvObj_t *nv)
|
||||
}
|
||||
|
||||
/*
|
||||
* io_set_output() - read and return output state given an nv object
|
||||
* io_set_output() - set output state given an nv object
|
||||
*/
|
||||
|
||||
stat_t io_set_output(nvObj_t *nv)
|
||||
{
|
||||
uint8_t output_num = _io(nv->index);
|
||||
return gpio_set_output(output_num, nv->value_flt);
|
||||
|
||||
ioMode outMode = d_out[output_num-1].mode;
|
||||
if (outMode == IO_MODE_DISABLED) {
|
||||
nv->valuetype = TYPE_NULL; // reports back as NULL
|
||||
|
||||
} else {
|
||||
// send normal or inverted value to output
|
||||
float value = (outMode == IO_ACTIVE_HIGH) ? nv->value_flt : 1.0 - nv->value_flt;
|
||||
switch (output_num+1) { // add 1 to get logical pin numbers
|
||||
// Generated with:
|
||||
// perl -e 'for($i=1;$i<14;$i++) { print "case ${i}: { output_${i}_pin = value; } break;\n";}'
|
||||
// BEGIN generated
|
||||
case 1: { output_1_pin = value; } break;
|
||||
case 2: { output_2_pin = value; } break;
|
||||
case 3: { output_3_pin = value; } break;
|
||||
case 4: { output_4_pin = value; } break;
|
||||
case 5: { output_5_pin = value; } break;
|
||||
case 6: { output_6_pin = value; } break;
|
||||
case 7: { output_7_pin = value; } break;
|
||||
case 8: { output_8_pin = value; } break;
|
||||
case 9: { output_9_pin = value; } break;
|
||||
case 10: { output_10_pin = value; } break;
|
||||
case 11: { output_11_pin = value; } break;
|
||||
case 12: { output_12_pin = value; } break;
|
||||
case 13: { output_13_pin = value; } break; // END generated
|
||||
default: { nv->value_flt = 0; } // inactive
|
||||
}
|
||||
}
|
||||
return (STAT_OK);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************************
|
||||
* TEXT MODE SUPPORT
|
||||
* Functions to print variables from the cfgArray table
|
||||
|
||||
Reference in New Issue
Block a user