ROM Comm / Mbed 2 deprecated espar_mini_control_CAN

Dependencies:   mbed mbed-STM32F103C8T6

Committer:
lorded
Date:
Thu Jun 11 21:57:29 2020 +0000
Revision:
9:6126b83608be
Parent:
8:2b0d18ebbba9
Child:
10:a82e51837e2b
pre adding altimeter

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"
pangsk 0:908be729d27c 22
RogerJKelly 7:467e350d1a10 23 // pinout for Maple Mini
RogerJKelly 7:467e350d1a10 24 DigitalIn click(PA_1); // Button inputs
RogerJKelly 7:467e350d1a10 25 // pinout for lpc1768
RogerJKelly 7:467e350d1a10 26 //DigitalIn click(p21); // Joystick inputs
RogerJKelly 7:467e350d1a10 27 //DigitalIn right(p22);
RogerJKelly 7:467e350d1a10 28 //DigitalIn down(p23);
RogerJKelly 7:467e350d1a10 29 //DigitalIn left(p24);
RogerJKelly 7:467e350d1a10 30 //DigitalIn up(p25);
pangsk 3:05bb8f0bd7a4 31
lorded 9:6126b83608be 32 volatile unsigned long lifetimer = 0;
lorded 9:6126b83608be 33 volatile int secondFlag = 0;
pangsk 6:41a4ad385daa 34
RogerJKelly 7:467e350d1a10 35 Ticker timer;
lorded 9:6126b83608be 36 Ticker quartersecond_timed_event;
lorded 9:6126b83608be 37 Ticker onesecond_timed_event;
RogerJKelly 7:467e350d1a10 38
lorded 9:6126b83608be 39 void attime()
RogerJKelly 7:467e350d1a10 40 {
RogerJKelly 7:467e350d1a10 41 //second_tick = true;
RogerJKelly 7:467e350d1a10 42 //myled = !myled;
RogerJKelly 7:467e350d1a10 43 led1 = !led1;
RogerJKelly 7:467e350d1a10 44 }
pangsk 0:908be729d27c 45
pangsk 6:41a4ad385daa 46 // Menu defines
pangsk 0:908be729d27c 47
RogerJKelly 7:467e350d1a10 48 //unsigned char menu_state;
RogerJKelly 7:467e350d1a10 49 //unsigned char canspeed;
pangsk 6:41a4ad385daa 50
lorded 8:2b0d18ebbba9 51 // external variables
lorded 8:2b0d18ebbba9 52 volatile unsigned char idletimer;
lorded 9:6126b83608be 53 extern char otherControllerDetected;
lorded 9:6126b83608be 54
lorded 8:2b0d18ebbba9 55 char printbuff[256];
lorded 8:2b0d18ebbba9 56
lorded 9:6126b83608be 57 void DebugWrite(const char* str)
lorded 9:6126b83608be 58 {
lorded 9:6126b83608be 59 pc.printf(str);
lorded 8:2b0d18ebbba9 60 }
lorded 9:6126b83608be 61 void resetTimer(struct sHeatVars *s)
lorded 9:6126b83608be 62 {
lorded 9:6126b83608be 63 s->resettick = 1;
lorded 9:6126b83608be 64 //TODO: This.
lorded 9:6126b83608be 65 }
lorded 9:6126b83608be 66 void resetTimerAsync(struct sHeatVars *s)
lorded 9:6126b83608be 67 {
lorded 9:6126b83608be 68 s->resettick = 1;
lorded 8:2b0d18ebbba9 69 //TODO: This.
lorded 8:2b0d18ebbba9 70 }
lorded 9:6126b83608be 71 void one_second_tick()
lorded 9:6126b83608be 72 {
lorded 9:6126b83608be 73 int i;
lorded 9:6126b83608be 74 lifetimer++; // used for wifi reset test.
lorded 9:6126b83608be 75 //wiced_rtos_lock_mutex( &xively_data.mutex );
lorded 9:6126b83608be 76
lorded 9:6126b83608be 77 for (i = 0; i < HEATERSTATECOUNT; i++) {
lorded 9:6126b83608be 78 if (heaterState[i].heattime > 0 && heaterState[i].heattime < 59995) { // count down the heat timer
lorded 9:6126b83608be 79 // tick,tick...
lorded 9:6126b83608be 80 heaterState[i].heattime--;
lorded 9:6126b83608be 81 }
lorded 9:6126b83608be 82 if (heaterState[i].heatresettime > 0) {
lorded 9:6126b83608be 83 heaterState[i].heatresettime--;
lorded 9:6126b83608be 84 }
lorded 9:6126b83608be 85 if (heaterState[i].preheattime > 0) {
lorded 9:6126b83608be 86 heaterState[i].preheattime--;
lorded 9:6126b83608be 87 }
lorded 9:6126b83608be 88 if (heaterState[i].heaterDetected > 0) {
lorded 9:6126b83608be 89 heaterState[i].heaterDetected--;
lorded 9:6126b83608be 90 }
lorded 9:6126b83608be 91 }
lorded 9:6126b83608be 92
lorded 9:6126b83608be 93 if (idletimer > 0) {
lorded 9:6126b83608be 94 idletimer--;
lorded 9:6126b83608be 95 }
lorded 9:6126b83608be 96 if (otherControllerDetected > 0) {
lorded 9:6126b83608be 97 otherControllerDetected--;
lorded 9:6126b83608be 98 }
lorded 9:6126b83608be 99 secondFlag = 1;
lorded 9:6126b83608be 100
lorded 8:2b0d18ebbba9 101 }
lorded 9:6126b83608be 102
lorded 9:6126b83608be 103 void quarter_second_tick()
lorded 9:6126b83608be 104 {
lorded 9:6126b83608be 105 int i;
lorded 9:6126b83608be 106 for (i = 0; i < HEATERSTATECOUNT; i++) {
lorded 9:6126b83608be 107 heaterState[i].tickcount += 250;
lorded 9:6126b83608be 108 if (heaterState[i].resettick == 1) {
lorded 9:6126b83608be 109 heaterState[i].tickcount = 0;
lorded 9:6126b83608be 110 heaterState[i].resettick = 0;
lorded 9:6126b83608be 111 }
lorded 9:6126b83608be 112 }
lorded 9:6126b83608be 113
lorded 9:6126b83608be 114 }
lorded 9:6126b83608be 115
lorded 9:6126b83608be 116 int main()
pangsk 6:41a4ad385daa 117 {
RogerJKelly 7:467e350d1a10 118 confSysClock(); //Configure system clock (72MHz HSE clock, 48MHz USB clock)
pangsk 3:05bb8f0bd7a4 119 pc.baud(115200);
lorded 9:6126b83608be 120
lorded 9:6126b83608be 121 //Enable Pullup
pangsk 3:05bb8f0bd7a4 122 click.mode(PullUp);
pangsk 6:41a4ad385daa 123
lorded 9:6126b83608be 124
lorded 9:6126b83608be 125 pc.printf("\n\nRIXEN Simulator v1.1 \r\n");
lorded 9:6126b83608be 126
pangsk 6:41a4ad385daa 127 led1 = 1;
pangsk 6:41a4ad385daa 128 wait(0.1);
pangsk 6:41a4ad385daa 129 led2 = 1;
pangsk 6:41a4ad385daa 130 wait(0.1);
pangsk 6:41a4ad385daa 131 led3 = 1;
pangsk 6:41a4ad385daa 132 wait(0.1);
pangsk 6:41a4ad385daa 133 led4 = 1;
pangsk 6:41a4ad385daa 134 wait(0.2);
lorded 9:6126b83608be 135 led1 = 0;
lorded 9:6126b83608be 136 led2 = 0;
lorded 9:6126b83608be 137 led3 = 0;
lorded 9:6126b83608be 138 led4 = 0;
lorded 9:6126b83608be 139
lorded 9:6126b83608be 140
pangsk 6:41a4ad385daa 141 wait(1);
lorded 9:6126b83608be 142
RogerJKelly 7:467e350d1a10 143 //canspeed = CAN500;
lorded 9:6126b83608be 144 // ecu.dtc = false;
lorded 9:6126b83608be 145 // ecu.active_fault = false;
lorded 9:6126b83608be 146
lorded 9:6126b83608be 147 // sim.canspeed(CANSPEED_500);
lorded 9:6126b83608be 148
pangsk 6:41a4ad385daa 149 wait(0.2);
pangsk 6:41a4ad385daa 150 led1 = 1;
lorded 9:6126b83608be 151
lorded 9:6126b83608be 152 //timer.attach(&attime, 1);
lorded 9:6126b83608be 153 quartersecond_timed_event.attach(&quarter_second_tick, 0.250);
lorded 9:6126b83608be 154 onesecond_timed_event.attach(&one_second_tick, 1.0);
lorded 9:6126b83608be 155
lorded 9:6126b83608be 156
lorded 8:2b0d18ebbba9 157 initHeaterState(&heaterState[0]);
lorded 8:2b0d18ebbba9 158 initHeaterState(&heaterState[1]);
lorded 8:2b0d18ebbba9 159
lorded 8:2b0d18ebbba9 160 heaterState[0].bustype = HEATERTYPECAN;
lorded 8:2b0d18ebbba9 161 heaterState[0].heaternum = 1;
lorded 9:6126b83608be 162
lorded 8:2b0d18ebbba9 163 heaterState[1].bustype = HEATERTYPENONE;
lorded 9:6126b83608be 164
lorded 8:2b0d18ebbba9 165
lorded 9:6126b83608be 166 InitCAN();
lorded 9:6126b83608be 167
lorded 9:6126b83608be 168
lorded 9:6126b83608be 169 while(1) { // Main CAN loop
lorded 9:6126b83608be 170
lorded 9:6126b83608be 171 for (int i = 0; i < HEATERSTATECOUNT; i++) {
lorded 8:2b0d18ebbba9 172 // wiced_update_system_monitor(&main_thread_monitor, 10 * 1000);
lorded 8:2b0d18ebbba9 173 doHeatTaskCAN(&heaterState[i]);
lorded 8:2b0d18ebbba9 174 // wiced_update_system_monitor(&main_thread_monitor, 10 * 1000);
lorded 8:2b0d18ebbba9 175 doHeatLogicTask(&heaterState[i]);
lorded 9:6126b83608be 176 if (i < HEATERSTATECOUNT) {
lorded 8:2b0d18ebbba9 177 wait_ms(50);
lorded 9:6126b83608be 178 } else {
lorded 8:2b0d18ebbba9 179 //wiced_rtos_delay_milliseconds(50);
lorded 8:2b0d18ebbba9 180 }
pangsk 6:41a4ad385daa 181 }
lorded 9:6126b83608be 182 if (!click) {
lorded 9:6126b83608be 183 if (heaterState[0].heatOn == HEATCALLOFF) {
lorded 9:6126b83608be 184 set_heat_con(&heaterState[0], HEATCALLINIT);
lorded 9:6126b83608be 185 }
lorded 9:6126b83608be 186 } else {
lorded 9:6126b83608be 187 if (heaterState[0].heatOn != HEATCALLOFF) {
lorded 9:6126b83608be 188 set_heat_con(&heaterState[0], HEATCALLOFF);
lorded 9:6126b83608be 189 }
lorded 9:6126b83608be 190 }
lorded 9:6126b83608be 191
lorded 9:6126b83608be 192 if (secondFlag > 0) {
lorded 9:6126b83608be 193 secondFlag = 0;
lorded 9:6126b83608be 194 if (heaterState[0].initTimer > 0) {
lorded 9:6126b83608be 195 heaterState[0].initTimer--;
lorded 9:6126b83608be 196 }
lorded 9:6126b83608be 197 if (heaterState[1].initTimer > 0) {
lorded 9:6126b83608be 198 heaterState[1].initTimer--;
lorded 9:6126b83608be 199 }
lorded 9:6126b83608be 200 // DebugWrite("Doing re-init of I2c\r\n");
lorded 9:6126b83608be 201
lorded 9:6126b83608be 202 // check I2C
lorded 9:6126b83608be 203 // DeInit_SC16IS740();
lorded 9:6126b83608be 204 // DeInit_SPL0601();
lorded 9:6126b83608be 205 // cleanI2CLines();
lorded 9:6126b83608be 206 // Init_SC16IS740(2);
lorded 9:6126b83608be 207 // Init_SPL0601();
lorded 9:6126b83608be 208 }
pangsk 6:41a4ad385daa 209 }
pangsk 6:41a4ad385daa 210 }