#include "net/netstack.h" #include "net/nullnet/nullnet.h" #include #include #include "sys/log.h" #define LOG_MODULE "App" #define LOG_LEVEL LOG_LEVEL_INFO #include "os/dev/serial-line.h" #include "arch/cpu/cc26x0-cc13x0/dev/cc26xx-uart.h" #include #define MAX_CUSTOMERS 20 enum message_type{CASH_OUT_MSG, PRODUCT_MSG, ITEM_ELEM_MSG, BASKET_MSG, START_OF_LIST_PRODUCTS_MSG}; typedef struct basket_msg { uint8_t n_products; uint8_t customer_id; linkaddr_t* address; }basket_msg; typedef struct user_invoice { uint8_t n_prods; float total_sum; uint8_t customer_id; linkaddr_t* address_basket; uint8_t empty; }user_invoice; typedef struct cash_out_msg { uint8_t customer_id; }cash_out_msg; typedef struct product_msg{ uint8_t customer_id; uint8_t product_id; float prize; }product_msg; typedef struct msg{ enum message_type msg_type; cash_out_msg cash_out; product_msg product; basket_msg basket; }msg; PROCESS(cassa_main_process, "Cassa process"); AUTOSTART_PROCESSES(&cassa_main_process); static uint8_t invoice_index(uint32_t customer_id, user_invoice invoices[]) { uint8_t i = 0; for(i = 0; i< MAX_CUSTOMERS;i++) { if (invoices[i].empty==0 && customer_id == invoices[i].customer_id) return i; } return -1; } static uint8_t index_free_spot(user_invoice invoices[]) { uint8_t i = 0; for(i = 0;i 0) { invoices[index].total_sum += received_msg.product.prize; invoices[index].n_prods--; } if (invoices[index].n_prods == 0) { printf("Total sum for client %d is %f\n", (int)invoices[index].customer_id, invoices[index].total_sum); invoices[index].empty = 1; } }else printf("Customer with that id is not associated to any basket!"); } } } PROCESS_THREAD(cassa_main_process, ev, data) { PROCESS_BEGIN(); static uint8_t customer_id; static msg bro_customer_id; cc26xx_uart_set_input(serial_line_input_byte); serial_line_init(); nullnet_buf = (uint8_t*)&bro_customer_id; nullnet_set_input_callback(input_callback); //this should be moved down? printf("Dear customer, insert your card id\n"); while (true) { PROCESS_WAIT_EVENT_UNTIL(ev == serial_line_event_message); printf("Customer's id: %s\n", (char*)data); customer_id = atoi(data); printf("id: %d\n", (int)customer_id); bro_customer_id.msg_type = CASH_OUT_MSG; bro_customer_id.cash_out.customer_id = customer_id; LOG_INFO("Sending BROADCAST customer id: %d\n", (int)customer_id); LOG_INFO_LLADDR(NULL); LOG_INFO_("\n"); nullnet_len = sizeof(bro_customer_id); NETSTACK_NETWORK.output(NULL); } PROCESS_END(); }