@@ -652,3 +652,75 @@ long IRrecv::decodeHash(decode_results *results) {
652652  results->decode_type  = UNKNOWN;
653653  return  DECODED;
654654}
655+ 
656+ /*  Sharp and DISH support by Todd Treece
657+ 
658+ The Dish send function needs to be repeated 4 times and the Sharp function 
659+ has the necessary repeats built in. I know that it's not consistent, 
660+ but I don't have the time to update my code. 
661+ 
662+ Here are the LIRC files that I found that seem to match the remote codes 
663+ from the oscilloscope: 
664+ 
665+ Sharp LCD TV: 
666+ http://lirc.sourceforge.net/remotes/sharp/GA538WJSA 
667+ 
668+ DISH NETWORK (echostar 301): 
669+ http://lirc.sourceforge.net/remotes/echostar/301_501_3100_5100_58xx_59xx 
670+ 
671+ For the DISH codes, only send the last for characters of the hex. 
672+ i.e. use 0x1C10 instead of 0x0000000000001C10 which is listed in the 
673+ linked LIRC file. 
674+ */ 
675+ 
676+ void  IRsend::sendSharp (unsigned  long  data, int  nbits) {
677+   unsigned  long  invertdata = data ^ SHARP_TOGGLE_MASK;
678+   enableIROut (38 );
679+   for  (int  i = 0 ; i < nbits; i++) {
680+     if  (data & 0x4000 ) {
681+       mark (SHARP_BIT_MARK);
682+       space (SHARP_ONE_SPACE);
683+     }
684+     else  {
685+       mark (SHARP_BIT_MARK);
686+       space (SHARP_ZERO_SPACE);
687+     }
688+     data <<= 1 ;
689+   }
690+   
691+   mark (SHARP_BIT_MARK);
692+   space (SHARP_ZERO_SPACE);
693+   delay (46 );
694+   for  (int  i = 0 ; i < nbits; i++) {
695+     if  (invertdata & 0x4000 ) {
696+       mark (SHARP_BIT_MARK);
697+       space (SHARP_ONE_SPACE);
698+     }
699+     else  {
700+       mark (SHARP_BIT_MARK);
701+       space (SHARP_ZERO_SPACE);
702+     }
703+     invertdata <<= 1 ;
704+   }
705+   mark (SHARP_BIT_MARK);
706+   space (SHARP_ZERO_SPACE);
707+   delay (46 );
708+ }
709+ 
710+ void  IRsend::sendDISH (unsigned  long  data, int  nbits)
711+ {
712+   enableIROut (56 );
713+   mark (DISH_HDR_MARK);
714+   space (DISH_HDR_SPACE);
715+   for  (int  i = 0 ; i < nbits; i++) {
716+     if  (data & DISH_TOP_BIT) {
717+       mark (DISH_BIT_MARK);
718+       space (DISH_ONE_SPACE);
719+     }
720+     else  {
721+       mark (DISH_BIT_MARK);
722+       space (DISH_ZERO_SPACE);
723+     }
724+     data <<= 1 ;
725+   }
726+ }
0 commit comments