Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- http://scratch-tales.blogspot.ru/
- #include <stdlib.h>
- #include <stdio.h>
- #include <sys/ioctl.h>
- #include <string.h>
- #include <pthread.h>
- #include <stdbool.h>
- #include <time.h>
- #include "/usr/local/include/mysql/mysql.h"
- #include "/usr/local/include/usb.h"
- #include "/usr/local/include/libconfig.h"
- #define DEV_VENDOR_ID 0x16c0
- #define DEV_PRODUCT_ID 0x05df
- #define USB_DELAY_CONST 50000
- const static int timeout = 5000;
- unsigned char USB_BUFFER_READ[8];
- unsigned char USB_BUFFER_WRITE[8];
- unsigned char query_datetime[25];
- usb_dev_handle *tempura_handle = NULL;
- void error_loger(unsigned char error_string[200])
- {
- FILE *errorlog;
- time_t rawtime;
- struct tm *ctime;
- unsigned char error_out[200];
- time(&rawtime);
- ctime = localtime(&rawtime);
- strncpy(error_out, asctime(ctime), sizeof(error_out));
- strlcat(error_out, ":", sizeof(error_out));
- strlcat(error_out, error_string, sizeof(error_out));
- errorlog = fopen("tempura_error.log","a");
- 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);
- fclose(errorlog);
- }
- void zero_usb_bufer()/*zerro usb bufer for read and writr*/
- {
- int i;
- for (i=0; i<8; i++)
- {
- USB_BUFFER_READ[i] = 0;
- USB_BUFFER_WRITE[i] = 0;
- }
- }
- void usb_pause(unsigned long long ms_delay)/*usb delay in ms*/
- {
- unsigned long long i;
- for (i=0; i<ms_delay*USB_DELAY_CONST; i++);
- }
- int usb_get_content()
- {
- int result = 0;
- result = usb_control_msg(tempura_handle, 0xA1, 0x01, 0x300, 0, (char *)USB_BUFFER_READ, 8,timeout);
- return result;
- }
- int usb_set_content()
- {
- int result = 0;
- result = usb_control_msg(tempura_handle, 0x21, 0x09, 0x300, 0, (char *)USB_BUFFER_WRITE, 8,timeout);
- return result;
- }
- int usb_device_reset()
- {
- int result = 0;
- zero_usb_bufer();
- USB_BUFFER_WRITE[0] = 0x18;
- USB_BUFFER_WRITE[1] = 0x48;
- usb_set_content();
- usb_pause(1);
- usb_get_content();
- if (USB_BUFFER_READ[0] == 0x18 && USB_BUFFER_READ[1] == 0x48)
- result = 0;
- else
- {
- result = -1;
- error_loger("Device reset error");
- }
- return result;
- }
- unsigned char read_byte_from_device()
- {
- unsigned char result[1];
- zero_usb_bufer();
- USB_BUFFER_WRITE[0] = 0x18;
- USB_BUFFER_WRITE[1] = 0x88;
- USB_BUFFER_WRITE[2] = 0xFF;
- usb_set_content();
- usb_pause(1);
- usb_get_content();
- if (USB_BUFFER_READ[0] == 0x18 && USB_BUFFER_READ[1] == 0x88)
- result[0] = USB_BUFFER_READ[2];
- else
- {
- result[0] = 0xFF;
- error_loger("Read byte from device failed");
- }
- return result[0];
- }
- int write_byte_to_device(unsigned char byte)
- {
- int result;
- zero_usb_bufer();
- USB_BUFFER_WRITE[0] = 0x18;
- USB_BUFFER_WRITE[1] = 0x88;
- USB_BUFFER_WRITE[2] = byte;
- usb_set_content();
- usb_pause(1);
- usb_get_content();
- if (USB_BUFFER_READ[2] == byte)
- result = 0;
- else
- {
- result = -1;
- error_loger("Write byte to device failed");
- }
- return result;
- }
- 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])
- {
- int result = 0, mysql_result = 0;
- unsigned char tempura_query[100] = "INSERT INTO tempura_storage (measure_time, temperature) VALUES ('";
- unsigned char error_message[100];
- MYSQL tempura_mysql;
- mysql_init(&tempura_mysql);
- if (!mysql_real_connect(&tempura_mysql,host,dbuser,dbpass,dbname,0,NULL,0))
- {
- strncpy(error_message, mysql_error(&tempura_mysql), sizeof(error_message));
- error_loger(error_message);
- }
- strlcat(tempura_query, cdate, sizeof(tempura_query));
- strlcat(tempura_query, atemp, sizeof(tempura_query));
- strlcat(tempura_query, "')", sizeof(tempura_query));
- mysql_result = mysql_query(&tempura_mysql,tempura_query);
- if(mysql_result != 0)
- {
- strncpy(error_message, mysql_error(&tempura_mysql), sizeof(error_message));
- error_loger(error_message);
- }
- mysql_close(&tempura_mysql);
- return result;
- }
- void datetime_query_part()
- {
- struct tm *current_time;
- unsigned char temp[6];
- time_t time_handle;
- current_time = (struct tm *)malloc(sizeof(struct tm *));
- time_handle = time(NULL);
- current_time = localtime(&time_handle);
- snprintf(temp, 5, "%i", (current_time->tm_year+1900));
- strlcat(query_datetime, temp, sizeof(query_datetime));
- strlcat(query_datetime, "-", sizeof(query_datetime));
- snprintf(temp, 3, "%i", (current_time->tm_mon+1));
- strlcat(query_datetime, temp, sizeof(query_datetime));
- strlcat(query_datetime, "-", sizeof(query_datetime));
- snprintf(temp, 3, "%i", current_time->tm_mday);
- strlcat(query_datetime, temp, sizeof(query_datetime));
- strlcat(query_datetime, " ", sizeof(query_datetime));
- snprintf(temp, 3, "%i", current_time->tm_hour);
- strlcat(query_datetime, temp, sizeof(query_datetime));
- strlcat(query_datetime, ":", sizeof(query_datetime));
- snprintf(temp, 3, "%i", current_time->tm_min);
- strlcat(query_datetime, temp, sizeof(query_datetime));
- strlcat(query_datetime, ":", sizeof(query_datetime));
- snprintf(temp, 3, "%i", current_time->tm_sec);
- strlcat(query_datetime, temp, sizeof(query_datetime));
- strlcat(query_datetime, "','", sizeof(query_datetime));
- free(current_time);
- }
- usb_dev_handle *usb_find_device()
- {
- struct usb_bus *bus;
- struct usb_device *dev;
- usb_dev_handle *handle;
- handle = (usb_dev_handle *)malloc(sizeof(usb_dev_handle *));
- dev = (struct usb_device *)malloc(sizeof(struct usb_device));
- bus = (struct usb_bus *)malloc(sizeof(struct usb_bus));
- for (bus = usb_busses; bus; bus = bus->next) {
- for (dev = bus->devices; dev; dev = dev->next) {
- if (dev->descriptor.idVendor == DEV_VENDOR_ID && dev->descriptor.idProduct == DEV_PRODUCT_ID )
- {
- if (!(handle = usb_open(dev)))
- {
- free(dev);
- free(bus);
- return NULL;
- }
- free(dev);
- free(bus);
- return handle;
- }
- }
- }
- error_loger("Device not found");
- free(dev);
- free(bus);
- return NULL;
- }
- usb_dev_handle *usb_setup_device()
- {
- int result;
- usb_set_debug(0);
- usb_init();
- usb_find_busses();
- usb_find_devices();
- if(!(tempura_handle = usb_find_device()))
- {
- return NULL;
- }
- usb_detach_kernel_driver_np(tempura_handle, 0);
- /*result = usb_set_configuration(tempura_handle, 1);
- if (result < 0)
- {
- error_loger("Could not set configuration");
- return NULL;
- }*/
- result = usb_claim_interface(tempura_handle, 0);
- if (result < 0)
- {
- error_loger("Claim interface failed");
- return NULL;
- }
- return tempura_handle;
- }
- int main()
- {
- int result = 0, open_dev_result = 0;
- unsigned int tempint = 0, temppoint = 0;
- unsigned char temp_h, temp_l, air_temp[7], t_low[4];
- tempura_handle = (usb_dev_handle *)malloc(sizeof(usb_dev_handle *));
- usb_setup_device();
- if (tempura_handle)
- {
- zero_usb_bufer();
- usb_device_reset();
- write_byte_to_device(0xCC);
- write_byte_to_device(0x44);
- usb_pause(1000);
- usb_device_reset();
- write_byte_to_device(0xCC);
- write_byte_to_device(0xBE);
- temp_l = read_byte_from_device();
- temp_h = read_byte_from_device();
- tempint = ((temp_h << 4) & 0x70)|(temp_l >> 4);
- temppoint = temp_l & 0x0F;
- temppoint = temppoint * 625;
- snprintf(air_temp,3,"%i",tempint);
- snprintf(t_low,3,"%i",temppoint);
- strlcat(air_temp, ".", sizeof(air_temp));
- strlcat(air_temp, t_low, sizeof(air_temp));
- datetime_query_part();
- tempuradb_update("127.0.0.1", "tempdbuser", "tempdbuser", "tempuradb", query_datetime, air_temp);
- usb_close(tempura_handle);
- }
- free(tempura_handle);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement