X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=arducontrol%2Fmonitor.c;h=7966c3da40eb0e46cac63c4282924b9dc5995c32;hb=49c7ae4a26f8dd7d09872b6b5e4c107ef33b4560;hp=679c62a1b2e1bd4617d6da240a7ad0fb53673bf3;hpb=0ea90da32943b1fae28a3e872f0a9a41b75de4ae;p=model-railway-devices.git diff --git a/arducontrol/monitor.c b/arducontrol/monitor.c index 679c62a..7966c3d 100644 --- a/arducontrol/monitor.c +++ b/arducontrol/monitor.c @@ -4,28 +4,29 @@ #include "output.h" #include "serial.h" -uint16_t track_current_samples[16] = { 0 }; -uint8_t track_current_head = 0; -volatile uint16_t track_current_sum = 0; -uint16_t overcurrent_limit = 8796; -uint8_t overcurrent_sent = 0; +static uint16_t track_current_samples[16] = { 0 }; +static uint8_t track_current_head = 0; +static volatile uint16_t track_current_sum = 0; +static uint16_t overcurrent_limit = 9707; +static uint8_t overcurrent_sent = 0; -uint16_t input_voltage_samples[16] = { 0 }; -uint8_t input_voltage_head = 0; -volatile uint16_t input_voltage_sum = 0; +static uint16_t input_voltage_samples[16] = { 0 }; +static uint8_t input_voltage_head = 0; +static volatile uint16_t input_voltage_sum = 0; -volatile uint8_t adc_state = 0; -volatile uint16_t adc_value = 0; +static volatile uint8_t adc_state = 0; +static volatile uint16_t adc_value = 0; -uint16_t track_current_milliamps(); -uint16_t input_voltage_millivolts(); +static uint16_t track_current_milliamps(void); +static uint16_t input_voltage_millivolts(void); -void monitor_init() +void monitor_init(void) { + DDRB |= 0x02; adc_init(); } -void monitor_check() +void monitor_check(void) { if(!(adc_state&1)) { @@ -42,15 +43,18 @@ void monitor_check() if(track_current_sum>overcurrent_limit) { output_set_power(0); + PORTB |= 0x02; if(!overcurrent_sent) { overcurrent_sent = 1; - serial_write(0xFE); - serial_write(OVERCURRENT); + interface_send1(OVERCURRENT); } } - else + else if(overcurrent_sent && output_is_power_on()) + { + PORTB &= ~0x02; overcurrent_sent = 0; + } } else if(adc_state==4) { @@ -66,18 +70,19 @@ void monitor_check() } } -uint8_t monitor_command() +uint8_t monitor_command(const uint8_t *cmd_buf, uint8_t cmd_length) { if(cmd_buf[0]==READ_TRACK_CURRENT) { if(cmd_length!=1) return LENGTH_ERROR; - serial_write(0xFC); - serial_write(TRACK_CURRENT); uint16_t value = track_current_milliamps(); - serial_write(value>>8); - serial_write(value); + uint8_t reply[3]; + reply[0] = TRACK_CURRENT; + reply[1] = value>>8; + reply[2] = value; + interface_send(reply, sizeof(reply)); } else if(cmd_buf[0]==SET_OVERCURRENT_LIMIT) { @@ -98,11 +103,12 @@ uint8_t monitor_command() if(cmd_length!=1) return LENGTH_ERROR; - serial_write(0xFC); - serial_write(INPUT_VOLTAGE); uint16_t value = input_voltage_millivolts(); - serial_write(value>>8); - serial_write(value); + uint8_t reply[3]; + reply[0] = INPUT_VOLTAGE; + reply[1] = value>>8; + reply[2] = value; + interface_send(reply, sizeof(reply)); } else return INVALID_COMMAND; @@ -110,7 +116,7 @@ uint8_t monitor_command() return COMMAND_OK; } -uint16_t track_current_milliamps() +static uint16_t track_current_milliamps(void) { uint16_t value = track_current_sum; @@ -127,7 +133,7 @@ uint16_t track_current_milliamps() } } -uint16_t input_voltage_millivolts() +static uint16_t input_voltage_millivolts(void) { uint16_t value = input_voltage_sum;