GambitDev / MTACSerial
Committer:
fritz291
Date:
Tue Jun 16 16:01:29 2015 +0000
Revision:
0:f13c46e6a431
Serial Card library, still developing

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fritz291 0:f13c46e6a431 1 #include "MTACSerial.h"
fritz291 0:f13c46e6a431 2 #include "mbed.h"
fritz291 0:f13c46e6a431 3
fritz291 0:f13c46e6a431 4 using namespace mts;
fritz291 0:f13c46e6a431 5
fritz291 0:f13c46e6a431 6 MTACSerial::MTACSerial(_slot accessory_card_slot, _mode serial_mode) :
fritz291 0:f13c46e6a431 7 gpio1(NULL),
fritz291 0:f13c46e6a431 8 gpio2(NULL),
fritz291 0:f13c46e6a431 9 gpio3(NULL),
fritz291 0:f13c46e6a431 10 gpio4(NULL),
fritz291 0:f13c46e6a431 11 dtr(NULL),
fritz291 0:f13c46e6a431 12 dcd(NULL),
fritz291 0:f13c46e6a431 13 rts(NULL),
fritz291 0:f13c46e6a431 14 cts(NULL),
fritz291 0:f13c46e6a431 15 ri(NULL),
fritz291 0:f13c46e6a431 16 mpc(NULL)
fritz291 0:f13c46e6a431 17 {
fritz291 0:f13c46e6a431 18 slot = accessory_card_slot;
fritz291 0:f13c46e6a431 19 mode = serial_mode;
fritz291 0:f13c46e6a431 20
fritz291 0:f13c46e6a431 21 switch (slot) {
fritz291 0:f13c46e6a431 22 case slot_1:
fritz291 0:f13c46e6a431 23 switch (mode){
fritz291 0:f13c46e6a431 24 case mode_1:
fritz291 0:f13c46e6a431 25 //Loop Back Mode
fritz291 0:f13c46e6a431 26 gpio1 = new DigitalOut(PTB7,0);
fritz291 0:f13c46e6a431 27 gpio2 = new DigitalOut(PTB6,0);
fritz291 0:f13c46e6a431 28 break;
fritz291 0:f13c46e6a431 29
fritz291 0:f13c46e6a431 30 case mode_2:
fritz291 0:f13c46e6a431 31 //RS232
fritz291 0:f13c46e6a431 32 gpio1 = new DigitalOut(PTB7,1);//1
fritz291 0:f13c46e6a431 33 gpio2 = new DigitalOut(PTB6,0);//0
fritz291 0:f13c46e6a431 34 //Need to figure out correct configuration for GPIO pins for other modes
fritz291 0:f13c46e6a431 35 gpio3 = new DigitalOut(PTB5,0);//0
fritz291 0:f13c46e6a431 36 gpio4 = new DigitalOut(PTB4,1);//1
fritz291 0:f13c46e6a431 37 break;
fritz291 0:f13c46e6a431 38
fritz291 0:f13c46e6a431 39 case mode_3:
fritz291 0:f13c46e6a431 40 //RS485 Half Duplex
fritz291 0:f13c46e6a431 41 gpio1 = new DigitalOut(PTB7,0);
fritz291 0:f13c46e6a431 42 gpio2 = new DigitalOut(PTB6,1);
fritz291 0:f13c46e6a431 43 break;
fritz291 0:f13c46e6a431 44
fritz291 0:f13c46e6a431 45 case mode_4:
fritz291 0:f13c46e6a431 46 //RS422-RS485 Full Duplex
fritz291 0:f13c46e6a431 47 gpio1 = new DigitalOut(PTB7,1);
fritz291 0:f13c46e6a431 48 gpio2 = new DigitalOut(PTB6,1);
fritz291 0:f13c46e6a431 49 break;
fritz291 0:f13c46e6a431 50
fritz291 0:f13c46e6a431 51 default:
fritz291 0:f13c46e6a431 52 printf("invalid serial mode %d\r\n", mode);
fritz291 0:f13c46e6a431 53 return;
fritz291 0:f13c46e6a431 54 }
fritz291 0:f13c46e6a431 55
fritz291 0:f13c46e6a431 56 mpc = new Serial(PTD3, PTD2); //PTD3tx, PTD2rx
fritz291 0:f13c46e6a431 57 mpc->baud(9600);
fritz291 0:f13c46e6a431 58 printf("serial object set\n");
fritz291 0:f13c46e6a431 59 break;
fritz291 0:f13c46e6a431 60
fritz291 0:f13c46e6a431 61 case slot_2:
fritz291 0:f13c46e6a431 62 switch (mode){
fritz291 0:f13c46e6a431 63 case mode_1:
fritz291 0:f13c46e6a431 64 //Loop Back Mode
fritz291 0:f13c46e6a431 65 gpio1 = new DigitalOut(PTA27,0);
fritz291 0:f13c46e6a431 66 gpio2 = new DigitalOut(PTA26,0);
fritz291 0:f13c46e6a431 67 break;
fritz291 0:f13c46e6a431 68
fritz291 0:f13c46e6a431 69 case mode_2:
fritz291 0:f13c46e6a431 70 //RS232
fritz291 0:f13c46e6a431 71 gpio1 = new DigitalOut(PTA27,1);
fritz291 0:f13c46e6a431 72 gpio2 = new DigitalOut(PTA26,0);
fritz291 0:f13c46e6a431 73 //
fritz291 0:f13c46e6a431 74 gpio3 = new DigitalOut(PTA25,0);//0
fritz291 0:f13c46e6a431 75 gpio4 = new DigitalOut(PTA24,1);//1
fritz291 0:f13c46e6a431 76 break;
fritz291 0:f13c46e6a431 77
fritz291 0:f13c46e6a431 78 case mode_3:
fritz291 0:f13c46e6a431 79 //RS485 Half Duplex
fritz291 0:f13c46e6a431 80 gpio1 = new DigitalOut(PTA27,0);
fritz291 0:f13c46e6a431 81 gpio2 = new DigitalOut(PTA26,1);
fritz291 0:f13c46e6a431 82 break;
fritz291 0:f13c46e6a431 83
fritz291 0:f13c46e6a431 84 case mode_4:
fritz291 0:f13c46e6a431 85 //RS422-RS485 Full Duplex
fritz291 0:f13c46e6a431 86 gpio1 = new DigitalOut(PTA27,1);
fritz291 0:f13c46e6a431 87 gpio2 = new DigitalOut(PTA26,1);
fritz291 0:f13c46e6a431 88 break;
fritz291 0:f13c46e6a431 89
fritz291 0:f13c46e6a431 90 default:
fritz291 0:f13c46e6a431 91 printf("invalid serial mode %d\r\n", mode);
fritz291 0:f13c46e6a431 92 return;
fritz291 0:f13c46e6a431 93 }
fritz291 0:f13c46e6a431 94 mpc = new Serial(PTB11, PTB10); //tx, rx
fritz291 0:f13c46e6a431 95 mpc->baud(9600);
fritz291 0:f13c46e6a431 96 break;
fritz291 0:f13c46e6a431 97
fritz291 0:f13c46e6a431 98 default:
fritz291 0:f13c46e6a431 99 printf("invalid slot %d\r\n", slot);
fritz291 0:f13c46e6a431 100 return;
fritz291 0:f13c46e6a431 101 }
fritz291 0:f13c46e6a431 102 }
fritz291 0:f13c46e6a431 103
fritz291 0:f13c46e6a431 104 MTACSerial::~MTACSerial() {
fritz291 0:f13c46e6a431 105 if (gpio1) delete gpio1;
fritz291 0:f13c46e6a431 106 if (gpio2) delete gpio2;
fritz291 0:f13c46e6a431 107 if (gpio3) delete gpio3;
fritz291 0:f13c46e6a431 108 if (gpio4) delete gpio4;
fritz291 0:f13c46e6a431 109 if (dtr) delete dtr;
fritz291 0:f13c46e6a431 110 if (mpc) delete mpc;
fritz291 0:f13c46e6a431 111 if (rts) delete rts;
fritz291 0:f13c46e6a431 112 if (ri) delete ri;
fritz291 0:f13c46e6a431 113 if (cts) delete cts;
fritz291 0:f13c46e6a431 114 if (dcd) delete dcd;
fritz291 0:f13c46e6a431 115 }
fritz291 0:f13c46e6a431 116
fritz291 0:f13c46e6a431 117
fritz291 0:f13c46e6a431 118 //Simple tests to see if configurations are working
fritz291 0:f13c46e6a431 119 void MTACSerial::test(){
fritz291 0:f13c46e6a431 120 printf("in test function\n");
fritz291 0:f13c46e6a431 121 //printf("ri = %i\n",ri->read());
fritz291 0:f13c46e6a431 122 //printf("dcd = %i\n",dcd->read());
fritz291 0:f13c46e6a431 123 //printf("cts = %i\n",cts->read());
fritz291 0:f13c46e6a431 124 while(1) {
fritz291 0:f13c46e6a431 125 printf("hello\n");
fritz291 0:f13c46e6a431 126 mpc->printf("hello\n");
fritz291 0:f13c46e6a431 127 wait(2);
fritz291 0:f13c46e6a431 128 }
fritz291 0:f13c46e6a431 129 }
fritz291 0:f13c46e6a431 130 void MTACSerial::testLoopBack(){
fritz291 0:f13c46e6a431 131 printf("in test function\n");
fritz291 0:f13c46e6a431 132 printf("dtr = %i\n",dtr->read());
fritz291 0:f13c46e6a431 133 //mpc->printf("%x\n", out);
fritz291 0:f13c46e6a431 134 while(1) {
fritz291 0:f13c46e6a431 135 printf("hello\n");
fritz291 0:f13c46e6a431 136 mpc->putc('a');
fritz291 0:f13c46e6a431 137 printf("%s\n",mpc->getc()+1);
fritz291 0:f13c46e6a431 138 wait(2);
fritz291 0:f13c46e6a431 139 //mpc->putc(mpc->getc() + 1);
fritz291 0:f13c46e6a431 140 }
fritz291 0:f13c46e6a431 141 }