[product + cart] single product / multiple cart
now when you press a button on the cart you notify the product launchpad about your presence; then the product launchpad always sends packets to you; this allows the use of multiple carts with only a single product
This commit is contained in:
parent
35f5041b7f
commit
d7e3b0a70e
@ -73,7 +73,7 @@ void s_shopping(process_event_t ev, process_data_t data) {
|
|||||||
basket_msg m;
|
basket_msg m;
|
||||||
m.msg_type = BASKET_MSG;
|
m.msg_type = BASKET_MSG;
|
||||||
m.n_products = nprod;
|
m.n_products = nprod;
|
||||||
m.customer_id = customer_id; /* TODO -- is this really needed? */
|
m.customer_id = customer_id; /* this is needed to handle multiple customers at the cash register */
|
||||||
net_send(&m, sizeof(m), &cash_address);
|
net_send(&m, sizeof(m), &cash_address);
|
||||||
status = CASH_OUT_WAIT4ACK;
|
status = CASH_OUT_WAIT4ACK;
|
||||||
}
|
}
|
||||||
@ -82,6 +82,12 @@ void s_shopping(process_event_t ev, process_data_t data) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (ev == button_hal_release_event) { /* any button will do */
|
||||||
|
/* ask product to send items to me */
|
||||||
|
msg m;
|
||||||
|
m.msg_type = START_SHOPPING_MSG;
|
||||||
|
net_send(&m, sizeof(m), NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void s_cash_out_wait4ack(process_event_t ev, process_data_t data) {
|
void s_cash_out_wait4ack(process_event_t ev, process_data_t data) {
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
#include "sys/etimer.h"
|
#include "sys/etimer.h"
|
||||||
#include "sys/process.h"
|
#include "sys/process.h"
|
||||||
|
|
||||||
|
#include "os/dev/button-hal.h"
|
||||||
|
|
||||||
#include "../common/supermarket_net.h"
|
#include "../common/supermarket_net.h"
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
#include "sendrecv.h"
|
#include "sendrecv.h"
|
||||||
|
@ -15,7 +15,8 @@ enum message_type {
|
|||||||
PRODUCT_PARTIAL_LIST_MSG, /* from cart to cash */
|
PRODUCT_PARTIAL_LIST_MSG, /* from cart to cash */
|
||||||
BASKET_MSG,
|
BASKET_MSG,
|
||||||
START_OF_LIST_PRODUCTS_MSG,
|
START_OF_LIST_PRODUCTS_MSG,
|
||||||
PRODUCT_PARTIAL_LIST_ACK /* everytime the cash register receives a product message, it sends an ack to the cart so that the cart can send the next product message */
|
PRODUCT_PARTIAL_LIST_ACK, /* everytime the cash register receives a product message, it sends an ack to the cart so that the cart can send the next product message */
|
||||||
|
START_SHOPPING_MSG
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct msg {
|
typedef struct msg {
|
||||||
|
@ -16,8 +16,7 @@
|
|||||||
#define LOG_MODULE "App"
|
#define LOG_MODULE "App"
|
||||||
#define LOG_LEVEL LOG_LEVEL_INFO
|
#define LOG_LEVEL LOG_LEVEL_INFO
|
||||||
|
|
||||||
/* Hardcoded MAC Address for cart */
|
/* MAC Address for cart -- This emulates the RFID tag */
|
||||||
/* This is used only to emulate the RFID tag */
|
|
||||||
static linkaddr_t dest_addr = {{0x00, 0x12, 0x4b, 0x00, 0x0f, 0x82, 0x00, 0x04}};
|
static linkaddr_t dest_addr = {{0x00, 0x12, 0x4b, 0x00, 0x0f, 0x82, 0x00, 0x04}};
|
||||||
|
|
||||||
product_t product_list[] = {
|
product_t product_list[] = {
|
||||||
@ -43,12 +42,22 @@ void scan_product(product_t* p){
|
|||||||
LOG_INFO_("\n");
|
LOG_INFO_("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void net_recv(const void* data, uint16_t len, const linkaddr_t* src, const linkaddr_t* dst) {
|
||||||
|
if (((msg*)data)->msg_type == START_SHOPPING_MSG) {
|
||||||
|
printf("Now sending products to new cart\n");
|
||||||
|
memcpy(&dest_addr, src, sizeof(src));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
PROCESS_THREAD(product_proc, ev, data){
|
PROCESS_THREAD(product_proc, ev, data){
|
||||||
PROCESS_BEGIN();
|
PROCESS_BEGIN();
|
||||||
// init random number generator
|
// init random number generator
|
||||||
unsigned int magic_seed = 12; // oooh :o
|
unsigned int magic_seed = 12;
|
||||||
srand(magic_seed);
|
srand(magic_seed);
|
||||||
|
|
||||||
|
// init network subsystem
|
||||||
|
nullnet_set_input_callback(net_recv);
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
PROCESS_YIELD();
|
PROCESS_YIELD();
|
||||||
if (ev == button_hal_press_event){
|
if (ev == button_hal_press_event){
|
||||||
|
Loading…
Reference in New Issue
Block a user