Advertisement
autumnrd

Get data from BM1707 an put in db

Jul 10th, 2014
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.89 KB | None | 0 0
  1. http://scratch-tales.blogspot.ru/
  2.  
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <sys/ioctl.h>
  6. #include <string.h>
  7. #include <pthread.h>
  8. #include <stdbool.h>
  9. #include <time.h>
  10. #include "/usr/local/include/mysql/mysql.h"
  11. #include "/usr/local/include/usb.h"
  12. #include "/usr/local/include/libconfig.h"
  13.  
  14. #define DEV_VENDOR_ID 0x16c0
  15. #define DEV_PRODUCT_ID 0x05df
  16. #define USB_DELAY_CONST 50000
  17.  
  18. const static int timeout = 5000;
  19. unsigned char USB_BUFFER_READ[8];
  20. unsigned char USB_BUFFER_WRITE[8];
  21. unsigned char query_datetime[25];
  22. usb_dev_handle *tempura_handle = NULL;
  23.  
  24. void error_loger(unsigned char error_string[200])
  25. {
  26.     FILE *errorlog;
  27.     time_t rawtime;
  28.     struct tm *ctime;
  29.     unsigned char error_out[200];
  30.  
  31.     time(&rawtime);
  32.     ctime = localtime(&rawtime);
  33.  
  34.     strncpy(error_out, asctime(ctime), sizeof(error_out));
  35.     strlcat(error_out, ":", sizeof(error_out));
  36.     strlcat(error_out, error_string, sizeof(error_out));
  37.  
  38.     errorlog = fopen("tempura_error.log","a");
  39.     fprintf(errorlog,"%d-%d-%d %d:%d:%d :  %s\n",(ctime->tm_year+1900), (ctime->tm_mon+1), ctime->tm_mday, ctime->tm_hour, ctime->tm_min, ctime->tm_sec, error_string);
  40.  
  41.     fclose(errorlog);
  42. }
  43. void zero_usb_bufer()/*zerro usb bufer for read and writr*/
  44. {
  45.         int i;
  46.  
  47.         for (i=0; i<8; i++)
  48.         {
  49.                 USB_BUFFER_READ[i] = 0;
  50.                 USB_BUFFER_WRITE[i] = 0;
  51.         }
  52. }
  53.  
  54. void usb_pause(unsigned long long ms_delay)/*usb delay in ms*/
  55. {
  56.         unsigned long long i;
  57.  
  58.         for (i=0; i<ms_delay*USB_DELAY_CONST; i++);
  59. }
  60.  
  61. int usb_get_content()
  62. {
  63.         int result = 0;
  64.  
  65.         result = usb_control_msg(tempura_handle, 0xA1, 0x01, 0x300, 0, (char *)USB_BUFFER_READ, 8,timeout);
  66.     return result;
  67. }
  68.  
  69. int usb_set_content()
  70. {
  71.         int result = 0;
  72.  
  73.         result = usb_control_msg(tempura_handle, 0x21, 0x09, 0x300, 0, (char *)USB_BUFFER_WRITE, 8,timeout);
  74.     return result;
  75. }
  76.  
  77. int usb_device_reset()
  78. {
  79.     int result = 0;
  80.  
  81.     zero_usb_bufer();
  82.     USB_BUFFER_WRITE[0] = 0x18;
  83.     USB_BUFFER_WRITE[1] = 0x48;
  84.  
  85.     usb_set_content();
  86.     usb_pause(1);
  87.     usb_get_content();
  88.  
  89.     if (USB_BUFFER_READ[0] == 0x18 && USB_BUFFER_READ[1] == 0x48)
  90.         result = 0;
  91.     else
  92.     {
  93.         result = -1;
  94.         error_loger("Device reset error");
  95.     }
  96.     return result;
  97. }
  98.  
  99. unsigned char read_byte_from_device()
  100. {
  101.     unsigned char result[1];
  102.  
  103.     zero_usb_bufer();
  104.  
  105.     USB_BUFFER_WRITE[0] = 0x18;
  106.     USB_BUFFER_WRITE[1] = 0x88;
  107.     USB_BUFFER_WRITE[2] = 0xFF;
  108.  
  109.     usb_set_content();
  110.     usb_pause(1);
  111.     usb_get_content();
  112.  
  113.     if (USB_BUFFER_READ[0] == 0x18 && USB_BUFFER_READ[1] == 0x88)
  114.         result[0] = USB_BUFFER_READ[2];
  115.     else
  116.     {
  117.         result[0] = 0xFF;
  118.         error_loger("Read byte from device failed");
  119.     }
  120.     return result[0];
  121. }
  122.  
  123. int write_byte_to_device(unsigned char byte)
  124.  
  125. {
  126.     int result;
  127.  
  128.     zero_usb_bufer();
  129.  
  130.     USB_BUFFER_WRITE[0] = 0x18;
  131.     USB_BUFFER_WRITE[1] = 0x88;
  132.     USB_BUFFER_WRITE[2] = byte;
  133.  
  134.     usb_set_content();
  135.     usb_pause(1);
  136.     usb_get_content();
  137.  
  138.     if (USB_BUFFER_READ[2] == byte)
  139.         result = 0;
  140.     else
  141.     {
  142.         result = -1;
  143.         error_loger("Write byte to device failed");
  144.     }
  145.     return result;
  146. }
  147.  
  148. int tempuradb_update(unsigned char host[15], unsigned char dbuser[20], unsigned char dbpass[20], unsigned char dbname[20], unsigned char cdate[25], unsigned char atemp[4])
  149. {
  150.     int result = 0, mysql_result = 0;
  151.     unsigned char tempura_query[100] = "INSERT INTO tempura_storage (measure_time, temperature) VALUES ('";
  152.     unsigned char error_message[100];
  153.  
  154.     MYSQL tempura_mysql;
  155.  
  156.     mysql_init(&tempura_mysql);
  157.         if (!mysql_real_connect(&tempura_mysql,host,dbuser,dbpass,dbname,0,NULL,0))
  158.     {
  159.         strncpy(error_message, mysql_error(&tempura_mysql), sizeof(error_message));
  160.         error_loger(error_message);
  161.     }
  162.  
  163.     strlcat(tempura_query, cdate, sizeof(tempura_query));
  164.         strlcat(tempura_query, atemp, sizeof(tempura_query));
  165.         strlcat(tempura_query, "')", sizeof(tempura_query));
  166.  
  167.     mysql_result = mysql_query(&tempura_mysql,tempura_query);
  168.         if(mysql_result != 0)
  169.     {
  170.         strncpy(error_message, mysql_error(&tempura_mysql), sizeof(error_message));
  171.                 error_loger(error_message);
  172.     }
  173.  
  174.     mysql_close(&tempura_mysql);
  175.     return result;
  176. }
  177.  
  178. void datetime_query_part()
  179. {
  180.     struct tm *current_time;
  181.         unsigned char temp[6];
  182.     time_t time_handle;
  183.     current_time = (struct tm *)malloc(sizeof(struct tm *));
  184.  
  185.     time_handle = time(NULL);
  186.         current_time = localtime(&time_handle);
  187.  
  188.     snprintf(temp, 5, "%i", (current_time->tm_year+1900));
  189.     strlcat(query_datetime, temp, sizeof(query_datetime));
  190.     strlcat(query_datetime, "-", sizeof(query_datetime));
  191.     snprintf(temp, 3, "%i", (current_time->tm_mon+1));
  192.     strlcat(query_datetime, temp, sizeof(query_datetime));
  193.         strlcat(query_datetime, "-", sizeof(query_datetime));
  194.     snprintf(temp, 3, "%i", current_time->tm_mday);
  195.     strlcat(query_datetime, temp, sizeof(query_datetime));
  196.         strlcat(query_datetime, " ", sizeof(query_datetime));
  197.     snprintf(temp, 3, "%i", current_time->tm_hour);
  198.     strlcat(query_datetime, temp, sizeof(query_datetime));
  199.         strlcat(query_datetime, ":", sizeof(query_datetime));
  200.     snprintf(temp, 3, "%i", current_time->tm_min);
  201.     strlcat(query_datetime, temp, sizeof(query_datetime));
  202.         strlcat(query_datetime, ":", sizeof(query_datetime));
  203.     snprintf(temp, 3, "%i", current_time->tm_sec);
  204.     strlcat(query_datetime, temp, sizeof(query_datetime));
  205.     strlcat(query_datetime, "','", sizeof(query_datetime));
  206.  
  207.     free(current_time);
  208. }
  209.  
  210. usb_dev_handle *usb_find_device()
  211. {
  212.     struct usb_bus *bus;
  213.     struct usb_device *dev;
  214.     usb_dev_handle *handle;
  215.    
  216.     handle = (usb_dev_handle *)malloc(sizeof(usb_dev_handle *));
  217.         dev = (struct usb_device *)malloc(sizeof(struct usb_device));
  218.         bus = (struct usb_bus *)malloc(sizeof(struct usb_bus));
  219.  
  220.     for (bus = usb_busses; bus; bus = bus->next) {
  221.         for (dev = bus->devices; dev; dev = dev->next) {
  222.             if (dev->descriptor.idVendor == DEV_VENDOR_ID && dev->descriptor.idProduct == DEV_PRODUCT_ID )
  223.             {
  224.                                 if (!(handle = usb_open(dev)))
  225.                 {
  226.                         free(dev);
  227.                         free(bus);
  228.                                         return NULL;
  229.                                 }
  230.                 free(dev);
  231.                 free(bus);
  232.                                 return handle;
  233.                         }
  234.                 }
  235.         }
  236.     error_loger("Device not found");
  237.     free(dev);
  238.     free(bus);
  239.         return NULL;
  240. }
  241.  
  242. usb_dev_handle *usb_setup_device()
  243. {
  244.     int result;
  245.  
  246.     usb_set_debug(0);
  247.     usb_init();
  248.     usb_find_busses();
  249.     usb_find_devices();
  250.  
  251.     if(!(tempura_handle = usb_find_device()))
  252.     {
  253.         return NULL;
  254.     }
  255.  
  256.     usb_detach_kernel_driver_np(tempura_handle, 0);
  257.  
  258.     /*result = usb_set_configuration(tempura_handle, 1);
  259.     if (result < 0)
  260.     {
  261.         error_loger("Could not set configuration");
  262.         return NULL;
  263.     }*/
  264.  
  265.     result = usb_claim_interface(tempura_handle, 0);
  266.     if (result < 0)
  267.     {
  268.         error_loger("Claim interface failed");
  269.         return NULL;
  270.     }
  271.     return tempura_handle;
  272. }
  273.  
  274. int main()
  275. {
  276.     int result = 0, open_dev_result = 0;
  277.     unsigned int tempint = 0, temppoint = 0;
  278.     unsigned char temp_h, temp_l, air_temp[7], t_low[4];
  279.  
  280.     tempura_handle = (usb_dev_handle *)malloc(sizeof(usb_dev_handle *));
  281.    
  282.     usb_setup_device();
  283.     if (tempura_handle)
  284.     {
  285.         zero_usb_bufer();
  286.         usb_device_reset();
  287.         write_byte_to_device(0xCC);
  288.         write_byte_to_device(0x44);
  289.         usb_pause(1000);
  290.         usb_device_reset();
  291.         write_byte_to_device(0xCC);
  292.         write_byte_to_device(0xBE);
  293.         temp_l = read_byte_from_device();
  294.         temp_h = read_byte_from_device();
  295.  
  296.         tempint = ((temp_h << 4) & 0x70)|(temp_l >> 4);
  297.         temppoint = temp_l & 0x0F;
  298.         temppoint = temppoint * 625;
  299.         snprintf(air_temp,3,"%i",tempint);
  300.         snprintf(t_low,3,"%i",temppoint);
  301.         strlcat(air_temp, ".", sizeof(air_temp));
  302.         strlcat(air_temp, t_low, sizeof(air_temp));
  303.  
  304.         datetime_query_part();
  305.             tempuradb_update("127.0.0.1", "tempdbuser", "tempdbuser", "tempuradb", query_datetime, air_temp);
  306.         usb_close(tempura_handle);
  307.     }
  308.  
  309.     free(tempura_handle);
  310.     return 0;
  311. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement