ROM Comm / Mbed 2 deprecated espar_mini_control_CAN

Dependencies:   mbed mbed-STM32F103C8T6

Committer:
lorded
Date:
Wed Jul 29 16:48:19 2020 +0000
Revision:
11:b571de4666c9
Parent:
10:a82e51837e2b
Espar

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pangsk 0:908be729d27c 1 /*
pangsk 0:908be729d27c 2
pangsk 6:41a4ad385daa 3 mbed Can-Bus ECU simulator
pangsk 0:908be729d27c 4
pangsk 6:41a4ad385daa 5 v1.0 December 2014
pangsk 0:908be729d27c 6
pangsk 0:908be729d27c 7 ********************************************************************************
pangsk 0:908be729d27c 8
pangsk 0:908be729d27c 9 WARNING: Use at your own risk, sadly this software comes with no guarantees.
pangsk 0:908be729d27c 10 This software is provided 'free' and in good faith, but the author does not
pangsk 0:908be729d27c 11 accept liability for any damage arising from its use.
pangsk 0:908be729d27c 12
pangsk 0:908be729d27c 13 ********************************************************************************
pangsk 0:908be729d27c 14
pangsk 0:908be729d27c 15 */
RogerJKelly 7:467e350d1a10 16 //#include "MapleMini.h"
RogerJKelly 7:467e350d1a10 17 #include "stm32f103c8t6.h"
pangsk 0:908be729d27c 18 #include "mbed.h"
lorded 9:6126b83608be 19 //#include "ecu_simulator.h"
pangsk 0:908be729d27c 20 #include "globals.h"
lorded 8:2b0d18ebbba9 21 #include "heatcontrol.h"
lorded 10:a82e51837e2b 22 #include "spl0601.h"
lorded 10:a82e51837e2b 23 #include "i2c_base.h"
lorded 10:a82e51837e2b 24 extern I2C* spl_i2c;
RogerJKelly 7:467e350d1a10 25 // pinout for Maple Mini
RogerJKelly 7:467e350d1a10 26 DigitalIn click(PA_1); // Button inputs
RogerJKelly 7:467e350d1a10 27 // pinout for lpc1768
RogerJKelly 7:467e350d1a10 28 //DigitalIn click(p21); // Joystick inputs
RogerJKelly 7:467e350d1a10 29 //DigitalIn right(p22);
RogerJKelly 7:467e350d1a10 30 //DigitalIn down(p23);
RogerJKelly 7:467e350d1a10 31 //DigitalIn left(p24);
RogerJKelly 7:467e350d1a10 32 //DigitalIn up(p25);
pangsk 3:05bb8f0bd7a4 33
lorded 9:6126b83608be 34 volatile unsigned long lifetimer = 0;
lorded 9:6126b83608be 35 volatile int secondFlag = 0;
pangsk 6:41a4ad385daa 36
RogerJKelly 7:467e350d1a10 37 Ticker timer;
lorded 9:6126b83608be 38 Ticker quartersecond_timed_event;
lorded 11:b571de4666c9 39 Ticker hundredms_timed_event;
lorded 9:6126b83608be 40 Ticker onesecond_timed_event;
RogerJKelly 7:467e350d1a10 41
lorded 9:6126b83608be 42 void attime()
RogerJKelly 7:467e350d1a10 43 {
RogerJKelly 7:467e350d1a10 44 //second_tick = true;
RogerJKelly 7:467e350d1a10 45 //myled = !myled;
lorded 11:b571de4666c9 46 led1 = 0; // keep it off. Flicker on with CAN
RogerJKelly 7:467e350d1a10 47 }
pangsk 0:908be729d27c 48
pangsk 6:41a4ad385daa 49 // Menu defines
pangsk 0:908be729d27c 50
RogerJKelly 7:467e350d1a10 51 //unsigned char menu_state;
RogerJKelly 7:467e350d1a10 52 //unsigned char canspeed;
pangsk 6:41a4ad385daa 53
lorded 8:2b0d18ebbba9 54 // external variables
lorded 8:2b0d18ebbba9 55 volatile unsigned char idletimer;
lorded 9:6126b83608be 56 extern char otherControllerDetected;
lorded 10:a82e51837e2b 57 wiced_bool_t hasOnboardAltimeter = WICED_FALSE;
lorded 9:6126b83608be 58
lorded 8:2b0d18ebbba9 59 char printbuff[256];
lorded 8:2b0d18ebbba9 60
lorded 9:6126b83608be 61 void DebugWrite(const char* str)
lorded 9:6126b83608be 62 {
lorded 9:6126b83608be 63 pc.printf(str);
lorded 8:2b0d18ebbba9 64 }
lorded 9:6126b83608be 65 void resetTimer(struct sHeatVars *s)
lorded 9:6126b83608be 66 {
lorded 9:6126b83608be 67 s->resettick = 1;
lorded 9:6126b83608be 68 //TODO: This.
lorded 9:6126b83608be 69 }
lorded 9:6126b83608be 70 void resetTimerAsync(struct sHeatVars *s)
lorded 9:6126b83608be 71 {
lorded 9:6126b83608be 72 s->resettick = 1;
lorded 8:2b0d18ebbba9 73 //TODO: This.
lorded 8:2b0d18ebbba9 74 }
lorded 9:6126b83608be 75 void one_second_tick()
lorded 9:6126b83608be 76 {
lorded 9:6126b83608be 77 int i;
lorded 9:6126b83608be 78 lifetimer++; // used for wifi reset test.
lorded 9:6126b83608be 79 //wiced_rtos_lock_mutex( &xively_data.mutex );
lorded 9:6126b83608be 80
lorded 9:6126b83608be 81 for (i = 0; i < HEATERSTATECOUNT; i++) {
lorded 9:6126b83608be 82 if (heaterState[i].heattime > 0 && heaterState[i].heattime < 59995) { // count down the heat timer
lorded 9:6126b83608be 83 // tick,tick...
lorded 9:6126b83608be 84 heaterState[i].heattime--;
lorded 9:6126b83608be 85 }
lorded 9:6126b83608be 86 if (heaterState[i].heatresettime > 0) {
lorded 9:6126b83608be 87 heaterState[i].heatresettime--;
lorded 9:6126b83608be 88 }
lorded 9:6126b83608be 89 if (heaterState[i].preheattime > 0) {
lorded 9:6126b83608be 90 heaterState[i].preheattime--;
lorded 9:6126b83608be 91 }
lorded 9:6126b83608be 92 if (heaterState[i].heaterDetected > 0) {
lorded 9:6126b83608be 93 heaterState[i].heaterDetected--;
lorded 9:6126b83608be 94 }
lorded 9:6126b83608be 95 }
lorded 9:6126b83608be 96
lorded 9:6126b83608be 97 if (idletimer > 0) {
lorded 9:6126b83608be 98 idletimer--;
lorded 9:6126b83608be 99 }
lorded 9:6126b83608be 100 if (otherControllerDetected > 0) {
lorded 9:6126b83608be 101 otherControllerDetected--;
lorded 9:6126b83608be 102 }
lorded 9:6126b83608be 103 secondFlag = 1;
lorded 9:6126b83608be 104
lorded 8:2b0d18ebbba9 105 }
lorded 9:6126b83608be 106
lorded 9:6126b83608be 107 void quarter_second_tick()
lorded 9:6126b83608be 108 {
lorded 9:6126b83608be 109 int i;
lorded 9:6126b83608be 110 for (i = 0; i < HEATERSTATECOUNT; i++) {
lorded 9:6126b83608be 111 heaterState[i].tickcount += 250;
lorded 9:6126b83608be 112 if (heaterState[i].resettick == 1) {
lorded 9:6126b83608be 113 heaterState[i].tickcount = 0;
lorded 9:6126b83608be 114 heaterState[i].resettick = 0;
lorded 9:6126b83608be 115 }
lorded 9:6126b83608be 116 }
lorded 11:b571de4666c9 117 }
lorded 11:b571de4666c9 118 void hundredms_tick()
lorded 11:b571de4666c9 119 {
lorded 11:b571de4666c9 120 led1 = 0;// off
lorded 9:6126b83608be 121 }
lorded 9:6126b83608be 122
lorded 9:6126b83608be 123 int main()
pangsk 6:41a4ad385daa 124 {
RogerJKelly 7:467e350d1a10 125 confSysClock(); //Configure system clock (72MHz HSE clock, 48MHz USB clock)
pangsk 3:05bb8f0bd7a4 126 pc.baud(115200);
lorded 9:6126b83608be 127
lorded 9:6126b83608be 128 //Enable Pullup
pangsk 3:05bb8f0bd7a4 129 click.mode(PullUp);
pangsk 6:41a4ad385daa 130
lorded 9:6126b83608be 131
lorded 9:6126b83608be 132 pc.printf("\n\nRIXEN Simulator v1.1 \r\n");
pangsk 6:41a4ad385daa 133 led1 = 1;
lorded 9:6126b83608be 134
pangsk 6:41a4ad385daa 135 wait(1);
lorded 11:b571de4666c9 136 led1 = 0;
lorded 10:a82e51837e2b 137 spl_i2c = new I2C(SDA, SCL);
RogerJKelly 7:467e350d1a10 138 //canspeed = CAN500;
lorded 9:6126b83608be 139 // ecu.dtc = false;
lorded 9:6126b83608be 140 // ecu.active_fault = false;
lorded 9:6126b83608be 141
lorded 9:6126b83608be 142 // sim.canspeed(CANSPEED_500);
lorded 9:6126b83608be 143
pangsk 6:41a4ad385daa 144 wait(0.2);
pangsk 6:41a4ad385daa 145 led1 = 1;
lorded 9:6126b83608be 146
lorded 9:6126b83608be 147 //timer.attach(&attime, 1);
lorded 9:6126b83608be 148 quartersecond_timed_event.attach(&quarter_second_tick, 0.250);
lorded 11:b571de4666c9 149 hundredms_timed_event.attach(&hundredms_tick, 0.1);
lorded 9:6126b83608be 150 onesecond_timed_event.attach(&one_second_tick, 1.0);
lorded 9:6126b83608be 151
lorded 9:6126b83608be 152
lorded 8:2b0d18ebbba9 153 initHeaterState(&heaterState[0]);
lorded 8:2b0d18ebbba9 154
lorded 8:2b0d18ebbba9 155 heaterState[0].bustype = HEATERTYPECAN;
lorded 8:2b0d18ebbba9 156 heaterState[0].heaternum = 1;
lorded 9:6126b83608be 157
lorded 8:2b0d18ebbba9 158
lorded 9:6126b83608be 159 InitCAN();
lorded 9:6126b83608be 160
lorded 10:a82e51837e2b 161 double presComp;
lorded 9:6126b83608be 162 while(1) { // Main CAN loop
lorded 9:6126b83608be 163
lorded 9:6126b83608be 164 for (int i = 0; i < HEATERSTATECOUNT; i++) {
lorded 10:a82e51837e2b 165 // wiced_update_system_monitor(&main_thread_monitor, 10 * 1000);
lorded 8:2b0d18ebbba9 166 doHeatTaskCAN(&heaterState[i]);
lorded 10:a82e51837e2b 167 // wiced_update_system_monitor(&main_thread_monitor, 10 * 1000);
lorded 8:2b0d18ebbba9 168 doHeatLogicTask(&heaterState[i]);
lorded 9:6126b83608be 169 if (i < HEATERSTATECOUNT) {
lorded 8:2b0d18ebbba9 170 wait_ms(50);
lorded 9:6126b83608be 171 } else {
lorded 8:2b0d18ebbba9 172 //wiced_rtos_delay_milliseconds(50);
lorded 8:2b0d18ebbba9 173 }
pangsk 6:41a4ad385daa 174 }
lorded 9:6126b83608be 175 if (!click) {
lorded 9:6126b83608be 176 if (heaterState[0].heatOn == HEATCALLOFF) {
lorded 9:6126b83608be 177 set_heat_con(&heaterState[0], HEATCALLINIT);
lorded 9:6126b83608be 178 }
lorded 9:6126b83608be 179 } else {
lorded 9:6126b83608be 180 if (heaterState[0].heatOn != HEATCALLOFF) {
lorded 9:6126b83608be 181 set_heat_con(&heaterState[0], HEATCALLOFF);
lorded 9:6126b83608be 182 }
lorded 9:6126b83608be 183 }
lorded 10:a82e51837e2b 184
lorded 9:6126b83608be 185 if (secondFlag > 0) {
lorded 9:6126b83608be 186 secondFlag = 0;
lorded 10:a82e51837e2b 187
lorded 10:a82e51837e2b 188 DebugWrite("About to clean I2C\r\n");
lorded 10:a82e51837e2b 189 cleanI2CLines(spl_i2c, SDA, SCL);
lorded 10:a82e51837e2b 190
lorded 10:a82e51837e2b 191 DebugWrite("Done clean I2C, get pressure\r\n");
lorded 10:a82e51837e2b 192
lorded 10:a82e51837e2b 193 hasOnboardAltimeter = getPressure(&presComp);
lorded 10:a82e51837e2b 194 if (hasOnboardAltimeter) {
lorded 10:a82e51837e2b 195 int hpa = presComp / 100; // convert to HPA
lorded 10:a82e51837e2b 196 sprintf(printbuff, "Pressure %0.5lf vs %d\r\n", presComp, hpa);
lorded 10:a82e51837e2b 197 DebugWrite(printbuff);
lorded 10:a82e51837e2b 198
lorded 10:a82e51837e2b 199 //sprintf(printbuff, "Pressure is %.1f (%d)\r\n", presComp, hpa);
lorded 10:a82e51837e2b 200 //DebugWrite(printbuff);
lorded 10:a82e51837e2b 201 if (hpa < 600) {
lorded 10:a82e51837e2b 202 hpa = 680;
lorded 10:a82e51837e2b 203 }
lorded 10:a82e51837e2b 204 if (hpa > 1105) {
lorded 10:a82e51837e2b 205 hpa = 680;
lorded 10:a82e51837e2b 206 }
lorded 10:a82e51837e2b 207 heaterState[0].rawAltitude = presComp;
lorded 10:a82e51837e2b 208 heaterState[0].internalAltitude = hpa;
lorded 10:a82e51837e2b 209 } else {
lorded 10:a82e51837e2b 210 DebugWrite("No altimeter\r\n");
lorded 10:a82e51837e2b 211 }
lorded 9:6126b83608be 212 if (heaterState[0].initTimer > 0) {
lorded 9:6126b83608be 213 heaterState[0].initTimer--;
lorded 9:6126b83608be 214 }
lorded 9:6126b83608be 215 // DebugWrite("Doing re-init of I2c\r\n");
lorded 9:6126b83608be 216
lorded 9:6126b83608be 217 // check I2C
lorded 9:6126b83608be 218 // DeInit_SC16IS740();
lorded 9:6126b83608be 219 // DeInit_SPL0601();
lorded 9:6126b83608be 220 // cleanI2CLines();
lorded 9:6126b83608be 221 // Init_SC16IS740(2);
lorded 9:6126b83608be 222 // Init_SPL0601();
lorded 9:6126b83608be 223 }
pangsk 6:41a4ad385daa 224 }
pangsk 6:41a4ad385daa 225 }