#include #include #include #include #include uint8_t bcdPlusConvert(uint8_t raw) { switch( raw ) { default: printf("Illegal or reserved BCD PLUS byte 0x%02x\n", raw); case 0: return '0'; case 1: return '1'; break; case 2: return '2'; break; case 3: return '3'; break; case 4: return '4'; break; case 5: return '5'; break; case 6: return '6'; break; case 7: return '7'; break; case 8: return '8'; break; case 9: return '9'; break; case 0xA: return ' '; break; case 0xB: return '-'; break; case 0xC: return '.'; break; } } void sixBitAsciiConvert(uint8_t *input, uint8_t *output, uint8_t n_input, uint8_t n_output) { int i = 0, j = 0; while( 1 ) { output[i++] = (input[j*3 + 0] & 0x3F) + 0x20; if ( i >= n_output) break; output[i++] = (((input[j*3 + 0] & 0xC0) >> 6) | ((input[j*3 + 1] & 0xF) << 2)) + 0x20; if ( i >= n_output) break; output[i++] = (((input[j*3 + 1] & 0xF0) >> 4) | ((input[j*3 + 2] & 0x3) << 4)) + 0x20; if ( i >= n_output) break; output[i++] = ((input[j*3 + 2] & 0xFC) >> 2) + 0x20; if ( i >= n_output) break; j++; } }