diff --git a/project/Giomba/cart.c b/project/Giomba/cart.c index 65b830467..5a0955646 100644 --- a/project/Giomba/cart.c +++ b/project/Giomba/cart.c @@ -20,7 +20,8 @@ PROCESS_THREAD(cart_main_process, ev, data) { // SENSORS_ACTIVATE(batmon_sensor); /*** Variables initialization ***/ - status = NOT_ASSOCIATED; + // status = NOT_ASSOCIATED; // TODO DEBUG + status = SHOPPING; etimer_set(&broadcast_timer, 5 * CLOCK_SECOND); /*** Subsystem initialization ***/ diff --git a/project/Giomba/sendrecv.c b/project/Giomba/sendrecv.c index 10ed7da54..955cda0fd 100644 --- a/project/Giomba/sendrecv.c +++ b/project/Giomba/sendrecv.c @@ -33,7 +33,7 @@ void net_recv(const void* data, uint16_t len, const linkaddr_t* src, const linka event = CART_EVENT_ASSIGNED; process_post(&cart_main_process, PROCESS_EVENT_MSG, NULL); break; - case PRODUCT_MSG: + case ITEM_MSG: event = CART_EVENT_NEW_PRODUCT; process_post(&cart_main_process, PROCESS_EVENT_MSG, NULL); break; diff --git a/project/Giomba/status.c b/project/Giomba/status.c index e043f2710..9b9913e5f 100644 --- a/project/Giomba/status.c +++ b/project/Giomba/status.c @@ -6,7 +6,7 @@ enum CartStatus status; struct etimer broadcast_timer; linkaddr_t assigner_address; linkaddr_t cash_address; -uint32_t customer_id; +uint32_t customer_id = 1234; uint8_t nprod; product_t list[MAX_PRODUCT]; @@ -42,11 +42,10 @@ void s_associated(process_event_t ev, process_data_t data) { } if (ev == PROCESS_EVENT_MSG && event == 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; + printf("[I] Assigned to customer id %d\n", (int)customer_id); status = SHOPPING; } - } void s_shopping(process_event_t ev, process_data_t data) { @@ -63,26 +62,36 @@ void s_shopping(process_event_t ev, process_data_t data) { } if (event == CART_EVENT_CASH_OUT) { /* answer the cash if you are the one with that customer_id */ - basket_msg m; - m.n_products = nprod - 1; - m.customer_id = customer_id; /* TODO -- is this really needed? */ - net_send(&m, sizeof(m), &cash_address); - status = CASH_OUT_WAIT4ACK; + if (((cash_out_msg*)pkt.data)->customer_id == customer_id) { + printf("[I] It's me! I'm cashing out :-)\n"); + basket_msg m; + m.msg_type = BASKET_MSG; + m.n_products = nprod - 1; + m.customer_id = customer_id; /* TODO -- is this really needed? */ + net_send(&m, sizeof(m), &cash_address); + status = CASH_OUT_WAIT4ACK; + } + else { + printf("[I] I am customer id %d; customer id %d is cashing out nearby\n", (int)customer_id, (int)((cash_out_msg*)pkt.data)->customer_id ); + } } } } void s_cash_out_wait4ack(process_event_t ev, process_data_t data) { /* Just wait for cash ack */ - if (ev == CART_EVENT_CASH_OUT_ACK) { + if (event == CART_EVENT_CASH_OUT_ACK) { + printf("[I] Acknoweledgment received fromc cash. Now I'll send the list.\n"); status = CASH_OUT_SEND_LIST; + /* this wakes up the process that otherwise would wait indefinitely for an event that will never occurr */ + process_post(&cart_main_process, PROCESS_EVENT_MSG, NULL); } } void s_cash_out_send_list(process_event_t ev, process_data_t data) { /* Send list, then go back to initial state */ for (uint8_t i = 0; i < nprod; ++i) { - printf("[I] Sending product %d of %d...", i, nprod - 1); + printf("[I] Sending product %d of %d...\n", i, nprod - 1); product_msg m; m.msg_type = PRODUCT_MSG; m.customer_id = customer_id; @@ -95,6 +104,8 @@ void s_cash_out_send_list(process_event_t ev, process_data_t data) { customer_id = 0; memset(&cash_address, 0, sizeof(cash_address)); + printf("[I] END. Go back to ASSOCIATED status\n"); + etimer_reset(&broadcast_timer); status = ASSOCIATED; }