can viewer for layerone 2017

Dependencies:   TFT mbed-dev

Committer:
charliex
Date:
Sun Nov 13 18:08:56 2016 +0000
Revision:
0:00c37ac2161b
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
charliex 0:00c37ac2161b 1 #include "mbed.h"
charliex 0:00c37ac2161b 2 #include "tft.h"
charliex 0:00c37ac2161b 3
charliex 0:00c37ac2161b 4 #define TX_ID (0x7e0)
charliex 0:00c37ac2161b 5 #define RX_ID (0x7e1)
charliex 0:00c37ac2161b 6
charliex 0:00c37ac2161b 7 DigitalOut led1(LED1);
charliex 0:00c37ac2161b 8
charliex 0:00c37ac2161b 9 CAN can(PB_8, PB_9); // CAN Rx pin name, CAN Tx pin name
charliex 0:00c37ac2161b 10
charliex 0:00c37ac2161b 11 char counter = 0;
charliex 0:00c37ac2161b 12
charliex 0:00c37ac2161b 13 #define NUMBER_TEXT_LINES ( 23 )
charliex 0:00c37ac2161b 14
charliex 0:00c37ac2161b 15 int filterhandle=0, index =0;
charliex 0:00c37ac2161b 16 char buffer[NUMBER_TEXT_LINES][200];
charliex 0:00c37ac2161b 17 bool available = false;
charliex 0:00c37ac2161b 18
charliex 0:00c37ac2161b 19 /**
charliex 0:00c37ac2161b 20 * @brief 'CAN receive-complete' interrup handler.
charliex 0:00c37ac2161b 21 * @note Called on arrival of new CAN message.
charliex 0:00c37ac2161b 22 * Keep it as short as possible.
charliex 0:00c37ac2161b 23 * @param
charliex 0:00c37ac2161b 24 * @retval
charliex 0:00c37ac2161b 25 */
charliex 0:00c37ac2161b 26 void onMsgReceived()
charliex 0:00c37ac2161b 27 {
charliex 0:00c37ac2161b 28 CANMessage msg;
charliex 0:00c37ac2161b 29
charliex 0:00c37ac2161b 30 memset ( &msg, 0, sizeof ( msg ) );
charliex 0:00c37ac2161b 31
charliex 0:00c37ac2161b 32 if ( can.read ( msg ) ) {
charliex 0:00c37ac2161b 33
charliex 0:00c37ac2161b 34 sprintf(buffer[index%NUMBER_TEXT_LINES],"0x%03x %d %02x %02x %02x %02x %02x %02x %02x %02x", msg.id,msg.len ,
charliex 0:00c37ac2161b 35 msg.data[0], msg.data[1], msg.data[2], msg.data[3], msg.data[4],msg.data[5], msg.data[6], msg.data[7]
charliex 0:00c37ac2161b 36 );
charliex 0:00c37ac2161b 37
charliex 0:00c37ac2161b 38 available = true;
charliex 0:00c37ac2161b 39 index++;
charliex 0:00c37ac2161b 40 }
charliex 0:00c37ac2161b 41 }
charliex 0:00c37ac2161b 42
charliex 0:00c37ac2161b 43 int main()
charliex 0:00c37ac2161b 44 {
charliex 0:00c37ac2161b 45 int error;
charliex 0:00c37ac2161b 46
charliex 0:00c37ac2161b 47 unsigned char q = 0;
charliex 0:00c37ac2161b 48 set_back(0);
charliex 0:00c37ac2161b 49 tft_init();
charliex 0:00c37ac2161b 50
charliex 0:00c37ac2161b 51 tft_clear(TFT_BLUE);
charliex 0:00c37ac2161b 52 tft_set_window(32, 8, TFT_WIDTH + 32 - 1, TFT_HEIGHT + 8 - 1);
charliex 0:00c37ac2161b 53
charliex 0:00c37ac2161b 54 set_back(1);
charliex 0:00c37ac2161b 55
charliex 0:00c37ac2161b 56 CANMessage msg,txMsg;
charliex 0:00c37ac2161b 57 restart:
charliex 0:00c37ac2161b 58 ;
charliex 0:00c37ac2161b 59
charliex 0:00c37ac2161b 60 // can reset messes up the can (more init?)
charliex 0:00c37ac2161b 61 //can.reset();
charliex 0:00c37ac2161b 62
charliex 0:00c37ac2161b 63 error = can.frequency(500000); // set bit rate to 1Mbps
charliex 0:00c37ac2161b 64 if(error == 0) {
charliex 0:00c37ac2161b 65 tft_text(0,0,"can.frequency",0xfff,0);
charliex 0:00c37ac2161b 66 wait(10);
charliex 0:00c37ac2161b 67 goto restart;
charliex 0:00c37ac2161b 68 }
charliex 0:00c37ac2161b 69
charliex 0:00c37ac2161b 70
charliex 0:00c37ac2161b 71
charliex 0:00c37ac2161b 72 error = can.mode(CAN::Silent);
charliex 0:00c37ac2161b 73 if(error == 0 ) {
charliex 0:00c37ac2161b 74 tft_text(0,0,"can.mode",0xfff,0);
charliex 0:00c37ac2161b 75 wait(10);
charliex 0:00c37ac2161b 76 goto restart;
charliex 0:00c37ac2161b 77 }
charliex 0:00c37ac2161b 78
charliex 0:00c37ac2161b 79 //can.monitor(true);
charliex 0:00c37ac2161b 80
charliex 0:00c37ac2161b 81 // filterhandle = can.filter(0xff,0x07ff,CANAny,0);
charliex 0:00c37ac2161b 82
charliex 0:00c37ac2161b 83 can.attach(&onMsgReceived); // attach 'CAN receive-complete' interrupt handler
charliex 0:00c37ac2161b 84
charliex 0:00c37ac2161b 85 tft_clear(TFT_BLACK);
charliex 0:00c37ac2161b 86
charliex 0:00c37ac2161b 87 tft_text(0,0," ID LEN ------ Data ------ Waiting",0xff0,0);
charliex 0:00c37ac2161b 88
charliex 0:00c37ac2161b 89 while(1) {
charliex 0:00c37ac2161b 90
charliex 0:00c37ac2161b 91
charliex 0:00c37ac2161b 92 #if 0
charliex 0:00c37ac2161b 93 char ind[ 12 ];
charliex 0:00c37ac2161b 94
charliex 0:00c37ac2161b 95 memset ( &msg, 0, sizeof ( msg ) );
charliex 0:00c37ac2161b 96
charliex 0:00c37ac2161b 97 error = can.read ( msg,0 ) ;
charliex 0:00c37ac2161b 98
charliex 0:00c37ac2161b 99 if(error == 1) {
charliex 0:00c37ac2161b 100 sprintf(buffer[index%NUMBER_TEXT_LINES],"0x%03x %d %02x %02x %02x %02x %02x %02x %02x %02x", msg.id,msg.len ,
charliex 0:00c37ac2161b 101 msg.data[0], msg.data[1], msg.data[2], msg.data[3], msg.data[4],msg.data[5], msg.data[6], msg.data[7]
charliex 0:00c37ac2161b 102 );
charliex 0:00c37ac2161b 103 index++;
charliex 0:00c37ac2161b 104 index%=NUMBER_TEXT_LINES;
charliex 0:00c37ac2161b 105 }
charliex 0:00c37ac2161b 106
charliex 0:00c37ac2161b 107 if( can.rderror() ) {
charliex 0:00c37ac2161b 108
charliex 0:00c37ac2161b 109 tft_text(100,0,"can.rderror",0xfff,0);
charliex 0:00c37ac2161b 110 wait(1);
charliex 0:00c37ac2161b 111 tft_clear(TFT_BLACK);
charliex 0:00c37ac2161b 112
charliex 0:00c37ac2161b 113 can.reset();
charliex 0:00c37ac2161b 114 can.frequency(500000);
charliex 0:00c37ac2161b 115 can.mode(CAN::Normal);
charliex 0:00c37ac2161b 116 q= 0;
charliex 0:00c37ac2161b 117
charliex 0:00c37ac2161b 118 }
charliex 0:00c37ac2161b 119
charliex 0:00c37ac2161b 120 sprintf(ind,"%03d %01d %d",index,error, can.rderror() );
charliex 0:00c37ac2161b 121
charliex 0:00c37ac2161b 122 tft_text(0,0,ind,0xfff,0);
charliex 0:00c37ac2161b 123
charliex 0:00c37ac2161b 124 #endif
charliex 0:00c37ac2161b 125 //for(unsigned char q=0;q< NUMBER_TEXT_LINES;q++)
charliex 0:00c37ac2161b 126 {
charliex 0:00c37ac2161b 127 tft_text(0,8+((q)*8),buffer[q],0xfff,0);
charliex 0:00c37ac2161b 128
charliex 0:00c37ac2161b 129 }
charliex 0:00c37ac2161b 130
charliex 0:00c37ac2161b 131 q++;
charliex 0:00c37ac2161b 132 q%=NUMBER_TEXT_LINES;
charliex 0:00c37ac2161b 133
charliex 0:00c37ac2161b 134 led1 = !led1;
charliex 0:00c37ac2161b 135 }
charliex 0:00c37ac2161b 136
charliex 0:00c37ac2161b 137
charliex 0:00c37ac2161b 138 }