v2.0 working

Dependencies:   mbed

Committer:
krishanprajapat
Date:
Thu Jul 30 12:39:50 2015 +0000
Revision:
2:2b08032d9678
Parent:
0:8ed3ad791ca2
read from sd card and send to adf working;

Who changed what in which revision?

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