-#define NEC_START_BIT_PULSE_TIME 9000.0e-6 // 9000 usec pulse\r
-#define NEC_START_BIT_PAUSE_TIME 4500.0e-6 // 4500 usec pause\r
-#define NEC_REPEAT_START_BIT_PAUSE_TIME 2250.0e-6 // 2250 usec pause\r
-#define NEC_PULSE_TIME 560.0e-6 // 560 usec pulse\r
-#define NEC_1_PAUSE_TIME 1690.0e-6 // 1690 usec pause\r
-#define NEC_0_PAUSE_TIME 560.0e-6 // 560 usec pause\r
-#define NEC_ADDRESS_OFFSET 0 // skip 0 bits\r
-#define NEC_ADDRESS_LEN 16 // read 16 address bits\r
-#define NEC_COMMAND_OFFSET 16 // skip 16 bits (8 address + 8 /address)\r
-#define NEC_COMMAND_LEN 16 // read 16 bits (8 command + 8 /command)\r
-#define NEC_COMPLETE_DATA_LEN 32 // complete length\r
-#define NEC_STOP_BIT 1 // has stop bit\r
-#define NEC_LSB 1 // LSB...MSB\r
+#if defined (ATMEL_AVR)\r
+# define _CONCAT(a,b) a##b\r
+# define CONCAT(a,b) _CONCAT(a,b)\r
+# define IRMP_PORT CONCAT(PORT, IRMP_PORT_LETTER)\r
+# define IRMP_DDR CONCAT(DDR, IRMP_PORT_LETTER)\r
+# define IRMP_PIN CONCAT(PIN, IRMP_PORT_LETTER)\r
+# define IRMP_BIT IRMP_BIT_NUMBER\r
+# define input(x) ((x) & (1 << IRMP_BIT))\r
+#elif defined (PIC_C18)\r
+# define input(x) (x)\r
+#elif defined (PIC_CCS)\r
+# define input(x) (x)\r
+#elif defined (ARM_STM32)\r
+# define _CONCAT(a,b) a##b\r
+# define CONCAT(a,b) _CONCAT(a,b)\r
+# define IRMP_PORT CONCAT(GPIO, IRMP_PORT_LETTER)\r
+# if defined (ARM_STM32L1XX)\r
+# define IRMP_PORT_RCC CONCAT(RCC_AHBPeriph_GPIO, IRMP_PORT_LETTER)\r
+# elif defined (ARM_STM32F10X)\r
+# define IRMP_PORT_RCC CONCAT(RCC_APB2Periph_GPIO, IRMP_PORT_LETTER)\r
+# elif defined (ARM_STM32F4XX)\r
+# define IRMP_PORT_RCC CONCAT(RCC_AHB1Periph_GPIO, IRMP_PORT_LETTER)\r
+# endif\r
+# define IRMP_BIT CONCAT(GPIO_Pin_, IRMP_BIT_NUMBER)\r
+# define IRMP_PIN IRMP_PORT // for use with input(x) below\r
+# define input(x) (GPIO_ReadInputDataBit(x, IRMP_BIT))\r
+# ifndef USE_STDPERIPH_DRIVER\r
+# warning The STM32 port of IRMP uses the ST standard peripheral drivers which are not enabled in your build configuration.\r
+# endif\r
+#elif defined (STELLARIS_ARM_CORTEX_M4)\r
+# define _CONCAT(a,b) a##b\r
+# define CONCAT(a,b) _CONCAT(a,b)\r
+# define IRMP_PORT_PERIPH CONCAT(SYSCTL_PERIPH_GPIO, IRMP_PORT_LETTER)\r
+# define IRMP_PORT_BASE CONCAT(GPIO_PORT, CONCAT(IRMP_PORT_LETTER, _BASE))\r
+# define IRMP_PORT_PIN CONCAT(GPIO_PIN_, IRMP_BIT_NUMBER)\r
+# define IRMP_PIN IRMP_PORT_PIN\r
+# define input(x) ((uint8_t)(ROM_GPIOPinRead(IRMP_PORT_BASE, IRMP_PORT_PIN)))\r
+# define sei() IntMasterEnable()\r
+#endif\r