Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:ecb5de3a3147, 2021-04-02 (annotated)
- Committer:
- mohamedwajdi
- Date:
- Fri Apr 02 10:38:15 2021 +0000
- Revision:
- 0:ecb5de3a3147
- Child:
- 1:fcdfb51a34c8
TP3 RBT 2GII Ex2
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| mohamedwajdi | 0:ecb5de3a3147 | 1 | #include "mbed.h" |
| mohamedwajdi | 0:ecb5de3a3147 | 2 | #include "mb.h" |
| mohamedwajdi | 0:ecb5de3a3147 | 3 | |
| mohamedwajdi | 0:ecb5de3a3147 | 4 | #define BITS_OUT_START 0x1001 //Bits de sorties (fonctions 1 et 5) |
| mohamedwajdi | 0:ecb5de3a3147 | 5 | #define BITS_OUT_NBITS 16 |
| mohamedwajdi | 0:ecb5de3a3147 | 6 | #define BITS_OUT_BYTES BITS_OUT_NBITS/8 //16/8 = 2 octets |
| mohamedwajdi | 0:ecb5de3a3147 | 7 | |
| mohamedwajdi | 0:ecb5de3a3147 | 8 | #define BITS_IN_START 0x2001 //Bits d'entées (fonction 2) |
| mohamedwajdi | 0:ecb5de3a3147 | 9 | #define BITS_IN_NBITS 16 |
| mohamedwajdi | 0:ecb5de3a3147 | 10 | #define BITS_IN_BYTES BITS_IN_NBITS/8 //16/8 = 2 octets |
| mohamedwajdi | 0:ecb5de3a3147 | 11 | |
| mohamedwajdi | 0:ecb5de3a3147 | 12 | #define REG_OUT_START 0x3001 //Registres de sorties (fonctions 3 et 6) |
| mohamedwajdi | 0:ecb5de3a3147 | 13 | #define REG_OUT_NREGS 4 |
| mohamedwajdi | 0:ecb5de3a3147 | 14 | |
| mohamedwajdi | 0:ecb5de3a3147 | 15 | #define REG_IN_START 0x4001 //Registres d'entées (fonction 4) |
| mohamedwajdi | 0:ecb5de3a3147 | 16 | #define REG_IN_NREGS 4 |
| mohamedwajdi | 0:ecb5de3a3147 | 17 | |
| mohamedwajdi | 0:ecb5de3a3147 | 18 | #define SLAVE_ID 0x07 |
| mohamedwajdi | 0:ecb5de3a3147 | 19 | |
| mohamedwajdi | 0:ecb5de3a3147 | 20 | static USHORT BitsOutStart = BITS_OUT_START; // (fonctions 1 et 5) |
| mohamedwajdi | 0:ecb5de3a3147 | 21 | static UCHAR BitsOut[BITS_OUT_BYTES] = {0xA5,0x5A}; |
| mohamedwajdi | 0:ecb5de3a3147 | 22 | static USHORT BitsInStart = BITS_IN_START; // (fonction 2) |
| mohamedwajdi | 0:ecb5de3a3147 | 23 | static UCHAR BitsIn[BITS_IN_BYTES] = {0x3C,0xC3}; |
| mohamedwajdi | 0:ecb5de3a3147 | 24 | static USHORT RegOutStart = REG_OUT_START; // (fonctions 3 et 6) |
| mohamedwajdi | 0:ecb5de3a3147 | 25 | static USHORT RegOut[REG_OUT_NREGS] = {0x0123,0x4567,0x89AB,0xCDEF}; |
| mohamedwajdi | 0:ecb5de3a3147 | 26 | static USHORT RegInStart = REG_IN_START; // (fonction 4) |
| mohamedwajdi | 0:ecb5de3a3147 | 27 | static USHORT RegIn[REG_IN_NREGS] = {0x1122,0x3344,0x5566,0x7788}; |
| mohamedwajdi | 0:ecb5de3a3147 | 28 | |
| mohamedwajdi | 0:ecb5de3a3147 | 29 | int main() { |
| mohamedwajdi | 0:ecb5de3a3147 | 30 | eMBInit( MB_RTU, SLAVE_ID, 0, 9600, MB_PAR_NONE ); |
| mohamedwajdi | 0:ecb5de3a3147 | 31 | eMBEnable(); |
| mohamedwajdi | 0:ecb5de3a3147 | 32 | |
| mohamedwajdi | 0:ecb5de3a3147 | 33 | PwmOut moteur(PB_11); |
| mohamedwajdi | 0:ecb5de3a3147 | 34 | PwmOut Led1(PB_10); |
| mohamedwajdi | 0:ecb5de3a3147 | 35 | AnalogIn Pot(PA_0); |
| mohamedwajdi | 0:ecb5de3a3147 | 36 | DigitalIn BP1(PA_8,PullUp); |
| mohamedwajdi | 0:ecb5de3a3147 | 37 | DigitalIn BP2(PB_12,PullUp); |
| mohamedwajdi | 0:ecb5de3a3147 | 38 | DigitalOut Led2(PB_8); |
| mohamedwajdi | 0:ecb5de3a3147 | 39 | float Rap_Cyc=0; |
| mohamedwajdi | 0:ecb5de3a3147 | 40 | |
| mohamedwajdi | 0:ecb5de3a3147 | 41 | moteur.period_ms(.....); |
| mohamedwajdi | 0:ecb5de3a3147 | 42 | Rap_Cyc=0; |
| mohamedwajdi | 0:ecb5de3a3147 | 43 | RegOut[0]=0; |
| mohamedwajdi | 0:ecb5de3a3147 | 44 | while(1) { |
| mohamedwajdi | 0:ecb5de3a3147 | 45 | //**** 1 ****// |
| mohamedwajdi | 0:ecb5de3a3147 | 46 | eMBPoll(); |
| mohamedwajdi | 0:ecb5de3a3147 | 47 | //**** 2 ****// |
| mohamedwajdi | 0:ecb5de3a3147 | 48 | if(BitsOut[0] & 0x01) Led2=......; |
| mohamedwajdi | 0:ecb5de3a3147 | 49 | else Led2=.......; |
| mohamedwajdi | 0:ecb5de3a3147 | 50 | Rap_Cyc = ................/100.0; |
| mohamedwajdi | 0:ecb5de3a3147 | 51 | //**** 3 ****// |
| mohamedwajdi | 0:ecb5de3a3147 | 52 | if(!BP1 && Rap_Cyc <......) { |
| mohamedwajdi | 0:ecb5de3a3147 | 53 | Rap_Cyc = Rap_Cyc + .........; |
| mohamedwajdi | 0:ecb5de3a3147 | 54 | moteur = Rap_Cyc; |
| mohamedwajdi | 0:ecb5de3a3147 | 55 | wait(0.5); |
| mohamedwajdi | 0:ecb5de3a3147 | 56 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 57 | if(!BP1 && Rap_Cyc > ........){ |
| mohamedwajdi | 0:ecb5de3a3147 | 58 | Rap_Cyc = Rap_Cyc - ........; |
| mohamedwajdi | 0:ecb5de3a3147 | 59 | moteur = Rap_Cyc; |
| mohamedwajdi | 0:ecb5de3a3147 | 60 | wait(0.5); |
| mohamedwajdi | 0:ecb5de3a3147 | 61 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 62 | Led1 = ..................; |
| mohamedwajdi | 0:ecb5de3a3147 | 63 | //**** 4 ****// |
| mohamedwajdi | 0:ecb5de3a3147 | 64 | RegOut[0] = Rap_Cyc * ........; |
| mohamedwajdi | 0:ecb5de3a3147 | 65 | RegOut[1] = Pot.read() * .......; |
| mohamedwajdi | 0:ecb5de3a3147 | 66 | //**** 5 ****// |
| mohamedwajdi | 0:ecb5de3a3147 | 67 | if(!BP1) BitsIn[0] &=......; |
| mohamedwajdi | 0:ecb5de3a3147 | 68 | else BitsIn[0] |=......; |
| mohamedwajdi | 0:ecb5de3a3147 | 69 | if(!BP2) BitsIn[0] &=......; |
| mohamedwajdi | 0:ecb5de3a3147 | 70 | else BitsIn[0] |=......; |
| mohamedwajdi | 0:ecb5de3a3147 | 71 | RegIn[0] = ....................; |
| mohamedwajdi | 0:ecb5de3a3147 | 72 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 73 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 74 | |
| mohamedwajdi | 0:ecb5de3a3147 | 75 | |
| mohamedwajdi | 0:ecb5de3a3147 | 76 | |
| mohamedwajdi | 0:ecb5de3a3147 | 77 | |
| mohamedwajdi | 0:ecb5de3a3147 | 78 | |
| mohamedwajdi | 0:ecb5de3a3147 | 79 | |
| mohamedwajdi | 0:ecb5de3a3147 | 80 | |
| mohamedwajdi | 0:ecb5de3a3147 | 81 | |
| mohamedwajdi | 0:ecb5de3a3147 | 82 | |
| mohamedwajdi | 0:ecb5de3a3147 | 83 | |
| mohamedwajdi | 0:ecb5de3a3147 | 84 | |
| mohamedwajdi | 0:ecb5de3a3147 | 85 | |
| mohamedwajdi | 0:ecb5de3a3147 | 86 | |
| mohamedwajdi | 0:ecb5de3a3147 | 87 | |
| mohamedwajdi | 0:ecb5de3a3147 | 88 | |
| mohamedwajdi | 0:ecb5de3a3147 | 89 | |
| mohamedwajdi | 0:ecb5de3a3147 | 90 | |
| mohamedwajdi | 0:ecb5de3a3147 | 91 | |
| mohamedwajdi | 0:ecb5de3a3147 | 92 | |
| mohamedwajdi | 0:ecb5de3a3147 | 93 | |
| mohamedwajdi | 0:ecb5de3a3147 | 94 | |
| mohamedwajdi | 0:ecb5de3a3147 | 95 | |
| mohamedwajdi | 0:ecb5de3a3147 | 96 | |
| mohamedwajdi | 0:ecb5de3a3147 | 97 | |
| mohamedwajdi | 0:ecb5de3a3147 | 98 | |
| mohamedwajdi | 0:ecb5de3a3147 | 99 | |
| mohamedwajdi | 0:ecb5de3a3147 | 100 | |
| mohamedwajdi | 0:ecb5de3a3147 | 101 | |
| mohamedwajdi | 0:ecb5de3a3147 | 102 | |
| mohamedwajdi | 0:ecb5de3a3147 | 103 | |
| mohamedwajdi | 0:ecb5de3a3147 | 104 | |
| mohamedwajdi | 0:ecb5de3a3147 | 105 | |
| mohamedwajdi | 0:ecb5de3a3147 | 106 | |
| mohamedwajdi | 0:ecb5de3a3147 | 107 | |
| mohamedwajdi | 0:ecb5de3a3147 | 108 | // Procedure résevée pour les bits de sorties (Foction 1 et 5) |
| mohamedwajdi | 0:ecb5de3a3147 | 109 | // pucRegBuffer => coils buffer usAddress => coils address |
| mohamedwajdi | 0:ecb5de3a3147 | 110 | // usNCoils => coils number eMode => read or write |
| mohamedwajdi | 0:ecb5de3a3147 | 111 | eMBErrorCode |
| mohamedwajdi | 0:ecb5de3a3147 | 112 | eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode ) |
| mohamedwajdi | 0:ecb5de3a3147 | 113 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 114 | eMBErrorCode eStatus = MB_ENOERR; |
| mohamedwajdi | 0:ecb5de3a3147 | 115 | int iIntRegIndex; |
| mohamedwajdi | 0:ecb5de3a3147 | 116 | int iIntBufNum; |
| mohamedwajdi | 0:ecb5de3a3147 | 117 | int iIntBitNum; |
| mohamedwajdi | 0:ecb5de3a3147 | 118 | int iExtRegIndex=0; |
| mohamedwajdi | 0:ecb5de3a3147 | 119 | int iExtBufNum; |
| mohamedwajdi | 0:ecb5de3a3147 | 120 | int iExtBitNum; |
| mohamedwajdi | 0:ecb5de3a3147 | 121 | UCHAR ucTemp; |
| mohamedwajdi | 0:ecb5de3a3147 | 122 | if( ( usAddress >= BITS_OUT_START ) |
| mohamedwajdi | 0:ecb5de3a3147 | 123 | && ( usAddress + usNCoils <= BITS_OUT_START + BITS_OUT_NBITS ) ) |
| mohamedwajdi | 0:ecb5de3a3147 | 124 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 125 | iIntRegIndex = ( int )( usAddress - BitsOutStart ); |
| mohamedwajdi | 0:ecb5de3a3147 | 126 | |
| mohamedwajdi | 0:ecb5de3a3147 | 127 | while( usNCoils > 0 ) |
| mohamedwajdi | 0:ecb5de3a3147 | 128 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 129 | iIntBufNum=iIntRegIndex/8; |
| mohamedwajdi | 0:ecb5de3a3147 | 130 | iIntBitNum=iIntRegIndex%8; |
| mohamedwajdi | 0:ecb5de3a3147 | 131 | iExtBufNum=iExtRegIndex/8; |
| mohamedwajdi | 0:ecb5de3a3147 | 132 | iExtBitNum=iExtRegIndex%8; |
| mohamedwajdi | 0:ecb5de3a3147 | 133 | |
| mohamedwajdi | 0:ecb5de3a3147 | 134 | switch ( eMode ) |
| mohamedwajdi | 0:ecb5de3a3147 | 135 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 136 | case MB_REG_READ: |
| mohamedwajdi | 0:ecb5de3a3147 | 137 | // Read coils |
| mohamedwajdi | 0:ecb5de3a3147 | 138 | if(iExtBitNum==0){ |
| mohamedwajdi | 0:ecb5de3a3147 | 139 | pucRegBuffer[iExtBufNum]=0; |
| mohamedwajdi | 0:ecb5de3a3147 | 140 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 141 | ucTemp=(BitsOut[iIntBufNum]>>iIntBitNum) & 1; |
| mohamedwajdi | 0:ecb5de3a3147 | 142 | pucRegBuffer[iExtBufNum]|=ucTemp<<iExtBitNum; |
| mohamedwajdi | 0:ecb5de3a3147 | 143 | break; |
| mohamedwajdi | 0:ecb5de3a3147 | 144 | |
| mohamedwajdi | 0:ecb5de3a3147 | 145 | case MB_REG_WRITE: |
| mohamedwajdi | 0:ecb5de3a3147 | 146 | // Write coils |
| mohamedwajdi | 0:ecb5de3a3147 | 147 | ucTemp=BitsOut[iIntBufNum]&(~(1<<iIntBitNum)); |
| mohamedwajdi | 0:ecb5de3a3147 | 148 | ucTemp|=((pucRegBuffer[iExtBufNum]>>iExtBitNum) & 1)<<iIntBitNum; |
| mohamedwajdi | 0:ecb5de3a3147 | 149 | BitsOut[iIntBufNum]=ucTemp; |
| mohamedwajdi | 0:ecb5de3a3147 | 150 | break; |
| mohamedwajdi | 0:ecb5de3a3147 | 151 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 152 | iIntRegIndex++; |
| mohamedwajdi | 0:ecb5de3a3147 | 153 | iExtRegIndex++; |
| mohamedwajdi | 0:ecb5de3a3147 | 154 | usNCoils--; |
| mohamedwajdi | 0:ecb5de3a3147 | 155 | |
| mohamedwajdi | 0:ecb5de3a3147 | 156 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 157 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 158 | else |
| mohamedwajdi | 0:ecb5de3a3147 | 159 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 160 | eStatus = MB_ENOREG; |
| mohamedwajdi | 0:ecb5de3a3147 | 161 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 162 | return eStatus; |
| mohamedwajdi | 0:ecb5de3a3147 | 163 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 164 | |
| mohamedwajdi | 0:ecb5de3a3147 | 165 | // Procedure résevée pour les bits d'entrées (Foction 2) |
| mohamedwajdi | 0:ecb5de3a3147 | 166 | // pucRegBuffer => discrete buffer usAddress => discrete address |
| mohamedwajdi | 0:ecb5de3a3147 | 167 | // usNDiscrete => discrete number |
| mohamedwajdi | 0:ecb5de3a3147 | 168 | eMBErrorCode |
| mohamedwajdi | 0:ecb5de3a3147 | 169 | eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete ) |
| mohamedwajdi | 0:ecb5de3a3147 | 170 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 171 | eMBErrorCode eStatus = MB_ENOERR; |
| mohamedwajdi | 0:ecb5de3a3147 | 172 | int iIntRegIndex; |
| mohamedwajdi | 0:ecb5de3a3147 | 173 | int iIntBufNum; |
| mohamedwajdi | 0:ecb5de3a3147 | 174 | int iIntBitNum; |
| mohamedwajdi | 0:ecb5de3a3147 | 175 | int iExtRegIndex=0; |
| mohamedwajdi | 0:ecb5de3a3147 | 176 | int iExtBufNum; |
| mohamedwajdi | 0:ecb5de3a3147 | 177 | int iExtBitNum; |
| mohamedwajdi | 0:ecb5de3a3147 | 178 | UCHAR ucTemp; |
| mohamedwajdi | 0:ecb5de3a3147 | 179 | if( ( usAddress >= BITS_IN_START ) |
| mohamedwajdi | 0:ecb5de3a3147 | 180 | && ( usAddress + usNDiscrete <= BITS_IN_START + BITS_IN_NBITS ) ) |
| mohamedwajdi | 0:ecb5de3a3147 | 181 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 182 | iIntRegIndex = ( int )( usAddress - BitsInStart ); |
| mohamedwajdi | 0:ecb5de3a3147 | 183 | |
| mohamedwajdi | 0:ecb5de3a3147 | 184 | while( usNDiscrete > 0 ) |
| mohamedwajdi | 0:ecb5de3a3147 | 185 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 186 | iIntBufNum=iIntRegIndex/8; |
| mohamedwajdi | 0:ecb5de3a3147 | 187 | iIntBitNum=iIntRegIndex%8; |
| mohamedwajdi | 0:ecb5de3a3147 | 188 | iExtBufNum=iExtRegIndex/8; |
| mohamedwajdi | 0:ecb5de3a3147 | 189 | iExtBitNum=iExtRegIndex%8; |
| mohamedwajdi | 0:ecb5de3a3147 | 190 | |
| mohamedwajdi | 0:ecb5de3a3147 | 191 | // Read discrete inputs |
| mohamedwajdi | 0:ecb5de3a3147 | 192 | if(iExtBitNum==0){ |
| mohamedwajdi | 0:ecb5de3a3147 | 193 | pucRegBuffer[iExtBufNum]=0; |
| mohamedwajdi | 0:ecb5de3a3147 | 194 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 195 | ucTemp=(BitsIn[iIntBufNum]>>iIntBitNum) & 1; |
| mohamedwajdi | 0:ecb5de3a3147 | 196 | pucRegBuffer[iExtBufNum]|=ucTemp<<iExtBitNum; |
| mohamedwajdi | 0:ecb5de3a3147 | 197 | |
| mohamedwajdi | 0:ecb5de3a3147 | 198 | iIntRegIndex++; |
| mohamedwajdi | 0:ecb5de3a3147 | 199 | iExtRegIndex++; |
| mohamedwajdi | 0:ecb5de3a3147 | 200 | usNDiscrete--; |
| mohamedwajdi | 0:ecb5de3a3147 | 201 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 202 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 203 | else |
| mohamedwajdi | 0:ecb5de3a3147 | 204 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 205 | eStatus = MB_ENOREG; |
| mohamedwajdi | 0:ecb5de3a3147 | 206 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 207 | return eStatus; |
| mohamedwajdi | 0:ecb5de3a3147 | 208 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 209 | |
| mohamedwajdi | 0:ecb5de3a3147 | 210 | // Procedure résevée pour les registres de sorties (Foction 3 et 6) |
| mohamedwajdi | 0:ecb5de3a3147 | 211 | // pucRegBuffer => holding register buffer usAddress holding => register address |
| mohamedwajdi | 0:ecb5de3a3147 | 212 | // usNRegs holding register number eMode => read or write |
| mohamedwajdi | 0:ecb5de3a3147 | 213 | eMBErrorCode |
| mohamedwajdi | 0:ecb5de3a3147 | 214 | eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode ) |
| mohamedwajdi | 0:ecb5de3a3147 | 215 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 216 | eMBErrorCode eStatus = MB_ENOERR; |
| mohamedwajdi | 0:ecb5de3a3147 | 217 | int iRegIndex; |
| mohamedwajdi | 0:ecb5de3a3147 | 218 | |
| mohamedwajdi | 0:ecb5de3a3147 | 219 | if( ( usAddress >= REG_OUT_START ) && |
| mohamedwajdi | 0:ecb5de3a3147 | 220 | ( usAddress + usNRegs <= REG_OUT_START + REG_OUT_NREGS ) ) |
| mohamedwajdi | 0:ecb5de3a3147 | 221 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 222 | iRegIndex = ( int )( usAddress - RegOutStart ); |
| mohamedwajdi | 0:ecb5de3a3147 | 223 | switch ( eMode ) |
| mohamedwajdi | 0:ecb5de3a3147 | 224 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 225 | //*** Pass current register values to the protocol stack. *** |
| mohamedwajdi | 0:ecb5de3a3147 | 226 | case MB_REG_READ: |
| mohamedwajdi | 0:ecb5de3a3147 | 227 | while( usNRegs > 0 ) |
| mohamedwajdi | 0:ecb5de3a3147 | 228 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 229 | *pucRegBuffer++ = ( UCHAR ) ( RegOut[iRegIndex] >> 8 ); |
| mohamedwajdi | 0:ecb5de3a3147 | 230 | *pucRegBuffer++ = ( UCHAR ) ( RegOut[iRegIndex] & 0xFF ); |
| mohamedwajdi | 0:ecb5de3a3147 | 231 | iRegIndex++; |
| mohamedwajdi | 0:ecb5de3a3147 | 232 | usNRegs--; |
| mohamedwajdi | 0:ecb5de3a3147 | 233 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 234 | break; |
| mohamedwajdi | 0:ecb5de3a3147 | 235 | |
| mohamedwajdi | 0:ecb5de3a3147 | 236 | //***Update current register values with new values from the protocol stack.*** |
| mohamedwajdi | 0:ecb5de3a3147 | 237 | case MB_REG_WRITE: |
| mohamedwajdi | 0:ecb5de3a3147 | 238 | while( usNRegs > 0 ) |
| mohamedwajdi | 0:ecb5de3a3147 | 239 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 240 | RegOut[iRegIndex] = *pucRegBuffer++ << 8; |
| mohamedwajdi | 0:ecb5de3a3147 | 241 | RegOut[iRegIndex] |= *pucRegBuffer++; |
| mohamedwajdi | 0:ecb5de3a3147 | 242 | iRegIndex++; |
| mohamedwajdi | 0:ecb5de3a3147 | 243 | usNRegs--; |
| mohamedwajdi | 0:ecb5de3a3147 | 244 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 245 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 246 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 247 | else |
| mohamedwajdi | 0:ecb5de3a3147 | 248 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 249 | eStatus = MB_ENOREG; |
| mohamedwajdi | 0:ecb5de3a3147 | 250 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 251 | return eStatus; |
| mohamedwajdi | 0:ecb5de3a3147 | 252 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 253 | // Procedure résevée pour les registres de sorties (Foction 4) |
| mohamedwajdi | 0:ecb5de3a3147 | 254 | // pucRegBuffer => input register buffer usAddress => input register address |
| mohamedwajdi | 0:ecb5de3a3147 | 255 | // usNRegs input register number |
| mohamedwajdi | 0:ecb5de3a3147 | 256 | eMBErrorCode |
| mohamedwajdi | 0:ecb5de3a3147 | 257 | eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs ) |
| mohamedwajdi | 0:ecb5de3a3147 | 258 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 259 | eMBErrorCode eStatus = MB_ENOERR; |
| mohamedwajdi | 0:ecb5de3a3147 | 260 | int iRegIndex; |
| mohamedwajdi | 0:ecb5de3a3147 | 261 | |
| mohamedwajdi | 0:ecb5de3a3147 | 262 | if( ( usAddress >= REG_IN_START ) |
| mohamedwajdi | 0:ecb5de3a3147 | 263 | && ( usAddress + usNRegs <= REG_IN_START + REG_IN_NREGS ) ) |
| mohamedwajdi | 0:ecb5de3a3147 | 264 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 265 | iRegIndex = ( int )( usAddress - RegInStart ); |
| mohamedwajdi | 0:ecb5de3a3147 | 266 | while( usNRegs > 0 ) |
| mohamedwajdi | 0:ecb5de3a3147 | 267 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 268 | *pucRegBuffer++ = ( unsigned char )( RegIn[iRegIndex] >> 8 ); |
| mohamedwajdi | 0:ecb5de3a3147 | 269 | *pucRegBuffer++ = ( unsigned char )( RegIn[iRegIndex] & 0xFF ); |
| mohamedwajdi | 0:ecb5de3a3147 | 270 | iRegIndex++; |
| mohamedwajdi | 0:ecb5de3a3147 | 271 | usNRegs--; |
| mohamedwajdi | 0:ecb5de3a3147 | 272 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 273 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 274 | else |
| mohamedwajdi | 0:ecb5de3a3147 | 275 | { |
| mohamedwajdi | 0:ecb5de3a3147 | 276 | eStatus = MB_ENOREG; |
| mohamedwajdi | 0:ecb5de3a3147 | 277 | } |
| mohamedwajdi | 0:ecb5de3a3147 | 278 | return eStatus; |
| mohamedwajdi | 0:ecb5de3a3147 | 279 | } |