kdb_type.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /*
  2. * Copyright (c) 2006-2020, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2020-06-09 tyx first version.
  9. */
  10. #include "kdb_type.h"
  11. static struct kdb_type tab[KDB_TYPE_NUM];
  12. static struct kdb_type *_type_find(rt_uint16_t type)
  13. {
  14. int i = 0;
  15. for (i = 0; i < KDB_TYPE_NUM; i++)
  16. {
  17. if (tab[i].type == type)
  18. return &tab[i];
  19. }
  20. return RT_NULL;
  21. }
  22. rt_err_t kdb_type_register(rt_uint16_t type, kdb_dump_t dump)
  23. {
  24. int i = 0;
  25. struct kdb_type *t = RT_NULL;
  26. for (i = 0; i < KDB_TYPE_NUM; i++)
  27. {
  28. if (tab[i].type == type)
  29. {
  30. t = &tab[i];
  31. break;
  32. }
  33. else if (tab[i].type == KDB_TYPE_INVALID && t == RT_NULL)
  34. {
  35. t = &tab[i];
  36. }
  37. }
  38. if (t)
  39. {
  40. t->type = type;
  41. t->dump = dump;
  42. return RT_EOK;
  43. }
  44. return -RT_ERROR;
  45. }
  46. void kdb_type_unregister(rt_uint16_t type)
  47. {
  48. struct kdb_type *t = _type_find(type);
  49. if (t)
  50. {
  51. t->type = 0;
  52. t->dump = 0;
  53. }
  54. }
  55. void kdb_type_dump(kdb_head_t head, void *data)
  56. {
  57. struct kdb_type *t = _type_find(head->type);
  58. if (t && t->dump) t->dump(head, data);
  59. }