void u8g_FirstPageLL(u8g_t *u8g, u8g_dev_t *dev) { u8g->state_cb(U8G_STATE_MSG_BACKUP_ENV); u8g->state_cb(U8G_STATE_MSG_RESTORE_U8G); u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_PAGE_FIRST, NULL); u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_GET_PAGE_BOX, &(u8g->current_page)); u8g->state_cb(U8G_STATE_MSG_RESTORE_ENV); }
uint8_t u8g_NextPageLL(u8g_t *u8g, u8g_dev_t *dev) { uint8_t r; u8g->state_cb(U8G_STATE_MSG_BACKUP_ENV); u8g->state_cb(U8G_STATE_MSG_RESTORE_U8G); r = u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_PAGE_NEXT, NULL); if ( r != 0 ) { u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_GET_PAGE_BOX, &(u8g->current_page)); } u8g->state_cb(U8G_STATE_MSG_RESTORE_ENV); return r; }
void u8g_DrawPixelLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y) { u8g_dev_arg_pixel_t *arg = &(u8g->arg_pixel); arg->x = x; arg->y = y; u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_SET_PIXEL, arg); }
void u8g_UpdateDimension(u8g_t *u8g) { u8g->width = u8g_GetWidthLL(u8g, u8g->dev); u8g->height = u8g_GetHeightLL(u8g, u8g->dev); u8g->mode = u8g_GetModeLL(u8g, u8g->dev); /* 9 Dec 2012: u8g_scale.c requires update of current page */ u8g_call_dev_fn(u8g, u8g->dev, U8G_DEV_MSG_GET_PAGE_BOX, &(u8g->current_page)); }
uint8_t u8g_InitLL(u8g_t *u8g, u8g_dev_t *dev) { uint8_t r; u8g->state_cb(U8G_STATE_MSG_BACKUP_ENV); r = u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_INIT, NULL); u8g->state_cb(U8G_STATE_MSG_BACKUP_U8G); u8g->state_cb(U8G_STATE_MSG_RESTORE_ENV); return r; }
/* idx: index for the palette entry (0..255) r: value for red (0..255) g: value for green (0..255) b: value for blue (0..255) */ void u8g_SetColorEntry(u8g_t *u8g, uint8_t idx, uint8_t r, uint8_t g, uint8_t b) { u8g_dev_arg_irgb_t irgb; irgb.idx = idx; irgb.r = r; irgb.g = g; irgb.b = b; u8g_call_dev_fn(u8g, u8g->dev, U8G_DEV_MSG_SET_COLOR_ENTRY, &irgb); }
void u8g_Draw8PixelLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y, uint8_t dir, uint8_t pixel) { u8g_dev_arg_pixel_t *arg = &(u8g->arg_pixel); arg->x = x; arg->y = y; arg->dir = dir; arg->pixel = pixel; u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_SET_8PIXEL, arg); }
// Lua: bool = u8g.skipPage(self) static int lu8g_skipPage( lua_State *L ) { lu8g_userdata_t *lud; if ((lud = get_lud( L )) == NULL) return 0; u8g_pb_t *pb = (u8g_pb_t *)(LU8G->dev->dev_mem); //Based on: uint8_t u8g_NextPageLL(u8g_t *u8g, u8g_dev_t *dev) uint8_t r; LU8G->state_cb(U8G_STATE_MSG_BACKUP_ENV); LU8G->state_cb(U8G_STATE_MSG_RESTORE_U8G); r = u8g_page_Next(&(pb->p)); if ( r != 0 ) { u8g_call_dev_fn(LU8G, LU8G->dev, U8G_DEV_MSG_GET_PAGE_BOX, &(LU8G->current_page)); } LU8G->state_cb(U8G_STATE_MSG_RESTORE_ENV); lua_pushboolean( L, r ); return 1; }
uint8_t u8g_SetContrastLL(u8g_t *u8g, u8g_dev_t *dev, uint8_t contrast) { return u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_CONTRAST, &contrast); }
u8g_uint_t u8g_GetModeLL(u8g_t *u8g, u8g_dev_t *dev) { return u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_GET_MODE, NULL); }
u8g_uint_t u8g_GetHeightLL(u8g_t *u8g, u8g_dev_t *dev) { u8g_uint_t r; u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_GET_HEIGHT, &r); return r; }
uint8_t u8g_IsBBXIntersectionLL(u8g_t *u8g, u8g_dev_t *dev, u8g_uint_t x, u8g_uint_t y, u8g_uint_t w, u8g_uint_t h) { return u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_IS_BBX_INTERSECTION, &arg); }
uint8_t u8g_dev_rot90_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) { u8g_dev_t *rotation_chain = (u8g_dev_t *)(dev->dev_mem); switch(msg) { default: /* case U8G_DEV_MSG_INIT: case U8G_DEV_MSG_STOP: case U8G_DEV_MSG_PAGE_FIRST: case U8G_DEV_MSG_PAGE_NEXT: case U8G_DEV_MSG_SET_COLOR_ENTRY: case U8G_DEV_MSG_SET_XY_CB: */ return u8g_call_dev_fn(u8g, rotation_chain, msg, arg); #ifdef U8G_DEV_MSG_IS_BBX_INTERSECTION case U8G_DEV_MSG_IS_BBX_INTERSECTION: { u8g_dev_arg_bbx_t *bbx = (u8g_dev_arg_bbx_t *)arg; u8g_uint_t x, y, tmp; /* transform the reference point */ y = bbx->x; x = u8g->height; /* x = u8g_GetWidthLL(u8g, rotation_chain); */ x -= bbx->y; x--; /* adjust point to be the uppler left corner again */ x -= bbx->h; x++; /* swap box dimensions */ tmp = bbx->w; bbx->w = bbx->h; bbx->h = tmp; /* store x,y */ bbx->x = x; bbx->y = y; } return u8g_call_dev_fn(u8g, rotation_chain, msg, arg); #endif /* U8G_DEV_MSG_IS_BBX_INTERSECTION */ case U8G_DEV_MSG_GET_PAGE_BOX: /* get page size from next device in the chain */ u8g_call_dev_fn(u8g, rotation_chain, msg, arg); //printf("pre x: %3d..%3d y: %3d..%3d ", ((u8g_box_t *)arg)->x0, ((u8g_box_t *)arg)->x1, ((u8g_box_t *)arg)->y0, ((u8g_box_t *)arg)->y1); { u8g_box_t new_box; //new_box.x0 = u8g_GetHeightLL(u8g,rotation_chain) - ((u8g_box_t *)arg)->y1 - 1; //new_box.x1 = u8g_GetHeightLL(u8g,rotation_chain) - ((u8g_box_t *)arg)->y0 - 1; new_box.x0 = ((u8g_box_t *)arg)->y0; new_box.x1 = ((u8g_box_t *)arg)->y1; new_box.y0 = ((u8g_box_t *)arg)->x0; new_box.y1 = ((u8g_box_t *)arg)->x1; *((u8g_box_t *)arg) = new_box; //printf("post x: %3d..%3d y: %3d..%3d\n", ((u8g_box_t *)arg)->x0, ((u8g_box_t *)arg)->x1, ((u8g_box_t *)arg)->y0, ((u8g_box_t *)arg)->y1); } break; case U8G_DEV_MSG_GET_WIDTH: *((u8g_uint_t *)arg) = u8g_GetHeightLL(u8g,rotation_chain); break; case U8G_DEV_MSG_GET_HEIGHT: *((u8g_uint_t *)arg) = u8g_GetWidthLL(u8g, rotation_chain); break; case U8G_DEV_MSG_SET_PIXEL: case U8G_DEV_MSG_SET_TPIXEL: { u8g_uint_t x, y; y = ((u8g_dev_arg_pixel_t *)arg)->x; x = u8g_GetWidthLL(u8g, rotation_chain); x -= ((u8g_dev_arg_pixel_t *)arg)->y; x--; ((u8g_dev_arg_pixel_t *)arg)->x = x; ((u8g_dev_arg_pixel_t *)arg)->y = y; } u8g_call_dev_fn(u8g, rotation_chain, msg, arg); break; case U8G_DEV_MSG_SET_8PIXEL: case U8G_DEV_MSG_SET_4TPIXEL: { u8g_uint_t x, y; //uint16_t x,y; y = ((u8g_dev_arg_pixel_t *)arg)->x; x = u8g_GetWidthLL(u8g, rotation_chain); x -= ((u8g_dev_arg_pixel_t *)arg)->y; x--; ((u8g_dev_arg_pixel_t *)arg)->x = x; ((u8g_dev_arg_pixel_t *)arg)->y = y; ((u8g_dev_arg_pixel_t *)arg)->dir+=1; ((u8g_dev_arg_pixel_t *)arg)->dir &= 3; } u8g_call_dev_fn(u8g, rotation_chain, msg, arg); break; } return 1; }
ICACHE_FLASH_ATTR uint8_t u8g_dev_vs_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) { switch(msg) { default: { uint8_t i; for( i = 0; i < u8g_vs_cnt; i++ ) { u8g_call_dev_fn(u8g_vs_list[i].u8g, u8g_vs_list[i].u8g->dev, msg, arg); } } return 1; case U8G_DEV_MSG_PAGE_FIRST: u8g_vs_current = 0; if ( u8g_vs_cnt != 0 ) return u8g_call_dev_fn(u8g_vs_list[u8g_vs_current].u8g, u8g_vs_list[u8g_vs_current].u8g->dev, msg, arg); return 0; case U8G_DEV_MSG_PAGE_NEXT: { uint8_t ret = 0; if ( u8g_vs_cnt != 0 ) ret = u8g_call_dev_fn(u8g_vs_list[u8g_vs_current].u8g, u8g_vs_list[u8g_vs_current].u8g->dev, msg, arg); if ( ret != 0 ) return ret; u8g_vs_current++; /* next device */ if ( u8g_vs_current >= u8g_vs_cnt ) /* reached end? */ return 0; return u8g_call_dev_fn(u8g_vs_list[u8g_vs_current].u8g, u8g_vs_list[u8g_vs_current].u8g->dev, U8G_DEV_MSG_PAGE_FIRST, arg); } case U8G_DEV_MSG_GET_WIDTH: *((u8g_uint_t *)arg) = u8g_vs_width; break; case U8G_DEV_MSG_GET_HEIGHT: *((u8g_uint_t *)arg) = u8g_vs_height; break; case U8G_DEV_MSG_GET_PAGE_BOX: if ( u8g_vs_current < u8g_vs_cnt ) { u8g_call_dev_fn(u8g_vs_list[u8g_vs_current].u8g, u8g_vs_list[u8g_vs_current].u8g->dev, msg, arg); ((u8g_box_t *)arg)->x0 += u8g_vs_list[u8g_vs_current].x; ((u8g_box_t *)arg)->x1 += u8g_vs_list[u8g_vs_current].x; ((u8g_box_t *)arg)->y0 += u8g_vs_list[u8g_vs_current].y; ((u8g_box_t *)arg)->y1 += u8g_vs_list[u8g_vs_current].y; } else { ((u8g_box_t *)arg)->x0 = 0; ((u8g_box_t *)arg)->x1 = 0; ((u8g_box_t *)arg)->y0 = 0; ((u8g_box_t *)arg)->y1 = 0; } return 1; case U8G_DEV_MSG_SET_PIXEL: case U8G_DEV_MSG_SET_8PIXEL: if ( u8g_vs_current < u8g_vs_cnt ) { ((u8g_dev_arg_pixel_t *)arg)->x -= u8g_vs_list[u8g_vs_current].x; ((u8g_dev_arg_pixel_t *)arg)->y -= u8g_vs_list[u8g_vs_current].y; return u8g_call_dev_fn(u8g_vs_list[u8g_vs_current].u8g, u8g_vs_list[u8g_vs_current].u8g->dev, msg, arg); } break; } return 1; }
void u8g_SleepOff(u8g_t *u8g) { u8g_call_dev_fn(u8g, u8g->dev, U8G_DEV_MSG_SLEEP_OFF, NULL); }
u8g_uint_t u8g_GetWidthLL(u8g_t *u8g, u8g_dev_t *dev) { u8g_uint_t r; u8g_call_dev_fn(u8g, dev, U8G_DEV_MSG_GET_WIDTH, &r); return r; }
uint8_t u8g_dev_rot90_fn(u8g_t *u8g, u8g_dev_t *dev, uint8_t msg, void *arg) { u8g_dev_t *rotation_chain = (u8g_dev_t *)(dev->dev_mem); switch(msg) { default: /* case U8G_DEV_MSG_INIT: case U8G_DEV_MSG_STOP: case U8G_DEV_MSG_PAGE_FIRST: case U8G_DEV_MSG_PAGE_NEXT: case U8G_DEV_MSG_SET_COLOR_INDEX: case U8G_DEV_MSG_SET_XY_CB: */ return u8g_call_dev_fn(u8g, rotation_chain, msg, arg); case U8G_DEV_MSG_IS_BBX_INTERSECTION: { u8g_dev_arg_bbx_t *bbx = (u8g_dev_arg_bbx_t *)arg; u8g_uint_t x, y, tmp; /* transform the reference point */ y = bbx->x; x = u8g->height; /* x = u8g_GetWidthLL(u8g, rotation_chain); */ x -= bbx->y; x--; /* adjust point to be the uppler left corner again */ x -= bbx->h; x++; /* swap box dimensions */ tmp = bbx->w; bbx->w = bbx->h; bbx->h = tmp; /* store x,y */ bbx->x = x; bbx->y = y; } return u8g_call_dev_fn(u8g, rotation_chain, msg, arg); case U8G_DEV_MSG_GET_WIDTH: *((u8g_uint_t *)arg) = u8g_GetHeightLL(u8g,rotation_chain); break; case U8G_DEV_MSG_GET_HEIGHT: *((u8g_uint_t *)arg) = u8g_GetWidthLL(u8g, rotation_chain); break; case U8G_DEV_MSG_SET_PIXEL: { u8g_uint_t x, y; y = ((u8g_dev_arg_pixel_t *)arg)->x; x = u8g_GetWidthLL(u8g, rotation_chain); x -= ((u8g_dev_arg_pixel_t *)arg)->y; x--; ((u8g_dev_arg_pixel_t *)arg)->x = x; ((u8g_dev_arg_pixel_t *)arg)->y = y; } u8g_call_dev_fn(u8g, rotation_chain, msg, arg); break; case U8G_DEV_MSG_SET_8PIXEL: { u8g_uint_t x, y; y = ((u8g_dev_arg_pixel_t *)arg)->x; x = u8g_GetWidthLL(u8g, rotation_chain); x -= ((u8g_dev_arg_pixel_t *)arg)->y; x--; ((u8g_dev_arg_pixel_t *)arg)->x = x; ((u8g_dev_arg_pixel_t *)arg)->y = y; ((u8g_dev_arg_pixel_t *)arg)->dir+=1; ((u8g_dev_arg_pixel_t *)arg)->dir &= 3; } u8g_call_dev_fn(u8g, rotation_chain, msg, arg); break; } return 1; }