diff --git a/project/.gitignore b/project/.gitignore new file mode 100644 index 000000000..1377554eb --- /dev/null +++ b/project/.gitignore @@ -0,0 +1 @@ +*.swp diff --git a/project/Giomba/cart.c b/project/Giomba/cart.c index ac026592a..29bf94fdd 100644 --- a/project/Giomba/cart.c +++ b/project/Giomba/cart.c @@ -21,9 +21,8 @@ PROCESS_THREAD(cart_main_process, ev, data) { // SENSORS_ACTIVATE(batmon_sensor); /*** Variables initialization ***/ - status = NOT_ASSOCIATED; - etimer_set(&broadcast_timer, 10 * CLOCK_SECOND); + etimer_set(&broadcast_timer, 5 * CLOCK_SECOND); /*** Subsystem initialization ***/ net_init(); @@ -39,7 +38,9 @@ PROCESS_THREAD(cart_main_process, ev, data) { s_not_associated(ev, data); break; break; - case ASSOCIATED: break; + case ASSOCIATED: + s_associated(ev, data); + break; case SHOPPING: break; case CASHOUT: break; default: status = NOT_ASSOCIATED; break; diff --git a/project/Giomba/event.h b/project/Giomba/event.h index f938ff1ab..803a3e5e0 100644 --- a/project/Giomba/event.h +++ b/project/Giomba/event.h @@ -2,7 +2,8 @@ #define EVENT_H enum CartEvent { - CART_EVENT_ASSOCIATED + CART_EVENT_ASSOCIATED, + CART_EVENT_ASSIGNED } event; #endif diff --git a/project/Giomba/sendrecv.c b/project/Giomba/sendrecv.c index 2abb49459..1368419c2 100644 --- a/project/Giomba/sendrecv.c +++ b/project/Giomba/sendrecv.c @@ -24,11 +24,15 @@ void net_recv(const void* data, uint16_t len, const linkaddr_t* src, const linka LOG_INFO("Received %d bytes from ", len); LOG_INFO_LLADDR(src); LOG_INFO("\n"); - switch ( ((struct Msg*)data)->type ) { + switch ( ((msg*)data)->msg_type ) { case ASSOCIATION_REPLY_MSG: event = CART_EVENT_ASSOCIATED; process_post(&cart_main_process, PROCESS_EVENT_MSG, NULL); break; + case ASSIGNMENT_MSG: + event = CART_EVENT_ASSIGNED; + process_post(&cart_main_process, PROCESS_EVENT_MSG, NULL); + break; default: LOG_INFO("[W] message type unknown\n"); break; diff --git a/project/Giomba/status.c b/project/Giomba/status.c index 530265f87..842e81916 100644 --- a/project/Giomba/status.c +++ b/project/Giomba/status.c @@ -3,15 +3,16 @@ enum CartStatus status; struct etimer broadcast_timer; linkaddr_t assigner_address; +uint32_t customer_id; void s_not_associated(process_event_t ev, process_data_t data) { if (ev == PROCESS_EVENT_TIMER) { /* at time expiration, send broadcast message to request association with assigner */ if (etimer_expired(&broadcast_timer)) { printf("[I] Sending association request msg\n"); - struct Msg msg; - msg.type = ASSOCIATION_REQUEST_MSG; - net_send(&msg, sizeof(msg), NULL); + msg m; + m.msg_type = ASSOCIATION_REQUEST_MSG; + net_send(&m, sizeof(m), NULL); etimer_reset(&broadcast_timer); } } @@ -23,4 +24,23 @@ void s_not_associated(process_event_t ev, process_data_t data) { } } +void s_associated(process_event_t ev, process_data_t data) { + if (ev == PROCESS_EVENT_TIMER) { + /* now send battery level */ + printf("[I] Sending battery level\n"); + struct battery_msg m; + m.msg_type = BATTERY_STATUS_MSG; + m.battery_percentage = 77; + net_send(&m, sizeof(m), &assigner_address); + etimer_reset(&broadcast_timer); + } + if (ev == PROCESS_EVENT_MSG && *((enum CartEvent*)data) == CART_EVENT_ASSIGNED) { + /* cart has been assigned to a new customer */ + printf("[I] Assigned to customer\n"); + customer_id = ((assign_msg*)pkt.data)->customer_id; + status = SHOPPING; + } + +} + diff --git a/project/Giomba/status.h b/project/Giomba/status.h index 7a4c8c1f4..b8c55af01 100644 --- a/project/Giomba/status.h +++ b/project/Giomba/status.h @@ -20,5 +20,6 @@ extern enum CartStatus status; extern struct etimer broadcast_timer; void s_not_associated(process_event_t ev, process_data_t data); +void s_associated(process_event_t ev, process_data_t data); #endif diff --git a/project/common/supermarket_net.h b/project/common/supermarket_net.h index fa7af55ee..11c04233f 100644 --- a/project/common/supermarket_net.h +++ b/project/common/supermarket_net.h @@ -7,18 +7,17 @@ enum message_type { BATTERY_STATUS_MSG, ASSIGNMENT_MSG, CASH_OUT_MSG, - PRODUCT_MSG, + PRODUCT_MSG, ITEM_ELEM_MSG, BASKET_MSG, - START_OF_LIST_PRODUCTS_MSG + START_OF_LIST_PRODUCTS_MSG }; - typedef struct msg { enum message_type msg_type; }msg; -typedef struct assoc_req_msg +typedef struct assoc_req_msg { enum message_type msg_type; uint8_t battery_percentage; @@ -43,15 +42,14 @@ typedef struct assign_msg { enum message_type msg_type; uint32_t customer_id; -}assing_msg; +}assign_msg; typedef struct basket_msg -{ +{ enum message_type msg_type; uint8_t n_products; uint8_t customer_id; - }basket_msg; @@ -64,7 +62,7 @@ typedef struct cash_out_msg typedef struct product_msg { - enum message_type msg_type; + enum message_type msg_type; uint8_t customer_id; uint8_t product_id; float prize; @@ -76,10 +74,9 @@ typedef struct user_invoice uint8_t n_prods; float total_sum; uint8_t customer_id; - linkaddr_t* address_basket; uint8_t empty; - - + + }user_invoice; #endif