Dummy program to demonstrate problems: working code

Dependencies:   SLCD mbed-rtos mbed

Fork of MNG_TC by Shreesha S

Committer:
shreeshas95
Date:
Thu Sep 17 14:15:00 2015 +0000
Revision:
17:2b04e53f3b1d
Parent:
13:7b27a8e9cbb4
DUMMP program to demonstrate the problems : working

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shreeshas95 13:7b27a8e9cbb4 1
shreeshas95 13:7b27a8e9cbb4 2
shreeshas95 13:7b27a8e9cbb4 3 class Convolution{
shreeshas95 13:7b27a8e9cbb4 4
shreeshas95 13:7b27a8e9cbb4 5 private:
shreeshas95 13:7b27a8e9cbb4 6 typedef struct ConvNode{
shreeshas95 13:7b27a8e9cbb4 7 //next state
shreeshas95 13:7b27a8e9cbb4 8 //format : 8 bits mapped as [1]xxxx [0]xxxx
shreeshas95 13:7b27a8e9cbb4 9 unsigned char nextState;
shreeshas95 13:7b27a8e9cbb4 10
shreeshas95 13:7b27a8e9cbb4 11 //output
shreeshas95 13:7b27a8e9cbb4 12 // format : 8 bits mapped as
shreeshas95 13:7b27a8e9cbb4 13 // **** xxxx{2} [1]-[0] {1} [1]-[0] i.e. ****xxxx
shreeshas95 13:7b27a8e9cbb4 14 // x = data, * = junk
shreeshas95 13:7b27a8e9cbb4 15 unsigned char output;
shreeshas95 13:7b27a8e9cbb4 16 }ConvNode;
shreeshas95 13:7b27a8e9cbb4 17
shreeshas95 13:7b27a8e9cbb4 18 ConvNode convStateList[16];
shreeshas95 13:7b27a8e9cbb4 19
shreeshas95 13:7b27a8e9cbb4 20 public:
shreeshas95 13:7b27a8e9cbb4 21 /*
shreeshas95 13:7b27a8e9cbb4 22 @brief: Constructor : Initialise all the variables
shreeshas95 13:7b27a8e9cbb4 23 @param: none
shreeshas95 13:7b27a8e9cbb4 24 @return: none
shreeshas95 13:7b27a8e9cbb4 25 */
shreeshas95 13:7b27a8e9cbb4 26 Convolution(){
shreeshas95 13:7b27a8e9cbb4 27
shreeshas95 13:7b27a8e9cbb4 28 convStateList[0].nextState = 0x10;
shreeshas95 13:7b27a8e9cbb4 29 convStateList[1].nextState = 0x32;
shreeshas95 13:7b27a8e9cbb4 30 convStateList[2].nextState = 0x54;
shreeshas95 13:7b27a8e9cbb4 31 convStateList[3].nextState = 0x76;
shreeshas95 13:7b27a8e9cbb4 32 convStateList[4].nextState = 0x98;
shreeshas95 13:7b27a8e9cbb4 33 convStateList[5].nextState = 0xBA;
shreeshas95 13:7b27a8e9cbb4 34 convStateList[6].nextState = 0xDC;
shreeshas95 13:7b27a8e9cbb4 35 convStateList[7].nextState = 0xFE;
shreeshas95 13:7b27a8e9cbb4 36 convStateList[8].nextState = 0x10;
shreeshas95 13:7b27a8e9cbb4 37 convStateList[9].nextState = 0x32;
shreeshas95 13:7b27a8e9cbb4 38 convStateList[10].nextState = 0x54;
shreeshas95 13:7b27a8e9cbb4 39 convStateList[11].nextState = 0x76;
shreeshas95 13:7b27a8e9cbb4 40 convStateList[12].nextState = 0x98;
shreeshas95 13:7b27a8e9cbb4 41 convStateList[13].nextState = 0xBA;
shreeshas95 13:7b27a8e9cbb4 42 convStateList[14].nextState = 0xDC;
shreeshas95 13:7b27a8e9cbb4 43 convStateList[15].nextState = 0xFE;
shreeshas95 13:7b27a8e9cbb4 44
shreeshas95 13:7b27a8e9cbb4 45 convStateList[0].output = 0x0A;
shreeshas95 13:7b27a8e9cbb4 46 convStateList[1].output = 0x06;
shreeshas95 13:7b27a8e9cbb4 47 convStateList[2].output = 0x06;
shreeshas95 13:7b27a8e9cbb4 48 convStateList[3].output = 0x0A;
shreeshas95 13:7b27a8e9cbb4 49 convStateList[4].output = 0x09;
shreeshas95 13:7b27a8e9cbb4 50 convStateList[5].output = 0x05;
shreeshas95 13:7b27a8e9cbb4 51 convStateList[6].output = 0x05;
shreeshas95 13:7b27a8e9cbb4 52 convStateList[7].output = 0x09;
shreeshas95 13:7b27a8e9cbb4 53 convStateList[8].output = 0x05;
shreeshas95 13:7b27a8e9cbb4 54 convStateList[9].output = 0x09;
shreeshas95 13:7b27a8e9cbb4 55 convStateList[10].output = 0x09;
shreeshas95 13:7b27a8e9cbb4 56 convStateList[11].output = 0x05;
shreeshas95 13:7b27a8e9cbb4 57 convStateList[12].output = 0x06;
shreeshas95 13:7b27a8e9cbb4 58 convStateList[13].output = 0x0A;
shreeshas95 13:7b27a8e9cbb4 59 convStateList[14].output = 0x0A;
shreeshas95 13:7b27a8e9cbb4 60 convStateList[15].output = 0x06;
shreeshas95 13:7b27a8e9cbb4 61 }
shreeshas95 13:7b27a8e9cbb4 62
shreeshas95 13:7b27a8e9cbb4 63
shreeshas95 13:7b27a8e9cbb4 64 /*
shreeshas95 13:7b27a8e9cbb4 65 @brief: convolution encode the input bytes : in sync with => (1-TM-Frame -> 2-T-Frame)
shreeshas95 13:7b27a8e9cbb4 66 @param: inPtr : pointer to input unsigned char array
shreeshas95 13:7b27a8e9cbb4 67 inLength : length in bytes of input array
shreeshas95 13:7b27a8e9cbb4 68 outPtr : pointer to the output bytes, define it outside the function
shreeshas95 13:7b27a8e9cbb4 69 outLength : length of output array in bytes [call by reference, edited inside the function]
shreeshas95 13:7b27a8e9cbb4 70 @return: none
shreeshas95 13:7b27a8e9cbb4 71 */
shreeshas95 13:7b27a8e9cbb4 72 void convolutionEncode(unsigned char *input, unsigned char *output){
shreeshas95 13:7b27a8e9cbb4 73
shreeshas95 13:7b27a8e9cbb4 74 // cout << "inside convolution" << endl;
shreeshas95 13:7b27a8e9cbb4 75
shreeshas95 13:7b27a8e9cbb4 76 unsigned int convState = 0;
shreeshas95 13:7b27a8e9cbb4 77
shreeshas95 13:7b27a8e9cbb4 78 int inBit = 7;
shreeshas95 13:7b27a8e9cbb4 79 unsigned int inByte = 0;
shreeshas95 13:7b27a8e9cbb4 80
shreeshas95 13:7b27a8e9cbb4 81 unsigned int outState = 0;
shreeshas95 13:7b27a8e9cbb4 82 unsigned int outByte = 0;
shreeshas95 13:7b27a8e9cbb4 83
shreeshas95 13:7b27a8e9cbb4 84 for(unsigned int j = 0 ; j < 536 ; ++j){
shreeshas95 13:7b27a8e9cbb4 85 // printf("j = %u, inByte = %u\n", j, inByte);
shreeshas95 13:7b27a8e9cbb4 86 // read a new bit from input stream
shreeshas95 13:7b27a8e9cbb4 87 // cout << "inByte " <<inByte;
shreeshas95 13:7b27a8e9cbb4 88 unsigned char tempBit = (input[inByte] >> inBit) & 1;
shreeshas95 13:7b27a8e9cbb4 89 --inBit;
shreeshas95 13:7b27a8e9cbb4 90
shreeshas95 13:7b27a8e9cbb4 91 // convolute and write output
shreeshas95 13:7b27a8e9cbb4 92 switch(outState){
shreeshas95 13:7b27a8e9cbb4 93 case 0:
shreeshas95 13:7b27a8e9cbb4 94 outState = 2;
shreeshas95 13:7b27a8e9cbb4 95 output[outByte] = ( (convStateList[convState].output >> tempBit) & 1 ) << 7;
shreeshas95 13:7b27a8e9cbb4 96 output[outByte] += ( (convStateList[convState].output >> (tempBit + 2)) & 1 ) << 6;
shreeshas95 13:7b27a8e9cbb4 97 break;
shreeshas95 13:7b27a8e9cbb4 98 case 2:
shreeshas95 13:7b27a8e9cbb4 99 outState = 4;
shreeshas95 13:7b27a8e9cbb4 100 output[outByte] += ( (convStateList[convState].output >> tempBit) & 1 ) << 5;
shreeshas95 13:7b27a8e9cbb4 101 output[outByte] += ( (convStateList[convState].output >> (tempBit + 2)) & 1 ) << 4;
shreeshas95 13:7b27a8e9cbb4 102 break;
shreeshas95 13:7b27a8e9cbb4 103 case 4:
shreeshas95 13:7b27a8e9cbb4 104 outState = 6;
shreeshas95 13:7b27a8e9cbb4 105 output[outByte] += ( (convStateList[convState].output >> tempBit) & 1 ) << 3;
shreeshas95 13:7b27a8e9cbb4 106 output[outByte] += ( (convStateList[convState].output >> (tempBit + 2)) & 1 ) << 2;
shreeshas95 13:7b27a8e9cbb4 107 break;
shreeshas95 13:7b27a8e9cbb4 108 case 6:
shreeshas95 13:7b27a8e9cbb4 109 outState = 0;
shreeshas95 13:7b27a8e9cbb4 110 output[outByte] += ( (convStateList[convState].output >> tempBit) & 1 ) << 1;
shreeshas95 13:7b27a8e9cbb4 111 output[outByte] += ( (convStateList[convState].output >> (tempBit + 2)) & 1 );
shreeshas95 13:7b27a8e9cbb4 112 ++outByte;
shreeshas95 13:7b27a8e9cbb4 113 output[outByte] = 0x00;
shreeshas95 13:7b27a8e9cbb4 114 break;
shreeshas95 13:7b27a8e9cbb4 115 }
shreeshas95 13:7b27a8e9cbb4 116
shreeshas95 13:7b27a8e9cbb4 117 // next state transition
shreeshas95 13:7b27a8e9cbb4 118 switch(tempBit){
shreeshas95 13:7b27a8e9cbb4 119 case 0:
shreeshas95 13:7b27a8e9cbb4 120 convState = (convStateList[convState].nextState) & 0xF;
shreeshas95 13:7b27a8e9cbb4 121 break;
shreeshas95 13:7b27a8e9cbb4 122 case 1:
shreeshas95 13:7b27a8e9cbb4 123 convState = (convStateList[convState].nextState >> 4) & 0xF;
shreeshas95 13:7b27a8e9cbb4 124 break;
shreeshas95 13:7b27a8e9cbb4 125 }
shreeshas95 13:7b27a8e9cbb4 126
shreeshas95 13:7b27a8e9cbb4 127 if(inBit == -1){
shreeshas95 13:7b27a8e9cbb4 128 // printf("in byte = %u\n", inByte);
shreeshas95 13:7b27a8e9cbb4 129 ++inByte;
shreeshas95 13:7b27a8e9cbb4 130 inBit = 7;
shreeshas95 13:7b27a8e9cbb4 131 }
shreeshas95 13:7b27a8e9cbb4 132
shreeshas95 13:7b27a8e9cbb4 133 }
shreeshas95 13:7b27a8e9cbb4 134
shreeshas95 13:7b27a8e9cbb4 135 // printf("normal iteration complete, outByte = %u\n", outByte);
shreeshas95 13:7b27a8e9cbb4 136
shreeshas95 13:7b27a8e9cbb4 137 for(unsigned int j = 0 ; j < 4 ; ++j){
shreeshas95 13:7b27a8e9cbb4 138 // printf("j = %u\n, outByte = %u\n", j, outByte);
shreeshas95 13:7b27a8e9cbb4 139 // append zero at the end
shreeshas95 13:7b27a8e9cbb4 140 switch(outState){
shreeshas95 13:7b27a8e9cbb4 141 case 0:
shreeshas95 13:7b27a8e9cbb4 142 outState = 2;
shreeshas95 13:7b27a8e9cbb4 143 output[outByte] = ( (convStateList[convState].output) & 1 ) << 7;
shreeshas95 13:7b27a8e9cbb4 144 output[outByte] += ( (convStateList[convState].output >> 2) & 1 ) << 6;
shreeshas95 13:7b27a8e9cbb4 145 break;
shreeshas95 13:7b27a8e9cbb4 146 case 2:
shreeshas95 13:7b27a8e9cbb4 147 outState = 4;
shreeshas95 13:7b27a8e9cbb4 148 output[outByte] += ( (convStateList[convState].output) & 1 ) << 5;
shreeshas95 13:7b27a8e9cbb4 149 output[outByte] += ( (convStateList[convState].output >> 2) & 1 ) << 4;
shreeshas95 13:7b27a8e9cbb4 150 break;
shreeshas95 13:7b27a8e9cbb4 151 case 4:
shreeshas95 13:7b27a8e9cbb4 152 outState = 6;
shreeshas95 13:7b27a8e9cbb4 153 output[outByte] += ( (convStateList[convState].output ) & 1 ) << 3;
shreeshas95 13:7b27a8e9cbb4 154 output[outByte] += ( (convStateList[convState].output >> 2) & 1 ) << 2;
shreeshas95 13:7b27a8e9cbb4 155 break;
shreeshas95 13:7b27a8e9cbb4 156 case 6:
shreeshas95 13:7b27a8e9cbb4 157 outState = 0;
shreeshas95 13:7b27a8e9cbb4 158 output[outByte] += ( (convStateList[convState].output ) & 1 ) << 1;
shreeshas95 13:7b27a8e9cbb4 159 output[outByte] += ( (convStateList[convState].output >> 2) & 1 );
shreeshas95 13:7b27a8e9cbb4 160 ++outByte;
shreeshas95 13:7b27a8e9cbb4 161 // printf("outByte @ end of switch = %u\n", outByte);
shreeshas95 13:7b27a8e9cbb4 162 break;
shreeshas95 13:7b27a8e9cbb4 163 }
shreeshas95 13:7b27a8e9cbb4 164 // next state transition
shreeshas95 13:7b27a8e9cbb4 165 convState = (convStateList[convState].nextState) & 0xF;
shreeshas95 13:7b27a8e9cbb4 166 }
shreeshas95 13:7b27a8e9cbb4 167 // printf("complete\n");
shreeshas95 13:7b27a8e9cbb4 168 }
shreeshas95 13:7b27a8e9cbb4 169
shreeshas95 13:7b27a8e9cbb4 170 };