]> cloudbase.mooo.com Git - irmp.git/blobdiff - irsnd.c
Version 2.6.1: some GPIO changes changes for STM32F10x (in IRSND).
[irmp.git] / irsnd.c
diff --git a/irsnd.c b/irsnd.c
index 4b276d617963a7438fe66663ba23537a120b5d46..c5f7004d398454d1cca824067a532c31e5d1d0e9 100644 (file)
--- a/irsnd.c
+++ b/irsnd.c
@@ -13,7 +13,7 @@
  * ATmega164, ATmega324, ATmega644,  ATmega644P, ATmega1284, ATmega1284P\r
  * ATmega88,  ATmega88P, ATmega168,  ATmega168P, ATmega328P\r
  *\r
- * $Id: irsnd.c,v 1.77 2014/07/09 14:45:56 fm Exp $\r
+ * $Id: irsnd.c,v 1.79 2014/07/10 10:38:07 fm Exp $\r
  *\r
  * This program is free software; you can redistribute it and/or modify\r
  * it under the terms of the GNU General Public License as published by\r
 #define SAMSUNG32_AUTO_REPETITION_PAUSE_LEN     (uint16_t)(F_INTERRUPTS * SAMSUNG32_AUTO_REPETITION_PAUSE_TIME + 0.5)           // use uint16_t!\r
 #define SAMSUNG32_FRAME_REPEAT_PAUSE_LEN        (uint16_t)(F_INTERRUPTS * SAMSUNG32_FRAME_REPEAT_PAUSE_TIME + 0.5)              // use uint16_t!\r
 \r
+#define SAMSUNG48_AUTO_REPETITION_PAUSE_LEN     (uint16_t)(F_INTERRUPTS * SAMSUNG48_AUTO_REPETITION_PAUSE_TIME + 0.5)           // use uint16_t!\r
+#define SAMSUNG48_FRAME_REPEAT_PAUSE_LEN        (uint16_t)(F_INTERRUPTS * SAMSUNG48_FRAME_REPEAT_PAUSE_TIME + 0.5)              // use uint16_t!\r
+\r
 #define MATSUSHITA_START_BIT_PULSE_LEN          (uint8_t)(F_INTERRUPTS * MATSUSHITA_START_BIT_PULSE_TIME + 0.5)\r
 #define MATSUSHITA_START_BIT_PAUSE_LEN          (uint8_t)(F_INTERRUPTS * MATSUSHITA_START_BIT_PAUSE_TIME + 0.5)\r
 #define MATSUSHITA_PULSE_LEN                    (uint8_t)(F_INTERRUPTS * MATSUSHITA_PULSE_TIME + 0.5)\r
@@ -590,6 +593,7 @@ irsnd_init (void)
         RCC_AHBPeriphClockCmd(IRSND_PORT_RCC, ENABLE);\r
 #    elif defined (ARM_STM32F10X)\r
         RCC_APB2PeriphClockCmd(IRSND_PORT_RCC, ENABLE);\r
+        // RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // only in case of remapping, not necessary for default port-timer mapping\r
 #    elif defined (ARM_STM32F4XX)\r
         RCC_AHB1PeriphClockCmd(IRSND_PORT_RCC, ENABLE);\r
 #    endif\r
@@ -607,7 +611,7 @@ irsnd_init (void)
         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;\r
         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;\r
         GPIO_Init(IRSND_PORT, &GPIO_InitStructure);\r
-        GPIO_PinRemapConfig(, ENABLE);         // TODO: remapping required\r
+        // GPIO_PinRemapConfig(GPIO_*Remap*_TIM[IRSND_TIMER_NUMBER], ENABLE); // only in case of remapping, not necessary for default port-timer mapping\r
 #    endif\r
 \r
         /* TIMx clock enable */\r
@@ -888,6 +892,22 @@ irsnd_send_data (IRMP_DATA * irmp_data_p, uint8_t do_wait)
             break;\r
         }\r
 #endif\r
+#if IRSND_SUPPORT_SAMSUNG48_PROTOCOL == 1\r
+        case IRMP_SAMSUNG48_PROTOCOL:\r
+        {\r
+            address = bitsrevervse (irmp_data_p->address, SAMSUNG_ADDRESS_LEN);\r
+            command = bitsrevervse (irmp_data_p->command, 16);\r
+\r
+            irsnd_buffer[0] = (address & 0xFF00) >> 8;                                                          // AAAAAAAA\r
+            irsnd_buffer[1] = (address & 0x00FF);                                                               // AAAAAAAA\r
+            irsnd_buffer[2] = ((command & 0xFF00) >> 8);                                                        // CCCCCCCC\r
+            irsnd_buffer[3] = ~((command & 0xFF00) >> 8);                                                       // cccccccc\r
+            irsnd_buffer[4] = (command & 0x00FF);                                                               // CCCCCCCC\r
+            irsnd_buffer[5] = ~(command & 0x00FF);                                                              // cccccccc\r
+            irsnd_busy      = TRUE;\r
+            break;\r
+        }\r
+#endif\r
 #if IRSND_SUPPORT_MATSUSHITA_PROTOCOL == 1\r
         case IRMP_MATSUSHITA_PROTOCOL:\r
         {\r
@@ -1496,6 +1516,24 @@ irsnd_ISR (void)
                         break;\r
                     }\r
 #endif\r
+#if IRSND_SUPPORT_SAMSUNG48_PROTOCOL == 1\r
+                    case IRMP_SAMSUNG48_PROTOCOL:\r
+                    {\r
+                        startbit_pulse_len          = SAMSUNG_START_BIT_PULSE_LEN;\r
+                        startbit_pause_len          = SAMSUNG_START_BIT_PAUSE_LEN - 1;\r
+                        pulse_1_len                 = SAMSUNG_PULSE_LEN;\r
+                        pause_1_len                 = SAMSUNG_1_PAUSE_LEN - 1;\r
+                        pulse_0_len                 = SAMSUNG_PULSE_LEN;\r
+                        pause_0_len                 = SAMSUNG_0_PAUSE_LEN - 1;\r
+                        has_stop_bit                = SAMSUNG_STOP_BIT;\r
+                        complete_data_len           = SAMSUNG48_COMPLETE_DATA_LEN;\r
+                        n_auto_repetitions          = SAMSUNG48_FRAMES;                             // 1 frame\r
+                        auto_repetition_pause_len   = SAMSUNG48_AUTO_REPETITION_PAUSE_LEN;          // 47 ms pause\r
+                        repeat_frame_pause_len      = SAMSUNG48_FRAME_REPEAT_PAUSE_LEN;\r
+                        irsnd_set_freq (IRSND_FREQ_38_KHZ);\r
+                        break;\r
+                    }\r
+#endif\r
 #if IRSND_SUPPORT_MATSUSHITA_PROTOCOL == 1\r
                     case IRMP_MATSUSHITA_PROTOCOL:\r
                     {\r
@@ -1968,6 +2006,9 @@ irsnd_ISR (void)
                 case IRMP_SAMSUNG_PROTOCOL:\r
                 case IRMP_SAMSUNG32_PROTOCOL:\r
 #endif\r
+#if IRSND_SUPPORT_SAMSUNG48_PROTOCOL == 1\r
+                case IRMP_SAMSUNG48_PROTOCOL:\r
+#endif\r
 #if IRSND_SUPPORT_MATSUSHITA_PROTOCOL == 1\r
                 case IRMP_MATSUSHITA_PROTOCOL:\r
 #endif\r