LCOV - code coverage report
Current view: top level - packet - cw.c (source / functions) Hit Total Coverage
Test: test-37de7e7-dirty-coverage.info Lines: 0 34 0.0 %
Date: 2019-04-16 Functions: 0 1 0.0 %

          Line data    Source code
       1             : /**
       2             :  * @ingroup cw
       3             :  *
       4             :  * @file cw.c
       5             :  *
       6             :  * @{
       7             :  */
       8             : 
       9             : #include "../firmware.h"
      10             : 
      11             : #define CW_PERIOD_MS    100
      12             : 
      13             : /* Each element: length, pattern (2-bit, pause: 00, dit: 01, dah: 11) */
      14             : /* Length Guide: dit: 1, dah: 3, symbol space: 1, letter space: 3, word space: 7 */
      15             : static const uint16_t Packet_cw_lookup[59][2] = 
      16             : {
      17             :         // 32   word space
      18             :         { 4, GCC_BINARY(0b00000000) }, // (7 - 3)
      19             :         // 33 ! exclamation mark
      20             :         { 6, GCC_BINARY(0b110111011111) },      // − · − · − − 
      21             :         // 34   "  double quote
      22             :         { 6, GCC_BINARY(0b011101011101) },      // · − · · − · 
      23             :         // 35   #       hash
      24             :         { 0, 0},
      25             :         // 36   $       dollar
      26             :         { 7, GCC_BINARY(0b01010111010111) }, // · · · − · · − 
      27             :         // 37   %       percent
      28             :         { 0, 0},
      29             :         // 38   &   ampersand
      30             :         { 0, 0},
      31             :         // 39   '       apostrophe
      32             :         { 6, GCC_BINARY(0b011111111101) }, // · − − − − · 
      33             :         // 40 ( left parenthesis
      34             :         { 5, GCC_BINARY(0b1101111101) }, // − · − − · 
      35             :         // 41 ) right parenthesis
      36             :         { 6, GCC_BINARY(0b110111110111) }, // − · − − · − 
      37             :         // 42 * asterisk
      38             :         { 0, 0},
      39             :         // 43 + plus
      40             :         { 5, GCC_BINARY(0b0111011101) }, // · − · − · 
      41             :         // 44 , comma
      42             :         { 6, GCC_BINARY(0b111101011111) }, // − − · · − − 
      43             :         // 45 - minus
      44             :         { 6, GCC_BINARY(0b110101010111) }, // − · · · · − 
      45             :         // 46 . period
      46             :         { 6, GCC_BINARY(0b011101110111) }, // · − · − · − 
      47             :         // 47 / slash
      48             :         { 5, GCC_BINARY(0b1101011101) }, // − · · − · 
      49             :         // 48 0 zero
      50             :         { 5, GCC_BINARY(0b1111111111) }, // − − − − − 
      51             :         // 49 1 one
      52             :         { 5, GCC_BINARY(0b0111111111) }, // · − − − − 
      53             :         // 50 2 two
      54             :         { 5, GCC_BINARY(0b0101111111) }, // · · − − − 
      55             :         // 51 3 three
      56             :         { 5, GCC_BINARY(0b0101011111) }, // · · · − −  
      57             :         // 52 4 four
      58             :         { 5, GCC_BINARY(0b0101010111) }, // · · · · − 
      59             :         // 53 5 five
      60             :         { 5, GCC_BINARY(0b0101010101) }, // · · · · ·  
      61             :         // 54 6 six
      62             :         { 5, GCC_BINARY(0b1101010101) }, // − · · · · 
      63             :         // 55 7 seven
      64             :         { 5, GCC_BINARY(0b1111010101) }, // − − · · · 
      65             :         // 56 8 eight
      66             :         { 5, GCC_BINARY(0b1111110101) }, // − − − · · 
      67             :         // 57 9 nine
      68             :         { 5, GCC_BINARY(0b1111111101) }, // − − − − · 
      69             :         // 58 : colon
      70             :         { 6, GCC_BINARY(0b111111010101) }, // − − − · · ·
      71             :         // 59 ; semicolon
      72             :         { 6, GCC_BINARY(0b110111011101) }, // − · − · − · 
      73             :         // 60 < less than
      74             :         { 0, 0},
      75             :         // 61 = equals
      76             :         { 5, GCC_BINARY(0b1101010111) }, // − · · · − 
      77             :         // 62 > greater than
      78             :         { 0, 0},
      79             :         // 63 ? question mark
      80             :         { 6, GCC_BINARY(0b010111110101) }, // · · − − · · 
      81             :         // 64 @ at sign
      82             :         { 6, GCC_BINARY(0b011111011101) }, // · − − · − · 
      83             :         // 65 A
      84             :         { 2, GCC_BINARY(0b0111) }, // · −
      85             :         // 66 B
      86             :         { 4, GCC_BINARY(0b11010101) }, // − · · ·
      87             :         // 67 C
      88             :         { 4, GCC_BINARY(0b11011101) }, // − · − · 
      89             :         // 68 D
      90             :         { 3, GCC_BINARY(0b110101) }, // − · · 
      91             :         // 69 E
      92             :         { 1, GCC_BINARY(0b01) }, // · 
      93             :         // 70 F
      94             :         { 4, GCC_BINARY(0b01011101) }, // · · − · 
      95             :         // 71 G
      96             :         { 3, GCC_BINARY(0b111101) }, // − − · 
      97             :         // 72 H
      98             :         { 4, GCC_BINARY(0b01010101) }, // · · · · 
      99             :         // 73 I
     100             :         { 2, GCC_BINARY(0b0101) }, // · · 
     101             :         // 74 J
     102             :         { 4, GCC_BINARY(0b01111111) }, // · − − − 
     103             :         // 75 K
     104             :         { 3, GCC_BINARY(0b110111) }, // − · − 
     105             :         // 76 L
     106             :         { 4, GCC_BINARY(0b01110101) }, // · − · · 
     107             :         // 77 M
     108             :         { 2, GCC_BINARY(0b1111) }, // − − 
     109             :         // 78 N
     110             :         { 2, GCC_BINARY(0b1101) }, // − · 
     111             :         // 79 O
     112             :         { 3, GCC_BINARY(0b111111) }, // − − − 
     113             :         // 80 P
     114             :         { 4, GCC_BINARY(0b01111101) }, // · − − · 
     115             :         // 81 Q
     116             :         { 4, GCC_BINARY(0b11110111) }, // − − · − 
     117             :         // 82 R
     118             :         { 3, GCC_BINARY(0b011101) }, // · − · 
     119             :         // 83 S
     120             :         { 3, GCC_BINARY(0b010101) }, // · · · 
     121             :         // 84 T
     122             :         { 1, GCC_BINARY(0b11) }, // − 
     123             :         // 85 U
     124             :         { 3, GCC_BINARY(0b010111) }, // · · − 
     125             :         // 86 V
     126             :         { 4, GCC_BINARY(0b01010111) }, // · · · − 
     127             :         // 87 W
     128             :         { 3, GCC_BINARY(0b011111) }, // · − − 
     129             :         // 88 X
     130             :         { 4, GCC_BINARY(0b11010111) }, // − · · −  
     131             :         // 89 Y
     132             :         { 4, GCC_BINARY(0b11011111) }, // − · − −   
     133             :         // 90 Z
     134             :         { 4, GCC_BINARY(0b11110101) } // − − · · 
     135             : };
     136             : 
     137           0 : void Packet_cw_transmit_buffer(uint8_t *cw_buffer, uint32_t cw_length, void _cw_on(void), void _cw_off(void))
     138             : {
     139             :         uint32_t i, j;
     140             :         uint8_t c;
     141             : 
     142           0 :         for(i=0; i<cw_length; i++)
     143             :         {
     144           0 :                 c = cw_buffer[i];
     145             : 
     146             :                 /* Move lower case to upper case */
     147           0 :                 if((c >= 97) && (c <= 122))
     148             :                 {
     149           0 :                         c = (uint8_t)(c - 32);
     150             :                 }
     151             : 
     152             :                 /* Bounds check - move to next character if invalid */
     153           0 :                 if((c < 32) || (c > 91))
     154             :                 {
     155           0 :                         continue;
     156             :                 }
     157             : 
     158             :                 /* Prepare for table lookup */
     159           0 :                 c = (uint8_t)(c - 32);
     160             : 
     161             :                 for(
     162           0 :                         j = (uint32_t)(2 * (Packet_cw_lookup[c][0] - 1));
     163             :                         true; 
     164           0 :                         j -= 2
     165             :                 )
     166             :                 {
     167           0 :                         switch((Packet_cw_lookup[c][1] >> j) & GCC_BINARY(0b11))
     168             :                         {
     169           0 :                                 case GCC_BINARY(0b00):
     170             :                                         /* Pause (only used for space character) */
     171           0 :                                         _cw_off();
     172           0 :                                         Delay_ms(CW_PERIOD_MS);
     173           0 :                                         break;
     174           0 :                                 case GCC_BINARY(0b01):
     175             :                                         /* Dit */
     176           0 :                                         _cw_on();
     177           0 :                                         Delay_ms(CW_PERIOD_MS);
     178           0 :                                         break;
     179           0 :                                 case GCC_BINARY(0b11):
     180             :                                         /* Dah */
     181           0 :                                         _cw_on();
     182           0 :                                         Delay_ms(CW_PERIOD_MS);
     183           0 :                                         Delay_ms(CW_PERIOD_MS);
     184           0 :                                         Delay_ms(CW_PERIOD_MS);
     185           0 :                                         break;
     186           0 :                                 default:
     187           0 :                                         break;
     188             :                         }
     189           0 :                         _cw_off();
     190             :                         /* Inter pulse pause */
     191           0 :                         Delay_ms(CW_PERIOD_MS);
     192           0 :                         if(j==0)
     193             :                         {
     194           0 :                                 break;
     195             :                         }
     196             :                 }
     197             :                 /* Additional inter letter pause */
     198           0 :                 Delay_ms(CW_PERIOD_MS);
     199           0 :                 Delay_ms(CW_PERIOD_MS);
     200             :         }
     201           0 : }

Generated by: LCOV version 1.10