1 // ************************************************************************************************ 2 // Custom DPA Handler code example - User peripheral implementation - MCU temperature indicator * 3 // ************************************************************************************************ 4 // Copyright (c) MICRORISC s.r.o. 5 // 6 // File: $RCSfile: CustomDpaHandler-UserPeripheral-McuTempIndicator.c,v $ 7 // Version: $Revision: 1.14 $ 8 // Date: $Date: 2021/04/26 15:13:51 $ 9 // 10 // Revision history: 11 // 2017/03/13 Release for DPA 3.00 12 // 2016/09/12 Release for DPA 2.28 13 // 2015/08/05 Release for DPA 2.20 14 // 2014/05/26 Release for DPA 2.11 15 // 2014/10/31 Release for DPA 2.10 16 // 2014/05/26 Release for DPA 2.01 17 // 18 // ********************************************************************* 19 20 // Online DPA documentation https://doc.iqrf.org/DpaTechGuide/ 21 22 // This example implements the user peripheral reading PIC MCU temperature indicator 23 24 // Default IQRF include (modify the path according to your setup) 25 #include "IQRF.h" 26 27 // Default DPA header (modify the path according to your setup) 28 #include "DPA.h" 29 // Default Custom DPA Handler header (modify the path according to your setup) 30 #include "DPAcustomHandler.h" 31 32 //############################################################################################ 33 34 // Must be the 1st defined function in the source code in order to be placed at the correct FLASH location! 35 //############################################################################################ 36 bit CustomDpaHandler() 37 //############################################################################################ 38 { 39 // Handler presence mark 40 clrwdt(); 41 42 // Detect DPA event to handle 43 switch ( GetDpaEvent() ) 44 { 45 // ------------------------------------------------- 46 case DpaEvent_DpaRequest: 47 // Called to interpret DPA request for peripherals 48 // ------------------------------------------------- 49 // Peripheral enumeration 50 if ( IsDpaEnumPeripheralsRequest() ) 51 { 52 // We implement 1 user peripheral 53 _DpaMessage.EnumPeripheralsAnswer.UserPerNr = 1; 54 FlagUserPer( _DpaMessage.EnumPeripheralsAnswer.UserPer, PNUM_USER + 0 ); 55 _DpaMessage.EnumPeripheralsAnswer.HWPID = 0x000F; 56 _DpaMessage.EnumPeripheralsAnswer.HWPIDver = 0xabcd; 57 58 DpaHandleReturnTRUE: 59 return TRUE; 60 } 61 // ------------------------------------------------- 62 // Get information about peripheral 63 else if ( IsDpaPeripheralInfoRequest() ) 64 { 65 if ( _PNUM == PNUM_USER + 0 ) 66 { 67 _DpaMessage.PeripheralInfoAnswer.PerT = PERIPHERAL_TYPE_USER_AREA; 68 _DpaMessage.PeripheralInfoAnswer.PerTE = PERIPHERAL_TYPE_EXTENDED_READ; 69 goto DpaHandleReturnTRUE; 70 } 71 72 break; 73 } 74 // ------------------------------------------------- 75 else 76 { 77 // Handle peripheral command 78 if ( _PNUM == PNUM_USER + 0 ) 79 { 80 // Check command 81 switch ( _PCMD ) 82 { 83 case 0: 84 // ------------------------------------------------- 85 // Read temperature 86 if ( _DpaDataLength != 0 ) 87 DpaApiReturnPeripheralError( ERROR_DATA_LEN ); 88 89 uns16 temperature @ _DpaMessage.Response.PData; 90 91 // TSRNG: Temperature Indicator Range Selection bit( 92 TSRNG = 0; 93 // TSEN: Temperature Indicator Enable bit 94 TSEN = 1; 95 // ADC result 96 // - right justified 97 // - Fosc/64 98 // - VREF- is connected to VSS 99 // - VREF+ is connected to VDD 100 ADCON1 = 0b1.110.0.0.00; 101 // ADC setting (temp indicator) 102 ADCON0 = 0b0.11101.01; 103 waitMS( 1 ); 104 // start ADC 105 GO = 1; 106 // wait for ADC finish 107 while ( GO ); 108 109 temperature.low8 = ADRESL; 110 temperature.high8 = ADRESH; 111 112 TSEN = 0; 113 114 _DpaDataLength = sizeof( temperature ); 115 goto DpaHandleReturnTRUE; 116 117 default: 118 // ------------------------------------------------- 119 // Invalid command 120 DpaApiReturnPeripheralError( ERROR_PCMD ); 121 } 122 } 123 } 124 } 125 126 return FALSE; 127 } 128 129 //############################################################################################ 130 131 //############################################################################################ 132 // Default Custom DPA Handler header; 2nd include to implement Code bumper to detect too long code of the Custom DPA Handler (modify the path according to your setup) 133 #include "DPAcustomHandler.h" 134 //############################################################################################