evse_cm_atten_char.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*====================================================================*
  2. *
  3. * Copyright (c) 2013 Qualcomm Atheros, Inc.
  4. *
  5. * All rights reserved.
  6. *
  7. *====================================================================*/
  8. /*====================================================================*
  9. *
  10. * signed evse_cm_atten_char (struct session * session, struct channel * channel, struct message * message);
  11. *
  12. * slac.h
  13. *
  14. * EVSE-HLE sends average msound values to the PEV-HLE for a match
  15. * decision;
  16. *
  17. *--------------------------------------------------------------------*/
  18. #ifndef EVSE_CM_ATTEN_CHAR_SOURCE
  19. #define EVSE_CM_ATTEN_CHAR_SOURCE
  20. #include <string.h>
  21. #include "../ether/channel.h"
  22. #include "../tools/memory.h"
  23. #include "../tools/error.h"
  24. #include "../tools/flags.h"
  25. #include "../slac/slac.h"
  26. signed evse_cm_atten_char (struct session * session, struct channel * channel, struct message * message)
  27. {
  28. struct cm_atten_char_indicate * indicate = (struct cm_atten_char_indicate *) (message);
  29. struct cm_atten_char_response * response = (struct cm_atten_char_response *) (message);
  30. debug (0, __func__, "--> CM_ATTEN_CHAR.IND");
  31. memset (message, 0, sizeof (* message));
  32. EthernetHeader (& indicate->ethernet, session->PEV_MAC, channel->host, channel->type);
  33. HomePlugHeader1 (& indicate->homeplug, HOMEPLUG_MMV, (CM_ATTEN_CHAR | MMTYPE_IND));
  34. indicate->APPLICATION_TYPE = session->APPLICATION_TYPE;
  35. indicate->SECURITY_TYPE = session->SECURITY_TYPE;
  36. memcpy (indicate->ACVarField.SOURCE_ADDRESS, session->PEV_MAC, sizeof (indicate->ACVarField.SOURCE_ADDRESS));
  37. memcpy (indicate->ACVarField.RunID, session->RunID, sizeof (indicate->ACVarField.RunID));
  38. memset (indicate->ACVarField.SOURCE_ID, 0, sizeof (indicate->ACVarField.SOURCE_ID));
  39. memset (indicate->ACVarField.RESP_ID, 0, sizeof (indicate->ACVarField.RESP_ID));
  40. indicate->ACVarField.NUM_SOUNDS = session->sounds;
  41. indicate->ACVarField.ATTEN_PROFILE.NumGroups = session->NumGroups;
  42. memcpy (indicate->ACVarField.ATTEN_PROFILE.AAG, session->AAG, session->NumGroups);
  43. if (sendmessage (channel, message, sizeof (* indicate)) <= 0)
  44. {
  45. return (debug (1, __func__, CHANNEL_CANTSEND));
  46. }
  47. if (readmessage (channel, message, HOMEPLUG_MMV, (CM_ATTEN_CHAR | MMTYPE_RSP)) > 0)
  48. {
  49. if (! memcmp (session->RunID, response->ACVarField.RunID, sizeof (session->RunID)))
  50. {
  51. debug (0, __func__, "<-- CM_ATTEN_CHAR.RSP");
  52. #if SLAC_DEBUG
  53. if (_anyset (session->flags, SLAC_VERBOSE))
  54. {
  55. char string [256];
  56. debug (0, __func__, "CM_ATTEN_CHAR.RSP.APPLICATION_TYPE %d", response->APPLICATION_TYPE);
  57. debug (0, __func__, "CM_ATTEN_CHAR.RSP.SECURITY_TYPE %d", response->SECURITY_TYPE);
  58. debug (0, __func__, "CM_ATTEN_CHAR.RSP.ACVarfield.SOURCE_ADDRESS %s", HEXSTRING (string, response->ACVarField.SOURCE_ADDRESS));
  59. debug (0, __func__, "CM_ATTEN_CHAR.RSP.ACVarFIeld.RunID %s", HEXSTRING (string, response->ACVarField.RunID));
  60. debug (0, __func__, "CM_ATTEN_CHAR.RSP.ACVarField.SOURCE_ID %s", HEXSTRING (string, response->ACVarField.SOURCE_ID));
  61. debug (0, __func__, "CM_ATTEN_CHAR.RSP.ACVarField.RESP_ID %s", HEXSTRING (string, response->ACVarField.RESP_ID));
  62. debug (0, __func__, "CM_ATTEN_CHAR.RSP.ACVarField.Result %d", response->ACVarField.Result);
  63. }
  64. #endif
  65. return (0);
  66. }
  67. }
  68. return (debug (session->exit, __func__, "<-- CM_ATTEN_CHAR.RSP ?"));
  69. }
  70. #endif