ser_conn_pkt_decoder.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /* Copyright (c) 2014 Nordic Semiconductor. All Rights Reserved.
  2. *
  3. * The information contained herein is property of Nordic Semiconductor ASA.
  4. * Terms and conditions of usage are described in detail in NORDIC
  5. * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT.
  6. *
  7. * Licensees are granted free, non-transferable use of the information. NO
  8. * WARRANTY of ANY KIND is provided. This heading must NOT be removed from
  9. * the file.
  10. *
  11. */
  12. #include <stdint.h>
  13. #include <string.h>
  14. #include "nordic_common.h"
  15. #include "app_error.h"
  16. #include "softdevice_handler.h"
  17. #include "ble_serialization.h"
  18. #include "ser_config.h"
  19. #include "ser_hal_transport.h"
  20. #include "ser_conn_pkt_decoder.h"
  21. #include "ser_conn_cmd_decoder.h"
  22. #include "ser_conn_dtm_cmd_decoder.h"
  23. #include "ser_conn_reset_cmd_decoder.h"
  24. uint32_t ser_conn_received_pkt_process(
  25. ser_hal_transport_evt_rx_pkt_received_params_t * p_rx_pkt_params)
  26. {
  27. uint32_t err_code = NRF_SUCCESS;
  28. if (NULL != p_rx_pkt_params)
  29. {
  30. /* For further processing pass only command (opcode + data). */
  31. uint8_t * p_command = &p_rx_pkt_params->p_buffer[SER_PKT_OP_CODE_POS];
  32. uint16_t command_len = p_rx_pkt_params->num_of_bytes - SER_PKT_TYPE_SIZE;
  33. switch (p_rx_pkt_params->p_buffer[SER_PKT_TYPE_POS])
  34. {
  35. case SER_PKT_TYPE_CMD:
  36. {
  37. err_code = ser_conn_command_process(p_command, command_len);
  38. break;
  39. }
  40. case SER_PKT_TYPE_DTM_CMD:
  41. {
  42. err_code = ser_conn_dtm_command_process(p_command, command_len);
  43. break;
  44. }
  45. case SER_PKT_TYPE_RESET_CMD:
  46. {
  47. ser_conn_reset_command_process();
  48. break;
  49. }
  50. default:
  51. {
  52. APP_ERROR_CHECK(SER_WARNING_CODE);
  53. break;
  54. }
  55. }
  56. if (NRF_SUCCESS == err_code)
  57. {
  58. /* Free a received packet. */
  59. err_code = ser_hal_transport_rx_pkt_free(p_rx_pkt_params->p_buffer);
  60. if (NRF_SUCCESS != err_code)
  61. {
  62. err_code = NRF_ERROR_INTERNAL;
  63. }
  64. }
  65. else
  66. {
  67. err_code = NRF_ERROR_INTERNAL;
  68. }
  69. }
  70. else
  71. {
  72. err_code = NRF_ERROR_NULL;
  73. }
  74. return err_code;
  75. }