| 1 | int main(int argc, char* argv[])
 | 
| 2 | {
 | 
| 3 |   uint_fast16_t i, j;
 | 
| 4 |   ssize_t l;
 | 
| 5 |   uint8_t buf[512];
 | 
| 6 |   int vid, pid, tmp;
 | 
| 7 |   char *rfmData;
 | 
| 8 |   char uri[512];
 | 
| 9 |   FILE *checkSendFile;
 | 
| 10 |   
 | 
| 11 |   const unsigned char rawVid[2] =  {
 | 
| 12 |     USB_CFG_VENDOR_ID
 | 
| 13 |   },
 | 
| 14 |   rawPid[2] =  {
 | 
| 15 |     USB_CFG_DEVICE_ID
 | 
| 16 |   };
 | 
| 17 | 
 | 
| 18 |   char vendor[] =
 | 
| 19 |   { 
 | 
| 20 |     USB_CFG_VENDOR_NAME, 0
 | 
| 21 |   },
 | 
| 22 |   product[] =
 | 
| 23 |   {
 | 
| 24 |     USB_CFG_DEVICE_NAME, 0
 | 
| 25 |   };
 | 
| 26 |   
 | 
| 27 |   usb_init();
 | 
| 28 |   g_type_init();
 | 
| 29 |   
 | 
| 30 |   /* usb setup */
 | 
| 31 |   vid = rawVid[1] * 256 + rawVid[0];
 | 
| 32 |   pid = rawPid[1] * 256 + rawPid[0];
 | 
| 33 | 
 | 
| 34 |   if (usbOpenDevice (&udhandle, vid, vendor, pid, product) != 0) {
 | 
| 35 |     printf ("Can't find USB Device w/ uid %04X, pid %04X\r\n", vid, pid);
 | 
| 36 |     console_exit(__LINE__ * -1);
 | 
| 37 |     return __LINE__ * -1;
 | 
| 38 |   }
 | 
| 39 | 
 | 
| 40 |   signal (SIGINT, console_exit);
 | 
| 41 |   signal (SIGKILL, console_exit);
 | 
| 42 |   signal (SIGHUP, console_exit);
 | 
| 43 | 
 | 
| 44 |   tmp=0;
 | 
| 45 |   i=0;
 | 
| 46 | 
 | 
| 47 |   printf ("Connection established.\r\n");
 | 
| 48 |   
 | 
| 49 |   if (argc > 1) {
 | 
| 50 |     // Senden
 | 
| 51 |     uint8_t temp[32];
 | 
| 52 |     uint8_t address[4];
 | 
| 53 |     uint8_t address_byte = 0;
 | 
| 54 |     
 | 
| 55 |     // Es wird bereits gesendet
 | 
| 56 |     while (checkSendFile = fopen("send", "r")) {
 | 
| 57 |       if (fgetc(checkSendFile) == '0') {
 | 
| 58 |         fclose(checkSendFile);
 | 
| 59 |         break;
 | 
| 60 |       }
 | 
| 61 |       
 | 
| 62 |       fclose(checkSendFile);
 | 
| 63 |     }
 | 
| 64 |     
 | 
| 65 |     checkSendFile = fopen("send", "w");
 | 
| 66 |     fprintf(checkSendFile, "%d", 1);
 | 
| 67 |     fclose(checkSendFile);
 | 
| 68 |     
 | 
| 69 |     rfmData = "";
 | 
| 70 |     
 | 
| 71 |     temp[0] = USB_SENDSTR;
 | 
| 72 |     temp[1] = 0x12; // Adresse
 | 
| 73 |     temp[2] = 0xEE;
 | 
| 74 |     temp[3] = 0xDD;
 | 
| 75 |     temp[4] = 0xCC;
 | 
| 76 |     
 | 
| 77 |     // 10 mal versuchen zu senden
 | 
| 78 |     for (j = 0; j < 10; j++) {
 | 
| 79 |         usb_control_msg(udhandle,
 | 
| 80 |           USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT,
 | 
| 81 |           RFMUSB_RQ_RFM12_PUT, USB_TXPACKET, 0, temp, sizeof temp,
 | 
| 82 |           5000
 | 
| 83 |         );
 | 
| 84 |         
 | 
| 85 |         // Auf Empfangsbestätigung warten
 | 
| 86 |         for (i = 0; i < 255; i++) {
 | 
| 87 |           tmp = usb_control_msg (udhandle,
 | 
| 88 |             USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN,
 | 
| 89 |             RFMUSB_RQ_RFM12_GET, 0, 0, buf, sizeof (buf),
 | 
| 90 |             5000
 | 
| 91 |           );
 | 
| 92 |           
 | 
| 93 |           // Empfangen
 | 
| 94 |           if (tmp > 0) { /* data received from usb bus */  
 | 
| 95 |             if (buf[2] == 0) {
 | 
| 96 |                         checkSendFile = fopen("send", "w");
 | 
| 97 |                         fprintf(checkSendFile, "%d", 0);
 | 
| 98 |                         fclose(checkSendFile);
 | 
| 99 | 
 | 
| 100 |               g_printf("Empfangsbestaetigung\r\n");
 | 
| 101 |               return 1;
 | 
| 102 |             }
 | 
| 103 |           }
 | 
| 104 |     
 | 
| 105 |           usleep (1000);
 | 
| 106 |         }
 | 
| 107 |     }
 | 
| 108 |     
 | 
| 109 |     checkSendFile = fopen("send", "w");
 | 
| 110 |     fprintf(checkSendFile, "%d", 0);
 | 
| 111 |     fclose(checkSendFile);
 | 
| 112 |         
 | 
| 113 |     g_printf("Abbruch\r\n");
 | 
| 114 |     return 0;
 | 
| 115 |   } else {
 | 
| 116 |     // Empfang
 | 
| 117 |     char temp[4];
 | 
| 118 |     uint8_t receiveReturn[4];
 | 
| 119 |     receiveReturn[0] = USB_SENDCHAR;
 | 
| 120 |   
 | 
| 121 |     while (1) {
 | 
| 122 |       // Es wird gesendet
 | 
| 123 |       while (checkSendFile = fopen("send", "r")) {
 | 
| 124 |         if (fgetc(checkSendFile) == '0') {
 | 
| 125 |           fclose(checkSendFile);
 | 
| 126 |           break;
 | 
| 127 |         }
 | 
| 128 |         
 | 
| 129 |         fclose(checkSendFile);
 | 
| 130 |       }
 | 
| 131 |       
 | 
| 132 |       tmp = usb_control_msg (udhandle,
 | 
| 133 |         USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN,
 | 
| 134 |         RFMUSB_RQ_RFM12_GET, 0, 0, buf, sizeof (buf),
 | 
| 135 |         5000
 | 
| 136 |       );
 | 
| 137 | 
 | 
| 138 |       if (tmp > 0) { /* data received from usb bus */       
 | 
| 139 |         g_printf("#%d: ", buf[1]);
 | 
| 140 |         
 | 
| 141 |         if (buf[2] != 0) {
 | 
| 142 |           // Empfangsbestätigung senden
 | 
| 143 |           receiveReturn[1] = buf[1];
 | 
| 144 |           receiveReturn[2] = 0xAC;
 | 
| 145 |           
 | 
| 146 |           usb_control_msg (udhandle,
 | 
| 147 |             USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_OUT,
 | 
| 148 |             RFMUSB_RQ_RFM12_PUT, USB_TXPACKET, 0, receiveReturn, sizeof receiveReturn,
 | 
| 149 |             5000
 | 
| 150 |           );
 | 
| 151 |           rfmData = "/data/";
 | 
| 152 | 
 | 
| 153 |           for (i=3; i<tmp; i++) {
 | 
| 154 |             g_printf("%.2x ", buf[i]);
 | 
| 155 |             g_snprintf(temp, sizeof temp, "%.2x", buf[i]);
 | 
| 156 |             rfmData = g_strconcat(rfmData, temp, NULL);
 | 
| 157 |           }
 | 
| 158 |           
 | 
| 159 |           g_printf("\r\n");
 | 
| 160 |           
 | 
| 161 |           // URI erstellen und aufrufen
 | 
| 162 |           g_snprintf(uri, sizeof uri, "%s%d%s", "http://os.gibson.guinness.lan/homecontrol/rfm/input/from/", buf[1], rfmData);      
 | 
| 163 |           request(uri);
 | 
| 164 |         } else {
 | 
| 165 |           g_printf("Empfangsbestaetigung\r\n");
 | 
| 166 |         }
 | 
| 167 |       }
 | 
| 168 | 
 | 
| 169 |       usleep (10000);
 | 
| 170 |     }
 | 
| 171 |   }
 | 
| 172 |   
 | 
| 173 |   return 1;
 | 
| 174 | }
 |