Andrew Boyson / motorhome

Dependencies:   net lpc1768 crypto clock web fram log

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers comms.c Source File

comms.c

00001 #include <stdint.h>
00002 
00003 #include "can.h"
00004 #include "mstimer.h"
00005 #include "log.h"
00006 #include "comms.h"
00007 
00008 #define CAN_ID_BATTERY                   0x100
00009 #define CAN_ID_COUNTED_AMP_SECONDS        0x00
00010 #define CAN_ID_COUNTED_ERROR_PERCENT      0x01
00011 #define CAN_ID_MA                         0x02
00012 #define CAN_ID_OUTPUT_SETPOINT            0x03
00013 #define CAN_ID_OUTPUT_STATE               0x04
00014 #define CAN_ID_CHARGE_ENABLED             0x05
00015 #define CAN_ID_DISCHARGE_ENABLED          0x06
00016 #define CAN_ID_TEMPERATURE_TENTHS         0x07
00017 #define CAN_ID_HEATER_SET_POINT           0x08
00018 #define CAN_ID_HEATER_OUTPUT              0x09
00019 #define CAN_ID_VOLTAGE                    0x0A
00020 #define CAN_ID_MEASURED_SOC_PERCENT       0x0B
00021 #define CAN_ID_MEASURED_SOC_ERROR         0x0C
00022 #define CAN_ID_CAPACITY_AUTO_UPDATE       0x0D
00023 
00024 
00025 static uint32_t _batteryCountedCapacity         = 0;
00026 static uint8_t  _batteryCountedError            = 0;
00027 static int32_t  _batteryCurrentMa               = 0;
00028 static uint8_t  _batteryCapacitySetPointPercent = 0;
00029 static char     _batteryOutputState             = ' ';
00030 static char     _batteryChargeEnabled           = 0;
00031 static char     _batteryDischargeEnabled        = 0;
00032 static int16_t  _batteryTemperatureTenths       = 0;
00033 static int16_t  _batteryTemperatureSetPoint     = 0;
00034 static uint8_t  _batteryHeaterOutputPercent     = 0;
00035 static int16_t  _batteryVoltageMv               = 0;
00036 static uint8_t  _batteryMeasuredPercent         = 0;
00037 static uint8_t  _batteryMeasuredError           = 0;
00038 static char     _batteryCapacityAutoUpdate      = 0;
00039  
00040 uint32_t BatteryGetCountedCapacity         (){ return _batteryCountedCapacity;         }
00041  uint8_t BatteryGetCountedError            (){ return _batteryCountedError;            }
00042  int32_t BatteryGetCurrentMa               (){ return _batteryCurrentMa;               }
00043  uint8_t BatteryGetCapacitySetPointPercent (){ return _batteryCapacitySetPointPercent; }
00044  char    BatteryGetOutputState             (){ return _batteryOutputState;             }
00045  char    BatteryGetChargeEnabled           (){ return _batteryChargeEnabled;           }
00046  char    BatteryGetDischargeEnabled        (){ return _batteryDischargeEnabled;        }
00047  int16_t BatteryGetTemperatureTenths       (){ return _batteryTemperatureTenths;       }
00048  int16_t BatteryGetTemperatureSetPoint     (){ return _batteryTemperatureSetPoint;     }
00049  uint8_t BatteryGetHeaterOutputPercent     (){ return _batteryHeaterOutputPercent;     }
00050  int16_t BatteryGetVoltageMv               (){ return _batteryVoltageMv;               }
00051  uint8_t BatteryGetMeasuredPercent         (){ return _batteryMeasuredPercent;         }
00052  uint8_t BatteryGetMeasuredError           (){ return _batteryMeasuredError;           }
00053  char    BatteryGetCapacityAutoUpdate      (){ return _batteryCapacityAutoUpdate;      }
00054  
00055 void BatterySetCountedCapacity        (uint32_t value){ _batteryCountedCapacity         = value; CanSend(CAN_ID_BATTERY + CAN_ID_COUNTED_AMP_SECONDS  , 4, value, 0);}
00056 void BatterySetCountedError           (uint8_t  value){ _batteryCountedError            = value; CanSend(CAN_ID_BATTERY + CAN_ID_COUNTED_ERROR_PERCENT, 1, value, 0);}
00057 void BatterySetCurrentMa              (int32_t  value){ _batteryCurrentMa               = value; CanSend(CAN_ID_BATTERY + CAN_ID_MA                   , 4, value, 0);}
00058 void BatterySetCapacitySetPointPercent(uint8_t  value){ _batteryCapacitySetPointPercent = value; CanSend(CAN_ID_BATTERY + CAN_ID_OUTPUT_SETPOINT      , 1, value, 0);}
00059 void BatterySetOutputState            (char     value){ _batteryOutputState             = value; CanSend(CAN_ID_BATTERY + CAN_ID_OUTPUT_STATE         , 1, value, 0);}
00060 void BatterySetChargeEnabled          (char     value){ _batteryChargeEnabled           = value; CanSend(CAN_ID_BATTERY + CAN_ID_CHARGE_ENABLED       , 1, value, 0);}
00061 void BatterySetDischargeEnabled       (char     value){ _batteryDischargeEnabled        = value; CanSend(CAN_ID_BATTERY + CAN_ID_DISCHARGE_ENABLED    , 1, value, 0);}
00062 void BatterySetTemperatureSetPoint    (int16_t  value){ _batteryTemperatureSetPoint     = value; CanSend(CAN_ID_BATTERY + CAN_ID_HEATER_SET_POINT     , 2, value, 0);}
00063 void BatterySetCapacityAutoUpdate     (char     value){ _batteryCapacityAutoUpdate      = value; CanSend(CAN_ID_BATTERY + CAN_ID_CAPACITY_AUTO_UPDATE , 1, value, 0);}
00064 
00065 static void receive(uint16_t id, int length, uint32_t dataA, uint32_t dataB)
00066 {
00067     switch(id)
00068     {
00069         case CAN_ID_BATTERY + CAN_ID_COUNTED_AMP_SECONDS:   _batteryCountedCapacity         = (uint32_t)dataA; break;
00070         case CAN_ID_BATTERY + CAN_ID_COUNTED_ERROR_PERCENT: _batteryCountedError            = ( uint8_t)dataA; break;
00071         case CAN_ID_BATTERY + CAN_ID_MA:                    _batteryCurrentMa               = ( int32_t)dataA; break;
00072         case CAN_ID_BATTERY + CAN_ID_OUTPUT_SETPOINT:       _batteryCapacitySetPointPercent = ( uint8_t)dataA; break;
00073         case CAN_ID_BATTERY + CAN_ID_OUTPUT_STATE:          _batteryOutputState             = (    char)dataA; break;
00074         case CAN_ID_BATTERY + CAN_ID_CHARGE_ENABLED:        _batteryChargeEnabled           = (    char)dataA; break;
00075         case CAN_ID_BATTERY + CAN_ID_DISCHARGE_ENABLED:     _batteryDischargeEnabled        = (    char)dataA; break;
00076         case CAN_ID_BATTERY + CAN_ID_TEMPERATURE_TENTHS:    _batteryTemperatureTenths       = ( int16_t)dataA; break;
00077         case CAN_ID_BATTERY + CAN_ID_HEATER_SET_POINT:      _batteryTemperatureSetPoint     = ( int16_t)dataA; break;
00078         case CAN_ID_BATTERY + CAN_ID_HEATER_OUTPUT:         _batteryHeaterOutputPercent     = ( uint8_t)dataA; break;
00079         case CAN_ID_BATTERY + CAN_ID_VOLTAGE:               _batteryVoltageMv               = ( int16_t)dataA; break;
00080         case CAN_ID_BATTERY + CAN_ID_MEASURED_SOC_PERCENT:  _batteryMeasuredPercent         = ( uint8_t)dataA; break;
00081         case CAN_ID_BATTERY + CAN_ID_MEASURED_SOC_ERROR:    _batteryMeasuredError           = ( uint8_t)dataA; break;
00082         case CAN_ID_BATTERY + CAN_ID_CAPACITY_AUTO_UPDATE:  _batteryCapacityAutoUpdate      = (    char)dataA; break;
00083         default:
00084             LogTimeF("Unknown CAN message id %03X received containing %d bytes: %0*X\r\n", id, length, length*2, dataA);
00085             break;
00086     }
00087 }
00088 void CommsInit()
00089 {
00090     CanReceive = &receive;
00091 }
00092 void CommsMain()
00093 {
00094 }