/***********************************************************************/
/*            Demo source for using esd CANopen manager Stack          */
/*                                                                     */
/*       Copyright by Shanghai ESD Electric Technology Co., Ltd.       */
/*---------------------------------------------------------------------*/
/*         Filename:      pv_manager_canopen.c                         */
/*         Date:          2023-11-15                                   */
/*         Language:      ANSI C                                       */
/*         Targetsystem:  Linux                                        */
/*         Purpose:       Demostrate how to manager the CAN bus with   */
/*                        very small code, which gives application     */
/*                        developers a quick guide of the procedure    */
/*                        that is necessarily required.                */
/*         Author:        Bob Tu                                       */
/*---------------------------------------------------------------------*/ 
/* Revision history:                                                   */
/*---------------------------------------------------------------------*/
/* v1.0    Birth of module                                             */
/***********************************************************************/

#include <mcanopen.h>

int main()
{
  int result;
  UINT32 buffer;
  ERROR_T error_t;
  
  printf("Initializing...\n");
  mcanOpenInitialize();
 
  printf("Reading config.xml...\n");
  result = mcanOpenConfig("config.xml");
  if(MCAL_OK != result)
  {
    printf(" mcanOpenConfig() returned with error %d\n", result);
    printf("Shutting down....\n");
    mcanOpenShutDown();
    printf("Cleaning up....\n");
    mcanOpenCleanup();
    return(result);
  }
  
  printf("Starting CANopen manager....\n");
  mcanOpenStart();

  PSYS_SLEEP_SEC(1);

  // mcanOpenReadSDO(3,1,0x6040,0,&buffer,&len,&error_t);

  buffer=0x80000181; //stop PDO 0x181
  mcanOpenWriteSDO(3,1,0x1800,1,TYP_UINT32,&buffer,4,&error_t);
  buffer=0x80000281; //stop PDO 0x281
  mcanOpenWriteSDO(3,1,0x1801,1,TYP_UINT32,&buffer,4,&error_t);
  buffer=0x80000381; //stop PDO 0x381
  mcanOpenWriteSDO(3,1,0x1802,1,TYP_UINT32,&buffer,4,&error_t);
  buffer=0xFFFF; //set PDO 0x481 event timer to maximum.
  mcanOpenWriteSDO(3,1,0x1803,5,TYP_UINT16,&buffer,2,&error_t);
  buffer=0; //stop heartbeat transmission.
  mcanOpenWriteSDO(3,1,0x1017,0,TYP_UINT16,&buffer,2,&error_t);


  mcanOpenStartNode(3,0x1); // let network 3, node 0x1 enter OP state.
  mcanOpenStartNode(3,0x11); // let network 3, node 0x11 enter OP state.
  
  printf("Press 'y' to Stop the CANopen manager. \n");
  while(1){
    if (getchar() == 'y')
      break;
  }
    
  printf("Shutting down the manager....\n");
  mcanOpenShutDown();

  PSYS_SLEEP_SEC(1);

  /* Cleanup the library */
  printf("Cleaning up....\n");
  mcanOpenCleanup();
  return(0);
}
    
