_cdebbuf *capi_message2str(u8 * msg) { _cdebbuf *cdb; _cmsg *cmsg; cdb = cdebbuf_alloc(); if (unlikely(!cdb)) return NULL; if (likely(cdb == g_debbuf)) cmsg = g_cmsg; else cmsg = kmalloc(sizeof(_cmsg), GFP_ATOMIC); if (unlikely(!cmsg)) { cdebbuf_free(cdb); return NULL; } cmsg->m = msg; cmsg->l = 8; cmsg->p = 0; byteTRcpy(cmsg->m + 4, &cmsg->Command); byteTRcpy(cmsg->m + 5, &cmsg->Subcommand); cmsg->par = cpars[command_2_index(cmsg->Command, cmsg->Subcommand)]; cdb = bufprint(cdb, "%-26s ID=%03d #0x%04x LEN=%04d\n", mnames[command_2_index(cmsg->Command, cmsg->Subcommand)], ((unsigned short *) msg)[1], ((unsigned short *) msg)[3], ((unsigned short *) msg)[0]); cdb = protocol_message_2_pars(cdb, cmsg, 1); if (unlikely(cmsg != g_cmsg)) kfree(cmsg); return cdb; }
static _cdebbuf *protocol_message_2_pars(_cdebbuf *cdb, _cmsg *cmsg, int level) { for (; TYP != _CEND; cmsg->p++) { int slen = 29 + 3 - level; int i; if (!cdb) return NULL; cdb = bufprint(cdb, " "); for (i = 0; i < level - 1; i++) cdb = bufprint(cdb, " "); switch (TYP) { case _CBYTE: cdb = bufprint(cdb, "%-*s = 0x%x\n", slen, NAME, *(u8 *) (cmsg->m + cmsg->l)); cmsg->l++; break; case _CWORD: cdb = bufprint(cdb, "%-*s = 0x%x\n", slen, NAME, *(u16 *) (cmsg->m + cmsg->l)); cmsg->l += 2; break; case _CDWORD: cdb = bufprint(cdb, "%-*s = 0x%lx\n", slen, NAME, *(u32 *) (cmsg->m + cmsg->l)); cmsg->l += 4; break; case _CSTRUCT: cdb = bufprint(cdb, "%-*s = ", slen, NAME); if (cmsg->m[cmsg->l] == '\0') cdb = bufprint(cdb, "default"); else cdb = printstruct(cdb, cmsg->m + cmsg->l); cdb = bufprint(cdb, "\n"); if (cmsg->m[cmsg->l] != 0xff) cmsg->l += 1 + cmsg->m[cmsg->l]; else cmsg->l += 3 + *(u16 *) (cmsg->m + cmsg->l + 1); break; case _CMSTRUCT: if (cmsg->m[cmsg->l] == '\0') { cdb = bufprint(cdb, "%-*s = default\n", slen, NAME); cmsg->l++; jumpcstruct(cmsg); } else { char *name = NAME; unsigned _l = cmsg->l; cdb = bufprint(cdb, "%-*s\n", slen, name); cmsg->l = (cmsg->m + _l)[0] == 255 ? cmsg->l + 3 : cmsg->l + 1; cmsg->p++; cdb = protocol_message_2_pars(cdb, cmsg, level + 1); } break; } } return cdb; }
static void protocol_message_2_pars(_cmsg * cmsg, int level) { for (; TYP != _CEND; cmsg->p++) { int slen = 29 + 3 - level; int i; bufprint(" "); for (i = 0; i < level - 1; i++) bufprint(" "); switch (TYP) { case _CBYTE: bufprint("%-*s = 0x%x\n", slen, NAME, *(__u8 *) (cmsg->m + cmsg->l)); cmsg->l++; break; case _CWORD: bufprint("%-*s = 0x%x\n", slen, NAME, *(__u16 *) (cmsg->m + cmsg->l)); cmsg->l += 2; break; case _CDWORD: bufprint("%-*s = 0x%lx\n", slen, NAME, *(__u32 *) (cmsg->m + cmsg->l)); cmsg->l += 4; break; case _CSTRUCT: bufprint("%-*s = ", slen, NAME); if (cmsg->m[cmsg->l] == '\0') bufprint("default"); else printstruct(cmsg->m + cmsg->l); bufprint("\n"); if (cmsg->m[cmsg->l] != 0xff) cmsg->l += 1 + cmsg->m[cmsg->l]; else cmsg->l += 3 + *(__u16 *) (cmsg->m + cmsg->l + 1); break; case _CMSTRUCT: /*----- Metastruktur 0 -----*/ if (cmsg->m[cmsg->l] == '\0') { bufprint("%-*s = default\n", slen, NAME); cmsg->l++; jumpcstruct(cmsg); } else { char *name = NAME; unsigned _l = cmsg->l; bufprint("%-*s\n", slen, name); cmsg->l = (cmsg->m + _l)[0] == 255 ? cmsg->l + 3 : cmsg->l + 1; cmsg->p++; protocol_message_2_pars(cmsg, level + 1); } break; } } }
char *capi_cmsg2str(_cmsg * cmsg) { p = buf; p[0] = 0; cmsg->l = 8; cmsg->p = 0; bufprint("%s ID=%03d #0x%04x LEN=%04d\n", mnames[command_2_index(cmsg->Command, cmsg->Subcommand)], ((__u16 *) cmsg->m)[1], ((__u16 *) cmsg->m)[3], ((__u16 *) cmsg->m)[0]); protocol_message_2_pars(cmsg, 1); return buf; }
_cdebbuf *capi_cmsg2str(_cmsg * cmsg) { _cdebbuf *cdb; cdb = cdebbuf_alloc(); if (!cdb) return NULL; cmsg->l = 8; cmsg->p = 0; cdb = bufprint(cdb, "%s ID=%03d #0x%04x LEN=%04d\n", mnames[command_2_index(cmsg->Command, cmsg->Subcommand)], ((u16 *) cmsg->m)[1], ((u16 *) cmsg->m)[3], ((u16 *) cmsg->m)[0]); cdb = protocol_message_2_pars(cdb, cmsg, 1); return cdb; }
/*-------------------------------------------------------*/ char *capi_message2str(__u8 * msg) { _cmsg cmsg; p = buf; p[0] = 0; cmsg.m = msg; cmsg.l = 8; cmsg.p = 0; byteTRcpy(cmsg.m + 4, &cmsg.Command); byteTRcpy(cmsg.m + 5, &cmsg.Subcommand); cmsg.par = cpars[command_2_index(cmsg.Command, cmsg.Subcommand)]; bufprint("%-26s ID=%03d #0x%04x LEN=%04d\n", mnames[command_2_index(cmsg.Command, cmsg.Subcommand)], ((unsigned short *) msg)[1], ((unsigned short *) msg)[3], ((unsigned short *) msg)[0]); protocol_message_2_pars(&cmsg, 1); return buf; }