diff options
| -rw-r--r-- | ibus.c | 15 | ||||
| -rw-r--r-- | ibus.h | 5 |
2 files changed, 11 insertions, 9 deletions
@@ -1,15 +1,16 @@ #include "ibus.h" -uint16_t CRC16Gen(*IBusFrame frame){ - uint16_t checksum = 0xFFFF; - for (int i = 2; i < frame[0]-2; i++) { - checksum -= ibusPacket[i]; +uint16_t CRC16Gen(IBusFrame frame){ + uint16_t checksum = 0x0; + for (int i = 0; i < frame[0]-2; i++) { + checksum += frame[i]; } + checksum = 0xFFFF - checksum; return checksum; } -int encodeIBus(*IBusFrame frame, *channelValues vals){ +int encodeIBus(IBusFrame frame, channelValues vals){ *frame=IBusSize; *(frame+1)=startByteBeta; for (int i=0; i<channelC*2; i++){ @@ -19,8 +20,8 @@ int encodeIBus(*IBusFrame frame, *channelValues vals){ *(frame+i+2)=(uint8_t) (*(vals+(i/2)) & 0xFF); } uint16_t checksum=CRC16Gen(frame); - *(frame+frame[0]-2)=(uint8_t)(checksum & 0xFF) - *(frame+frame[0]-1)=(uint8_t)(checksum>>8) + *(frame+frame[0]-2)=(uint8_t)(checksum & 0xFF); + *(frame+frame[0]-1)=(uint8_t)(checksum>>8); } @@ -8,6 +8,7 @@ #define IBusSize 0x20 #define startByteBeta 0x40 -typedef uint8_t[IBusSize] IBusFrame -typedef uint16_t[15] channelValues +typedef uint8_t IBusFrame[IBusSize]; +typedef uint16_t channelValues[15]; +int encodeIBus(IBusFrame frame, channelValues vals); #endif |
